@intlayer/cli 9.5.7 → 9.5.8
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/dist/cjs/_virtual/_utils_asset.cjs +1 -1
- package/dist/cjs/auth/login.cjs +24 -16
- package/dist/cjs/auth/login.cjs.map +1 -1
- package/dist/cjs/build.cjs +1 -1
- package/dist/cjs/ci.cjs +1 -1
- package/dist/cjs/cli.cjs +18 -7
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/config.cjs +1 -1
- package/dist/cjs/editor.cjs +1 -1
- package/dist/cjs/extract.cjs +5 -5
- package/dist/cjs/fill/fill.cjs +2 -2
- package/dist/cjs/fill/formatAutoFilledFilePath.cjs +1 -1
- package/dist/cjs/fill/listTranslationsTasks.cjs +1 -1
- package/dist/cjs/fill/translateDictionary.cjs +1 -1
- package/dist/cjs/fill/writeFill.cjs +1 -1
- package/dist/cjs/getTargetDictionary.cjs +1 -1
- package/dist/cjs/index.cjs +8 -7
- package/dist/cjs/init.cjs +65 -147
- package/dist/cjs/init.cjs.map +1 -1
- package/dist/cjs/initMCP.cjs +1 -25
- package/dist/cjs/initMCP.cjs.map +1 -1
- package/dist/cjs/initSkills.cjs +36 -27
- package/dist/cjs/initSkills.cjs.map +1 -1
- package/dist/cjs/listContentDeclaration.cjs +2 -2
- package/dist/cjs/liveSync.cjs +4 -4
- package/dist/cjs/pull.cjs +4 -4
- package/dist/cjs/push/push.cjs +5 -5
- package/dist/cjs/pushConfig.cjs +1 -1
- package/dist/cjs/reviewDoc/reviewDoc.cjs +3 -3
- package/dist/cjs/reviewDoc/reviewDocBlockAware.cjs +3 -3
- package/dist/cjs/reviewDoc/reviewDocLog.cjs +1 -1
- package/dist/cjs/searchDoc.cjs +1 -1
- package/dist/cjs/test/listMissingTranslations.cjs +1 -1
- package/dist/cjs/test/test.cjs +1 -1
- package/dist/cjs/translateDoc/translateDoc.cjs +2 -2
- package/dist/cjs/translateDoc/translateFile.cjs +2 -2
- package/dist/cjs/upgrade.cjs +18 -0
- package/dist/cjs/upgrade.cjs.map +1 -0
- package/dist/cjs/utils/getOutputFilePath.cjs +1 -1
- package/dist/cjs/utils/getParentPackageJSON.cjs +1 -1
- package/dist/cjs/watch.cjs +1 -1
- package/dist/esm/_virtual/_utils_asset.mjs +1 -1
- package/dist/esm/auth/login.mjs +23 -15
- package/dist/esm/auth/login.mjs.map +1 -1
- package/dist/esm/build.mjs +1 -1
- package/dist/esm/ci.mjs +1 -1
- package/dist/esm/cli.mjs +19 -8
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/config.mjs +1 -1
- package/dist/esm/editor.mjs +1 -1
- package/dist/esm/extract.mjs +6 -6
- package/dist/esm/extract.mjs.map +1 -1
- package/dist/esm/fill/fill.mjs +4 -4
- package/dist/esm/fill/fill.mjs.map +1 -1
- package/dist/esm/fill/formatAutoFilledFilePath.mjs +1 -1
- package/dist/esm/fill/listTranslationsTasks.mjs +1 -1
- package/dist/esm/fill/translateDictionary.mjs +1 -1
- package/dist/esm/fill/writeFill.mjs +1 -1
- package/dist/esm/getTargetDictionary.mjs +1 -1
- package/dist/esm/index.mjs +9 -9
- package/dist/esm/init.mjs +67 -147
- package/dist/esm/init.mjs.map +1 -1
- package/dist/esm/initMCP.mjs +3 -25
- package/dist/esm/initMCP.mjs.map +1 -1
- package/dist/esm/initSkills.mjs +36 -28
- package/dist/esm/initSkills.mjs.map +1 -1
- package/dist/esm/listContentDeclaration.mjs +2 -2
- package/dist/esm/liveSync.mjs +3 -3
- package/dist/esm/pull.mjs +4 -4
- package/dist/esm/push/push.mjs +7 -7
- package/dist/esm/push/push.mjs.map +1 -1
- package/dist/esm/pushConfig.mjs +1 -1
- package/dist/esm/reviewDoc/reviewDoc.mjs +3 -3
- package/dist/esm/reviewDoc/reviewDocBlockAware.mjs +3 -3
- package/dist/esm/reviewDoc/reviewDocLog.mjs +1 -1
- package/dist/esm/searchDoc.mjs +1 -1
- package/dist/esm/test/listMissingTranslations.mjs +1 -1
- package/dist/esm/test/test.mjs +1 -1
- package/dist/esm/translateDoc/translateDoc.mjs +2 -2
- package/dist/esm/translateDoc/translateFile.mjs +2 -2
- package/dist/esm/upgrade.mjs +17 -0
- package/dist/esm/upgrade.mjs.map +1 -0
- package/dist/esm/utils/getOutputFilePath.mjs +1 -1
- package/dist/esm/utils/getParentPackageJSON.mjs +1 -1
- package/dist/esm/watch.mjs +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/init.d.ts.map +1 -1
- package/dist/types/initMCP.d.ts.map +1 -1
- package/dist/types/initSkills.d.ts +11 -1
- package/dist/types/initSkills.d.ts.map +1 -1
- package/dist/types/upgrade.d.ts +9 -0
- package/dist/types/upgrade.d.ts.map +1 -0
- package/package.json +10 -10
- package/dist/cjs/initBuildOptimization.cjs +0 -80
- package/dist/cjs/initBuildOptimization.cjs.map +0 -1
- package/dist/cjs/initCompiler.cjs +0 -77
- package/dist/cjs/initCompiler.cjs.map +0 -1
- package/dist/esm/initBuildOptimization.mjs +0 -79
- package/dist/esm/initBuildOptimization.mjs.map +0 -1
- package/dist/esm/initCompiler.mjs +0 -76
- package/dist/esm/initCompiler.mjs.map +0 -1
- package/dist/types/initBuildOptimization.d.ts +0 -19
- package/dist/types/initBuildOptimization.d.ts.map +0 -1
- package/dist/types/initCompiler.d.ts +0 -20
- package/dist/types/initCompiler.d.ts.map +0 -1
package/dist/cjs/pull.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_utils_checkAccess = require('./utils/checkAccess.cjs');
|
|
4
3
|
const require_push_pullLog = require('./push/pullLog.cjs');
|
|
4
|
+
const require_utils_checkAccess = require('./utils/checkAccess.cjs');
|
|
5
5
|
const require_utils_selectCmsEnvironment = require('./utils/selectCmsEnvironment.cjs');
|
|
6
|
-
let node_path = require("node:path");
|
|
7
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
8
6
|
let node_fs = require("node:fs");
|
|
7
|
+
let node_path = require("node:path");
|
|
9
8
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
10
9
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
11
10
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
12
11
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
13
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
14
12
|
let _intlayer_config_utils = require("@intlayer/config/utils");
|
|
15
13
|
let _intlayer_dictionaries_entry_unmerged = require("@intlayer/dictionaries-entry/unmerged");
|
|
16
14
|
let _intlayer_engine_build = require("@intlayer/engine/build");
|
|
15
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
16
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
17
17
|
|
|
18
18
|
//#region src/pull.ts
|
|
19
19
|
/**
|
package/dist/cjs/push/push.cjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_loadPrompts = require('../loadPrompts.cjs');
|
|
4
3
|
const require_utils_checkAccess = require('../utils/checkAccess.cjs');
|
|
5
4
|
const require_utils_selectCmsEnvironment = require('../utils/selectCmsEnvironment.cjs');
|
|
6
5
|
const require_pushLog = require('../pushLog.cjs');
|
|
6
|
+
const require_loadPrompts = require('../loadPrompts.cjs');
|
|
7
7
|
let node_path = require("node:path");
|
|
8
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
9
8
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
10
9
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
11
10
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
12
11
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
13
|
-
let node_fs_promises = require("node:fs/promises");
|
|
14
|
-
node_fs_promises = require_runtime.__toESM(node_fs_promises);
|
|
15
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
16
12
|
let _intlayer_dictionaries_entry_unmerged = require("@intlayer/dictionaries-entry/unmerged");
|
|
17
13
|
let _intlayer_engine_build = require("@intlayer/engine/build");
|
|
14
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
15
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
16
|
+
let node_fs_promises = require("node:fs/promises");
|
|
17
|
+
node_fs_promises = require_runtime.__toESM(node_fs_promises);
|
|
18
18
|
|
|
19
19
|
//#region src/push/push.ts
|
|
20
20
|
const statusIconsAndColors = {
|
package/dist/cjs/pushConfig.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_utils_checkAccess = require('./utils/checkAccess.cjs');
|
|
3
3
|
const require_utils_selectCmsEnvironment = require('./utils/selectCmsEnvironment.cjs');
|
|
4
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
5
4
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
6
5
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
7
6
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
7
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
8
8
|
|
|
9
9
|
//#region src/pushConfig.ts
|
|
10
10
|
const pushConfig = async (options) => {
|
|
@@ -8,15 +8,15 @@ const require_reviewDoc_reviewDocBlockAware = require('./reviewDocBlockAware.cjs
|
|
|
8
8
|
const require_reviewDoc_reviewDocLog = require('./reviewDocLog.cjs');
|
|
9
9
|
const require_reviewDoc_reviewDocProgress = require('./reviewDocProgress.cjs');
|
|
10
10
|
const require_reviewDoc_reviewDocSynthesis = require('./reviewDocSynthesis.cjs');
|
|
11
|
-
let node_path = require("node:path");
|
|
12
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
13
11
|
let node_fs = require("node:fs");
|
|
12
|
+
let node_path = require("node:path");
|
|
14
13
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
15
14
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
16
15
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
17
16
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
18
|
-
let
|
|
17
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
19
18
|
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
19
|
+
let node_fs_promises = require("node:fs/promises");
|
|
20
20
|
let _intlayer_engine_docReview = require("@intlayer/engine/docReview");
|
|
21
21
|
let fast_glob = require("fast-glob");
|
|
22
22
|
fast_glob = require_runtime.__toESM(fast_glob);
|
|
@@ -4,15 +4,15 @@ const require__utils_asset = require('../_virtual/_utils_asset.cjs');
|
|
|
4
4
|
const require_translateDoc_validation = require('../translateDoc/validation.cjs');
|
|
5
5
|
const require_utils_chunkInference = require('../utils/chunkInference.cjs');
|
|
6
6
|
const require_utils_fixChunkStartEndChars = require('../utils/fixChunkStartEndChars.cjs');
|
|
7
|
-
let node_path = require("node:path");
|
|
8
7
|
let node_fs = require("node:fs");
|
|
8
|
+
let node_path = require("node:path");
|
|
9
9
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
10
10
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
11
11
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
12
12
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
13
|
-
let node_fs_promises = require("node:fs/promises");
|
|
14
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
15
13
|
let _intlayer_config_utils = require("@intlayer/config/utils");
|
|
14
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
15
|
+
let node_fs_promises = require("node:fs/promises");
|
|
16
16
|
let _intlayer_engine_docReview = require("@intlayer/engine/docReview");
|
|
17
17
|
let _intlayer_core_localization = require("@intlayer/core/localization");
|
|
18
18
|
let _intlayer_types_locales = require("@intlayer/types/locales");
|
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2
2
|
let node_fs = require("node:fs");
|
|
3
3
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
4
4
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
5
|
-
let node_fs_promises = require("node:fs/promises");
|
|
6
5
|
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
6
|
+
let node_fs_promises = require("node:fs/promises");
|
|
7
7
|
let _intlayer_engine_docReview = require("@intlayer/engine/docReview");
|
|
8
8
|
|
|
9
9
|
//#region src/reviewDoc/reviewDocLog.ts
|
package/dist/cjs/searchDoc.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
3
2
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
4
3
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
4
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
5
5
|
let _intlayer_api = require("@intlayer/api");
|
|
6
6
|
|
|
7
7
|
//#region src/searchDoc.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
3
2
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
4
3
|
let _intlayer_dictionaries_entry_unmerged = require("@intlayer/dictionaries-entry/unmerged");
|
|
4
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
5
5
|
let _intlayer_core_plugins = require("@intlayer/core/plugins");
|
|
6
6
|
let _intlayer_dictionaries_entry = require("@intlayer/dictionaries-entry");
|
|
7
7
|
|
package/dist/cjs/test/test.cjs
CHANGED
|
@@ -5,8 +5,8 @@ let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
|
5
5
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
6
6
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
7
7
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
8
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
9
8
|
let _intlayer_engine_build = require("@intlayer/engine/build");
|
|
9
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
10
10
|
|
|
11
11
|
//#region src/test/test.ts
|
|
12
12
|
const testMissingTranslations = async (options) => {
|
|
@@ -4,13 +4,13 @@ const require_utils_setupAI = require('../utils/setupAI.cjs');
|
|
|
4
4
|
const require_utils_getOutputFilePath = require('../utils/getOutputFilePath.cjs');
|
|
5
5
|
const require_utils_checkFileModifiedRange = require('../utils/checkFileModifiedRange.cjs');
|
|
6
6
|
const require_translateDoc_translateFile = require('./translateFile.cjs');
|
|
7
|
-
let node_path = require("node:path");
|
|
8
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
9
7
|
let node_fs = require("node:fs");
|
|
8
|
+
let node_path = require("node:path");
|
|
10
9
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
11
10
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
12
11
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
13
12
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
13
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
14
14
|
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
15
15
|
let fast_glob = require("fast-glob");
|
|
16
16
|
fast_glob = require_runtime.__toESM(fast_glob);
|
|
@@ -9,9 +9,9 @@ let node_path = require("node:path");
|
|
|
9
9
|
let _intlayer_config_colors = require("@intlayer/config/colors");
|
|
10
10
|
_intlayer_config_colors = require_runtime.__toESM(_intlayer_config_colors);
|
|
11
11
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
12
|
-
let node_fs_promises = require("node:fs/promises");
|
|
13
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
14
12
|
let _intlayer_config_utils = require("@intlayer/config/utils");
|
|
13
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
14
|
+
let node_fs_promises = require("node:fs/promises");
|
|
15
15
|
let node_perf_hooks = require("node:perf_hooks");
|
|
16
16
|
|
|
17
17
|
//#region src/translateDoc/translateFile.ts
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_init = require('./init.cjs');
|
|
3
|
+
let node_path = require("node:path");
|
|
4
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
5
|
+
|
|
6
|
+
//#region src/upgrade.ts
|
|
7
|
+
/**
|
|
8
|
+
* Lists the Intlayer packages of every `package.json` of the project and
|
|
9
|
+
* upgrades them to the version of the given dist-tag.
|
|
10
|
+
*/
|
|
11
|
+
const upgrade = async (projectRoot, options) => {
|
|
12
|
+
const root = require_init.findProjectRoot(projectRoot ? (0, node_path.resolve)(projectRoot) : process.cwd());
|
|
13
|
+
await (0, _intlayer_engine_cli.upgradeIntlayerPackages)(root, options);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.upgrade = upgrade;
|
|
18
|
+
//# sourceMappingURL=upgrade.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.cjs","names":["findProjectRoot","resolve","upgradeIntlayerPackages"],"sources":["../../src/upgrade.ts"],"sourcesContent":["import { resolve } from 'node:path';\nimport {\n type UpgradeIntlayerPackagesOptions,\n upgradeIntlayerPackages,\n} from '@intlayer/engine/cli';\nimport { findProjectRoot } from './init';\n\n/**\n * Lists the Intlayer packages of every `package.json` of the project and\n * upgrades them to the version of the given dist-tag.\n */\nexport const upgrade = async (\n projectRoot?: string,\n options?: UpgradeIntlayerPackagesOptions\n) => {\n const root = findProjectRoot(\n projectRoot ? resolve(projectRoot) : process.cwd()\n );\n\n await upgradeIntlayerPackages(root, options);\n};\n"],"mappings":";;;;;;;;;;AAWA,MAAa,UAAU,OACrB,aACA,YACG;CACH,MAAM,OAAOA,6BACX,kBAAcC,mBAAQ,WAAW,IAAI,QAAQ,IAAI,CACnD;CAEA,UAAMC,8CAAwB,MAAM,OAAO;AAC7C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
3
2
|
let _intlayer_config_utils = require("@intlayer/config/utils");
|
|
3
|
+
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
4
4
|
|
|
5
5
|
//#region src/utils/getOutputFilePath.ts
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
let node_path = require("node:path");
|
|
3
2
|
let node_fs = require("node:fs");
|
|
3
|
+
let node_path = require("node:path");
|
|
4
4
|
|
|
5
5
|
//#region src/utils/getParentPackageJSON.ts
|
|
6
6
|
const getParentPackageJSON = (startDir) => {
|
package/dist/cjs/watch.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
3
2
|
let _intlayer_config_logger = require("@intlayer/config/logger");
|
|
4
3
|
let _intlayer_config_node = require("@intlayer/config/node");
|
|
4
|
+
let _intlayer_engine_cli = require("@intlayer/engine/cli");
|
|
5
5
|
let _intlayer_engine_utils = require("@intlayer/engine/utils");
|
|
6
6
|
let _intlayer_engine_watcher = require("@intlayer/engine/watcher");
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
2
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
|
|
5
5
|
//#region \0utils:asset
|
package/dist/esm/auth/login.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { openBrowser } from "../utils/openBrowser.mjs";
|
|
2
2
|
import { writeCliSessionToken } from "./sessionToken.mjs";
|
|
3
|
-
import { logConfigDetails } from "@intlayer/engine/cli";
|
|
4
|
-
import http from "node:http";
|
|
5
|
-
import { URL } from "node:url";
|
|
6
3
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
7
4
|
import { colorize, colorizePath, getAppLogger } from "@intlayer/config/logger";
|
|
8
5
|
import { getConfiguration } from "@intlayer/config/node";
|
|
6
|
+
import { logConfigDetails } from "@intlayer/engine/cli";
|
|
7
|
+
import http from "node:http";
|
|
8
|
+
import { URL } from "node:url";
|
|
9
9
|
|
|
10
10
|
//#region src/auth/login.ts
|
|
11
11
|
const buildSuccessHtml = (message) => `
|
|
@@ -66,6 +66,23 @@ const login = async (options = {}) => {
|
|
|
66
66
|
const logger = getAppLogger(configuration);
|
|
67
67
|
const cmsUrl = options.cmsUrl ?? configuration.editor.cmsURL;
|
|
68
68
|
return new Promise((resolve) => {
|
|
69
|
+
/**
|
|
70
|
+
* Sends the success page, then shuts the callback server down. Open
|
|
71
|
+
* keep-alive sockets are dropped: `server.close` alone waits for the
|
|
72
|
+
* browser to release them, which would leave the login pending forever.
|
|
73
|
+
*/
|
|
74
|
+
const completeLogin = (response, message) => {
|
|
75
|
+
response.writeHead(200, {
|
|
76
|
+
"Content-Type": "text/html",
|
|
77
|
+
Connection: "close"
|
|
78
|
+
});
|
|
79
|
+
response.end(buildSuccessHtml(message), () => {
|
|
80
|
+
server.close();
|
|
81
|
+
server.closeAllConnections();
|
|
82
|
+
resolve();
|
|
83
|
+
if (options.exitAfter !== false) process.exit(0);
|
|
84
|
+
});
|
|
85
|
+
};
|
|
69
86
|
const server = http.createServer(async (req, res) => {
|
|
70
87
|
const url = new URL(req.url ?? "", `http://${req.headers.host}`);
|
|
71
88
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
@@ -87,12 +104,8 @@ const login = async (options = {}) => {
|
|
|
87
104
|
logger("");
|
|
88
105
|
logger(colorize(`Token expires at: ${new Date(sessionExpiresAt).toLocaleString()}`, ANSIColors.GREY));
|
|
89
106
|
await writeCliSessionToken(configuration, sessionToken, new Date(sessionExpiresAt));
|
|
90
|
-
|
|
91
|
-
res
|
|
92
|
-
server.close(() => {
|
|
93
|
-
resolve();
|
|
94
|
-
if (options.exitAfter !== false) process.exit(0);
|
|
95
|
-
});
|
|
107
|
+
if (options.onCredentials) logger("A session token does not configure the CMS: run `intlayer login` again and pick an access key to store the credentials in your .env.", { level: "warn" });
|
|
108
|
+
completeLogin(res, "Your 2h session token has been stored. You can now close this tab and return to your terminal.");
|
|
96
109
|
return;
|
|
97
110
|
}
|
|
98
111
|
if (clientId && clientSecret) {
|
|
@@ -137,12 +150,7 @@ const login = async (options = {}) => {
|
|
|
137
150
|
});
|
|
138
151
|
logger(colorize("--------------------------------", ANSIColors.GREY_DARK));
|
|
139
152
|
}
|
|
140
|
-
res
|
|
141
|
-
res.end(buildSuccessHtml("You have successfully logged in to Intlayer CLI. You can now close this tab and return to your terminal."));
|
|
142
|
-
server.close(() => {
|
|
143
|
-
resolve();
|
|
144
|
-
if (options.exitAfter !== false) process.exit(0);
|
|
145
|
-
});
|
|
153
|
+
completeLogin(res, "You have successfully logged in to Intlayer CLI. You can now close this tab and return to your terminal.");
|
|
146
154
|
} else {
|
|
147
155
|
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
148
156
|
res.end("Missing parameters");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.mjs","names":[],"sources":["../../../src/auth/login.ts"],"sourcesContent":["import http from 'node:http';\nimport { URL } from 'node:url';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, colorizePath, getAppLogger } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport { logConfigDetails } from '@intlayer/engine/cli';\nimport { openBrowser } from '../utils/openBrowser';\nimport { writeCliSessionToken } from './sessionToken';\n\nconst buildSuccessHtml = (message: string): string => `\n <!DOCTYPE html>\n <html lang=\"en\" data-theme=\"dark\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Intlayer CLI Login</title>\n <style>\n :root {\n --color-background: rgba(23, 23, 23);\n --color-card: rgba(39, 39, 39);\n --color-text: rgba(255, 245, 237);\n --color-neutral: rgba(93, 93, 93);\n --font-sans: \"Inter\", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n }\n * { box-sizing: border-box; }\n body {\n font-family: var(--font-sans);\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n margin: 0;\n padding: 1rem;\n background-color: var(--color-background);\n color: var(--color-text);\n }\n .container {\n text-align: center;\n padding: 2rem;\n border-radius: 1rem;\n background-color: var(--color-card);\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n max-width: 400px;\n width: 100%;\n }\n h1 { margin: 0 0 1rem 0; font-size: 1.5rem; font-weight: 700; color: var(--color-text); }\n p { color: var(--color-neutral); font-size: 0.8rem; margin: 0 0 1.5rem 0; line-height: 1.5; }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Login Successful</h1>\n <p>${message}</p>\n </div>\n <script>\n window.close();\n setTimeout(() => { window.close(); }, 1000);\n </script>\n </body>\n </html>\n`;\n\ntype LoginOptions = {\n cmsUrl?: string;\n configOptions?: GetConfigurationOptions;\n /**\n * When false, do not call process.exit(0) after a successful login so the\n * caller can continue (e.g. retry a command inline, or finish an interactive\n * setup). Defaults to true to preserve existing standalone-login behaviour.\n */\n exitAfter?: boolean;\n /**\n * Invoked with the access-key credentials when the login flow returns a\n * `clientId` / `clientSecret` pair. When provided, the caller takes ownership\n * of persisting the credentials (e.g. writing them to `.env` and enabling the\n * editor in the config), so the default manual-setup instructions are skipped.\n */\n onCredentials?: (credentials: {\n clientId: string;\n clientSecret: string;\n }) => void | Promise<void>;\n};\n\nexport const login = async (options: LoginOptions = {}) => {\n const configuration = getConfiguration(options.configOptions);\n logConfigDetails(options?.configOptions);\n\n const logger = getAppLogger(configuration);\n\n const cmsUrl = options.cmsUrl ?? configuration.editor.cmsURL;\n\n return new Promise<void>((resolve) => {\n const server = http.createServer(async (req, res) => {\n const url = new URL(req.url ?? '', `http://${req.headers.host}`);\n\n // Set CORS headers\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n if (url.pathname === '/callback') {\n const sessionToken = url.searchParams.get('sessionToken');\n const sessionExpiresAt = url.searchParams.get('expiresAt');\n const clientId = url.searchParams.get('clientId');\n const clientSecret = url.searchParams.get('clientSecret');\n\n if (sessionToken && sessionExpiresAt) {\n logger('');\n logger(\n `Log in successful. ${colorize('2h', ANSIColors.BLUE)} session token received.`\n );\n logger('');\n\n logger(\n colorize(\n `Token expires at: ${new Date(sessionExpiresAt).toLocaleString()}`,\n ANSIColors.GREY\n )\n );\n\n await writeCliSessionToken(\n configuration,\n sessionToken,\n new Date(sessionExpiresAt)\n );\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n buildSuccessHtml(\n 'Your 2h session token has been stored. You can now close this tab and return to your terminal.'\n )\n );\n\n server.close(() => {\n resolve();\n if (options.exitAfter !== false) {\n process.exit(0);\n }\n });\n return;\n }\n\n if (clientId && clientSecret) {\n if (options.onCredentials) {\n // The caller persists the credentials itself (e.g. interactive\n // init writing `.env` and enabling the editor in the config).\n logger('');\n logger('Log in successful. Configuring Intlayer CMS...');\n\n try {\n await options.onCredentials({ clientId, clientSecret });\n } catch (error) {\n logger(\n `Failed to persist the CMS credentials automatically: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { level: 'error' }\n );\n }\n } else {\n logger('');\n logger('Log in successful. Client ID and Client Secret received.');\n\n logger('');\n logger([\n '1. Insert the Client ID and Client Secret in your',\n colorizePath('.env'),\n 'file:',\n ]);\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n logger(\n [\n colorize('INTLAYER_CLIENT_ID=', ANSIColors.GREY_LIGHT),\n colorize(clientId, ANSIColors.BLUE),\n ].join('')\n );\n logger(\n [\n colorize('INTLAYER_CLIENT_SECRET=', ANSIColors.GREY_LIGHT),\n colorize(clientSecret, ANSIColors.BLUE),\n ].join('')\n );\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n logger('');\n logger('2. Insert in your Intlayer configuration file:');\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n [\n `${ANSIColors.GREY_LIGHT}{`,\n ` editor: {`,\n ` enabled: true,`,\n ` cmsURL: '${colorizePath(cmsUrl!, undefined, ANSIColors.GREY_LIGHT)}',`,\n ` clientId: '${colorize('process.env.INTLAYER_CLIENT_ID', ANSIColors.BLUE, ANSIColors.GREY_LIGHT)}',`,\n ` clientSecret: '${colorize('process.env.INTLAYER_CLIENT_SECRET', ANSIColors.BLUE, ANSIColors.GREY_LIGHT)}',`,\n ` },`,\n `}`,\n ].forEach((line) => {\n logger(line);\n });\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(\n buildSuccessHtml(\n 'You have successfully logged in to Intlayer CLI. You can now close this tab and return to your terminal.'\n )\n );\n\n server.close(() => {\n resolve();\n if (options.exitAfter !== false) {\n process.exit(0);\n }\n });\n } else {\n res.writeHead(400, { 'Content-Type': 'text/plain' });\n res.end('Missing parameters');\n }\n } else {\n res.writeHead(404, { 'Content-Type': 'text/plain' });\n res.end('Not found');\n }\n });\n\n server.listen(0, () => {\n const address = server.address();\n const port = typeof address === 'object' && address ? address.port : 0;\n const state = Math.random().toString(36).substring(7);\n\n const websiteUrl =\n cmsUrl ?? process.env.INTLAYER_SITE_URL ?? 'http://localhost:3000';\n const backendUrl = configuration.editor.backendURL ?? '';\n const loginUrl = `${websiteUrl}/auth/cli-login?port=${port}&state=${state}&backendUrl=${encodeURIComponent(backendUrl)}`;\n\n logger('Opening browser for login...');\n logger(`If browser does not open, visit: ${colorizePath(loginUrl)}`);\n\n openBrowser(loginUrl);\n });\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login.mjs","names":[],"sources":["../../../src/auth/login.ts"],"sourcesContent":["import http from 'node:http';\nimport { URL } from 'node:url';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, colorizePath, getAppLogger } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport { logConfigDetails } from '@intlayer/engine/cli';\nimport { openBrowser } from '../utils/openBrowser';\nimport { writeCliSessionToken } from './sessionToken';\n\nconst buildSuccessHtml = (message: string): string => `\n <!DOCTYPE html>\n <html lang=\"en\" data-theme=\"dark\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Intlayer CLI Login</title>\n <style>\n :root {\n --color-background: rgba(23, 23, 23);\n --color-card: rgba(39, 39, 39);\n --color-text: rgba(255, 245, 237);\n --color-neutral: rgba(93, 93, 93);\n --font-sans: \"Inter\", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n }\n * { box-sizing: border-box; }\n body {\n font-family: var(--font-sans);\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n margin: 0;\n padding: 1rem;\n background-color: var(--color-background);\n color: var(--color-text);\n }\n .container {\n text-align: center;\n padding: 2rem;\n border-radius: 1rem;\n background-color: var(--color-card);\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n max-width: 400px;\n width: 100%;\n }\n h1 { margin: 0 0 1rem 0; font-size: 1.5rem; font-weight: 700; color: var(--color-text); }\n p { color: var(--color-neutral); font-size: 0.8rem; margin: 0 0 1.5rem 0; line-height: 1.5; }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Login Successful</h1>\n <p>${message}</p>\n </div>\n <script>\n window.close();\n setTimeout(() => { window.close(); }, 1000);\n </script>\n </body>\n </html>\n`;\n\ntype LoginOptions = {\n cmsUrl?: string;\n configOptions?: GetConfigurationOptions;\n /**\n * When false, do not call process.exit(0) after a successful login so the\n * caller can continue (e.g. retry a command inline, or finish an interactive\n * setup). Defaults to true to preserve existing standalone-login behaviour.\n */\n exitAfter?: boolean;\n /**\n * Invoked with the access-key credentials when the login flow returns a\n * `clientId` / `clientSecret` pair. When provided, the caller takes ownership\n * of persisting the credentials (e.g. writing them to `.env` and enabling the\n * editor in the config), so the default manual-setup instructions are skipped.\n */\n onCredentials?: (credentials: {\n clientId: string;\n clientSecret: string;\n }) => void | Promise<void>;\n};\n\nexport const login = async (options: LoginOptions = {}) => {\n const configuration = getConfiguration(options.configOptions);\n logConfigDetails(options?.configOptions);\n\n const logger = getAppLogger(configuration);\n\n const cmsUrl = options.cmsUrl ?? configuration.editor.cmsURL;\n\n return new Promise<void>((resolve) => {\n /**\n * Sends the success page, then shuts the callback server down. Open\n * keep-alive sockets are dropped: `server.close` alone waits for the\n * browser to release them, which would leave the login pending forever.\n */\n const completeLogin = (\n response: http.ServerResponse,\n message: string\n ): void => {\n response.writeHead(200, {\n 'Content-Type': 'text/html',\n Connection: 'close',\n });\n response.end(buildSuccessHtml(message), () => {\n server.close();\n server.closeAllConnections();\n resolve();\n\n if (options.exitAfter !== false) {\n process.exit(0);\n }\n });\n };\n\n const server = http.createServer(async (req, res) => {\n const url = new URL(req.url ?? '', `http://${req.headers.host}`);\n\n // Set CORS headers\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n if (url.pathname === '/callback') {\n const sessionToken = url.searchParams.get('sessionToken');\n const sessionExpiresAt = url.searchParams.get('expiresAt');\n const clientId = url.searchParams.get('clientId');\n const clientSecret = url.searchParams.get('clientSecret');\n\n if (sessionToken && sessionExpiresAt) {\n logger('');\n logger(\n `Log in successful. ${colorize('2h', ANSIColors.BLUE)} session token received.`\n );\n logger('');\n\n logger(\n colorize(\n `Token expires at: ${new Date(sessionExpiresAt).toLocaleString()}`,\n ANSIColors.GREY\n )\n );\n\n await writeCliSessionToken(\n configuration,\n sessionToken,\n new Date(sessionExpiresAt)\n );\n\n if (options.onCredentials) {\n logger(\n 'A session token does not configure the CMS: run `intlayer login` again and pick an access key to store the credentials in your .env.',\n { level: 'warn' }\n );\n }\n\n completeLogin(\n res,\n 'Your 2h session token has been stored. You can now close this tab and return to your terminal.'\n );\n return;\n }\n\n if (clientId && clientSecret) {\n if (options.onCredentials) {\n // The caller persists the credentials itself (e.g. interactive\n // init writing `.env` and enabling the editor in the config).\n logger('');\n logger('Log in successful. Configuring Intlayer CMS...');\n\n try {\n await options.onCredentials({ clientId, clientSecret });\n } catch (error) {\n logger(\n `Failed to persist the CMS credentials automatically: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { level: 'error' }\n );\n }\n } else {\n logger('');\n logger('Log in successful. Client ID and Client Secret received.');\n\n logger('');\n logger([\n '1. Insert the Client ID and Client Secret in your',\n colorizePath('.env'),\n 'file:',\n ]);\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n logger(\n [\n colorize('INTLAYER_CLIENT_ID=', ANSIColors.GREY_LIGHT),\n colorize(clientId, ANSIColors.BLUE),\n ].join('')\n );\n logger(\n [\n colorize('INTLAYER_CLIENT_SECRET=', ANSIColors.GREY_LIGHT),\n colorize(clientSecret, ANSIColors.BLUE),\n ].join('')\n );\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n logger('');\n logger('2. Insert in your Intlayer configuration file:');\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n [\n `${ANSIColors.GREY_LIGHT}{`,\n ` editor: {`,\n ` enabled: true,`,\n ` cmsURL: '${colorizePath(cmsUrl!, undefined, ANSIColors.GREY_LIGHT)}',`,\n ` clientId: '${colorize('process.env.INTLAYER_CLIENT_ID', ANSIColors.BLUE, ANSIColors.GREY_LIGHT)}',`,\n ` clientSecret: '${colorize('process.env.INTLAYER_CLIENT_SECRET', ANSIColors.BLUE, ANSIColors.GREY_LIGHT)}',`,\n ` },`,\n `}`,\n ].forEach((line) => {\n logger(line);\n });\n logger(\n colorize('--------------------------------', ANSIColors.GREY_DARK)\n );\n }\n\n completeLogin(\n res,\n 'You have successfully logged in to Intlayer CLI. You can now close this tab and return to your terminal.'\n );\n } else {\n res.writeHead(400, { 'Content-Type': 'text/plain' });\n res.end('Missing parameters');\n }\n } else {\n res.writeHead(404, { 'Content-Type': 'text/plain' });\n res.end('Not found');\n }\n });\n\n server.listen(0, () => {\n const address = server.address();\n const port = typeof address === 'object' && address ? address.port : 0;\n const state = Math.random().toString(36).substring(7);\n\n const websiteUrl =\n cmsUrl ?? process.env.INTLAYER_SITE_URL ?? 'http://localhost:3000';\n const backendUrl = configuration.editor.backendURL ?? '';\n const loginUrl = `${websiteUrl}/auth/cli-login?port=${port}&state=${state}&backendUrl=${encodeURIComponent(backendUrl)}`;\n\n logger('Opening browser for login...');\n logger(`If browser does not open, visit: ${colorizePath(loginUrl)}`);\n\n openBrowser(loginUrl);\n });\n });\n};\n"],"mappings":"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"}
|
package/dist/esm/build.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { logConfigDetails } from "@intlayer/engine/cli";
|
|
2
1
|
import { getConfiguration } from "@intlayer/config/node";
|
|
2
|
+
import { logConfigDetails } from "@intlayer/engine/cli";
|
|
3
3
|
import { claimCliContentWatcher, reportRedundantContentWatcher, runParallel } from "@intlayer/engine/utils";
|
|
4
4
|
import { buildAndWatchIntlayer } from "@intlayer/engine/watcher";
|
|
5
5
|
|
package/dist/esm/ci.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolve, sep } from "node:path";
|
|
2
|
-
import { detectPackageManager, listProjects } from "@intlayer/engine/cli";
|
|
3
2
|
import { logger } from "@intlayer/config/logger";
|
|
3
|
+
import { detectPackageManager, listProjects } from "@intlayer/engine/cli";
|
|
4
4
|
import { spawnSync } from "node:child_process";
|
|
5
5
|
|
|
6
6
|
//#region src/ci.ts
|
package/dist/esm/cli.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getParentPackageJSON } from "./utils/getParentPackageJSON.mjs";
|
|
2
2
|
import { dirname as dirname$1 } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
3
|
import { logger, setPrefix } from "@intlayer/config/logger";
|
|
5
4
|
import { getConfiguration } from "@intlayer/config/node";
|
|
6
|
-
import {
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { Command, Option } from "commander";
|
|
7
7
|
|
|
8
8
|
//#region src/cli.ts
|
|
9
9
|
const isESModule = typeof import.meta.url === "string";
|
|
@@ -125,7 +125,12 @@ const extractConfigOptions = (options) => {
|
|
|
125
125
|
const setAPI = () => {
|
|
126
126
|
if (!process.argv.includes("--with")) setPrefix("");
|
|
127
127
|
const program = new Command();
|
|
128
|
-
program.version(packageJson.version).description("Intlayer CLI");
|
|
128
|
+
program.version(packageJson.version, "-v, --version", "Print the Intlayer CLI version").description("Intlayer CLI");
|
|
129
|
+
program.addOption(new Option("-V", "Print the Intlayer CLI version").hideHelp());
|
|
130
|
+
program.on("option:V", () => {
|
|
131
|
+
console.log(packageJson.version ?? "unknown");
|
|
132
|
+
process.exit(0);
|
|
133
|
+
});
|
|
129
134
|
program.command("version").description("Print the Intlayer CLI version").action(() => {
|
|
130
135
|
console.log(packageJson.version ?? "unknown");
|
|
131
136
|
});
|
|
@@ -148,7 +153,7 @@ const setAPI = () => {
|
|
|
148
153
|
/**
|
|
149
154
|
* INIT
|
|
150
155
|
*/
|
|
151
|
-
const initCmd = program.command("init").description("Initialize Intlayer in the project").option("--project-root [projectRoot]", "Project root directory").option("--no-gitignore", "Do not add .intlayer to .gitignore").option("--no-github-actions", "Do not scaffold the fill and test GitHub Actions workflows").option("--no-framework-setup", "Do not
|
|
156
|
+
const initCmd = program.command("init").description("Initialize Intlayer in the project").option("--project-root [projectRoot]", "Project root directory").option("--no-gitignore", "Do not add .intlayer to .gitignore").option("--no-github-actions", "Do not scaffold the fill and test GitHub Actions workflows").option("--no-framework-setup", "Do not set up the project (Intlayer config, tsconfig, bundler plugin, middleware/proxy, providers in layout/page)").option("-i, --interactive", "Interactively choose what to set up (packages, skills, MCP, VS Code extension, LSP, …)").action(async (options) => {
|
|
152
157
|
const { init } = await import("./init.mjs");
|
|
153
158
|
return init(options.projectRoot, {
|
|
154
159
|
noGitignore: options.gitignore === false,
|
|
@@ -159,7 +164,7 @@ const setAPI = () => {
|
|
|
159
164
|
});
|
|
160
165
|
initCmd.command("skills").description("Initialize Intlayer skills in the project").option("--project-root [projectRoot]", "Project root directory").action(async (options) => {
|
|
161
166
|
const { initSkills } = await import("./initSkills.mjs");
|
|
162
|
-
|
|
167
|
+
await initSkills(options.projectRoot);
|
|
163
168
|
});
|
|
164
169
|
initCmd.command("mcp").description("Initialize Intlayer MCP server in the project").option("--project-root [projectRoot]", "Project root directory").action(async (options) => {
|
|
165
170
|
const { initMCP } = await import("./initMCP.mjs");
|
|
@@ -169,9 +174,15 @@ const setAPI = () => {
|
|
|
169
174
|
const { initInfra, parseInfraMode } = await import("./initInfra.mjs");
|
|
170
175
|
return initInfra({ mode: options.mode ? parseInfraMode(options.mode) : void 0 });
|
|
171
176
|
});
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
177
|
+
/**
|
|
178
|
+
* UPGRADE
|
|
179
|
+
*/
|
|
180
|
+
program.command("upgrade").description("List the Intlayer packages of every package.json of the project and upgrade them to the latest version").option("--project-root [projectRoot]", "Project root directory").option("--dry-run", "List the packages and their target version only").option("--tag <tag>", "npm dist-tag to upgrade to (e.g. canary)", "latest").action(async (options) => {
|
|
181
|
+
const { upgrade } = await import("./upgrade.mjs");
|
|
182
|
+
return upgrade(options.projectRoot, {
|
|
183
|
+
dryRun: options.dryRun === true,
|
|
184
|
+
distTag: options.tag
|
|
185
|
+
});
|
|
175
186
|
});
|
|
176
187
|
/**
|
|
177
188
|
* DICTIONARIES
|