@common-stack/generate-plugin 5.0.4-alpha.0 → 5.0.4-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +42 -0
- package/generators.json +9 -4
- package/lib/generators/add-backend/files/CHANGELOG.md +196 -0
- package/lib/generators/add-backend/files/Dockerfile +30 -0
- package/lib/generators/add-backend/files/LICENSE +661 -0
- package/lib/generators/add-backend/files/README.md +133 -0
- package/lib/generators/add-backend/files/__tests__/test.ts.template +95 -0
- package/lib/generators/add-backend/files/babel.config.js +45 -0
- package/lib/generators/add-backend/files/build.config.js +14 -0
- package/lib/generators/add-backend/files/build.config.mjs +27 -0
- package/lib/generators/add-backend/files/generated-schema.graphql +235 -0
- package/lib/generators/add-backend/files/jest.config.js +27 -0
- package/lib/generators/add-backend/files/knexfile.js +63 -0
- package/lib/generators/add-backend/files/package.json +162 -0
- package/lib/generators/add-backend/files/src/api/remote-config.ts.template +11 -0
- package/lib/generators/add-backend/files/src/api/resolver.ts.template +15 -0
- package/lib/generators/add-backend/files/src/api/root-schema.graphqls +96 -0
- package/lib/generators/add-backend/files/src/api/scalar.ts.template +16 -0
- package/lib/generators/add-backend/files/src/api/schema-builder.ts.template +189 -0
- package/lib/generators/add-backend/files/src/api/utils.ts.template +44 -0
- package/lib/generators/add-backend/files/src/config/env-config.ts.template +34 -0
- package/lib/generators/add-backend/files/src/config/index.ts.template +1 -0
- package/lib/generators/add-backend/files/src/config/moleculer.config.ts.template +228 -0
- package/lib/generators/add-backend/files/src/connectors/connection-broker.ts.template +80 -0
- package/lib/generators/add-backend/files/src/connectors/graphql-pubsub-connector.ts.template +43 -0
- package/lib/generators/add-backend/files/src/connectors/mongo-connector.ts.template +78 -0
- package/lib/generators/add-backend/files/src/connectors/nats-connector.ts.template +82 -0
- package/lib/generators/add-backend/files/src/connectors/redis-connector.ts.template +73 -0
- package/lib/generators/add-backend/files/src/env.ts.template +5 -0
- package/lib/generators/add-backend/files/src/express-app.ts.template +67 -0
- package/lib/generators/add-backend/files/src/index.ts.template +56 -0
- package/lib/generators/add-backend/files/src/interfaces/index.ts.template +1 -0
- package/lib/generators/add-backend/files/src/interfaces/module-interface.ts.template +16 -0
- package/lib/generators/add-backend/files/src/main.spec.ts.template +129 -0
- package/lib/generators/add-backend/files/src/middleware/__tests__/cors.test.ts.template +12 -0
- package/lib/generators/add-backend/files/src/middleware/cors.ts.template +31 -0
- package/lib/generators/add-backend/files/src/middleware/error.ts.template +63 -0
- package/lib/generators/add-backend/files/src/middleware/moleculer-inter-namespace.ts.template +60 -0
- package/lib/generators/add-backend/files/src/middleware/persistedQuery.ts.template +40 -0
- package/lib/generators/add-backend/files/src/middleware/sentry.ts.template +9 -0
- package/lib/generators/add-backend/files/src/middleware/services.ts.template +16 -0
- package/lib/generators/add-backend/files/src/middleware/tracer.ts.template +24 -0
- package/lib/generators/add-backend/files/src/modules/auth/schema/auth-schema.graphql +25 -0
- package/lib/generators/add-backend/files/src/modules/index.ts.template +17 -0
- package/lib/generators/add-backend/files/src/modules/module.ts.template +78 -0
- package/lib/generators/add-backend/files/src/server-setup/graphql-server.ts.template +185 -0
- package/lib/generators/add-backend/files/src/server-setup/graphql-subscription-server.ts.template +113 -0
- package/lib/generators/add-backend/files/src/server-setup/graphql-ws.ts.template +158 -0
- package/lib/generators/add-backend/files/src/server-setup/mongodb-migration-update.ts.template +47 -0
- package/lib/generators/add-backend/files/src/server-setup/utils.ts.template +43 -0
- package/lib/generators/add-backend/files/src/server-setup/websocket-multipath-update.ts.template +88 -0
- package/lib/generators/add-backend/files/src/service.ts.template +36 -0
- package/lib/generators/add-backend/files/src/stack-server.ts.template +277 -0
- package/lib/generators/add-backend/files/src/utils/migrations.ts.template +32 -0
- package/lib/generators/add-backend/files/tsconfig.base.json +30 -0
- package/lib/generators/add-backend/files/tsconfig.json +19 -0
- package/lib/generators/add-backend/files/uploads/3986781.ppt +0 -0
- package/lib/generators/add-backend/files/webpack.config.js +186 -0
- package/lib/generators/add-backend/files/webpack.config.mjs +209 -0
- package/lib/generators/add-backend/generator.cjs +20 -0
- package/lib/generators/add-backend/generator.cjs.map +1 -0
- package/lib/generators/add-backend/generator.d.ts +4 -0
- package/lib/generators/add-backend/generator.mjs +20 -0
- package/lib/generators/add-backend/generator.mjs.map +1 -0
- package/lib/generators/add-backend/schema.json +17 -0
- package/lib/generators/add-frontend/generator.cjs +29 -0
- package/lib/generators/add-frontend/generator.cjs.map +1 -0
- package/lib/generators/add-frontend/generator.d.ts +4 -0
- package/lib/generators/add-frontend/generator.mjs +29 -0
- package/lib/generators/add-frontend/generator.mjs.map +1 -0
- package/lib/generators/add-frontend/generator.spec.d.ts +1 -0
- package/lib/generators/add-frontend/schema.json +21 -0
- package/lib/generators/add-frontend/templates/Dockerfile +30 -0
- package/lib/generators/add-frontend/templates/codecept.json +28 -0
- package/lib/generators/add-frontend/templates/config.json +58 -0
- package/lib/generators/add-frontend/templates/env.d.ts.template +9 -0
- package/lib/generators/add-frontend/templates/env.js +5 -0
- package/lib/generators/add-frontend/templates/favicon.ico +0 -0
- package/lib/generators/add-frontend/templates/jest.config.js +33 -0
- package/lib/generators/add-frontend/templates/package.json +182 -0
- package/lib/generators/add-frontend/templates/public/css/dashboard.css +491 -0
- package/lib/generators/add-frontend/templates/public/favicon.ico +0 -0
- package/lib/generators/add-frontend/templates/server.js +78 -0
- package/lib/generators/add-frontend/templates/src/config/public-config.ts.template +82 -0
- package/lib/generators/add-frontend/templates/tools/mergeConfig.js +34 -0
- package/lib/generators/add-frontend/templates/tsconfig.base.json +38 -0
- package/lib/generators/add-frontend/templates/tsconfig.json +32 -0
- package/lib/generators/add-frontend/templates/tsconfig.node.json +10 -0
- package/lib/generators/add-frontend/templates/vite.config.ts.template +70 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.mjs +1 -1
- package/lib/utils/index.cjs +8 -0
- package/lib/utils/index.cjs.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.mjs +8 -0
- package/lib/utils/index.mjs.map +1 -0
- package/package.json +2 -2
- package/rollup.config.mjs +14 -5
- package/src/generators/{add-entries → add-backend}/generator.spec.ts +5 -5
- package/src/generators/add-backend/generator.ts +30 -0
- package/src/generators/add-backend/schema.d.ts +4 -0
- package/src/generators/add-backend/schema.json +17 -0
- package/src/generators/add-frontend/generator.spec.ts +20 -0
- package/src/generators/add-frontend/generator.ts +40 -0
- package/src/generators/add-frontend/schema.d.ts +5 -0
- package/src/generators/add-frontend/schema.json +21 -0
- package/src/index.ts +2 -2
- package/src/utils/index.ts +10 -0
- package/lib/generators/add-entries/generator.cjs +0 -55
- package/lib/generators/add-entries/generator.cjs.map +0 -1
- package/lib/generators/add-entries/generator.d.ts +0 -4
- package/lib/generators/add-entries/generator.mjs +0 -55
- package/lib/generators/add-entries/generator.mjs.map +0 -1
- package/lib/generators/add-entries/schema.json +0 -13
- package/src/generators/add-entries/files/common/AntStyles.tsx.template +0 -8
- package/src/generators/add-entries/files/common/createEmotionCache.ts.template +0 -7
- package/src/generators/add-entries/files/common/index.ts.template +0 -3
- package/src/generators/add-entries/files/common/utils.ts.template +0 -16
- package/src/generators/add-entries/generator.ts +0 -66
- package/src/generators/add-entries/schema.d.ts +0 -3
- package/src/generators/add-entries/schema.json +0 -13
- /package/lib/generators/{add-entries → add-backend}/generator.spec.d.ts +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/antui/entry.client.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/antui/entry.server.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/antui/root.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/context.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/entry.client.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/entry.server.tsx.template +0 -0
- /package/lib/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/root.tsx.template +0 -0
- /package/lib/generators/{add-entries/files → add-frontend/templates/src}/common/AntStyles.tsx.template +0 -0
- /package/lib/generators/{add-entries/files → add-frontend/templates/src}/common/createEmotionCache.ts.template +0 -0
- /package/lib/generators/{add-entries/files → add-frontend/templates/src}/common/index.ts.template +0 -0
- /package/lib/generators/{add-entries/files → add-frontend/templates/src}/common/utils.ts.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/antui/entry.client.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/antui/entry.server.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/antui/root.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/context.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/entry.client.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/entry.server.tsx.template +0 -0
- /package/src/generators/{add-entries/entries → add-frontend/frameworks}/chakraui/root.tsx.template +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import compression from 'compression';
|
|
3
|
+
import { createRequestHandler } from '@remix-run/express';
|
|
4
|
+
import { installGlobals } from '@remix-run/node';
|
|
5
|
+
import './env.js';
|
|
6
|
+
import {
|
|
7
|
+
performCopyOperations,
|
|
8
|
+
} from '@common-stack/rollup-vite-utils/lib/preStartup/configLoader/configLoader.js';
|
|
9
|
+
import config from './app/cde-webconfig.json' assert { type: 'json' };
|
|
10
|
+
|
|
11
|
+
installGlobals();
|
|
12
|
+
|
|
13
|
+
Object.keys(config.buildConfig).forEach((key) => {
|
|
14
|
+
global[key] = config.buildConfig[key];
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const startServer = async () => {
|
|
18
|
+
await performCopyOperations(config);
|
|
19
|
+
|
|
20
|
+
const { corsMiddleware } = await import(`./${config.commonPaths.appPath}/${config.commonPaths.frontendStackPath}/backend/middlewares/cors.js`);
|
|
21
|
+
const { containerMiddleware } = await import(`./${config.commonPaths.appPath}/${config.commonPaths.frontendStackPath}/backend/middlewares/container.js`);
|
|
22
|
+
const { loadContext } = await import(`./${config.commonPaths.appPath}/${config.commonPaths.frontendStackPath}/load-context.server.js`);
|
|
23
|
+
|
|
24
|
+
const viteDevServer =
|
|
25
|
+
process.env.NODE_ENV === 'production'
|
|
26
|
+
? undefined
|
|
27
|
+
: await import('vite').then((vite) => {
|
|
28
|
+
return vite.createServer({
|
|
29
|
+
server: { middlewareMode: true },
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const remixHandler = createRequestHandler({
|
|
34
|
+
getLoadContext: loadContext,
|
|
35
|
+
build: viteDevServer
|
|
36
|
+
? () => viteDevServer.ssrLoadModule('virtual:remix/server-build')
|
|
37
|
+
: await import('./build/server/index.js'),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const app = express();
|
|
41
|
+
|
|
42
|
+
app.use(compression());
|
|
43
|
+
app.disable('x-powered-by');
|
|
44
|
+
|
|
45
|
+
if (viteDevServer) {
|
|
46
|
+
app.use(viteDevServer.middlewares);
|
|
47
|
+
} else {
|
|
48
|
+
app.use('/assets', express.static('build/client/assets', { immutable: true, maxAge: '1y' }));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
app.use(express.static('build/client', { maxAge: '1h' }));
|
|
52
|
+
|
|
53
|
+
app.use(corsMiddleware);
|
|
54
|
+
app.options('*', corsMiddleware);
|
|
55
|
+
|
|
56
|
+
app.use(async (req, res, next) => {
|
|
57
|
+
let isAssetRequest = (url) =>
|
|
58
|
+
/\.[jt]sx?$/.test(url) ||
|
|
59
|
+
/@id\/__x00__virtual:/.test(url) ||
|
|
60
|
+
/@vite\/client/.test(url) ||
|
|
61
|
+
/node_modules\/vite\/dist\/client\/env/.test(url);
|
|
62
|
+
|
|
63
|
+
if (isAssetRequest(req.url)) {
|
|
64
|
+
next();
|
|
65
|
+
} else {
|
|
66
|
+
return await containerMiddleware(req, res, async () => {
|
|
67
|
+
return remixHandler(req, res, next);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const port = process.env.PORT || 3000;
|
|
73
|
+
app.listen(port, () => console.log(`Express server listening at http://localhost:${port}`));
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
startServer().catch((err) => {
|
|
77
|
+
console.error('Failed to start server:', err);
|
|
78
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
2
|
+
/* eslint-disable no-underscore-dangle */
|
|
3
|
+
/* eslint-disable no-restricted-syntax */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
5
|
+
/* eslint-disable @typescript-eslint/triple-slash-reference */
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
7
|
+
/// <reference path='../../../../typings/index.d.ts' />
|
|
8
|
+
import { logger } from '@cdm-logger/client';
|
|
9
|
+
import { lowerCase } from 'lodash-es';
|
|
10
|
+
/**
|
|
11
|
+
* This file opens up in public site, so make sure it is
|
|
12
|
+
* not dependent on any other file that compromises the security.
|
|
13
|
+
* hello
|
|
14
|
+
*/
|
|
15
|
+
const publicEnv = [
|
|
16
|
+
'NODE_ENV',
|
|
17
|
+
'APP_URL',
|
|
18
|
+
'GA_ID',
|
|
19
|
+
'GRAPHQL_URL',
|
|
20
|
+
'LOG_LEVEL',
|
|
21
|
+
'AUTH0_CLIENT_ID',
|
|
22
|
+
'AUTH0_DOMAIN',
|
|
23
|
+
'AUTH0_CUSTOM_DOMAIN',
|
|
24
|
+
'CLIENT_URL',
|
|
25
|
+
'APP_NAME',
|
|
26
|
+
'AUTH0_API_AUDIENCE',
|
|
27
|
+
'AUTH0_REALM',
|
|
28
|
+
'PAYPAL_ENVIRONMENT',
|
|
29
|
+
'STRIPE_PUBLISHABLE_KEY',
|
|
30
|
+
'AUTH0_TOKEN_GRANTED_TIME',
|
|
31
|
+
'AUTH0_CUSTOM_CLAIMS_NAMESPACE',
|
|
32
|
+
'INITIAL_ACCOUNT_PAGE',
|
|
33
|
+
'SOCIAL_LOGIN_PROVIDERS',
|
|
34
|
+
'CALLBACK_REDIRECT_URL',
|
|
35
|
+
'POPUP_REDIRECT_URL',
|
|
36
|
+
'LAYOUT_SETTINGS',
|
|
37
|
+
'DEFAULT_EXTENDED_RENEWAL_TIME',
|
|
38
|
+
'DISABLE_EMAIL_VERIFICATION',
|
|
39
|
+
'WEB_APP_URL',
|
|
40
|
+
'LOGOUT_REDIRECT_PATH',
|
|
41
|
+
'LOGIN_REDIRECT_PATH',
|
|
42
|
+
'REDIRECT_ON_LOGIN_VISIT',
|
|
43
|
+
'ENABLE_COOKIE_BASED_AUTH',
|
|
44
|
+
'APP_DOMAIN',
|
|
45
|
+
'AUTH_ID_TOKEN_COOKIE_MAX_AGE'
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const isBrowser = typeof window !== 'undefined';
|
|
49
|
+
|
|
50
|
+
const base = (isBrowser ? window.__ENV__ || (typeof __ENV__ !== 'undefined' && __ENV__) : process.env) || {};
|
|
51
|
+
const env: any = {};
|
|
52
|
+
for (const v of publicEnv) {
|
|
53
|
+
env[v] = base[v];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// add subscription url for temporary
|
|
57
|
+
export default env;
|
|
58
|
+
|
|
59
|
+
if (isBrowser) {
|
|
60
|
+
// process[lowerCase('env')] = env; // to avoid webpack to replace `process` with actual value.
|
|
61
|
+
// process.APP_ENV = env;
|
|
62
|
+
const process: any = {};
|
|
63
|
+
process[lowerCase('env')] = env; // to avoid webpack to replace `process` with actual value.
|
|
64
|
+
process.APP_ENV = env;
|
|
65
|
+
window.process = process;
|
|
66
|
+
window.__CLIENT__ = true;
|
|
67
|
+
window.__SERVER__ = false;
|
|
68
|
+
} else {
|
|
69
|
+
global.__CLIENT__ = false;
|
|
70
|
+
global.__SERVER__ = true;
|
|
71
|
+
__CLIENT__ = false;
|
|
72
|
+
__SERVER__ = true;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// global.process = process;
|
|
76
|
+
logger.info('Process Update Success!');
|
|
77
|
+
} catch (e) {
|
|
78
|
+
logger.warn(e);
|
|
79
|
+
logger.info(
|
|
80
|
+
'Encountered above issue while running "global.process = process", will automatically try again in next render',
|
|
81
|
+
);
|
|
82
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { setupConfig } from '@common-stack/rollup-vite-utils/lib/utils/setupConfig.js';
|
|
4
|
+
import projectConfig from '../config.json' assert { type: 'json' };
|
|
5
|
+
|
|
6
|
+
// Function to merge configurations
|
|
7
|
+
const mergeConfigs = setupConfig(projectConfig);
|
|
8
|
+
|
|
9
|
+
// Ensure the 'app' directory exists
|
|
10
|
+
const appDir = path.resolve('app');
|
|
11
|
+
if (!fs.existsSync(appDir)) {
|
|
12
|
+
fs.mkdirSync(appDir);
|
|
13
|
+
console.log(`Created directory: ${appDir}`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Write the merged configuration to 'app/finalConfig.json'
|
|
17
|
+
const finalConfigPath = path.resolve(appDir, 'cde-webconfig.json');
|
|
18
|
+
fs.writeFileSync(finalConfigPath, JSON.stringify(mergeConfigs, null, 2));
|
|
19
|
+
console.log(`Merged configuration written to ${finalConfigPath}`);
|
|
20
|
+
|
|
21
|
+
// Add 'app' to .gitignore if not already present
|
|
22
|
+
const gitignorePath = path.resolve('.gitignore');
|
|
23
|
+
let gitignoreContent = '';
|
|
24
|
+
if (fs.existsSync(gitignorePath)) {
|
|
25
|
+
gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
|
|
26
|
+
} else {
|
|
27
|
+
fs.writeFileSync(gitignorePath, '');
|
|
28
|
+
console.log('Created .gitignore file');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!gitignoreContent.includes('app')) {
|
|
32
|
+
fs.appendFileSync(gitignorePath, '\napp\n');
|
|
33
|
+
console.log('Added "app" to .gitignore');
|
|
34
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ES2022",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"jsx": "react",
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"declaration": true,
|
|
10
|
+
"experimentalDecorators": true,
|
|
11
|
+
"emitDecoratorMetadata": true,
|
|
12
|
+
"preserveConstEnums": true,
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"noImplicitAny": false,
|
|
15
|
+
"allowSyntheticDefaultImports": true,
|
|
16
|
+
"pretty": true,
|
|
17
|
+
"removeComments": false,
|
|
18
|
+
"lib": [
|
|
19
|
+
"ES2020",
|
|
20
|
+
"dom",
|
|
21
|
+
"esnext.asynciterable"
|
|
22
|
+
],
|
|
23
|
+
"typeRoots": [
|
|
24
|
+
"./typings/*.d.ts",
|
|
25
|
+
"node_modules/@types"
|
|
26
|
+
],
|
|
27
|
+
"types": [
|
|
28
|
+
"@types/node",
|
|
29
|
+
"@types/jest"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"include": [
|
|
33
|
+
"./typings/*.d.ts"
|
|
34
|
+
],
|
|
35
|
+
"exclude": [
|
|
36
|
+
"node_modules"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"include": [
|
|
3
|
+
"**/*.ts",
|
|
4
|
+
"**/*.tsx",
|
|
5
|
+
"**/.server/**/*.ts",
|
|
6
|
+
"**/.server/**/*.tsx",
|
|
7
|
+
"**/.client/**/*.ts",
|
|
8
|
+
"**/.client/**/*.tsx"
|
|
9
|
+
],
|
|
10
|
+
"compilerOptions": {
|
|
11
|
+
"lib": ["DOM", "DOM.Iterable", "ES2022"],
|
|
12
|
+
"types": ["@remix-run/node", "vite/client"],
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"esModuleInterop": true,
|
|
15
|
+
"jsx": "react-jsx",
|
|
16
|
+
"module": "ESNext",
|
|
17
|
+
"moduleResolution": "Bundler",
|
|
18
|
+
"resolveJsonModule": true,
|
|
19
|
+
"target": "ES2022",
|
|
20
|
+
"strict": true,
|
|
21
|
+
"allowJs": true,
|
|
22
|
+
"skipLibCheck": true,
|
|
23
|
+
"forceConsistentCasingInFileNames": true,
|
|
24
|
+
"baseUrl": ".",
|
|
25
|
+
"paths": {
|
|
26
|
+
"~/*": ["./src/*"]
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
// Vite takes care of building everything, not tsc.
|
|
30
|
+
"noEmit": true
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import { vitePlugin as remix } from '@remix-run/dev';
|
|
3
|
+
import { dirname, resolve } from 'path';
|
|
4
|
+
import { installGlobals } from '@remix-run/node';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { defineRoutesConfig } from '@common-stack/rollup-vite-utils/lib/vite-wrappers/json-wrappers.js';
|
|
7
|
+
import tsconfigPaths from 'vite-tsconfig-paths';
|
|
8
|
+
import { i18nInternationalizationPlugin } from '@common-stack/rollup-vite-utils/lib/vite-plugins/i18n-internationalization-plugin.js';
|
|
9
|
+
import { performCopyOperations } from '@common-stack/rollup-vite-utils/lib/preStartup/configLoader/configLoader.js';
|
|
10
|
+
import { loadEnvConfig } from '@common-stack/rollup-vite-utils/lib/preStartup/configLoader/envLoader.js';
|
|
11
|
+
import { cjsInterop } from 'vite-plugin-cjs-interop';
|
|
12
|
+
import config from './app/cde-webconfig.json' assert { type: 'json' };
|
|
13
|
+
|
|
14
|
+
// This installs globals such as "fetch", "Response", "Request" and "Headers".
|
|
15
|
+
installGlobals();
|
|
16
|
+
const directoryName = dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
|
|
18
|
+
export default defineConfig(({ isSsrBuild }) => {
|
|
19
|
+
console.log('---IS SSR BUILD', isSsrBuild);
|
|
20
|
+
|
|
21
|
+
const dotEnvResult = loadEnvConfig(directoryName);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
define: {
|
|
25
|
+
__ENV__: JSON.stringify(dotEnvResult?.parsed),
|
|
26
|
+
...Object.assign(
|
|
27
|
+
...Object.entries(config.buildConfig).map(([k, v]) => ({
|
|
28
|
+
[k]: typeof v !== 'string' ? v : `"${v.replace(/\\/g, '\\\\')}"`,
|
|
29
|
+
__SERVER__: true,
|
|
30
|
+
__CLIENT__: false,
|
|
31
|
+
}))
|
|
32
|
+
),
|
|
33
|
+
},
|
|
34
|
+
plugins: [
|
|
35
|
+
i18nInternationalizationPlugin({
|
|
36
|
+
folderName: 'cdm-locales',
|
|
37
|
+
packages: [...config.modules, ...config.i18n.packages],
|
|
38
|
+
namespaceResolution: 'basename',
|
|
39
|
+
}),
|
|
40
|
+
cjsInterop({
|
|
41
|
+
dependencies:["@apollo/client"]
|
|
42
|
+
}),
|
|
43
|
+
remix({
|
|
44
|
+
appDirectory: 'src',
|
|
45
|
+
routes: async (defineRoutes) => {
|
|
46
|
+
if (process.env.NODE_ENV === 'production') {
|
|
47
|
+
await performCopyOperations(config);
|
|
48
|
+
}
|
|
49
|
+
const metaJson = await import('./app/sync-meta.json').catch(() => null);
|
|
50
|
+
return defineRoutes((routeFn) => {
|
|
51
|
+
defineRoutesConfig(routeFn, {
|
|
52
|
+
routesFileName: 'routes.json',
|
|
53
|
+
packages: config.modules,
|
|
54
|
+
paths: config.paths,
|
|
55
|
+
rootPath: resolve(directoryName, '../..'),
|
|
56
|
+
}, metaJson);
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
tsconfigPaths({ ignoreConfigErrors: true }),
|
|
61
|
+
],
|
|
62
|
+
resolve: {
|
|
63
|
+
// preserveSymlinks: true,
|
|
64
|
+
alias: {
|
|
65
|
+
'@app': resolve(__dirname, 'app'),
|
|
66
|
+
'@src': resolve(__dirname, 'src'),
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
});
|
package/lib/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var generator=require('./generators/add-
|
|
1
|
+
'use strict';var generator=require('./generators/add-frontend/generator.cjs'),generator$1=require('./generators/add-backend/generator.cjs');exports.addFrontendGenerator=generator.addFrontendGenerator;exports.addBackendGenerator=generator$1.addBackendGenerator;//# sourceMappingURL=index.cjs.map
|
package/lib/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './generators/add-
|
|
1
|
+
export * from './generators/add-frontend/generator';
|
|
2
|
+
export * from './generators/add-backend/generator';
|
package/lib/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{
|
|
1
|
+
export{addFrontendGenerator}from'./generators/add-frontend/generator.mjs';export{addBackendGenerator}from'./generators/add-backend/generator.mjs';//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';var fs=require('node:fs');function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var fs__namespace=/*#__PURE__*/_interopNamespaceDefault(fs);const resetProject = (rootDir) => {
|
|
2
|
+
if (fs__namespace.existsSync(`${rootDir}/project.json`)) {
|
|
3
|
+
fs__namespace.unlinkSync(`${rootDir}/project.json`);
|
|
4
|
+
}
|
|
5
|
+
if (fs__namespace.existsSync(`${rootDir}/src`)) {
|
|
6
|
+
fs__namespace.rmSync(`${rootDir}/src`, { recursive: true, force: true });
|
|
7
|
+
}
|
|
8
|
+
};exports.resetProject=resetProject;//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/utils/index.ts"],"sourcesContent":[null],"names":["fs"],"mappings":"iYAEa,MAAA,YAAY,GAAG,CAAC,OAAe,KAAI;IAC5C,IAAIA,aAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,aAAA,CAAe,CAAC,EAAE;AAC1C,QAAAA,aAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,aAAA,CAAe,CAAC,CAAC;KAC5C;IACD,IAAIA,aAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,IAAA,CAAM,CAAC,EAAE;AACjC,QAAAA,aAAE,CAAC,MAAM,CAAC,CAAG,EAAA,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KACjE;AACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const resetProject: (rootDir: string) => void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import*as fs from'node:fs';const resetProject = (rootDir) => {
|
|
2
|
+
if (fs.existsSync(`${rootDir}/project.json`)) {
|
|
3
|
+
fs.unlinkSync(`${rootDir}/project.json`);
|
|
4
|
+
}
|
|
5
|
+
if (fs.existsSync(`${rootDir}/src`)) {
|
|
6
|
+
fs.rmSync(`${rootDir}/src`, { recursive: true, force: true });
|
|
7
|
+
}
|
|
8
|
+
};export{resetProject};//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/utils/index.ts"],"sourcesContent":[null],"names":[],"mappings":"2BAEa,MAAA,YAAY,GAAG,CAAC,OAAe,KAAI;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,aAAA,CAAe,CAAC,EAAE;AAC1C,QAAA,EAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,aAAA,CAAe,CAAC,CAAC;KAC5C;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,IAAA,CAAM,CAAC,EAAE;AACjC,QAAA,EAAE,CAAC,MAAM,CAAC,CAAG,EAAA,OAAO,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KACjE;AACL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@common-stack/generate-plugin",
|
|
3
|
-
"version": "5.0.4-alpha.
|
|
3
|
+
"version": "5.0.4-alpha.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.mjs",
|
|
6
6
|
"typings": "./lib/index.d.ts",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"tslib": "^2.3.0"
|
|
25
25
|
},
|
|
26
26
|
"generators": "./generators.json",
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "c7d1d652a22de1c57969724a587f90435c0e2fae"
|
|
28
28
|
}
|
package/rollup.config.mjs
CHANGED
|
@@ -7,19 +7,28 @@ import copy from 'rollup-plugin-copy';
|
|
|
7
7
|
// Define a base configuration for reuse
|
|
8
8
|
const baseConfig = {
|
|
9
9
|
plugins: [
|
|
10
|
-
image(
|
|
10
|
+
image({
|
|
11
|
+
exclude: ['src/generators/add-frontend', 'src/generators/add-backend'],
|
|
12
|
+
}),
|
|
11
13
|
graphql({
|
|
12
14
|
include: '**/*.gql',
|
|
15
|
+
exclude: ['src/generators/add-frontend', 'src/generators/add-backend'],
|
|
13
16
|
}),
|
|
14
17
|
string({
|
|
15
18
|
include: '**/*.graphql',
|
|
19
|
+
exclude: ['src/generators/add-frontend', 'src/generators/add-backend'],
|
|
20
|
+
}),
|
|
21
|
+
typescript({
|
|
22
|
+
noEmitOnError: true,
|
|
23
|
+
exclude: ['src/generators/add-frontend', 'src/generators/add-backend'],
|
|
16
24
|
}),
|
|
17
|
-
typescript({ noEmitOnError: true }),
|
|
18
25
|
copy({
|
|
19
26
|
targets: [
|
|
20
|
-
{ src: 'src/generators/add-
|
|
21
|
-
{ src: 'src/generators/add-
|
|
22
|
-
{ src: 'src/generators/add-
|
|
27
|
+
{ src: 'src/generators/add-frontend/schema.json', dest: 'lib/generators/add-frontend' },
|
|
28
|
+
{ src: 'src/generators/add-frontend/templates/*', dest: 'lib/generators/add-frontend/templates' },
|
|
29
|
+
{ src: 'src/generators/add-frontend/frameworks/*', dest: 'lib/generators/add-frontend/frameworks' },
|
|
30
|
+
{ src: 'src/generators/add-backend/schema.json', dest: 'lib/generators/add-backend' },
|
|
31
|
+
{ src: 'src/generators/add-backend/files/*', dest: 'lib/generators/add-backend/files' },
|
|
23
32
|
],
|
|
24
33
|
verbose: true,
|
|
25
34
|
}),
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
|
2
2
|
import { Tree, readProjectConfiguration } from '@nx/devkit';
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { addBackendGenerator } from './generator';
|
|
5
|
+
import { AddBackendGeneratorSchema } from './schema';
|
|
6
6
|
|
|
7
|
-
describe('add-
|
|
7
|
+
describe('add-backend generator', () => {
|
|
8
8
|
let tree: Tree;
|
|
9
|
-
const options:
|
|
9
|
+
const options: AddBackendGeneratorSchema = { ns: 'test' };
|
|
10
10
|
|
|
11
11
|
beforeEach(() => {
|
|
12
12
|
tree = createTreeWithEmptyWorkspace();
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
it('should run successfully', async () => {
|
|
16
|
-
await
|
|
16
|
+
await addBackendGenerator(tree, options);
|
|
17
17
|
const config = readProjectConfiguration(tree, 'test');
|
|
18
18
|
expect(config).toBeDefined();
|
|
19
19
|
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { addProjectConfiguration, formatFiles, generateFiles, Tree, updateJson } from '@nx/devkit';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { AddBackendGeneratorSchema } from './schema';
|
|
4
|
+
import { resetProject } from '../../utils';
|
|
5
|
+
|
|
6
|
+
export async function addBackendGenerator(tree: Tree, options: AddBackendGeneratorSchema) {
|
|
7
|
+
const basePath = process.cwd();
|
|
8
|
+
const projectName = options.ns ? `backend-${options.ns}-server` : 'backend-server';
|
|
9
|
+
const projectRoot = options.path ? `${options.path}${projectName}` : projectName;
|
|
10
|
+
const projectSrc = `${projectRoot}/src`;
|
|
11
|
+
|
|
12
|
+
resetProject(`${basePath}/${projectRoot}`);
|
|
13
|
+
|
|
14
|
+
// addProjectConfiguration(tree, framework, {
|
|
15
|
+
// root: projectRoot,
|
|
16
|
+
// projectType: 'library',
|
|
17
|
+
// sourceRoot: projectSrc,
|
|
18
|
+
// targets: {},
|
|
19
|
+
// });
|
|
20
|
+
|
|
21
|
+
generateFiles(tree, path.join(__dirname, 'files'), projectRoot, {});
|
|
22
|
+
updateJson(tree, `${projectRoot}/package.json`, (packageJson) => {
|
|
23
|
+
packageJson['name'] = projectName;
|
|
24
|
+
return packageJson;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
await formatFiles(tree);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default addBackendGenerator;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "AddBackend",
|
|
4
|
+
"title": "",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"ns": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "The project namespace"
|
|
10
|
+
},
|
|
11
|
+
"path": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The project path ex: \"servers/\", default: \"/\""
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"required": ["ns"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
|
2
|
+
import { Tree, readProjectConfiguration } from '@nx/devkit';
|
|
3
|
+
|
|
4
|
+
import { addFrontendGenerator } from './generator';
|
|
5
|
+
import { AddFrontendGeneratorSchema } from './schema';
|
|
6
|
+
|
|
7
|
+
describe('add-frontend generator', () => {
|
|
8
|
+
let tree: Tree;
|
|
9
|
+
const options: AddFrontendGeneratorSchema = { ns: 'test' };
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
tree = createTreeWithEmptyWorkspace();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should run successfully', async () => {
|
|
16
|
+
await addFrontendGenerator(tree, options);
|
|
17
|
+
const config = readProjectConfiguration(tree, 'test');
|
|
18
|
+
expect(config).toBeDefined();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { addProjectConfiguration, formatFiles, generateFiles, Tree, updateJson } from '@nx/devkit';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { AddFrontendGeneratorSchema } from './schema';
|
|
4
|
+
import { resetProject } from '../../utils';
|
|
5
|
+
|
|
6
|
+
const DEFAULT_FRAMEWORK = 'antui';
|
|
7
|
+
|
|
8
|
+
export async function addFrontendGenerator(tree: Tree, options: AddFrontendGeneratorSchema) {
|
|
9
|
+
const basePath = process.cwd();
|
|
10
|
+
const projectName = options.ns ? `frontend-${options.ns}-server` : 'frontend-server';
|
|
11
|
+
const projectRoot = options.path ? `${options.path}${projectName}` : projectName;
|
|
12
|
+
const projectSrc = `${projectRoot}/src`;
|
|
13
|
+
|
|
14
|
+
const framework = options.framework || DEFAULT_FRAMEWORK;
|
|
15
|
+
console.log('UI framework specified: ', framework);
|
|
16
|
+
|
|
17
|
+
resetProject(`${basePath}/${projectRoot}`);
|
|
18
|
+
|
|
19
|
+
// addProjectConfiguration(tree, framework, {
|
|
20
|
+
// root: projectRoot,
|
|
21
|
+
// projectType: 'library',
|
|
22
|
+
// sourceRoot: projectSrc,
|
|
23
|
+
// targets: {},
|
|
24
|
+
// });
|
|
25
|
+
|
|
26
|
+
generateFiles(tree, path.join(__dirname, 'templates'), projectRoot, {});
|
|
27
|
+
generateFiles(tree, path.join(__dirname, 'frameworks', framework), projectSrc, options);
|
|
28
|
+
updateJson(tree, `${projectRoot}/package.json`, (packageJson) => {
|
|
29
|
+
packageJson['name'] = projectName;
|
|
30
|
+
return packageJson;
|
|
31
|
+
});
|
|
32
|
+
updateJson(tree, `${projectRoot}/config.json`, (configJson) => {
|
|
33
|
+
configJson['uiFramework'] = framework;
|
|
34
|
+
return configJson;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await formatFiles(tree);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default addFrontendGenerator;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "AddFrontend",
|
|
4
|
+
"title": "",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"ns": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "The project namespace"
|
|
10
|
+
},
|
|
11
|
+
"path": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The project path ex: \"servers/\", default: \"/\""
|
|
14
|
+
},
|
|
15
|
+
"framework": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "UI framework in [antui, chakraui]"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"required": ["ns"]
|
|
21
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './generators/add-
|
|
2
|
-
|
|
1
|
+
export * from './generators/add-frontend/generator';
|
|
2
|
+
export * from './generators/add-backend/generator';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
|
|
3
|
+
export const resetProject = (rootDir: string) => {
|
|
4
|
+
if (fs.existsSync(`${rootDir}/project.json`)) {
|
|
5
|
+
fs.unlinkSync(`${rootDir}/project.json`);
|
|
6
|
+
}
|
|
7
|
+
if (fs.existsSync(`${rootDir}/src`)) {
|
|
8
|
+
fs.rmSync(`${rootDir}/src`, { recursive: true, force: true });
|
|
9
|
+
}
|
|
10
|
+
}
|