@tramvai/cli 2.93.0 → 2.94.0
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/lib/builder/webpack/devServer/pool/process/pool.js +4 -2
- package/lib/builder/webpack/devServer/pool/process/pool.js.map +1 -1
- package/lib/builder/webpack/devServer/pool/thread/pool.js +3 -1
- package/lib/builder/webpack/devServer/pool/thread/pool.js.map +1 -1
- package/lib/commands/static/application.js +2 -3
- package/lib/commands/static/application.js.map +1 -1
- package/lib/commands/static/generate.js +3 -4
- package/lib/commands/static/generate.js.map +1 -1
- package/lib/utils/dev-app/request.d.ts +3 -0
- package/lib/utils/dev-app/request.js +21 -0
- package/lib/utils/dev-app/request.js.map +1 -0
- package/package.json +2 -2
- package/src/builder/webpack/devServer/pool/process/pool.ts +5 -1
- package/src/builder/webpack/devServer/pool/thread/pool.ts +4 -0
- package/src/commands/static/application.ts +2 -3
- package/src/commands/static/generate.ts +3 -4
- package/src/utils/dev-app/request.ts +26 -0
- package/lib/commands/static/request.d.ts +0 -1
- package/lib/commands/static/request.js +0 -8
- package/lib/commands/static/request.js.map +0 -1
- package/src/commands/static/request.ts +0 -4
|
@@ -12,10 +12,11 @@ const ProcessWorkerBridge = (di) => {
|
|
|
12
12
|
const configManager = di.get(tokens_1.SERVER_CONFIG_MANAGER_TOKEN);
|
|
13
13
|
const stdout = di.get(tokens_2.STDOUT_TOKEN);
|
|
14
14
|
const stderr = di.get(tokens_2.STDERR_TOKEN);
|
|
15
|
+
let firstWorker = true;
|
|
15
16
|
return {
|
|
16
17
|
setup() {
|
|
17
18
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
-
cluster_1.default.
|
|
19
|
+
cluster_1.default.setupPrimary({
|
|
19
20
|
// указываем другой файл для работы cluster.fork
|
|
20
21
|
exec: path_1.default.resolve(__dirname, './worker.js'),
|
|
21
22
|
execArgv: [].concat(configManager.debug ? constants_1.DEBUG_ARGV : [], configManager.trace ? constants_1.TRACE_ARGV : []),
|
|
@@ -33,7 +34,8 @@ const ProcessWorkerBridge = (di) => {
|
|
|
33
34
|
const worker = cluster_1.default.fork(Object.assign(Object.assign({}, env), { NODE_ENV: 'development',
|
|
34
35
|
// port=0 позволяет запустить сервер на случайном доступном порту
|
|
35
36
|
// https://nodejs.org/dist/latest-v15.x/docs/api/all.html#cluster_how_it_works
|
|
36
|
-
PORT: `${configManager.port}`, PORT_SERVER: `${configManager.port}
|
|
37
|
+
PORT: `${configManager.port}`, PORT_SERVER: `${configManager.port}`, TRAMVAI_CLI_WATCH_INITIAL_BUILD: firstWorker }));
|
|
38
|
+
firstWorker = false;
|
|
37
39
|
(_a = worker.process.stdout) === null || _a === void 0 ? void 0 : _a.pipe(stdout);
|
|
38
40
|
(_b = worker.process.stderr) === null || _b === void 0 ? void 0 : _b.pipe(stderr);
|
|
39
41
|
return worker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../../../src/builder/webpack/devServer/pool/process/pool.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AAExB,8DAA8B;AAE9B,+DAAyE;AACzE,4CAA8D;AAC9D,qDAKkC;AAE3B,MAAM,mBAAmB,GAAgC,CAAC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iCAAwB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,oCAA2B,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../../../src/builder/webpack/devServer/pool/process/pool.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AAExB,8DAA8B;AAE9B,+DAAyE;AACzE,4CAA8D;AAC9D,qDAKkC;AAE3B,MAAM,mBAAmB,GAAgC,CAAC,EAAE,EAAE,EAAE;IACrE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iCAAwB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,oCAA2B,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;IACpC,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,OAAO;QACC,KAAK;;gBACT,iBAAO,CAAC,YAAY,CAAC;oBACnB,gDAAgD;oBAChD,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;oBAC5C,QAAQ,EAAG,EAAe,CAAC,MAAM,CAC/B,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,EAAE,EACrC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,EAAE,CACtC;oBACD,uGAAuG;oBACvG,WAAW,EAAE,OAAO,CAAC,SAAS;oBAC9B,MAAM,EAAE,IAAI;oBACZ,aAAa;oBACb,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,8BAAqB,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;SAAA;QACK,MAAM;;;gBACV,MAAM,MAAM,GAAG,iBAAO,CAAC,IAAI,iCACtB,GAAG,KACN,QAAQ,EAAE,aAAa;oBACvB,iEAAiE;oBACjE,8EAA8E;oBAC9E,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,EAC7B,WAAW,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,EACpC,+BAA+B,EAAE,WAAW,IAC5C,CAAC;gBAEH,WAAW,GAAG,KAAK,CAAC;gBAEpB,MAAA,MAAM,CAAC,OAAO,CAAC,MAAM,0CAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAA,MAAM,CAAC,OAAO,CAAC,MAAM,0CAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEpC,OAAO,MAAM,CAAC;;SACf;QACK,OAAO,CAAC,MAAM;;gBAClB,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;oBACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAChC;YACH,CAAC;SAAA;QACK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO;;gBAC9B,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;oBAErC,MAAM,CAAC,IAAI,CAAC;wBACV,QAAQ;wBACR,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;qBACjC,CAAC,CAAC;iBACJ;YACH,CAAC;SAAA;KACF,CAAC;AACJ,CAAC,CAAC;AAzDW,QAAA,mBAAmB,uBAyD9B"}
|
|
@@ -10,6 +10,7 @@ const tokens_2 = require("../../../../../di/tokens");
|
|
|
10
10
|
const ThreadWorkerBridge = (di) => {
|
|
11
11
|
const { env } = di.get(tokens_2.COMMAND_PARAMETERS_TOKEN);
|
|
12
12
|
const configManager = di.get(tokens_1.SERVER_CONFIG_MANAGER_TOKEN);
|
|
13
|
+
let firstWorker = true;
|
|
13
14
|
return {
|
|
14
15
|
setup() {
|
|
15
16
|
return tslib_1.__awaiter(this, void 0, void 0, function* () { });
|
|
@@ -32,8 +33,9 @@ const ThreadWorkerBridge = (di) => {
|
|
|
32
33
|
env: Object.assign(Object.assign(Object.assign({}, process.env), env), { NODE_ENV: 'development',
|
|
33
34
|
// port=0 позволяет запустить сервер на случайном доступном порту
|
|
34
35
|
// https://nodejs.org/dist/latest-v15.x/docs/api/all.html#cluster_how_it_works
|
|
35
|
-
PORT: `${configManager.port}`, PORT_SERVER: `${configManager.port}
|
|
36
|
+
PORT: `${configManager.port}`, PORT_SERVER: `${configManager.port}`, TRAMVAI_CLI_WATCH_INITIAL_BUILD: firstWorker }),
|
|
36
37
|
});
|
|
38
|
+
firstWorker = false;
|
|
37
39
|
return worker;
|
|
38
40
|
});
|
|
39
41
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../../../src/builder/webpack/devServer/pool/thread/pool.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AACxB,mDAAwC;AAExC,+DAAyE;AACzE,4CAA8D;AAC9D,qDAA2F;AAEpF,MAAM,kBAAkB,GAAgC,CAAC,EAAE,EAAE,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iCAAwB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,oCAA2B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../../../src/builder/webpack/devServer/pool/thread/pool.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AACxB,mDAAwC;AAExC,+DAAyE;AACzE,4CAA8D;AAC9D,qDAA2F;AAEpF,MAAM,kBAAkB,GAAgC,CAAC,EAAE,EAAE,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iCAAwB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,EAAE,CAAC,GAAG,CAAC,oCAA2B,CAAC,CAAC;IAC1D,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,OAAO;QACC,KAAK;0EAAI,CAAC;SAAA;QACV,MAAM;;gBACV,2GAA2G;gBAC3G,0FAA0F;gBAC1F,4CAA4C;gBAC5C,gBAAgB;gBAChB,qEAAqE;gBACrE,gDAAgD;gBAChD,sEAAsE;gBACtE,yDAAyD;gBACzD,6FAA6F;gBAC7F,oFAAoF;gBACpF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,8BAAqB,CAAC,CAAC,CAAC;gBAE7C,MAAM,MAAM,GAAG,IAAI,uBAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE;oBAChE,QAAQ,EAAE,EAAE,CAAC,MAAM,CACjB,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,EAAE,EACrC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,EAAE,CACtC;oBACD,GAAG,gDACE,OAAO,CAAC,GAAG,GACX,GAAG,KACN,QAAQ,EAAE,aAAa;wBACvB,iEAAiE;wBACjE,8EAA8E;wBAC9E,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,EAC7B,WAAW,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,EACpC,+BAA+B,EAAE,WAAW,GAC7C;iBACF,CAAC,CAAC;gBAEH,WAAW,GAAG,KAAK,CAAC;gBAEpB,OAAO,MAAM,CAAC;YAChB,CAAC;SAAA;QACK,OAAO,CAAC,MAAM;;gBAClB,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;SAAA;QACK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO;;gBAC9B,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACrB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;oBAErC,MAAM,CAAC,WAAW,CAChB;wBACE,QAAQ;wBACR,MAAM;qBACP,EACD,CAAC,MAAM,CAAC,MAAM,CAAC,CAChB,CAAC;iBACH;YACH,CAAC;SAAA;KACF,CAAC;AACJ,CAAC,CAAC;AA1DW,QAAA,kBAAkB,sBA0D7B"}
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.staticApp = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const propOr_1 = tslib_1.__importDefault(require("@tinkoff/utils/object/propOr"));
|
|
6
5
|
const intersection_1 = tslib_1.__importDefault(require("@tinkoff/utils/array/intersection"));
|
|
7
6
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
7
|
const execa_1 = require("execa");
|
|
9
8
|
const wait_on_1 = tslib_1.__importDefault(require("wait-on"));
|
|
10
9
|
const env_ci_1 = tslib_1.__importDefault(require("env-ci"));
|
|
11
10
|
const configManager_1 = require("../../config/configManager");
|
|
12
|
-
const request_1 = require("./request");
|
|
13
11
|
const generate_1 = require("./generate");
|
|
14
12
|
const copyStatsJsonFile_1 = require("../../builder/webpack/utils/copyStatsJsonFile");
|
|
15
13
|
const safeRequire_1 = require("../../utils/safeRequire");
|
|
@@ -17,6 +15,7 @@ const index_1 = require("../index");
|
|
|
17
15
|
const staticServer_1 = require("./staticServer");
|
|
18
16
|
const server_1 = require("./server");
|
|
19
17
|
const handle_server_output_1 = require("./utils/handle-server-output");
|
|
18
|
+
const request_1 = require("../../utils/dev-app/request");
|
|
20
19
|
// eslint-disable-next-line max-statements
|
|
21
20
|
const staticApp = (context, configEntry, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
22
21
|
const clientConfigManager = (0, configManager_1.createConfigManager)(configEntry, Object.assign(Object.assign({ env: 'production' }, options), { buildType: 'client', modern: false }));
|
|
@@ -88,7 +87,7 @@ const staticApp = (context, configEntry, options) => tslib_1.__awaiter(void 0, v
|
|
|
88
87
|
event: 'COMMAND:STATIC:ROUTES_FETCH',
|
|
89
88
|
message: `message: server started, fetch application routes`,
|
|
90
89
|
});
|
|
91
|
-
let paths =
|
|
90
|
+
let paths = yield (0, request_1.appBundleInfo)(serverConfigManager);
|
|
92
91
|
if (options.onlyPages) {
|
|
93
92
|
paths = (0, intersection_1.default)(paths, options.onlyPages);
|
|
94
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/commands/static/application.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../src/commands/static/application.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,15 +5,14 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const promise_queue_1 = tslib_1.__importDefault(require("promise-queue"));
|
|
7
7
|
const fs_extra_1 = require("fs-extra");
|
|
8
|
-
const request_1 = require("
|
|
8
|
+
const request_1 = require("../../utils/dev-app/request");
|
|
9
9
|
const MAX_CONCURRENT = 10;
|
|
10
10
|
const DYNAMIC_PAGE_REGEX = /\/:.+\//g;
|
|
11
11
|
const generateStatic = (context, configManager, paths) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
12
12
|
const q = new promise_queue_1.default(MAX_CONCURRENT);
|
|
13
13
|
const promises = [];
|
|
14
|
-
const {
|
|
14
|
+
const { rootDir, output } = configManager;
|
|
15
15
|
const staticPath = (0, path_1.resolve)(rootDir, output.static);
|
|
16
|
-
const serverPath = `http://${host}:${port}`;
|
|
17
16
|
for (const path of paths) {
|
|
18
17
|
promises.push(q.add(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
19
18
|
// @todo need something similar to https://nextjs.org/docs/basic-features/data-fetching#getstaticpaths-static-generation
|
|
@@ -31,7 +30,7 @@ const generateStatic = (context, configManager, paths) => tslib_1.__awaiter(void
|
|
|
31
30
|
event: 'COMMAND:STATIC:PAGE_FETCH',
|
|
32
31
|
message: `path: ${path}, message: start fetching page`,
|
|
33
32
|
});
|
|
34
|
-
const html = yield (0, request_1.
|
|
33
|
+
const html = yield (0, request_1.appRequest)(configManager, path);
|
|
35
34
|
yield (0, fs_extra_1.outputFile)((0, path_1.join)(staticPath, path, 'index.html'), html);
|
|
36
35
|
context.logger.event({
|
|
37
36
|
type: 'debug',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/static/generate.ts"],"names":[],"mappings":";;;;AAAA,+BAAqC;AACrC,0EAAmC;AACnC,uCAAsC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/static/generate.ts"],"names":[],"mappings":";;;;AAAA,+BAAqC;AACrC,0EAAmC;AACnC,uCAAsC;AAItC,yDAAyD;AAEzD,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE/B,MAAM,cAAc,GAAG,CAC5B,OAAgB,EAChB,aAAoD,EACpD,KAAe,EACf,EAAE;IACF,MAAM,CAAC,GAAG,IAAI,uBAAM,CAAC,cAAc,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,QAAQ,CAAC,IAAI,CACX,CAAC,CAAC,GAAG,CAAC,GAAS,EAAE;YACf,wHAAwH;YACxH,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,yCAAyC;oBAChD,OAAO,EAAE,SAAS,IAAI,0DAA0D;iBACjF,CAAC,CAAC;gBACH,OAAO;aACR;YAED,IAAI;gBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,2BAA2B;oBAClC,OAAO,EAAE,SAAS,IAAI,gCAAgC;iBACvD,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAU,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAEnD,MAAM,IAAA,qBAAU,EAAC,IAAA,WAAI,EAAC,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;gBAE7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,6BAA6B;oBACpC,OAAO,EAAE,SAAS,IAAI,sCAAsC;iBAC7D,CAAC,CAAC;aACJ;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oBACnB,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,sBAAsB;oBAC7B,OAAO,EAAE,SAAS,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE;iBAChD,CAAC,CAAC;aACJ;QACH,CAAC,CAAA,CAAC,CACH,CAAC;KACH;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC,CAAA,CAAC;AApDW,QAAA,cAAc,kBAoDzB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ConfigManager } from '../../config/configManager';
|
|
2
|
+
export declare const appRequest: <T>(configManager: ConfigManager, path: string) => import("@tinkoff/request-core").MakeRequestResult<T>;
|
|
3
|
+
export declare const appBundleInfo: (configManager: ConfigManager) => Promise<string[]>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appBundleInfo = exports.appRequest = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const propOr_1 = tslib_1.__importDefault(require("@tinkoff/utils/object/propOr"));
|
|
6
|
+
const request_core_1 = tslib_1.__importDefault(require("@tinkoff/request-core"));
|
|
7
|
+
const request_plugin_protocol_http_1 = tslib_1.__importDefault(require("@tinkoff/request-plugin-protocol-http"));
|
|
8
|
+
const request = (0, request_core_1.default)([(0, request_plugin_protocol_http_1.default)()]);
|
|
9
|
+
const appRequest = (configManager, path) => {
|
|
10
|
+
const { host, port } = configManager;
|
|
11
|
+
const serverPath = `http://${host}:${port}`;
|
|
12
|
+
return request({ url: `${serverPath}${path}` });
|
|
13
|
+
};
|
|
14
|
+
exports.appRequest = appRequest;
|
|
15
|
+
const appBundleInfo = (configManager) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const { name } = configManager;
|
|
17
|
+
const response = yield (0, exports.appRequest)(configManager, `/${name}/papi/bundleInfo`);
|
|
18
|
+
return (0, propOr_1.default)('payload', [], response);
|
|
19
|
+
});
|
|
20
|
+
exports.appBundleInfo = appBundleInfo;
|
|
21
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/utils/dev-app/request.ts"],"names":[],"mappings":";;;;AAAA,kFAAkD;AAClD,iFAAkD;AAClD,iHAAyD;AAGzD,MAAM,OAAO,GAAG,IAAA,sBAAa,EAAC,CAAC,IAAA,sCAAI,GAAE,CAAC,CAAC,CAAC;AAEjC,MAAM,UAAU,GAAG,CAAI,aAA4B,EAAE,IAAY,EAAE,EAAE;IAC1E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;IACrC,MAAM,UAAU,GAAG,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC;IAE5C,OAAO,OAAO,CAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,UAAU,cAKrB;AAOK,MAAM,aAAa,GAAG,CAAO,aAA4B,EAAE,EAAE;IAClE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,IAAA,kBAAU,EAAqB,aAAa,EAAE,IAAI,IAAI,kBAAkB,CAAC,CAAC;IAEjG,OAAO,IAAA,gBAAM,EAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC,CAAA,CAAC;AANW,QAAA,aAAa,iBAMxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.94.0",
|
|
4
4
|
"description": "Cli инструмент для сборки и запуска приложений",
|
|
5
5
|
"files": [
|
|
6
6
|
"src",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@tinkoff/utils": "^2.1.3",
|
|
72
72
|
"@tinkoff/webpack-dedupe-plugin": "1.0.5",
|
|
73
73
|
"@tramvai/build": "3.1.3",
|
|
74
|
-
"@tramvai/react": "2.
|
|
74
|
+
"@tramvai/react": "2.94.0",
|
|
75
75
|
"@tramvai/tools-check-versions": "0.4.11",
|
|
76
76
|
"@tramvai/tools-migrate": "0.6.14",
|
|
77
77
|
"ajv": "^6.12.6",
|
|
@@ -16,10 +16,11 @@ export const ProcessWorkerBridge: WorkerBridgeFactory<Worker> = (di) => {
|
|
|
16
16
|
const configManager = di.get(SERVER_CONFIG_MANAGER_TOKEN);
|
|
17
17
|
const stdout = di.get(STDOUT_TOKEN);
|
|
18
18
|
const stderr = di.get(STDERR_TOKEN);
|
|
19
|
+
let firstWorker = true;
|
|
19
20
|
|
|
20
21
|
return {
|
|
21
22
|
async setup() {
|
|
22
|
-
cluster.
|
|
23
|
+
cluster.setupPrimary({
|
|
23
24
|
// указываем другой файл для работы cluster.fork
|
|
24
25
|
exec: path.resolve(__dirname, './worker.js'),
|
|
25
26
|
execArgv: ([] as string[]).concat(
|
|
@@ -41,8 +42,11 @@ export const ProcessWorkerBridge: WorkerBridgeFactory<Worker> = (di) => {
|
|
|
41
42
|
// https://nodejs.org/dist/latest-v15.x/docs/api/all.html#cluster_how_it_works
|
|
42
43
|
PORT: `${configManager.port}`,
|
|
43
44
|
PORT_SERVER: `${configManager.port}`,
|
|
45
|
+
TRAMVAI_CLI_WATCH_INITIAL_BUILD: firstWorker,
|
|
44
46
|
});
|
|
45
47
|
|
|
48
|
+
firstWorker = false;
|
|
49
|
+
|
|
46
50
|
worker.process.stdout?.pipe(stdout);
|
|
47
51
|
worker.process.stderr?.pipe(stderr);
|
|
48
52
|
|
|
@@ -8,6 +8,7 @@ import { COMMAND_PARAMETERS_TOKEN, CONFIG_ROOT_DIR_TOKEN } from '../../../../../
|
|
|
8
8
|
export const ThreadWorkerBridge: WorkerBridgeFactory<Worker> = (di) => {
|
|
9
9
|
const { env } = di.get(COMMAND_PARAMETERS_TOKEN);
|
|
10
10
|
const configManager = di.get(SERVER_CONFIG_MANAGER_TOKEN);
|
|
11
|
+
let firstWorker = true;
|
|
11
12
|
|
|
12
13
|
return {
|
|
13
14
|
async setup() {},
|
|
@@ -37,9 +38,12 @@ export const ThreadWorkerBridge: WorkerBridgeFactory<Worker> = (di) => {
|
|
|
37
38
|
// https://nodejs.org/dist/latest-v15.x/docs/api/all.html#cluster_how_it_works
|
|
38
39
|
PORT: `${configManager.port}`,
|
|
39
40
|
PORT_SERVER: `${configManager.port}`,
|
|
41
|
+
TRAMVAI_CLI_WATCH_INITIAL_BUILD: firstWorker,
|
|
40
42
|
},
|
|
41
43
|
});
|
|
42
44
|
|
|
45
|
+
firstWorker = false;
|
|
46
|
+
|
|
43
47
|
return worker;
|
|
44
48
|
},
|
|
45
49
|
async destroy(worker) {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import propOr from '@tinkoff/utils/object/propOr';
|
|
2
1
|
import intersection from '@tinkoff/utils/array/intersection';
|
|
3
2
|
|
|
4
3
|
import path from 'path';
|
|
@@ -10,7 +9,6 @@ import type { CommandResult } from '../../models/command';
|
|
|
10
9
|
import type { ApplicationConfigEntry } from '../../typings/configEntry/application';
|
|
11
10
|
import type { Params } from './command';
|
|
12
11
|
import { createConfigManager } from '../../config/configManager';
|
|
13
|
-
import { request } from './request';
|
|
14
12
|
import { generateStatic } from './generate';
|
|
15
13
|
import { copyStatsJsonFileToServerDirectory } from '../../builder/webpack/utils/copyStatsJsonFile';
|
|
16
14
|
import { safeRequire } from '../../utils/safeRequire';
|
|
@@ -18,6 +16,7 @@ import { app } from '../index';
|
|
|
18
16
|
import { startStaticServer } from './staticServer';
|
|
19
17
|
import { startServer } from './server';
|
|
20
18
|
import { handleServerOutput } from './utils/handle-server-output';
|
|
19
|
+
import { appBundleInfo } from '../../utils/dev-app/request';
|
|
21
20
|
|
|
22
21
|
// eslint-disable-next-line max-statements
|
|
23
22
|
export const staticApp = async (
|
|
@@ -124,7 +123,7 @@ export const staticApp = async (
|
|
|
124
123
|
message: `message: server started, fetch application routes`,
|
|
125
124
|
});
|
|
126
125
|
|
|
127
|
-
let paths =
|
|
126
|
+
let paths = await appBundleInfo(serverConfigManager);
|
|
128
127
|
|
|
129
128
|
if (options.onlyPages) {
|
|
130
129
|
paths = intersection(paths, options.onlyPages);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { resolve, join } from 'path';
|
|
2
2
|
import PQueue from 'promise-queue';
|
|
3
3
|
import { outputFile } from 'fs-extra';
|
|
4
|
-
import { request } from './request';
|
|
5
4
|
import type { Context } from '../../models/context';
|
|
6
5
|
import type { ConfigManager } from '../../config/configManager';
|
|
7
6
|
import type { ApplicationConfigEntry } from '../../typings/configEntry/application';
|
|
7
|
+
import { appRequest } from '../../utils/dev-app/request';
|
|
8
8
|
|
|
9
9
|
const MAX_CONCURRENT = 10;
|
|
10
10
|
const DYNAMIC_PAGE_REGEX = /\/:.+\//g;
|
|
@@ -17,9 +17,8 @@ export const generateStatic = async (
|
|
|
17
17
|
const q = new PQueue(MAX_CONCURRENT);
|
|
18
18
|
const promises = [];
|
|
19
19
|
|
|
20
|
-
const {
|
|
20
|
+
const { rootDir, output } = configManager;
|
|
21
21
|
const staticPath = resolve(rootDir, output.static);
|
|
22
|
-
const serverPath = `http://${host}:${port}`;
|
|
23
22
|
|
|
24
23
|
for (const path of paths) {
|
|
25
24
|
promises.push(
|
|
@@ -41,7 +40,7 @@ export const generateStatic = async (
|
|
|
41
40
|
message: `path: ${path}, message: start fetching page`,
|
|
42
41
|
});
|
|
43
42
|
|
|
44
|
-
const html = await
|
|
43
|
+
const html = await appRequest(configManager, path);
|
|
45
44
|
|
|
46
45
|
await outputFile(join(staticPath, path, 'index.html'), html);
|
|
47
46
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import propOr from '@tinkoff/utils/object/propOr';
|
|
2
|
+
import createRequest from '@tinkoff/request-core';
|
|
3
|
+
import http from '@tinkoff/request-plugin-protocol-http';
|
|
4
|
+
import type { ConfigManager } from '../../config/configManager';
|
|
5
|
+
|
|
6
|
+
const request = createRequest([http()]);
|
|
7
|
+
|
|
8
|
+
export const appRequest = <T>(configManager: ConfigManager, path: string) => {
|
|
9
|
+
const { host, port } = configManager;
|
|
10
|
+
const serverPath = `http://${host}:${port}`;
|
|
11
|
+
|
|
12
|
+
return request<T>({ url: `${serverPath}${path}` });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
interface BundleInfoResponse {
|
|
16
|
+
resultCode: string;
|
|
17
|
+
payload: string[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const appBundleInfo = async (configManager: ConfigManager) => {
|
|
21
|
+
const { name } = configManager;
|
|
22
|
+
|
|
23
|
+
const response = await appRequest<BundleInfoResponse>(configManager, `/${name}/papi/bundleInfo`);
|
|
24
|
+
|
|
25
|
+
return propOr('payload', [], response);
|
|
26
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const request: import("@tinkoff/request-core").MakeRequest;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.request = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const request_core_1 = tslib_1.__importDefault(require("@tinkoff/request-core"));
|
|
6
|
-
const request_plugin_protocol_http_1 = tslib_1.__importDefault(require("@tinkoff/request-plugin-protocol-http"));
|
|
7
|
-
exports.request = (0, request_core_1.default)([(0, request_plugin_protocol_http_1.default)()]);
|
|
8
|
-
//# sourceMappingURL=request.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/commands/static/request.ts"],"names":[],"mappings":";;;;AAAA,iFAAkD;AAClD,iHAAyD;AAE5C,QAAA,OAAO,GAAG,IAAA,sBAAa,EAAC,CAAC,IAAA,sCAAI,GAAE,CAAC,CAAC,CAAC"}
|