lincd-cli 1.2.3 → 1.2.5
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/defaults/app-with-backend/lincd.config.js +1 -1
- package/defaults/app-with-backend/src/backend.ts +2 -2
- package/defaults/app-with-backend/src/index.tsx +7 -3
- package/defaults/app-with-backend/src/routes.tsx +28 -16
- package/defaults/app-with-backend/src/utils/lazyWithPreload.tsx +42 -0
- package/defaults/app-with-backend/src/utils/preloadRoutes.ts +38 -0
- package/defaults/package/src/types.ts +0 -5
- package/lib/cjs/cli-methods.d.ts.map +1 -0
- package/lib/cjs/cli-methods.js +41 -17
- package/lib/cjs/cli-methods.js.map +1 -1
- package/lib/cjs/cli.d.ts.map +1 -0
- package/lib/cjs/config-grunt.d.cts +3 -0
- package/lib/cjs/config-grunt.d.cts.map +1 -0
- package/lib/cjs/config-webpack-app.d.ts.map +1 -0
- package/lib/cjs/config-webpack-app.js +147 -240
- package/lib/cjs/config-webpack-app.js.map +1 -1
- package/lib/cjs/config-webpack.d.ts.map +1 -0
- package/lib/cjs/config-webpack.js +37 -64
- package/lib/cjs/config-webpack.js.map +1 -1
- package/lib/cjs/defineConfig.d.ts.map +1 -0
- package/lib/cjs/defineConfig.js +13 -0
- package/lib/cjs/defineConfig.js.map +1 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +3 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts.map +1 -0
- package/lib/cjs/loaders/css-loader.d.mts +2 -0
- package/lib/cjs/loaders/css-loader.d.mts.map +1 -0
- package/lib/cjs/loaders/css-loader.mjs +10 -10
- package/lib/cjs/loaders/css-loader.mjs.map +1 -1
- package/lib/cjs/loaders/register-css-only.d.ts.map +1 -0
- package/lib/cjs/loaders/register-css-only.js +11 -0
- package/lib/cjs/loaders/register-css-only.js.map +1 -0
- package/lib/cjs/loaders/register.d.ts.map +1 -0
- package/lib/cjs/metadata.d.ts.map +1 -0
- package/lib/cjs/package.json +5 -5
- package/lib/cjs/plugins/check-imports.d.ts.map +1 -0
- package/lib/cjs/plugins/declaration-plugin.d.ts.map +1 -0
- package/lib/cjs/plugins/externalise-modules.d.ts.map +1 -0
- package/lib/cjs/plugins/lincd-tailwind-sources.d.ts.map +1 -0
- package/lib/cjs/plugins/watch-run.d.ts.map +1 -0
- package/lib/cjs/preflight.css +137 -0
- package/lib/cjs/tailwind.config.d.ts.map +1 -0
- package/lib/cjs/tailwind.config.js +3 -4
- package/lib/cjs/tailwind.config.js.map +1 -1
- package/lib/cjs/utils.d.ts.map +1 -0
- package/lib/cjs/utils.js +9 -5
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/cli-methods.d.ts.map +1 -0
- package/lib/esm/cli-methods.js +41 -11
- package/lib/esm/cli-methods.js.map +1 -1
- package/lib/esm/cli.d.ts.map +1 -0
- package/lib/esm/config-grunt.d.cts +3 -0
- package/lib/esm/config-grunt.d.cts.map +1 -0
- package/lib/esm/config-webpack-app.d.ts.map +1 -0
- package/lib/esm/config-webpack-app.js +148 -241
- package/lib/esm/config-webpack-app.js.map +1 -1
- package/lib/esm/config-webpack.d.ts.map +1 -0
- package/lib/esm/config-webpack.js +38 -65
- package/lib/esm/config-webpack.js.map +1 -1
- package/lib/esm/defineConfig.d.ts.map +1 -0
- package/lib/esm/defineConfig.js +9 -0
- package/lib/esm/defineConfig.js.map +1 -0
- package/lib/esm/index.d.ts.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces.d.ts.map +1 -0
- package/lib/esm/loaders/css-loader.d.mts +2 -0
- package/lib/esm/loaders/css-loader.d.mts.map +1 -0
- package/lib/esm/loaders/css-loader.mjs +10 -10
- package/lib/esm/loaders/css-loader.mjs.map +1 -1
- package/lib/esm/loaders/register-css-only.d.ts.map +1 -0
- package/lib/esm/loaders/register-css-only.js +9 -0
- package/lib/esm/loaders/register-css-only.js.map +1 -0
- package/lib/esm/loaders/register.d.ts.map +1 -0
- package/lib/esm/metadata.d.ts.map +1 -0
- package/lib/esm/package.json +5 -5
- package/lib/esm/plugins/check-imports.d.ts.map +1 -0
- package/lib/esm/plugins/declaration-plugin.d.ts.map +1 -0
- package/lib/esm/plugins/externalise-modules.d.ts.map +1 -0
- package/lib/esm/plugins/lincd-tailwind-sources.d.ts.map +1 -0
- package/lib/esm/plugins/watch-run.d.ts.map +1 -0
- package/lib/esm/preflight.css +137 -0
- package/lib/esm/tailwind.config.d.ts.map +1 -0
- package/lib/esm/tailwind.config.js +3 -4
- package/lib/esm/tailwind.config.js.map +1 -1
- package/lib/esm/utils.d.ts.map +1 -0
- package/lib/esm/utils.js +9 -5
- package/lib/esm/utils.js.map +1 -1
- package/package.json +6 -5
- package/preflight.css +137 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { AppContextProvider } from 'lincd-server-utils/components/AppContext';
|
|
1
2
|
import { initFrontend } from 'lincd-server-utils/utils/Frontend';
|
|
3
|
+
import React from 'react';
|
|
2
4
|
import { hydrateRoot } from 'react-dom/client';
|
|
3
5
|
import { BrowserRouter } from 'react-router-dom';
|
|
4
6
|
import App from './App';
|
|
5
|
-
import
|
|
6
|
-
import { AppContextProvider } from 'lincd-server-utils/components/AppContext';
|
|
7
|
+
import { preloadMatchedRoute } from './utils/preloadRoutes';
|
|
7
8
|
|
|
8
9
|
//import the storage & file configuration for the frontend
|
|
9
10
|
import './config-frontend';
|
|
@@ -12,7 +13,10 @@ import './config-frontend';
|
|
|
12
13
|
window['$RefreshReg$'] = () => {};
|
|
13
14
|
window['$RefreshSig$'] = () => () => {};
|
|
14
15
|
|
|
15
|
-
initFrontend().then(() => {
|
|
16
|
+
initFrontend().then(async () => {
|
|
17
|
+
// Preload matched route before hydration to avoid Suspense mismatch
|
|
18
|
+
await preloadMatchedRoute();
|
|
19
|
+
|
|
16
20
|
hydrateRoot(
|
|
17
21
|
document,
|
|
18
22
|
<React.StrictMode>
|
|
@@ -1,37 +1,49 @@
|
|
|
1
|
+
import { RequireAuth } from 'lincd-auth/components/RequireAuth';
|
|
2
|
+
import type { RoutesConfig } from 'lincd-server/types/RouteConfig';
|
|
1
3
|
import React, { lazy, Suspense } from 'react';
|
|
2
4
|
import { Route, Routes } from 'react-router-dom';
|
|
3
5
|
import { Spinner } from './components/Spinner';
|
|
4
|
-
import { RequireAuth } from 'lincd-auth/components/RequireAuth';
|
|
5
6
|
import PageNotFound from './pages/PageNotFound';
|
|
7
|
+
import { lazyWithPreload } from './utils/lazyWithPreload';
|
|
8
|
+
|
|
9
|
+
// Create preloadable lazy components for direct-entry routes
|
|
10
|
+
const HomePage = lazyWithPreload(
|
|
11
|
+
() => import(/* webpackChunkName: "home" */ './pages/Home')
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const SigninPage = lazyWithPreload(
|
|
15
|
+
() => import(/* webpackChunkName: "signin" */ './pages/Signin')
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
// Export preloadable components for server-side preloading
|
|
19
|
+
export const PRELOADABLE_ROUTES = {
|
|
20
|
+
home: HomePage,
|
|
21
|
+
signin: SigninPage,
|
|
22
|
+
};
|
|
6
23
|
|
|
7
|
-
//From React 18 you can use 'lazy' to import pages only when you need them.
|
|
8
|
-
//This will cause webpack to create multiple bundles, and the right bundles are automatically loaded
|
|
9
|
-
interface RouteObj {
|
|
10
|
-
path: string;
|
|
11
|
-
component?: React.LazyExoticComponent<() => JSX.Element>;
|
|
12
|
-
render?: () => JSX.Element;
|
|
13
|
-
requireAuth?: boolean;
|
|
14
|
-
excludeFromMenu?: boolean;
|
|
15
|
-
label?: string;
|
|
16
|
-
}
|
|
17
24
|
|
|
18
|
-
export const ROUTES:
|
|
19
|
-
|
|
25
|
+
export const ROUTES: RoutesConfig = {
|
|
26
|
+
home: {
|
|
20
27
|
path: '/',
|
|
21
|
-
component:
|
|
28
|
+
component: HomePage.Component,
|
|
22
29
|
label: 'Home',
|
|
30
|
+
preloadChunks: ['home'],
|
|
23
31
|
},
|
|
24
32
|
page1: {
|
|
25
33
|
path: '/page1',
|
|
26
|
-
component: lazy(
|
|
34
|
+
component: lazy(
|
|
35
|
+
() => import(/* webpackChunkName: "page1" */ './pages/Page1')
|
|
36
|
+
),
|
|
27
37
|
label: 'Protected page',
|
|
28
38
|
requireAuth: true,
|
|
39
|
+
preloadChunks: ['page1'],
|
|
29
40
|
},
|
|
30
41
|
signin: {
|
|
31
42
|
path: '/signin',
|
|
32
|
-
component:
|
|
43
|
+
component: SigninPage.Component,
|
|
33
44
|
label: 'Sign In',
|
|
34
45
|
excludeFromMenu: true,
|
|
46
|
+
preloadChunks: ['signin'],
|
|
35
47
|
},
|
|
36
48
|
};
|
|
37
49
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ComponentType, lazy } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface PreloadableComponent<T extends ComponentType<any>> {
|
|
4
|
+
preload: () => Promise<{ default: T }>;
|
|
5
|
+
Component: React.LazyExoticComponent<T>;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates a lazy-loaded component with a preload function
|
|
10
|
+
* This allows preloading the component before React needs it
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const SigninPage = lazyWithPreload(() => import('./pages/Signin'));
|
|
14
|
+
* // Later, before navigation or on server:
|
|
15
|
+
* SigninPage.preload();
|
|
16
|
+
*/
|
|
17
|
+
export function lazyWithPreload<T extends ComponentType<any>>(
|
|
18
|
+
importFunc: () => Promise<{ default: T }>
|
|
19
|
+
): PreloadableComponent<T> {
|
|
20
|
+
let modulePromise: Promise<{ default: T }> | null = null;
|
|
21
|
+
|
|
22
|
+
const preload = () => {
|
|
23
|
+
if (!modulePromise) {
|
|
24
|
+
modulePromise = importFunc();
|
|
25
|
+
}
|
|
26
|
+
return modulePromise;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const Component = lazy(() => {
|
|
30
|
+
// If preload was called, reuse the same promise
|
|
31
|
+
// This ensures React uses the already-loaded module
|
|
32
|
+
if (!modulePromise) {
|
|
33
|
+
modulePromise = importFunc();
|
|
34
|
+
}
|
|
35
|
+
return modulePromise;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
preload,
|
|
40
|
+
Component,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side script to preload lazy routes before hydration
|
|
3
|
+
* This should be called BEFORE React's hydrateRoot()
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// This will be populated by the server with the routes that need preloading
|
|
7
|
+
declare global {
|
|
8
|
+
interface Window {
|
|
9
|
+
__PRELOAD_ROUTES__?: string[];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function preloadMatchedRoute() {
|
|
14
|
+
// Get the list of routes to preload from the server
|
|
15
|
+
const routesToPreload = window.__PRELOAD_ROUTES__ || [];
|
|
16
|
+
|
|
17
|
+
if (routesToPreload.length === 0) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Dynamically import the routes module to access PRELOADABLE_ROUTES
|
|
22
|
+
const routesModule = await import('../routes');
|
|
23
|
+
const { PRELOADABLE_ROUTES } = routesModule;
|
|
24
|
+
|
|
25
|
+
// Preload each route
|
|
26
|
+
const preloadPromises = routesToPreload
|
|
27
|
+
.map((routeKey) => {
|
|
28
|
+
const preloadableRoute = PRELOADABLE_ROUTES[routeKey];
|
|
29
|
+
if (preloadableRoute && preloadableRoute.preload) {
|
|
30
|
+
return preloadableRoute.preload();
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
})
|
|
34
|
+
.filter(Boolean);
|
|
35
|
+
|
|
36
|
+
// Wait for all preloads to complete
|
|
37
|
+
await Promise.all(preloadPromises);
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-methods.d.ts","sourceRoot":"","sources":["../../src/cli-methods.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAC;AAkB1C,eAAO,MAAM,SAAS,iDAoDrB,CAAC;AAmBF,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAK/B;AACD,wBAAgB,QAAQ,CAAC,GAAG,QAAQ,OAAA,QAInC;AACD,wBAAgB,cAAc,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,QAyB1C;AA2CD,wBAAgB,kCAAkC,CAChD,aAAa,KAAA,EACb,YAAY,EAAE,CACZ,YAAY,KAAA,EACZ,YAAY,KAAA,KACT,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1C,UAAU,KAAA,EACV,IAAI,UAAQ,QAoMb;AA+ID,wBAAgB,QAAQ,CAAC,OAAO,KAAA,QA6T/B;AAkCD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAgB,GAAG,cAAc,EAAE,CA4B3E;AAyCD,eAAO,MAAM,cAAc,kEAgG1B,CAAC;AAwGF,eAAO,MAAM,gBAAgB;;;;;CAc5B,CAAC;AAgBF;;GAEG;AACH,eAAO,MAAM,YAAY,cAaxB,CAAC;AACF,eAAO,MAAM,WAAW,iDA2BvB,CAAC;AAEF,eAAO,MAAM,kBAAkB,iDAmC9B,CAAC;AACF,eAAO,MAAM,eAAe,iDAuC3B,CAAC;AAKF,eAAO,MAAM,YAAY,kBACT,MAAM,UACb,MAAM,mBACG,IAAI,MAAM,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,EAAE,CAAC,qBAuFlE,CAAC;AAEF,eAAO,MAAM,cAAc,qBAuB1B,CAAC;AACF,eAAO,MAAM,QAAQ,iBAAuB,MAAM,qBAuDjD,CAAC;AACF,eAAO,MAAM,uBAAuB,qBA8CnC,CAAC;AACF,eAAO,MAAM,SAAS,gBACP,MAAM,UACX,MAAM,WACL;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,kBA2G1B,CAAC;AACF,eAAO,MAAM,WAAW,cACZ,OAAO,oCA+DlB,CAAC;AACF,eAAO,MAAM,QAAQ,sBAKpB,CAAC;AACF,eAAO,MAAM,aAAa,qBAmHzB,CAAC;AACF,eAAO,MAAM,YAAY,wBAiExB,CAAC;AAEF,eAAO,MAAM,eAAe,qBAoK3B,CAAC;AAEF,eAAO,MAAM,aAAa,gEA+GzB,CAAC;AAqBF,eAAO,MAAM,QAAQ,qCAuDpB,CAAC;AAEF,eAAO,MAAM,YAAY,iEAIX,OAAO,8BA4JpB,CAAC;AACF,eAAO,MAAM,cAAc,yCAyB1B,CAAC;AACF,eAAO,MAAM,iBAAiB,4CAQ7B,CAAC;AACF,eAAO,MAAM,iBAAiB;;EAW7B,CAAC;AAEF,eAAO,IAAI,cAAc,UAAmB,OAAO,kBA0KlD,CAAC;AAsBF,eAAO,IAAI,cAAc,8EAiExB,CAAC;AAEF,eAAO,IAAI,YAAY,iEAIE,OAAO,SACxB,OAAO,kBAiHd,CAAC;AAeF,eAAO,IAAI,4BAA4B,wFAgDtC,CAAC;AAOF,eAAO,IAAI,cAAc,uCAMxB,CAAC;AACF,eAAO,IAAI,YAAY,sCA8FtB,CAAC;AAEF,eAAO,IAAI,wBAAwB,0CA6BlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,wCA8B1B,CAAC"}
|
package/lib/cjs/cli-methods.js
CHANGED
|
@@ -1181,14 +1181,22 @@ const runMethod = async (packageName, method, options) => {
|
|
|
1181
1181
|
await (0, exports.ensureEnvironmentLoaded)();
|
|
1182
1182
|
if (options.spawn) {
|
|
1183
1183
|
let lincdConfig = (await Promise.resolve(`${path_1.default.join(process.cwd(), 'lincd.config.js')}`).then(s => __importStar(require(s)))).default;
|
|
1184
|
+
// Set default loadAppComponent if not provided
|
|
1185
|
+
if (!lincdConfig.server) {
|
|
1186
|
+
lincdConfig.server = {};
|
|
1187
|
+
}
|
|
1188
|
+
if (!lincdConfig.server.loadAppComponent) {
|
|
1189
|
+
lincdConfig.server.loadAppComponent = async () => (await Promise.resolve(`${path_1.default.join(process.cwd(), 'src', 'App')}`).then(s => __importStar(require(s)))).default;
|
|
1190
|
+
}
|
|
1191
|
+
// Set default loadRoutes if not provided
|
|
1192
|
+
if (!lincdConfig.server.loadRoutes) {
|
|
1193
|
+
lincdConfig.server.loadRoutes = async () => await Promise.resolve(`${path_1.default.join(process.cwd(), 'src', 'routes.tsx')}`).then(s => __importStar(require(s)));
|
|
1194
|
+
}
|
|
1184
1195
|
//@ts-ignore
|
|
1185
1196
|
const ServerClass = (await Promise.resolve().then(() => __importStar(require('lincd-server/shapes/LincdServer'))))
|
|
1186
1197
|
.LincdServer;
|
|
1187
1198
|
await Promise.resolve(`${path_1.default.join(process.cwd(), 'scripts', 'storage-config.js')}`).then(s => __importStar(require(s)));
|
|
1188
|
-
let server = new ServerClass(
|
|
1189
|
-
loadAppComponent: async () => (await Promise.resolve(`${path_1.default.join(process.cwd(), 'src', 'App')}`).then(s => __importStar(require(s)))).default,
|
|
1190
|
-
...lincdConfig,
|
|
1191
|
-
});
|
|
1199
|
+
let server = new ServerClass(lincdConfig);
|
|
1192
1200
|
//init the server
|
|
1193
1201
|
console.log('Initializing server...');
|
|
1194
1202
|
server.initOnly().then(() => {
|
|
@@ -1278,21 +1286,36 @@ const startServer = async (initOnly = false, ServerClass = null) => {
|
|
|
1278
1286
|
ServerClass = (await Promise.resolve().then(() => __importStar(require('lincd-server/shapes/LincdServer')))).LincdServer;
|
|
1279
1287
|
}
|
|
1280
1288
|
await Promise.resolve(`${path_1.default.join(process.cwd(), 'scripts', 'storage-config.js')}`).then(s => __importStar(require(s)));
|
|
1281
|
-
|
|
1282
|
-
if (
|
|
1283
|
-
|
|
1284
|
-
|
|
1289
|
+
// Set default loadAppComponent if not provided
|
|
1290
|
+
if (!lincdConfig.server) {
|
|
1291
|
+
lincdConfig.server = {};
|
|
1292
|
+
}
|
|
1293
|
+
if (!lincdConfig.server.loadAppComponent) {
|
|
1294
|
+
let appPromise;
|
|
1295
|
+
if (process.env.NODE_ENV !== 'development') {
|
|
1296
|
+
appPromise = (await Promise.resolve(`${path_1.default.join(process.cwd(), 'lib', 'App.js')}`).then(s => __importStar(require(s))))
|
|
1297
|
+
.default;
|
|
1298
|
+
}
|
|
1299
|
+
else {
|
|
1300
|
+
appPromise = (await Promise.resolve(`${path_1.default.join(process.cwd(), 'src', 'App.tsx')}`).then(s => __importStar(require(s))))
|
|
1301
|
+
.default;
|
|
1302
|
+
}
|
|
1303
|
+
lincdConfig.server.loadAppComponent = async () => {
|
|
1304
|
+
return appPromise;
|
|
1305
|
+
};
|
|
1285
1306
|
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1307
|
+
// Set default loadRoutes if not provided
|
|
1308
|
+
if (!lincdConfig.server.loadRoutes) {
|
|
1309
|
+
lincdConfig.server.loadRoutes = async () => {
|
|
1310
|
+
if (process.env.NODE_ENV !== 'development') {
|
|
1311
|
+
return await Promise.resolve(`${path_1.default.join(process.cwd(), 'lib', 'routes.js')}`).then(s => __importStar(require(s)));
|
|
1312
|
+
}
|
|
1313
|
+
else {
|
|
1314
|
+
return await Promise.resolve(`${path_1.default.join(process.cwd(), 'src', 'routes.tsx')}`).then(s => __importStar(require(s)));
|
|
1315
|
+
}
|
|
1316
|
+
};
|
|
1289
1317
|
}
|
|
1290
|
-
let server = new ServerClass(
|
|
1291
|
-
loadAppComponent: async () => {
|
|
1292
|
-
return appPromise;
|
|
1293
|
-
},
|
|
1294
|
-
...lincdConfig,
|
|
1295
|
-
});
|
|
1318
|
+
let server = new ServerClass(lincdConfig);
|
|
1296
1319
|
//Important to use slice, because when using clusers, child processes need to be able to read the same arguments
|
|
1297
1320
|
let args = process.argv.slice(2);
|
|
1298
1321
|
//if --initOnly is passed, only initialize the server and don't start it
|
|
@@ -1308,6 +1331,7 @@ const buildApp = async () => {
|
|
|
1308
1331
|
await (0, exports.buildFrontend)();
|
|
1309
1332
|
await (0, exports.buildBackend)();
|
|
1310
1333
|
console.log(chalk_1.default.magenta(`✅ ${process.env.NODE_ENV} app build finished`));
|
|
1334
|
+
process.exit(0);
|
|
1311
1335
|
};
|
|
1312
1336
|
exports.buildApp = buildApp;
|
|
1313
1337
|
const buildFrontend = async () => {
|