diff --git a/.gitignore b/.gitignore index 7d82744..6f8568c 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,5 @@ coverage public .adminbro .idea +public/*.bundle.*.js +src/assets-manifest.json diff --git a/package.json b/package.json index c0cb832..e34dd9e 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "migration:up": "yarn sequelize db:migrate && yarn mikro-orm migration:up && yarn prisma migrate dev --schema src/sources/prisma/schema.prisma", "docker:up": "docker-compose -f docker-compose.yaml up -d", "start:dev": "nodemon --watch src", - "build": "tsc" + "build": "tsc", + "bundle-admin": "ts-node src/scripts/bundle-admin.ts" }, "mikro-orm": { "useTsNode": true, diff --git a/src/admin/index.ts b/src/admin/index.ts index 9adb0f3..ba9f359 100644 --- a/src/admin/index.ts +++ b/src/admin/index.ts @@ -1,4 +1,4 @@ -import AdminJS from 'adminjs'; +import AdminJS, { AdminJSOptions } from 'adminjs'; import AdminJSMongoose from '@adminjs/mongoose'; import AdminJSSequelize from '@adminjs/sequelize'; import { Database as MikroormDatabse, Resource as MikroormResource } from '@adminjs/mikroorm'; @@ -27,6 +27,7 @@ import { CreateOwnerResource, CreateSellerResource, CreateCarResource } from '.. import { CreatePostResource, CreatePublisherResource, CreateProfileResource } from '../sources/prisma/resources'; import { SOME_STATS } from './components.bundler'; import { CryptoDatabase } from '../sources/rest/crypto-database'; +// import assetsManifest from '../assets-manifest.json'; AdminJS.registerAdapter(AdminJSMongoose); AdminJS.registerAdapter(AdminJSSequelize); @@ -52,9 +53,14 @@ export const menu = { prisma: { name: 'Prisma Resources', icon: 'Industry' }, }; -export const generateAdminJSConfig = () => ({ +export const generateAdminJSConfig = (): AdminJSOptions => ({ locale, rootPath: '/admin', + // Uncomment "assetsCDN" and "assets.coreScripts" to test js assets versioning + // assetsCDN: 'http://localhost:3000/', + // assets: { + // coreScripts: assetsManifest, + // }, branding: { companyName: 'AdminJS demo page', theme, diff --git a/src/scripts/bundle-admin.ts b/src/scripts/bundle-admin.ts new file mode 100644 index 0000000..90dcbcf --- /dev/null +++ b/src/scripts/bundle-admin.ts @@ -0,0 +1,26 @@ +/* eslint-disable max-len */ +/* eslint-disable import/first */ +// eslint-disable-next-line @typescript-eslint/no-var-requires +require('dotenv').config({ path: `${__dirname}/../../.env` }); + +import { bundle } from '@adminjs/bundler'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import * as components from '../admin/components.bundler'; + +(async () => { + const files = await bundle({ + // Uncomment `designSystemDir` and `adminJsAssetsDir` if you are running + // the command using `adminjs-dev` workspace + // designSystemDir: '../adminjs-design-system', + // adminJsAssetsDir: '../adminjs/lib/frontend/assets/scripts', + customComponentsInitializationFilePath: 'src/admin/components.bundler.ts', + destinationDir: 'public', + versioning: { + manifestPath: 'src/assets-manifest.json', + }, + }); + + // eslint-disable-next-line no-console + console.log(files); +})(); diff --git a/src/servers/express.ts b/src/servers/express.ts index 4aad856..b9bd625 100644 --- a/src/servers/express.ts +++ b/src/servers/express.ts @@ -1,9 +1,10 @@ -import { createAdmin, generateAdminJSConfig } from '../admin'; +import path from 'path'; import mongoose from 'mongoose'; +import AdminJS from 'adminjs'; import { expressAuthenticatedRouter } from '../admin/router'; import { init } from '../sources/mikroorm/config'; import { connection } from '../sources/typeorm/config'; -import AdminJS from 'adminjs'; +import { createAdmin, generateAdminJSConfig } from '../admin'; const express = require('express'); const app = express(); @@ -20,6 +21,7 @@ app.listen(process.env.PORT, async () => { await init(); await connection; + app.use(express.static(path.join(__dirname, '/../../public'))); await attachAdminJS(); console.log(`AdminJS is under localhost:${process.env.PORT}/admin`);