@intlayer/cli 8.1.1 → 8.1.3-canary.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/dist/cjs/IntlayerEventListener.cjs +1 -186
- package/dist/cjs/IntlayerEventListener.cjs.map +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -29
- package/dist/cjs/_virtual/_utils_asset.cjs +2 -98
- package/dist/cjs/auth/login.cjs +2 -85
- package/dist/cjs/auth/login.cjs.map +1 -1
- package/dist/cjs/build.cjs +1 -27
- package/dist/cjs/build.cjs.map +1 -1
- package/dist/cjs/ci.cjs +1 -73
- package/dist/cjs/ci.cjs.map +1 -1
- package/dist/cjs/cli.cjs +1 -476
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/config.cjs +1 -12
- package/dist/cjs/config.cjs.map +1 -1
- package/dist/cjs/editor.cjs +1 -50
- package/dist/cjs/editor.cjs.map +1 -1
- package/dist/cjs/extract.cjs +1 -96
- package/dist/cjs/extract.cjs.map +1 -1
- package/dist/cjs/fill/deepMergeContent.cjs +1 -27
- package/dist/cjs/fill/deepMergeContent.cjs.map +1 -1
- package/dist/cjs/fill/fill.cjs +1 -78
- package/dist/cjs/fill/fill.cjs.map +1 -1
- package/dist/cjs/fill/formatAutoFilledFilePath.cjs +1 -29
- package/dist/cjs/fill/formatAutoFilledFilePath.cjs.map +1 -1
- package/dist/cjs/fill/formatFillData.cjs +1 -50
- package/dist/cjs/fill/formatFillData.cjs.map +1 -1
- package/dist/cjs/fill/getAvailableLocalesInDictionary.cjs +1 -26
- package/dist/cjs/fill/getAvailableLocalesInDictionary.cjs.map +1 -1
- package/dist/cjs/fill/getFilterMissingContentPerLocale.cjs +1 -50
- package/dist/cjs/fill/getFilterMissingContentPerLocale.cjs.map +1 -1
- package/dist/cjs/fill/index.cjs +1 -6
- package/dist/cjs/fill/listTranslationsTasks.cjs +1 -70
- package/dist/cjs/fill/listTranslationsTasks.cjs.map +1 -1
- package/dist/cjs/fill/mergeChunks.cjs +1 -28
- package/dist/cjs/fill/mergeChunks.cjs.map +1 -1
- package/dist/cjs/fill/translateDictionary.cjs +1 -205
- package/dist/cjs/fill/translateDictionary.cjs.map +1 -1
- package/dist/cjs/fill/writeFill.cjs +1 -54
- package/dist/cjs/fill/writeFill.cjs.map +1 -1
- package/dist/cjs/getTargetDictionary.cjs +1 -36
- package/dist/cjs/getTargetDictionary.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -39
- package/dist/cjs/init.cjs +1 -322
- package/dist/cjs/init.cjs.map +1 -1
- package/dist/cjs/listContentDeclaration.cjs +1 -41
- package/dist/cjs/listContentDeclaration.cjs.map +1 -1
- package/dist/cjs/listProjects.cjs +1 -28
- package/dist/cjs/listProjects.cjs.map +1 -1
- package/dist/cjs/liveSync.cjs +8 -151
- package/dist/cjs/liveSync.cjs.map +1 -1
- package/dist/cjs/pull.cjs +1 -146
- package/dist/cjs/pull.cjs.map +1 -1
- package/dist/cjs/push/pullLog.cjs +3 -102
- package/dist/cjs/push/pullLog.cjs.map +1 -1
- package/dist/cjs/push/push.cjs +1 -206
- package/dist/cjs/push/push.cjs.map +1 -1
- package/dist/cjs/pushConfig.cjs +1 -19
- package/dist/cjs/pushConfig.cjs.map +1 -1
- package/dist/cjs/pushLog.cjs +3 -84
- package/dist/cjs/pushLog.cjs.map +1 -1
- package/dist/cjs/reviewDoc/reviewDoc.cjs +1 -68
- package/dist/cjs/reviewDoc/reviewDoc.cjs.map +1 -1
- package/dist/cjs/reviewDoc/reviewDocBlockAware.cjs +1 -94
- package/dist/cjs/reviewDoc/reviewDocBlockAware.cjs.map +1 -1
- package/dist/cjs/searchDoc.cjs +1 -38
- package/dist/cjs/searchDoc.cjs.map +1 -1
- package/dist/cjs/test/index.cjs +1 -7
- package/dist/cjs/test/listMissingTranslations.cjs +1 -49
- package/dist/cjs/test/listMissingTranslations.cjs.map +1 -1
- package/dist/cjs/test/test.cjs +1 -51
- package/dist/cjs/test/test.cjs.map +1 -1
- package/dist/cjs/translateDoc/index.cjs +1 -9
- package/dist/cjs/translateDoc/translateDoc.cjs +1 -74
- package/dist/cjs/translateDoc/translateDoc.cjs.map +1 -1
- package/dist/cjs/translateDoc/translateFile.cjs +2 -103
- package/dist/cjs/translateDoc/translateFile.cjs.map +1 -1
- package/dist/cjs/translateDoc/validation.cjs +5 -49
- package/dist/cjs/translateDoc/validation.cjs.map +1 -1
- package/dist/cjs/translation-alignment/alignBlocks.cjs +1 -67
- package/dist/cjs/translation-alignment/alignBlocks.cjs.map +1 -1
- package/dist/cjs/translation-alignment/computeSimilarity.cjs +1 -25
- package/dist/cjs/translation-alignment/computeSimilarity.cjs.map +1 -1
- package/dist/cjs/translation-alignment/fingerprintBlock.cjs +1 -23
- package/dist/cjs/translation-alignment/fingerprintBlock.cjs.map +1 -1
- package/dist/cjs/translation-alignment/index.cjs +1 -22
- package/dist/cjs/translation-alignment/mapChangedLinesToBlocks.cjs +1 -18
- package/dist/cjs/translation-alignment/mapChangedLinesToBlocks.cjs.map +1 -1
- package/dist/cjs/translation-alignment/normalizeBlock.cjs +1 -22
- package/dist/cjs/translation-alignment/normalizeBlock.cjs.map +1 -1
- package/dist/cjs/translation-alignment/pipeline.cjs +1 -37
- package/dist/cjs/translation-alignment/pipeline.cjs.map +1 -1
- package/dist/cjs/translation-alignment/planActions.cjs +1 -46
- package/dist/cjs/translation-alignment/planActions.cjs.map +1 -1
- package/dist/cjs/translation-alignment/rebuildDocument.cjs +2 -49
- package/dist/cjs/translation-alignment/rebuildDocument.cjs.map +1 -1
- package/dist/cjs/translation-alignment/segmentDocument.cjs +5 -66
- package/dist/cjs/translation-alignment/segmentDocument.cjs.map +1 -1
- package/dist/cjs/utils/calculateChunks.cjs +2 -89
- package/dist/cjs/utils/calculateChunks.cjs.map +1 -1
- package/dist/cjs/utils/checkAccess.cjs +1 -81
- package/dist/cjs/utils/checkAccess.cjs.map +1 -1
- package/dist/cjs/utils/checkConfigConsistency.cjs +1 -16
- package/dist/cjs/utils/checkConfigConsistency.cjs.map +1 -1
- package/dist/cjs/utils/checkFileModifiedRange.cjs +1 -81
- package/dist/cjs/utils/checkFileModifiedRange.cjs.map +1 -1
- package/dist/cjs/utils/checkLastUpdateTime.cjs +1 -19
- package/dist/cjs/utils/checkLastUpdateTime.cjs.map +1 -1
- package/dist/cjs/utils/chunkInference.cjs +1 -45
- package/dist/cjs/utils/chunkInference.cjs.map +1 -1
- package/dist/cjs/utils/fixChunkStartEndChars.cjs +3 -27
- package/dist/cjs/utils/fixChunkStartEndChars.cjs.map +1 -1
- package/dist/cjs/utils/formatTimeDiff.cjs +1 -20
- package/dist/cjs/utils/formatTimeDiff.cjs.map +1 -1
- package/dist/cjs/utils/getIsFileUpdatedRecently.cjs +1 -16
- package/dist/cjs/utils/getIsFileUpdatedRecently.cjs.map +1 -1
- package/dist/cjs/utils/getOutputFilePath.cjs +1 -74
- package/dist/cjs/utils/getOutputFilePath.cjs.map +1 -1
- package/dist/cjs/utils/getParentPackageJSON.cjs +1 -20
- package/dist/cjs/utils/getParentPackageJSON.cjs.map +1 -1
- package/dist/cjs/utils/listSpecialChars.cjs +2 -54
- package/dist/cjs/utils/listSpecialChars.cjs.map +1 -1
- package/dist/cjs/utils/mapChunksBetweenFiles.cjs +1 -102
- package/dist/cjs/utils/mapChunksBetweenFiles.cjs.map +1 -1
- package/dist/cjs/utils/openBrowser.cjs +1 -19
- package/dist/cjs/utils/openBrowser.cjs.map +1 -1
- package/dist/cjs/utils/reorderParagraphs.cjs +3 -91
- package/dist/cjs/utils/reorderParagraphs.cjs.map +1 -1
- package/dist/cjs/utils/setupAI.cjs +1 -64
- package/dist/cjs/utils/setupAI.cjs.map +1 -1
- package/dist/cjs/watch.cjs +1 -43
- package/dist/cjs/watch.cjs.map +1 -1
- package/dist/esm/IntlayerEventListener.mjs +1 -183
- package/dist/esm/IntlayerEventListener.mjs.map +1 -1
- package/dist/esm/_virtual/_rolldown/runtime.mjs +1 -8
- package/dist/esm/_virtual/_utils_asset.mjs +2 -97
- package/dist/esm/auth/login.mjs +2 -82
- package/dist/esm/auth/login.mjs.map +1 -1
- package/dist/esm/build.mjs +1 -25
- package/dist/esm/build.mjs.map +1 -1
- package/dist/esm/ci.mjs +1 -71
- package/dist/esm/ci.mjs.map +1 -1
- package/dist/esm/cli.mjs +1 -473
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/config.mjs +1 -10
- package/dist/esm/config.mjs.map +1 -1
- package/dist/esm/editor.mjs +1 -49
- package/dist/esm/editor.mjs.map +1 -1
- package/dist/esm/extract.mjs +1 -93
- package/dist/esm/extract.mjs.map +1 -1
- package/dist/esm/fill/deepMergeContent.mjs +1 -25
- package/dist/esm/fill/deepMergeContent.mjs.map +1 -1
- package/dist/esm/fill/fill.mjs +1 -76
- package/dist/esm/fill/fill.mjs.map +1 -1
- package/dist/esm/fill/formatAutoFilledFilePath.mjs +1 -27
- package/dist/esm/fill/formatAutoFilledFilePath.mjs.map +1 -1
- package/dist/esm/fill/formatFillData.mjs +1 -49
- package/dist/esm/fill/formatFillData.mjs.map +1 -1
- package/dist/esm/fill/getAvailableLocalesInDictionary.mjs +1 -24
- package/dist/esm/fill/getAvailableLocalesInDictionary.mjs.map +1 -1
- package/dist/esm/fill/getFilterMissingContentPerLocale.mjs +1 -48
- package/dist/esm/fill/getFilterMissingContentPerLocale.mjs.map +1 -1
- package/dist/esm/fill/index.mjs +1 -4
- package/dist/esm/fill/listTranslationsTasks.mjs +1 -68
- package/dist/esm/fill/listTranslationsTasks.mjs.map +1 -1
- package/dist/esm/fill/mergeChunks.mjs +1 -26
- package/dist/esm/fill/mergeChunks.mjs.map +1 -1
- package/dist/esm/fill/translateDictionary.mjs +1 -203
- package/dist/esm/fill/translateDictionary.mjs.map +1 -1
- package/dist/esm/fill/writeFill.mjs +1 -52
- package/dist/esm/fill/writeFill.mjs.map +1 -1
- package/dist/esm/getTargetDictionary.mjs +1 -33
- package/dist/esm/getTargetDictionary.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -18
- package/dist/esm/init.mjs +1 -317
- package/dist/esm/init.mjs.map +1 -1
- package/dist/esm/listContentDeclaration.mjs +1 -38
- package/dist/esm/listContentDeclaration.mjs.map +1 -1
- package/dist/esm/listProjects.mjs +1 -26
- package/dist/esm/listProjects.mjs.map +1 -1
- package/dist/esm/liveSync.mjs +8 -148
- package/dist/esm/liveSync.mjs.map +1 -1
- package/dist/esm/pull.mjs +1 -144
- package/dist/esm/pull.mjs.map +1 -1
- package/dist/esm/push/pullLog.mjs +3 -100
- package/dist/esm/push/pullLog.mjs.map +1 -1
- package/dist/esm/push/push.mjs +1 -203
- package/dist/esm/push/push.mjs.map +1 -1
- package/dist/esm/pushConfig.mjs +1 -17
- package/dist/esm/pushConfig.mjs.map +1 -1
- package/dist/esm/pushLog.mjs +3 -82
- package/dist/esm/pushLog.mjs.map +1 -1
- package/dist/esm/reviewDoc/reviewDoc.mjs +1 -65
- package/dist/esm/reviewDoc/reviewDoc.mjs.map +1 -1
- package/dist/esm/reviewDoc/reviewDocBlockAware.mjs +1 -92
- package/dist/esm/reviewDoc/reviewDocBlockAware.mjs.map +1 -1
- package/dist/esm/searchDoc.mjs +1 -36
- package/dist/esm/searchDoc.mjs.map +1 -1
- package/dist/esm/test/index.mjs +1 -4
- package/dist/esm/test/listMissingTranslations.mjs +1 -46
- package/dist/esm/test/listMissingTranslations.mjs.map +1 -1
- package/dist/esm/test/test.mjs +1 -49
- package/dist/esm/test/test.mjs.map +1 -1
- package/dist/esm/translateDoc/index.mjs +1 -5
- package/dist/esm/translateDoc/translateDoc.mjs +1 -71
- package/dist/esm/translateDoc/translateDoc.mjs.map +1 -1
- package/dist/esm/translateDoc/translateFile.mjs +2 -101
- package/dist/esm/translateDoc/translateFile.mjs.map +1 -1
- package/dist/esm/translateDoc/validation.mjs +5 -46
- package/dist/esm/translateDoc/validation.mjs.map +1 -1
- package/dist/esm/translation-alignment/alignBlocks.mjs +1 -66
- package/dist/esm/translation-alignment/alignBlocks.mjs.map +1 -1
- package/dist/esm/translation-alignment/computeSimilarity.mjs +1 -22
- package/dist/esm/translation-alignment/computeSimilarity.mjs.map +1 -1
- package/dist/esm/translation-alignment/fingerprintBlock.mjs +1 -20
- package/dist/esm/translation-alignment/fingerprintBlock.mjs.map +1 -1
- package/dist/esm/translation-alignment/index.mjs +1 -11
- package/dist/esm/translation-alignment/mapChangedLinesToBlocks.mjs +1 -16
- package/dist/esm/translation-alignment/mapChangedLinesToBlocks.mjs.map +1 -1
- package/dist/esm/translation-alignment/normalizeBlock.mjs +1 -20
- package/dist/esm/translation-alignment/normalizeBlock.mjs.map +1 -1
- package/dist/esm/translation-alignment/pipeline.mjs +1 -35
- package/dist/esm/translation-alignment/pipeline.mjs.map +1 -1
- package/dist/esm/translation-alignment/planActions.mjs +1 -44
- package/dist/esm/translation-alignment/planActions.mjs.map +1 -1
- package/dist/esm/translation-alignment/rebuildDocument.mjs +2 -46
- package/dist/esm/translation-alignment/rebuildDocument.mjs.map +1 -1
- package/dist/esm/translation-alignment/segmentDocument.mjs +5 -64
- package/dist/esm/translation-alignment/segmentDocument.mjs.map +1 -1
- package/dist/esm/utils/calculateChunks.mjs +2 -87
- package/dist/esm/utils/calculateChunks.mjs.map +1 -1
- package/dist/esm/utils/checkAccess.mjs +1 -78
- package/dist/esm/utils/checkAccess.mjs.map +1 -1
- package/dist/esm/utils/checkConfigConsistency.mjs +1 -14
- package/dist/esm/utils/checkConfigConsistency.mjs.map +1 -1
- package/dist/esm/utils/checkFileModifiedRange.mjs +1 -80
- package/dist/esm/utils/checkFileModifiedRange.mjs.map +1 -1
- package/dist/esm/utils/checkLastUpdateTime.mjs +1 -17
- package/dist/esm/utils/checkLastUpdateTime.mjs.map +1 -1
- package/dist/esm/utils/chunkInference.mjs +1 -43
- package/dist/esm/utils/chunkInference.mjs.map +1 -1
- package/dist/esm/utils/fixChunkStartEndChars.mjs +3 -25
- package/dist/esm/utils/fixChunkStartEndChars.mjs.map +1 -1
- package/dist/esm/utils/formatTimeDiff.mjs +1 -18
- package/dist/esm/utils/formatTimeDiff.mjs.map +1 -1
- package/dist/esm/utils/getIsFileUpdatedRecently.mjs +1 -14
- package/dist/esm/utils/getIsFileUpdatedRecently.mjs.map +1 -1
- package/dist/esm/utils/getOutputFilePath.mjs +1 -72
- package/dist/esm/utils/getOutputFilePath.mjs.map +1 -1
- package/dist/esm/utils/getParentPackageJSON.mjs +1 -18
- package/dist/esm/utils/getParentPackageJSON.mjs.map +1 -1
- package/dist/esm/utils/listSpecialChars.mjs +2 -52
- package/dist/esm/utils/listSpecialChars.mjs.map +1 -1
- package/dist/esm/utils/mapChunksBetweenFiles.mjs +1 -100
- package/dist/esm/utils/mapChunksBetweenFiles.mjs.map +1 -1
- package/dist/esm/utils/openBrowser.mjs +1 -17
- package/dist/esm/utils/openBrowser.mjs.map +1 -1
- package/dist/esm/utils/reorderParagraphs.mjs +3 -90
- package/dist/esm/utils/reorderParagraphs.mjs.map +1 -1
- package/dist/esm/utils/setupAI.mjs +1 -62
- package/dist/esm/utils/setupAI.mjs.map +1 -1
- package/dist/esm/watch.mjs +1 -41
- package/dist/esm/watch.mjs.map +1 -1
- package/dist/types/auth/login.d.ts +1 -1
- package/dist/types/auth/login.d.ts.map +1 -1
- package/dist/types/build.d.ts +1 -1
- package/dist/types/build.d.ts.map +1 -1
- package/dist/types/config.d.ts +1 -1
- package/dist/types/extract.d.ts +1 -1
- package/dist/types/extract.d.ts.map +1 -1
- package/dist/types/fill/fill.d.ts +1 -1
- package/dist/types/fill/fill.d.ts.map +1 -1
- package/dist/types/fill/translateDictionary.d.ts +2 -2
- package/dist/types/fill/translateDictionary.d.ts.map +1 -1
- package/dist/types/fill/writeFill.d.ts.map +1 -1
- package/dist/types/getTargetDictionary.d.ts +2 -2
- package/dist/types/index.d.ts +4 -1
- package/dist/types/init.d.ts +1 -1
- package/dist/types/listContentDeclaration.d.ts +1 -1
- package/dist/types/listContentDeclaration.d.ts.map +1 -1
- package/dist/types/listProjects.d.ts +1 -1
- package/dist/types/listProjects.d.ts.map +1 -1
- package/dist/types/liveSync.d.ts +1 -1
- package/dist/types/pull.d.ts +1 -1
- package/dist/types/pull.d.ts.map +1 -1
- package/dist/types/push/pullLog.d.ts +1 -1
- package/dist/types/push/pullLog.d.ts.map +1 -1
- package/dist/types/push/push.d.ts +2 -2
- package/dist/types/pushConfig.d.ts +1 -1
- package/dist/types/reviewDoc/reviewDoc.d.ts +2 -2
- package/dist/types/reviewDoc/reviewDoc.d.ts.map +1 -1
- package/dist/types/reviewDoc/reviewDocBlockAware.d.ts +1 -1
- package/dist/types/reviewDoc/reviewDocBlockAware.d.ts.map +1 -1
- package/dist/types/searchDoc.d.ts +1 -1
- package/dist/types/searchDoc.d.ts.map +1 -1
- package/dist/types/test/listMissingTranslations.d.ts +1 -1
- package/dist/types/test/test.d.ts +1 -1
- package/dist/types/test/test.d.ts.map +1 -1
- package/dist/types/translateDoc/translateDoc.d.ts.map +1 -1
- package/dist/types/translateDoc/types.d.ts +2 -2
- package/dist/types/translateDoc/validation.d.ts +1 -1
- package/dist/types/utils/checkAccess.d.ts.map +1 -1
- package/dist/types/watch.d.ts +1 -1
- package/dist/types/watch.d.ts.map +1 -1
- package/package.json +13 -13
package/dist/esm/init.mjs
CHANGED
|
@@ -1,318 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join, resolve } from "node:path";
|
|
3
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
-
import * as p from "@clack/prompts";
|
|
5
|
-
import { AutoComplete } from "enquirer";
|
|
6
|
-
|
|
7
|
-
//#region src/init.ts
|
|
8
|
-
const findProjectRoot = (startDir) => {
|
|
9
|
-
let currentDir = startDir;
|
|
10
|
-
while (currentDir !== resolve(currentDir, "..")) {
|
|
11
|
-
if (existsSync(join(currentDir, "package.json"))) return currentDir;
|
|
12
|
-
currentDir = resolve(currentDir, "..");
|
|
13
|
-
}
|
|
14
|
-
return startDir;
|
|
15
|
-
};
|
|
16
|
-
const init = async (projectRoot) => {
|
|
17
|
-
await initIntlayer(projectRoot ? findProjectRoot(resolve(projectRoot)) : findProjectRoot(process.cwd()));
|
|
18
|
-
};
|
|
19
|
-
const PLATFORM_CHECKS = [
|
|
20
|
-
{
|
|
21
|
-
check: () => process.env.CURSOR === "true" || process.env.TERM_PROGRAM === "cursor",
|
|
22
|
-
platform: "Cursor"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
check: () => process.env.WINDSURF === "true" || process.env.TERM_PROGRAM === "windsurf",
|
|
26
|
-
platform: "Windsurf"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
check: () => process.env.TRAE === "true" || process.env.TERM_PROGRAM === "trae",
|
|
30
|
-
platform: "Trae"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
check: () => process.env.TRAE_CN === "true",
|
|
34
|
-
platform: "TraeCN"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
check: () => process.env.VSCODE === "true" || process.env.TERM_PROGRAM === "vscode",
|
|
38
|
-
platform: "VSCode"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
check: () => process.env.OPENCODE === "true",
|
|
42
|
-
platform: "OpenCode"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
check: () => process.env.CLAUDE === "true",
|
|
46
|
-
platform: "Claude"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
check: () => process.env.GITHUB_ACTIONS === "true" || !!process.env.GITHUB_WORKSPACE,
|
|
50
|
-
platform: "GitHub"
|
|
51
|
-
}
|
|
52
|
-
];
|
|
53
|
-
const getDetectedPlatform = () => PLATFORM_CHECKS.find(({ check }) => check())?.platform;
|
|
54
|
-
const initSkills = async (projectRoot) => {
|
|
55
|
-
const root = projectRoot ? findProjectRoot(resolve(projectRoot)) : findProjectRoot(process.cwd());
|
|
56
|
-
p.intro("Initializing Intlayer skills");
|
|
57
|
-
const detectedPlatform = getDetectedPlatform();
|
|
58
|
-
const PLATFORM_OPTIONS = [
|
|
59
|
-
{
|
|
60
|
-
value: "Cursor",
|
|
61
|
-
label: "Cursor",
|
|
62
|
-
hint: "(.cursor/skills)"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
value: "Windsurf",
|
|
66
|
-
label: "Windsurf",
|
|
67
|
-
hint: "(.windsurf/skills)"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
value: "Trae",
|
|
71
|
-
label: "Trae",
|
|
72
|
-
hint: "(.trae/skills)"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
value: "TraeCN",
|
|
76
|
-
label: "Trae CN",
|
|
77
|
-
hint: "(.trae/skills)"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
value: "VSCode",
|
|
81
|
-
label: "VS Code",
|
|
82
|
-
hint: "(.github/skills)"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
value: "OpenCode",
|
|
86
|
-
label: "OpenCode",
|
|
87
|
-
hint: "(.opencode/skills)"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
value: "Claude",
|
|
91
|
-
label: "Claude Code",
|
|
92
|
-
hint: "(.claude/skills)"
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
value: "GitHub",
|
|
96
|
-
label: "GitHub Copilot Workspace",
|
|
97
|
-
hint: "(.github/skills)"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
value: "Antigravity",
|
|
101
|
-
label: "Antigravity",
|
|
102
|
-
hint: "(.agent/skills)"
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
value: "Augment",
|
|
106
|
-
label: "Augment",
|
|
107
|
-
hint: "(.augment/skills)"
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
value: "OpenClaw",
|
|
111
|
-
label: "OpenClaw",
|
|
112
|
-
hint: "(skills)"
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
value: "Cline",
|
|
116
|
-
label: "Cline",
|
|
117
|
-
hint: "(.cline/skills)"
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
value: "CodeBuddy",
|
|
121
|
-
label: "CodeBuddy",
|
|
122
|
-
hint: "(.codebuddy/skills)"
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
value: "CommandCode",
|
|
126
|
-
label: "Command Code",
|
|
127
|
-
hint: "(.commandcode/skills)"
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
value: "Continue",
|
|
131
|
-
label: "Continue",
|
|
132
|
-
hint: "(.continue/skills)"
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
value: "Crush",
|
|
136
|
-
label: "Crush",
|
|
137
|
-
hint: "(.crush/skills)"
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
value: "Droid",
|
|
141
|
-
label: "Droid",
|
|
142
|
-
hint: "(.factory/skills)"
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
value: "Goose",
|
|
146
|
-
label: "Goose",
|
|
147
|
-
hint: "(.goose/skills)"
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
value: "IFlow",
|
|
151
|
-
label: "iFlow CLI",
|
|
152
|
-
hint: "(.iflow/skills)"
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
value: "Junie",
|
|
156
|
-
label: "Junie",
|
|
157
|
-
hint: "(.junie/skills)"
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
value: "KiloCode",
|
|
161
|
-
label: "Kilo Code",
|
|
162
|
-
hint: "(.kilocode/skills)"
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
value: "Kiro",
|
|
166
|
-
label: "Kiro CLI",
|
|
167
|
-
hint: "(.kiro/skills)"
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
value: "Kode",
|
|
171
|
-
label: "Kode",
|
|
172
|
-
hint: "(.kode/skills)"
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
value: "MCPJam",
|
|
176
|
-
label: "MCPJam",
|
|
177
|
-
hint: "(.mcpjam/skills)"
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
value: "MistralVibe",
|
|
181
|
-
label: "Mistral Vibe",
|
|
182
|
-
hint: "(.vibe/skills)"
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
value: "Mux",
|
|
186
|
-
label: "Mux",
|
|
187
|
-
hint: "(.mux/skills)"
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
value: "OpenHands",
|
|
191
|
-
label: "OpenHands",
|
|
192
|
-
hint: "(.openhands/skills)"
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
value: "Pi",
|
|
196
|
-
label: "Pi",
|
|
197
|
-
hint: "(.pi/skills)"
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
value: "Qoder",
|
|
201
|
-
label: "Qoder",
|
|
202
|
-
hint: "(.qoder/skills)"
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
value: "Qwen",
|
|
206
|
-
label: "Qwen Code",
|
|
207
|
-
hint: "(.qwen/skills)"
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
value: "RooCode",
|
|
211
|
-
label: "Roo Code",
|
|
212
|
-
hint: "(.roo/skills)"
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
value: "Zencoder",
|
|
216
|
-
label: "Zencoder",
|
|
217
|
-
hint: "(.zencoder/skills)"
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
value: "Neovate",
|
|
221
|
-
label: "Neovate",
|
|
222
|
-
hint: "(.neovate/skills)"
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
value: "Pochi",
|
|
226
|
-
label: "Pochi",
|
|
227
|
-
hint: "(.pochi/skills)"
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
value: "Other",
|
|
231
|
-
label: "Other",
|
|
232
|
-
hint: "(skills)"
|
|
233
|
-
}
|
|
234
|
-
];
|
|
235
|
-
const prompt = new AutoComplete({
|
|
236
|
-
name: "platforms",
|
|
237
|
-
message: "Which platforms are you using?",
|
|
238
|
-
limit: 10,
|
|
239
|
-
initial: detectedPlatform ? PLATFORM_OPTIONS.findIndex((p) => p.value === detectedPlatform) : void 0,
|
|
240
|
-
multiple: true,
|
|
241
|
-
choices: PLATFORM_OPTIONS.map((p) => ({
|
|
242
|
-
name: p.value,
|
|
243
|
-
message: p.label,
|
|
244
|
-
hint: p.hint
|
|
245
|
-
}))
|
|
246
|
-
});
|
|
247
|
-
let platforms;
|
|
248
|
-
try {
|
|
249
|
-
platforms = await prompt.run();
|
|
250
|
-
} catch (error) {
|
|
251
|
-
p.cancel("Operation cancelled");
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
if (platforms.length === 0) {
|
|
255
|
-
p.log.warn("No platform selected. Nothing to install.");
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
let dependencies = {};
|
|
259
|
-
try {
|
|
260
|
-
const packageJsonPath = join(root, "package.json");
|
|
261
|
-
if (existsSync(packageJsonPath)) {
|
|
262
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
263
|
-
dependencies = {
|
|
264
|
-
...packageJson.dependencies,
|
|
265
|
-
...packageJson.devDependencies
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
} catch {}
|
|
269
|
-
const initialValues = [
|
|
270
|
-
"Usage",
|
|
271
|
-
"Config",
|
|
272
|
-
"Content",
|
|
273
|
-
"RemoteContent"
|
|
274
|
-
];
|
|
275
|
-
if (dependencies.react || dependencies.next) initialValues.push("React");
|
|
276
|
-
if (dependencies.next) initialValues.push("NextJS");
|
|
277
|
-
if (dependencies.preact) initialValues.push("Preact");
|
|
278
|
-
if (dependencies["solid-js"]) initialValues.push("Solid");
|
|
279
|
-
if (dependencies.vue || dependencies.nuxt) initialValues.push("Vue");
|
|
280
|
-
if (dependencies.svelte || dependencies["@sveltejs/kit"]) initialValues.push("Svelte");
|
|
281
|
-
if (dependencies.astro) initialValues.push("Astro");
|
|
282
|
-
const selectedSkills = await p.multiselect({
|
|
283
|
-
message: "Select the documentation skills to provide to your AI:",
|
|
284
|
-
initialValues,
|
|
285
|
-
options: SKILLS.map((skill) => ({
|
|
286
|
-
value: skill,
|
|
287
|
-
label: skill,
|
|
288
|
-
hint: SKILLS_METADATA[skill]
|
|
289
|
-
}))
|
|
290
|
-
});
|
|
291
|
-
if (p.isCancel(selectedSkills)) {
|
|
292
|
-
p.cancel("Operation cancelled");
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
if (selectedSkills.length === 0) {
|
|
296
|
-
p.log.warn("No skills selected. Nothing to install.");
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const s = p.spinner();
|
|
300
|
-
s.start("Installing skills...");
|
|
301
|
-
try {
|
|
302
|
-
const results = [];
|
|
303
|
-
for (const platform of platforms) {
|
|
304
|
-
const result = await installSkills(root, platform, selectedSkills);
|
|
305
|
-
results.push(result);
|
|
306
|
-
}
|
|
307
|
-
s.stop("Skills installed successfully");
|
|
308
|
-
for (const result of results) p.note(result, "Success");
|
|
309
|
-
} catch (error) {
|
|
310
|
-
s.stop("Failed to install skills");
|
|
311
|
-
p.log.error(String(error));
|
|
312
|
-
}
|
|
313
|
-
p.outro("Intlayer skills initialization complete");
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
//#endregion
|
|
317
|
-
export { getDetectedPlatform, init, initSkills };
|
|
1
|
+
import{join as e,resolve as t}from"node:path";import{SKILLS as n,SKILLS_METADATA as r,initIntlayer as i,installSkills as a}from"@intlayer/chokidar/cli";import{existsSync as o,readFileSync as s}from"node:fs";import*as c from"@clack/prompts";import{AutoComplete as l}from"enquirer";const u=n=>{let r=n;for(;r!==t(r,`..`);){if(o(e(r,`package.json`)))return r;r=t(r,`..`)}return n},d=async e=>{await i(u(e?t(e):process.cwd()))},f=[{check:()=>process.env.CURSOR===`true`||process.env.TERM_PROGRAM===`cursor`,platform:`Cursor`},{check:()=>process.env.WINDSURF===`true`||process.env.TERM_PROGRAM===`windsurf`,platform:`Windsurf`},{check:()=>process.env.TRAE===`true`||process.env.TERM_PROGRAM===`trae`,platform:`Trae`},{check:()=>process.env.TRAE_CN===`true`,platform:`TraeCN`},{check:()=>process.env.VSCODE===`true`||process.env.TERM_PROGRAM===`vscode`,platform:`VSCode`},{check:()=>process.env.OPENCODE===`true`,platform:`OpenCode`},{check:()=>process.env.CLAUDE===`true`,platform:`Claude`},{check:()=>process.env.GITHUB_ACTIONS===`true`||!!process.env.GITHUB_WORKSPACE,platform:`GitHub`}],p=()=>f.find(({check:e})=>e())?.platform,m=async i=>{let d=u(i?t(i):process.cwd());c.intro(`Initializing Intlayer skills`);let f=p(),m=[{value:`Cursor`,label:`Cursor`,hint:`(.cursor/skills)`},{value:`Windsurf`,label:`Windsurf`,hint:`(.windsurf/skills)`},{value:`Trae`,label:`Trae`,hint:`(.trae/skills)`},{value:`TraeCN`,label:`Trae CN`,hint:`(.trae/skills)`},{value:`VSCode`,label:`VS Code`,hint:`(.github/skills)`},{value:`OpenCode`,label:`OpenCode`,hint:`(.opencode/skills)`},{value:`Claude`,label:`Claude Code`,hint:`(.claude/skills)`},{value:`GitHub`,label:`GitHub Copilot Workspace`,hint:`(.github/skills)`},{value:`Antigravity`,label:`Antigravity`,hint:`(.agent/skills)`},{value:`Augment`,label:`Augment`,hint:`(.augment/skills)`},{value:`OpenClaw`,label:`OpenClaw`,hint:`(skills)`},{value:`Cline`,label:`Cline`,hint:`(.cline/skills)`},{value:`CodeBuddy`,label:`CodeBuddy`,hint:`(.codebuddy/skills)`},{value:`CommandCode`,label:`Command Code`,hint:`(.commandcode/skills)`},{value:`Continue`,label:`Continue`,hint:`(.continue/skills)`},{value:`Crush`,label:`Crush`,hint:`(.crush/skills)`},{value:`Droid`,label:`Droid`,hint:`(.factory/skills)`},{value:`Goose`,label:`Goose`,hint:`(.goose/skills)`},{value:`IFlow`,label:`iFlow CLI`,hint:`(.iflow/skills)`},{value:`Junie`,label:`Junie`,hint:`(.junie/skills)`},{value:`KiloCode`,label:`Kilo Code`,hint:`(.kilocode/skills)`},{value:`Kiro`,label:`Kiro CLI`,hint:`(.kiro/skills)`},{value:`Kode`,label:`Kode`,hint:`(.kode/skills)`},{value:`MCPJam`,label:`MCPJam`,hint:`(.mcpjam/skills)`},{value:`MistralVibe`,label:`Mistral Vibe`,hint:`(.vibe/skills)`},{value:`Mux`,label:`Mux`,hint:`(.mux/skills)`},{value:`OpenHands`,label:`OpenHands`,hint:`(.openhands/skills)`},{value:`Pi`,label:`Pi`,hint:`(.pi/skills)`},{value:`Qoder`,label:`Qoder`,hint:`(.qoder/skills)`},{value:`Qwen`,label:`Qwen Code`,hint:`(.qwen/skills)`},{value:`RooCode`,label:`Roo Code`,hint:`(.roo/skills)`},{value:`Zencoder`,label:`Zencoder`,hint:`(.zencoder/skills)`},{value:`Neovate`,label:`Neovate`,hint:`(.neovate/skills)`},{value:`Pochi`,label:`Pochi`,hint:`(.pochi/skills)`},{value:`Other`,label:`Other`,hint:`(skills)`}],h=new l({name:`platforms`,message:`Which platforms are you using?`,limit:10,initial:f?m.findIndex(e=>e.value===f):void 0,multiple:!0,choices:m.map(e=>({name:e.value,message:e.label,hint:e.hint}))}),g;try{g=await h.run()}catch{c.cancel(`Operation cancelled`);return}if(g.length===0){c.log.warn(`No platform selected. Nothing to install.`);return}let _={};try{let t=e(d,`package.json`);if(o(t)){let e=JSON.parse(s(t,`utf-8`));_={...e.dependencies,...e.devDependencies}}}catch{}let v=[`Usage`,`Config`,`Content`,`RemoteContent`];(_.react||_.next)&&v.push(`React`),_.next&&v.push(`NextJS`),_.preact&&v.push(`Preact`),_[`solid-js`]&&v.push(`Solid`),(_.vue||_.nuxt)&&v.push(`Vue`),(_.svelte||_[`@sveltejs/kit`])&&v.push(`Svelte`),_.astro&&v.push(`Astro`);let y=await c.multiselect({message:`Select the documentation skills to provide to your AI:`,initialValues:v,options:n.map(e=>({value:e,label:e,hint:r[e]}))});if(c.isCancel(y)){c.cancel(`Operation cancelled`);return}if(y.length===0){c.log.warn(`No skills selected. Nothing to install.`);return}let b=c.spinner();b.start(`Installing skills...`);try{let e=[];for(let t of g){let n=await a(d,t,y);e.push(n)}b.stop(`Skills installed successfully`);for(let t of e)c.note(t,`Success`)}catch(e){b.stop(`Failed to install skills`),c.log.error(String(e))}c.outro(`Intlayer skills initialization complete`)};export{p as getDetectedPlatform,d as init,m as initSkills};
|
|
318
2
|
//# sourceMappingURL=init.mjs.map
|
package/dist/esm/init.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.mjs","names":[],"sources":["../../src/init.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport * as p from '@clack/prompts';\nimport {\n initIntlayer,\n installSkills,\n type Platform,\n SKILLS,\n SKILLS_METADATA,\n} from '@intlayer/chokidar';\n// @ts-ignore\nimport { AutoComplete } from 'enquirer';\n\nconst findProjectRoot = (startDir: string) => {\n let currentDir = startDir;\n\n while (currentDir !== resolve(currentDir, '..')) {\n if (existsSync(join(currentDir, 'package.json'))) {\n return currentDir;\n }\n currentDir = resolve(currentDir, '..');\n }\n\n // If no package.json is found, return the start directory.\n // The initIntlayer function will handle the missing package.json error.\n return startDir;\n};\n\nexport const init = async (projectRoot?: string) => {\n const root = projectRoot\n ? findProjectRoot(resolve(projectRoot))\n : findProjectRoot(process.cwd());\n\n await initIntlayer(root);\n};\n\nconst PLATFORM_CHECKS: Array<{ check: () => boolean; platform: Platform }> = [\n {\n check: () =>\n process.env.CURSOR === 'true' || process.env.TERM_PROGRAM === 'cursor',\n platform: 'Cursor',\n },\n {\n check: () =>\n process.env.WINDSURF === 'true' ||\n process.env.TERM_PROGRAM === 'windsurf',\n platform: 'Windsurf',\n },\n {\n check: () =>\n process.env.TRAE === 'true' || process.env.TERM_PROGRAM === 'trae',\n platform: 'Trae',\n },\n { check: () => process.env.TRAE_CN === 'true', platform: 'TraeCN' },\n {\n check: () =>\n process.env.VSCODE === 'true' || process.env.TERM_PROGRAM === 'vscode',\n platform: 'VSCode',\n },\n { check: () => process.env.OPENCODE === 'true', platform: 'OpenCode' },\n { check: () => process.env.CLAUDE === 'true', platform: 'Claude' },\n {\n check: () =>\n process.env.GITHUB_ACTIONS === 'true' || !!process.env.GITHUB_WORKSPACE,\n platform: 'GitHub',\n },\n];\n\nexport const getDetectedPlatform = (): Platform | undefined =>\n PLATFORM_CHECKS.find(({ check }) => check())?.platform;\n\nexport const initSkills = async (projectRoot?: string) => {\n const root = projectRoot\n ? findProjectRoot(resolve(projectRoot))\n : findProjectRoot(process.cwd());\n\n p.intro('Initializing Intlayer skills');\n\n // Detect if running in a specific platform\n const detectedPlatform = getDetectedPlatform();\n\n const PLATFORM_OPTIONS = [\n { value: 'Cursor', label: 'Cursor', hint: '(.cursor/skills)' },\n { value: 'Windsurf', label: 'Windsurf', hint: '(.windsurf/skills)' },\n { value: 'Trae', label: 'Trae', hint: '(.trae/skills)' },\n { value: 'TraeCN', label: 'Trae CN', hint: '(.trae/skills)' },\n { value: 'VSCode', label: 'VS Code', hint: '(.github/skills)' },\n { value: 'OpenCode', label: 'OpenCode', hint: '(.opencode/skills)' },\n { value: 'Claude', label: 'Claude Code', hint: '(.claude/skills)' },\n {\n value: 'GitHub',\n label: 'GitHub Copilot Workspace',\n hint: '(.github/skills)',\n },\n { value: 'Antigravity', label: 'Antigravity', hint: '(.agent/skills)' },\n { value: 'Augment', label: 'Augment', hint: '(.augment/skills)' },\n { value: 'OpenClaw', label: 'OpenClaw', hint: '(skills)' },\n { value: 'Cline', label: 'Cline', hint: '(.cline/skills)' },\n { value: 'CodeBuddy', label: 'CodeBuddy', hint: '(.codebuddy/skills)' },\n {\n value: 'CommandCode',\n label: 'Command Code',\n hint: '(.commandcode/skills)',\n },\n { value: 'Continue', label: 'Continue', hint: '(.continue/skills)' },\n { value: 'Crush', label: 'Crush', hint: '(.crush/skills)' },\n { value: 'Droid', label: 'Droid', hint: '(.factory/skills)' },\n { value: 'Goose', label: 'Goose', hint: '(.goose/skills)' },\n { value: 'IFlow', label: 'iFlow CLI', hint: '(.iflow/skills)' },\n { value: 'Junie', label: 'Junie', hint: '(.junie/skills)' },\n { value: 'KiloCode', label: 'Kilo Code', hint: '(.kilocode/skills)' },\n { value: 'Kiro', label: 'Kiro CLI', hint: '(.kiro/skills)' },\n { value: 'Kode', label: 'Kode', hint: '(.kode/skills)' },\n { value: 'MCPJam', label: 'MCPJam', hint: '(.mcpjam/skills)' },\n { value: 'MistralVibe', label: 'Mistral Vibe', hint: '(.vibe/skills)' },\n { value: 'Mux', label: 'Mux', hint: '(.mux/skills)' },\n { value: 'OpenHands', label: 'OpenHands', hint: '(.openhands/skills)' },\n { value: 'Pi', label: 'Pi', hint: '(.pi/skills)' },\n { value: 'Qoder', label: 'Qoder', hint: '(.qoder/skills)' },\n { value: 'Qwen', label: 'Qwen Code', hint: '(.qwen/skills)' },\n { value: 'RooCode', label: 'Roo Code', hint: '(.roo/skills)' },\n { value: 'Zencoder', label: 'Zencoder', hint: '(.zencoder/skills)' },\n { value: 'Neovate', label: 'Neovate', hint: '(.neovate/skills)' },\n { value: 'Pochi', label: 'Pochi', hint: '(.pochi/skills)' },\n { value: 'Other', label: 'Other', hint: '(skills)' },\n ] as { value: Platform; label: string; hint: string }[];\n\n // Confirm or choose platforms\n const prompt = new AutoComplete({\n name: 'platforms',\n message: 'Which platforms are you using?',\n limit: 10,\n initial: detectedPlatform\n ? PLATFORM_OPTIONS.findIndex((p) => p.value === detectedPlatform)\n : undefined,\n multiple: true,\n choices: PLATFORM_OPTIONS.map((p) => ({\n name: p.value,\n message: p.label,\n hint: p.hint,\n })),\n });\n\n let platforms: Platform[];\n try {\n platforms = (await prompt.run()) as Platform[];\n } catch (error) {\n p.cancel('Operation cancelled');\n return;\n }\n\n if (platforms.length === 0) {\n p.log.warn('No platform selected. Nothing to install.');\n return;\n }\n\n // Detect framework skills\n let dependencies: Record<string, string> = {};\n try {\n const packageJsonPath = join(root, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n }\n } catch {\n // Ignore errors reading package.json\n }\n\n const initialValues: (keyof typeof SKILLS_METADATA)[] = [\n 'Usage',\n 'Config',\n 'Content',\n 'RemoteContent',\n ];\n\n if (dependencies.react || dependencies.next) {\n initialValues.push('React');\n }\n if (dependencies.next) {\n initialValues.push('NextJS');\n }\n if (dependencies.preact) {\n initialValues.push('Preact');\n }\n if (dependencies['solid-js']) {\n initialValues.push('Solid');\n }\n if (dependencies.vue || dependencies.nuxt) {\n initialValues.push('Vue');\n }\n if (dependencies.svelte || dependencies['@sveltejs/kit']) {\n initialValues.push('Svelte');\n }\n if (dependencies.astro) {\n initialValues.push('Astro');\n }\n\n // Show list of available skills and allow selecting multiple\n const selectedSkills = (await p.multiselect({\n message: 'Select the documentation skills to provide to your AI:',\n initialValues,\n options: SKILLS.map((skill) => ({\n value: skill,\n label: skill,\n hint: SKILLS_METADATA[skill],\n })),\n })) as (keyof typeof SKILLS_METADATA)[];\n\n if (p.isCancel(selectedSkills)) {\n p.cancel('Operation cancelled');\n return;\n }\n\n if (selectedSkills.length === 0) {\n p.log.warn('No skills selected. Nothing to install.');\n return;\n }\n\n // Call installSkills for each platform\n const s = p.spinner();\n s.start('Installing skills...');\n try {\n const results: string[] = [];\n for (const platform of platforms) {\n const result = await installSkills(root, platform, selectedSkills);\n results.push(result);\n }\n s.stop('Skills installed successfully');\n\n // Show success messages\n for (const result of results) {\n p.note(result, 'Success');\n }\n } catch (error) {\n s.stop('Failed to install skills');\n p.log.error(String(error));\n }\n\n p.outro('Intlayer skills initialization complete');\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.mjs","names":[],"sources":["../../src/init.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport * as p from '@clack/prompts';\nimport {\n initIntlayer,\n installSkills,\n type Platform,\n SKILLS,\n SKILLS_METADATA,\n} from '@intlayer/chokidar/cli';\n// @ts-ignore\nimport { AutoComplete } from 'enquirer';\n\nconst findProjectRoot = (startDir: string) => {\n let currentDir = startDir;\n\n while (currentDir !== resolve(currentDir, '..')) {\n if (existsSync(join(currentDir, 'package.json'))) {\n return currentDir;\n }\n currentDir = resolve(currentDir, '..');\n }\n\n // If no package.json is found, return the start directory.\n // The initIntlayer function will handle the missing package.json error.\n return startDir;\n};\n\nexport const init = async (projectRoot?: string) => {\n const root = projectRoot\n ? findProjectRoot(resolve(projectRoot))\n : findProjectRoot(process.cwd());\n\n await initIntlayer(root);\n};\n\nconst PLATFORM_CHECKS: Array<{ check: () => boolean; platform: Platform }> = [\n {\n check: () =>\n process.env.CURSOR === 'true' || process.env.TERM_PROGRAM === 'cursor',\n platform: 'Cursor',\n },\n {\n check: () =>\n process.env.WINDSURF === 'true' ||\n process.env.TERM_PROGRAM === 'windsurf',\n platform: 'Windsurf',\n },\n {\n check: () =>\n process.env.TRAE === 'true' || process.env.TERM_PROGRAM === 'trae',\n platform: 'Trae',\n },\n { check: () => process.env.TRAE_CN === 'true', platform: 'TraeCN' },\n {\n check: () =>\n process.env.VSCODE === 'true' || process.env.TERM_PROGRAM === 'vscode',\n platform: 'VSCode',\n },\n { check: () => process.env.OPENCODE === 'true', platform: 'OpenCode' },\n { check: () => process.env.CLAUDE === 'true', platform: 'Claude' },\n {\n check: () =>\n process.env.GITHUB_ACTIONS === 'true' || !!process.env.GITHUB_WORKSPACE,\n platform: 'GitHub',\n },\n];\n\nexport const getDetectedPlatform = (): Platform | undefined =>\n PLATFORM_CHECKS.find(({ check }) => check())?.platform;\n\nexport const initSkills = async (projectRoot?: string) => {\n const root = projectRoot\n ? findProjectRoot(resolve(projectRoot))\n : findProjectRoot(process.cwd());\n\n p.intro('Initializing Intlayer skills');\n\n // Detect if running in a specific platform\n const detectedPlatform = getDetectedPlatform();\n\n const PLATFORM_OPTIONS = [\n { value: 'Cursor', label: 'Cursor', hint: '(.cursor/skills)' },\n { value: 'Windsurf', label: 'Windsurf', hint: '(.windsurf/skills)' },\n { value: 'Trae', label: 'Trae', hint: '(.trae/skills)' },\n { value: 'TraeCN', label: 'Trae CN', hint: '(.trae/skills)' },\n { value: 'VSCode', label: 'VS Code', hint: '(.github/skills)' },\n { value: 'OpenCode', label: 'OpenCode', hint: '(.opencode/skills)' },\n { value: 'Claude', label: 'Claude Code', hint: '(.claude/skills)' },\n {\n value: 'GitHub',\n label: 'GitHub Copilot Workspace',\n hint: '(.github/skills)',\n },\n { value: 'Antigravity', label: 'Antigravity', hint: '(.agent/skills)' },\n { value: 'Augment', label: 'Augment', hint: '(.augment/skills)' },\n { value: 'OpenClaw', label: 'OpenClaw', hint: '(skills)' },\n { value: 'Cline', label: 'Cline', hint: '(.cline/skills)' },\n { value: 'CodeBuddy', label: 'CodeBuddy', hint: '(.codebuddy/skills)' },\n {\n value: 'CommandCode',\n label: 'Command Code',\n hint: '(.commandcode/skills)',\n },\n { value: 'Continue', label: 'Continue', hint: '(.continue/skills)' },\n { value: 'Crush', label: 'Crush', hint: '(.crush/skills)' },\n { value: 'Droid', label: 'Droid', hint: '(.factory/skills)' },\n { value: 'Goose', label: 'Goose', hint: '(.goose/skills)' },\n { value: 'IFlow', label: 'iFlow CLI', hint: '(.iflow/skills)' },\n { value: 'Junie', label: 'Junie', hint: '(.junie/skills)' },\n { value: 'KiloCode', label: 'Kilo Code', hint: '(.kilocode/skills)' },\n { value: 'Kiro', label: 'Kiro CLI', hint: '(.kiro/skills)' },\n { value: 'Kode', label: 'Kode', hint: '(.kode/skills)' },\n { value: 'MCPJam', label: 'MCPJam', hint: '(.mcpjam/skills)' },\n { value: 'MistralVibe', label: 'Mistral Vibe', hint: '(.vibe/skills)' },\n { value: 'Mux', label: 'Mux', hint: '(.mux/skills)' },\n { value: 'OpenHands', label: 'OpenHands', hint: '(.openhands/skills)' },\n { value: 'Pi', label: 'Pi', hint: '(.pi/skills)' },\n { value: 'Qoder', label: 'Qoder', hint: '(.qoder/skills)' },\n { value: 'Qwen', label: 'Qwen Code', hint: '(.qwen/skills)' },\n { value: 'RooCode', label: 'Roo Code', hint: '(.roo/skills)' },\n { value: 'Zencoder', label: 'Zencoder', hint: '(.zencoder/skills)' },\n { value: 'Neovate', label: 'Neovate', hint: '(.neovate/skills)' },\n { value: 'Pochi', label: 'Pochi', hint: '(.pochi/skills)' },\n { value: 'Other', label: 'Other', hint: '(skills)' },\n ] as { value: Platform; label: string; hint: string }[];\n\n // Confirm or choose platforms\n const prompt = new AutoComplete({\n name: 'platforms',\n message: 'Which platforms are you using?',\n limit: 10,\n initial: detectedPlatform\n ? PLATFORM_OPTIONS.findIndex((p) => p.value === detectedPlatform)\n : undefined,\n multiple: true,\n choices: PLATFORM_OPTIONS.map((p) => ({\n name: p.value,\n message: p.label,\n hint: p.hint,\n })),\n });\n\n let platforms: Platform[];\n try {\n platforms = (await prompt.run()) as Platform[];\n } catch (error) {\n p.cancel('Operation cancelled');\n return;\n }\n\n if (platforms.length === 0) {\n p.log.warn('No platform selected. Nothing to install.');\n return;\n }\n\n // Detect framework skills\n let dependencies: Record<string, string> = {};\n try {\n const packageJsonPath = join(root, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n }\n } catch {\n // Ignore errors reading package.json\n }\n\n const initialValues: (keyof typeof SKILLS_METADATA)[] = [\n 'Usage',\n 'Config',\n 'Content',\n 'RemoteContent',\n ];\n\n if (dependencies.react || dependencies.next) {\n initialValues.push('React');\n }\n if (dependencies.next) {\n initialValues.push('NextJS');\n }\n if (dependencies.preact) {\n initialValues.push('Preact');\n }\n if (dependencies['solid-js']) {\n initialValues.push('Solid');\n }\n if (dependencies.vue || dependencies.nuxt) {\n initialValues.push('Vue');\n }\n if (dependencies.svelte || dependencies['@sveltejs/kit']) {\n initialValues.push('Svelte');\n }\n if (dependencies.astro) {\n initialValues.push('Astro');\n }\n\n // Show list of available skills and allow selecting multiple\n const selectedSkills = (await p.multiselect({\n message: 'Select the documentation skills to provide to your AI:',\n initialValues,\n options: SKILLS.map((skill) => ({\n value: skill,\n label: skill,\n hint: SKILLS_METADATA[skill],\n })),\n })) as (keyof typeof SKILLS_METADATA)[];\n\n if (p.isCancel(selectedSkills)) {\n p.cancel('Operation cancelled');\n return;\n }\n\n if (selectedSkills.length === 0) {\n p.log.warn('No skills selected. Nothing to install.');\n return;\n }\n\n // Call installSkills for each platform\n const s = p.spinner();\n s.start('Installing skills...');\n try {\n const results: string[] = [];\n for (const platform of platforms) {\n const result = await installSkills(root, platform, selectedSkills);\n results.push(result);\n }\n s.stop('Skills installed successfully');\n\n // Show success messages\n for (const result of results) {\n p.note(result, 'Success');\n }\n } catch (error) {\n s.stop('Failed to install skills');\n p.log.error(String(error));\n }\n\n p.outro('Intlayer skills initialization complete');\n};\n"],"mappings":"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"}
|
|
@@ -1,39 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { colon, colorizeKey, colorizeNumber, getAppLogger, getConfiguration } from "@intlayer/config";
|
|
3
|
-
import { relative } from "node:path";
|
|
4
|
-
import { getUnmergedDictionaries } from "@intlayer/unmerged-dictionaries-entry";
|
|
5
|
-
|
|
6
|
-
//#region src/listContentDeclaration.ts
|
|
7
|
-
const listContentDeclarationRows = (options) => {
|
|
8
|
-
const config = getConfiguration(options?.configOptions);
|
|
9
|
-
const unmergedDictionariesRecord = getUnmergedDictionaries(config);
|
|
10
|
-
return Object.values(unmergedDictionariesRecord).flat().map((dictionary) => ({
|
|
11
|
-
key: dictionary.key ?? "",
|
|
12
|
-
path: options?.absolute ? dictionary.filePath ?? "Remote" : relative(config.content.baseDir, dictionary.filePath ?? "Remote")
|
|
13
|
-
}));
|
|
14
|
-
};
|
|
15
|
-
const listContentDeclaration = (options) => {
|
|
16
|
-
const rows = listContentDeclarationRows(options);
|
|
17
|
-
if (options?.json) {
|
|
18
|
-
console.log(JSON.stringify(rows));
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
const appLogger = getAppLogger(getConfiguration(options?.configOptions));
|
|
22
|
-
const lines = rows.map((row) => [
|
|
23
|
-
colon(` - ${colorizeKey(row.key)}`, {
|
|
24
|
-
colSize: rows.map((row) => row.key.length),
|
|
25
|
-
maxSize: 60
|
|
26
|
-
}),
|
|
27
|
-
" - ",
|
|
28
|
-
formatPath(row.path)
|
|
29
|
-
].join(""));
|
|
30
|
-
appLogger(`Content declaration files:`);
|
|
31
|
-
lines.forEach((line) => {
|
|
32
|
-
appLogger(line, { level: "info" });
|
|
33
|
-
});
|
|
34
|
-
appLogger(`Total content declaration files: ${colorizeNumber(rows.length)}`);
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
//#endregion
|
|
38
|
-
export { listContentDeclaration, listContentDeclarationRows };
|
|
1
|
+
import{formatPath as e}from"@intlayer/chokidar/utils";import{getConfiguration as t}from"@intlayer/config/node";import{relative as n}from"node:path";import{colon as r,colorizeKey as i,colorizeNumber as a,getAppLogger as o}from"@intlayer/config/logger";import{getUnmergedDictionaries as s}from"@intlayer/unmerged-dictionaries-entry";const c=e=>{let r=t(e?.configOptions),i=s(r);return Object.values(i).flat().map(t=>({key:t.key??``,path:e?.absolute?t.filePath??`Remote`:n(r.content.baseDir,t.filePath??`Remote`)}))},l=n=>{let s=c(n);if(n?.json){console.log(JSON.stringify(s));return}let l=o(t(n?.configOptions)),u=s.map(t=>[r(` - ${i(t.key)}`,{colSize:s.map(e=>e.key.length),maxSize:60}),` - `,e(t.path)].join(``));l(`Content declaration files:`),u.forEach(e=>{l(e,{level:`info`})}),l(`Total content declaration files: ${a(s.length)}`)};export{l as listContentDeclaration,c as listContentDeclarationRows};
|
|
39
2
|
//# sourceMappingURL=listContentDeclaration.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listContentDeclaration.mjs","names":[],"sources":["../../src/listContentDeclaration.ts"],"sourcesContent":["import { relative } from 'node:path';\nimport { formatPath } from '@intlayer/chokidar';\nimport {\n colon,\n colorizeKey,\n colorizeNumber,\n type GetConfigurationOptions,\n
|
|
1
|
+
{"version":3,"file":"listContentDeclaration.mjs","names":[],"sources":["../../src/listContentDeclaration.ts"],"sourcesContent":["import { relative } from 'node:path';\nimport { formatPath } from '@intlayer/chokidar/utils';\nimport {\n colon,\n colorizeKey,\n colorizeNumber,\n getAppLogger,\n} from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\n\ntype ListContentDeclarationOptions = {\n configOptions?: GetConfigurationOptions;\n json?: boolean;\n absolute?: boolean;\n};\n\nexport const listContentDeclarationRows = (\n options?: ListContentDeclarationOptions\n) => {\n const config = getConfiguration(options?.configOptions);\n\n const unmergedDictionariesRecord = getUnmergedDictionaries(config);\n\n const rows = Object.values(unmergedDictionariesRecord)\n .flat()\n .map((dictionary) => ({\n key: dictionary.key ?? '',\n path: options?.absolute\n ? (dictionary.filePath ?? 'Remote')\n : relative(config.content.baseDir, dictionary.filePath ?? 'Remote'),\n }));\n return rows;\n};\n\nexport const listContentDeclaration = (\n options?: ListContentDeclarationOptions\n) => {\n const rows = listContentDeclarationRows(options);\n\n if (options?.json) {\n console.log(JSON.stringify(rows));\n return;\n }\n\n const config = getConfiguration(options?.configOptions);\n const appLogger = getAppLogger(config);\n\n const lines = rows.map((row) =>\n [\n colon(` - ${colorizeKey(row.key)}`, {\n colSize: rows.map((row) => row.key.length),\n maxSize: 60,\n }),\n ' - ',\n formatPath(row.path),\n ].join('')\n );\n\n appLogger(`Content declaration files:`);\n\n lines.forEach((line) => {\n appLogger(line, {\n level: 'info',\n });\n });\n\n appLogger(`Total content declaration files: ${colorizeNumber(rows.length)}`);\n};\n"],"mappings":"2UAoBA,MAAa,EACX,GACG,CACH,IAAM,EAAS,EAAiB,GAAS,cAAc,CAEjD,EAA6B,EAAwB,EAAO,CAUlE,OARa,OAAO,OAAO,EAA2B,CACnD,MAAM,CACN,IAAK,IAAgB,CACpB,IAAK,EAAW,KAAO,GACvB,KAAM,GAAS,SACV,EAAW,UAAY,SACxB,EAAS,EAAO,QAAQ,QAAS,EAAW,UAAY,SAAS,CACtE,EAAE,EAIM,EACX,GACG,CACH,IAAM,EAAO,EAA2B,EAAQ,CAEhD,GAAI,GAAS,KAAM,CACjB,QAAQ,IAAI,KAAK,UAAU,EAAK,CAAC,CACjC,OAIF,IAAM,EAAY,EADH,EAAiB,GAAS,cAAc,CACjB,CAEhC,EAAQ,EAAK,IAAK,GACtB,CACE,EAAM,MAAM,EAAY,EAAI,IAAI,GAAI,CAClC,QAAS,EAAK,IAAK,GAAQ,EAAI,IAAI,OAAO,CAC1C,QAAS,GACV,CAAC,CACF,MACA,EAAW,EAAI,KAAK,CACrB,CAAC,KAAK,GAAG,CACX,CAED,EAAU,6BAA6B,CAEvC,EAAM,QAAS,GAAS,CACtB,EAAU,EAAM,CACd,MAAO,OACR,CAAC,EACF,CAEF,EAAU,oCAAoC,EAAe,EAAK,OAAO,GAAG"}
|
|
@@ -1,27 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { relative } from "node:path";
|
|
3
|
-
|
|
4
|
-
//#region src/listProjects.ts
|
|
5
|
-
const listProjectsCommand = async (options) => {
|
|
6
|
-
const { searchDir, projectsPath } = await listProjects(options);
|
|
7
|
-
const projectsRelativePath = projectsPath.map((projectPath) => options?.absolute ? projectPath : relative(searchDir, projectPath)).map((projectPath) => projectPath === "" ? "." : projectPath);
|
|
8
|
-
if (options?.json) {
|
|
9
|
-
console.dir(projectsRelativePath, {
|
|
10
|
-
depth: null,
|
|
11
|
-
arrayLimit: null
|
|
12
|
-
});
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (projectsPath.length === 0) {
|
|
16
|
-
console.log("No Intlayer projects found.");
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
console.log(`Found ${projectsPath.length} Intlayer project(s):\n`);
|
|
20
|
-
projectsPath.forEach((project) => {
|
|
21
|
-
console.log(` - ${project}`);
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
export { listProjectsCommand };
|
|
1
|
+
import{relative as e}from"node:path";import{listProjects as t}from"@intlayer/chokidar/cli";const n=async n=>{let{searchDir:r,projectsPath:i}=await t(n),a=i.map(t=>n?.absolute?t:e(r,t)).map(e=>e===``?`.`:e);if(n?.json){console.dir(a,{depth:null,arrayLimit:null});return}if(i.length===0){console.log(`No Intlayer projects found.`);return}console.log(`Found ${i.length} Intlayer project(s):\n`),i.forEach(e=>{console.log(` - ${e}`)})};export{n as listProjectsCommand};
|
|
27
2
|
//# sourceMappingURL=listProjects.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listProjects.mjs","names":[],"sources":["../../src/listProjects.ts"],"sourcesContent":["import { relative } from 'node:path';\nimport type
|
|
1
|
+
{"version":3,"file":"listProjects.mjs","names":[],"sources":["../../src/listProjects.ts"],"sourcesContent":["import { relative } from 'node:path';\nimport { type ListProjectsOptions, listProjects } from '@intlayer/chokidar/cli';\n\nexport type ListProjectsCommandOptions = ListProjectsOptions & {\n json?: boolean;\n absolute?: boolean;\n};\n\nexport const listProjectsCommand = async (\n options?: ListProjectsCommandOptions\n) => {\n const { searchDir, projectsPath } = await listProjects(options);\n\n const projectsRelativePath = projectsPath\n .map((projectPath) =>\n options?.absolute ? projectPath : relative(searchDir, projectPath)\n )\n .map((projectPath) => (projectPath === '' ? '.' : projectPath));\n\n if (options?.json) {\n console.dir(projectsRelativePath, { depth: null, arrayLimit: null });\n return;\n }\n\n if (projectsPath.length === 0) {\n console.log('No Intlayer projects found.');\n return;\n }\n\n console.log(`Found ${projectsPath.length} Intlayer project(s):\\n`);\n projectsPath.forEach((project) => {\n console.log(` - ${project}`);\n });\n};\n"],"mappings":"2FAQA,MAAa,EAAsB,KACjC,IACG,CACH,GAAM,CAAE,YAAW,gBAAiB,MAAM,EAAa,EAAQ,CAEzD,EAAuB,EAC1B,IAAK,GACJ,GAAS,SAAW,EAAc,EAAS,EAAW,EAAY,CACnE,CACA,IAAK,GAAiB,IAAgB,GAAK,IAAM,EAAa,CAEjE,GAAI,GAAS,KAAM,CACjB,QAAQ,IAAI,EAAsB,CAAE,MAAO,KAAM,WAAY,KAAM,CAAC,CACpE,OAGF,GAAI,EAAa,SAAW,EAAG,CAC7B,QAAQ,IAAI,8BAA8B,CAC1C,OAGF,QAAQ,IAAI,SAAS,EAAa,OAAO,yBAAyB,CAClE,EAAa,QAAS,GAAY,CAChC,QAAQ,IAAI,OAAO,IAAU,EAC7B"}
|
package/dist/esm/liveSync.mjs
CHANGED
|
@@ -1,150 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { getAppLogger, getConfiguration } from "@intlayer/config";
|
|
4
|
-
import { createServer } from "node:http";
|
|
5
|
-
import { getUnmergedDictionaries } from "@intlayer/unmerged-dictionaries-entry";
|
|
6
|
-
import { getLocalizedContent } from "@intlayer/core";
|
|
7
|
-
import { getDictionaries } from "@intlayer/dictionaries-entry";
|
|
8
|
-
import packageJson from "@intlayer/config/package.json";
|
|
9
|
-
|
|
10
|
-
//#region src/liveSync.ts
|
|
11
|
-
const writeDictionary = async (dictionary, configuration) => {
|
|
12
|
-
getAppLogger(configuration)(`Writing dictionary ${dictionary.key}`);
|
|
13
|
-
await buildDictionary([dictionary], configuration);
|
|
14
|
-
};
|
|
15
|
-
const liveSync = async (options) => {
|
|
16
|
-
const configuration = getConfiguration(options?.configOptions);
|
|
17
|
-
const appLogger = getAppLogger(configuration);
|
|
18
|
-
const { liveSyncPort, liveSyncURL } = configuration.editor;
|
|
19
|
-
let parallelProcess = null;
|
|
20
|
-
let eventListener = null;
|
|
21
|
-
if (options?.with) {
|
|
22
|
-
parallelProcess = runParallel(options.with);
|
|
23
|
-
parallelProcess.result.catch(() => {});
|
|
24
|
-
}
|
|
25
|
-
if (configuration.editor.liveSync && configuration.editor.backendURL && configuration.editor.clientId && configuration.editor.clientSecret) {
|
|
26
|
-
eventListener = new IntlayerEventListener(configuration);
|
|
27
|
-
eventListener.onConnectionOpen = () => {
|
|
28
|
-
appLogger("Live sync connection established");
|
|
29
|
-
};
|
|
30
|
-
eventListener.onConnectionError = (error) => {
|
|
31
|
-
const errorEvent = error;
|
|
32
|
-
appLogger(`Live sync connection error: ${errorEvent.message ?? "Unknown error"}`, { level: "warn" });
|
|
33
|
-
if (errorEvent.message?.includes("terminated") || errorEvent.message?.includes("closed")) appLogger("Server connection was terminated, automatic reconnection will be attempted...", { level: "info" });
|
|
34
|
-
};
|
|
35
|
-
eventListener.onDictionaryAdded = (dictionary) => writeDictionary(dictionary, configuration);
|
|
36
|
-
eventListener.onDictionaryChange = (dictionary) => writeDictionary(dictionary, configuration);
|
|
37
|
-
eventListener.onDictionaryDeleted = (dictionary) => writeDictionary(dictionary, configuration);
|
|
38
|
-
try {
|
|
39
|
-
await eventListener.initialize();
|
|
40
|
-
} catch (error) {
|
|
41
|
-
appLogger("Failed to initialize IntlayerEventListener:", { level: "error" });
|
|
42
|
-
appLogger(`Error: ${error instanceof Error ? error.message : String(error)}`, { level: "error" });
|
|
43
|
-
}
|
|
44
|
-
} else if (!configuration.editor.liveSync) appLogger("Hot reload is disabled. Please enable it in the configuration (editor.liveSync).");
|
|
45
|
-
else if (!configuration.editor.clientId || !configuration.editor.clientSecret) appLogger("Missing client credentials for hot reload. Please configure clientId and clientSecret");
|
|
46
|
-
const server = createServer(async (req, res) => {
|
|
47
|
-
if (req.method === "OPTIONS") {
|
|
48
|
-
res.writeHead(200, {
|
|
49
|
-
"Access-Control-Allow-Origin": "*",
|
|
50
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
51
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization"
|
|
52
|
-
});
|
|
53
|
-
res.end();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (req.url?.startsWith("/dictionaries")) {
|
|
57
|
-
res.writeHead(200, {
|
|
58
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
59
|
-
"Cache-Control": "no-store",
|
|
60
|
-
"Access-Control-Allow-Origin": "*",
|
|
61
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
62
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization"
|
|
63
|
-
});
|
|
64
|
-
const dictionaries = getDictionaries(configuration);
|
|
65
|
-
if (req.url.startsWith("/dictionaries/")) {
|
|
66
|
-
const [key, locale] = decodeURIComponent(req.url).slice(14).split("/");
|
|
67
|
-
const dictionary = dictionaries[key] ?? null;
|
|
68
|
-
if (locale) {
|
|
69
|
-
const sourceLocaleContent = getLocalizedContent(dictionary.content, locale, {
|
|
70
|
-
dictionaryKey: key,
|
|
71
|
-
keyPath: []
|
|
72
|
-
});
|
|
73
|
-
res.end(JSON.stringify(sourceLocaleContent));
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
res.end(JSON.stringify(dictionary));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
res.end(JSON.stringify(dictionaries));
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
if (req.url?.startsWith("/unmerged_dictionaries")) {
|
|
83
|
-
res.writeHead(200, {
|
|
84
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
85
|
-
"Cache-Control": "no-store",
|
|
86
|
-
"Access-Control-Allow-Origin": "*",
|
|
87
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
88
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization"
|
|
89
|
-
});
|
|
90
|
-
const unmergedDictionaries = getUnmergedDictionaries(configuration);
|
|
91
|
-
if (req.url.startsWith("/unmerged_dictionaries/")) {
|
|
92
|
-
const one = unmergedDictionaries[decodeURIComponent(req.url.slice(23))] ?? null;
|
|
93
|
-
res.end(JSON.stringify(one));
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
res.end(JSON.stringify(unmergedDictionaries));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (req.url === "/configuration") {
|
|
100
|
-
res.writeHead(200, {
|
|
101
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
102
|
-
"Cache-Control": "no-store",
|
|
103
|
-
"Access-Control-Allow-Origin": "*",
|
|
104
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
105
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization"
|
|
106
|
-
});
|
|
107
|
-
res.end(JSON.stringify(configuration));
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (req.url === "/health") {
|
|
111
|
-
res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
|
|
112
|
-
res.end(JSON.stringify({ status: "ok" }));
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
res.end("Not found");
|
|
116
|
-
});
|
|
117
|
-
const getLiveSyncParam = () => {
|
|
118
|
-
if (!configuration.editor.liveSync) return "\x1B[31m✗ Disabled\x1B[0m";
|
|
119
|
-
return "\x1B[32m✓ Enabled\x1B[0m";
|
|
120
|
-
};
|
|
121
|
-
server.listen(liveSyncPort, () => {
|
|
122
|
-
console.log(`
|
|
123
|
-
\x1b[1;90mINTLAYER v${packageJson.version}\x1b[0m
|
|
1
|
+
import{IntlayerEventListener as e}from"./IntlayerEventListener.mjs";import{runParallel as t}from"@intlayer/chokidar/utils";import{getConfiguration as n}from"@intlayer/config/node";import{getAppLogger as r}from"@intlayer/config/logger";import{createServer as i}from"node:http";import{buildDictionary as a}from"@intlayer/chokidar/build";import{getUnmergedDictionaries as o}from"@intlayer/unmerged-dictionaries-entry";import{getLocalizedContent as s}from"@intlayer/core/plugins";import{getDictionaries as c}from"@intlayer/dictionaries-entry";import l from"@intlayer/config/package.json";const u=async(e,t)=>{r(t)(`Writing dictionary ${e.key}`),await a([e],t)},d=async a=>{let d=n(a?.configOptions),f=r(d),{liveSyncPort:p,liveSyncURL:m}=d.editor,h=null,g=null;if(a?.with&&(h=t(a.with),h.result.catch(()=>{})),d.editor.liveSync&&d.editor.backendURL&&d.editor.clientId&&d.editor.clientSecret){g=new e(d),g.onConnectionOpen=()=>{f(`Live sync connection established`)},g.onConnectionError=e=>{let t=e;f(`Live sync connection error: ${t.message??`Unknown error`}`,{level:`warn`}),(t.message?.includes(`terminated`)||t.message?.includes(`closed`))&&f(`Server connection was terminated, automatic reconnection will be attempted...`,{level:`info`})},g.onDictionaryAdded=e=>u(e,d),g.onDictionaryChange=e=>u(e,d),g.onDictionaryDeleted=e=>u(e,d);try{await g.initialize()}catch(e){f(`Failed to initialize IntlayerEventListener:`,{level:`error`}),f(`Error: ${e instanceof Error?e.message:String(e)}`,{level:`error`})}}else d.editor.liveSync?(!d.editor.clientId||!d.editor.clientSecret)&&f(`Missing client credentials for hot reload. Please configure clientId and clientSecret`):f(`Hot reload is disabled. Please enable it in the configuration (editor.liveSync).`);let _=i(async(e,t)=>{if(e.method===`OPTIONS`){t.writeHead(200,{"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET, POST, PUT, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization`}),t.end();return}if(e.url?.startsWith(`/dictionaries`)){t.writeHead(200,{"Content-Type":`application/json; charset=utf-8`,"Cache-Control":`no-store`,"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET, POST, PUT, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization`});let n=c(d);if(e.url.startsWith(`/dictionaries/`)){let[r,i]=decodeURIComponent(e.url).slice(14).split(`/`),a=n[r]??null;if(i){let e=s(a.content,i,{dictionaryKey:r,keyPath:[]});t.end(JSON.stringify(e));return}t.end(JSON.stringify(a));return}t.end(JSON.stringify(n));return}if(e.url?.startsWith(`/unmerged_dictionaries`)){t.writeHead(200,{"Content-Type":`application/json; charset=utf-8`,"Cache-Control":`no-store`,"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET, POST, PUT, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization`});let n=o(d);if(e.url.startsWith(`/unmerged_dictionaries/`)){let r=n[decodeURIComponent(e.url.slice(23))]??null;t.end(JSON.stringify(r));return}t.end(JSON.stringify(n));return}if(e.url===`/configuration`){t.writeHead(200,{"Content-Type":`application/json; charset=utf-8`,"Cache-Control":`no-store`,"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET, POST, PUT, DELETE, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type, Authorization`}),t.end(JSON.stringify(d));return}if(e.url===`/health`){t.writeHead(200,{"Content-Type":`application/json; charset=utf-8`}),t.end(JSON.stringify({status:`ok`}));return}t.end(`Not found`)}),v=()=>d.editor.liveSync?`\x1B[32m✓ Enabled\x1B[0m`:`\x1B[31m✗ Disabled\x1B[0m`;_.listen(p,()=>{console.log(`
|
|
2
|
+
\x1b[1;90mINTLAYER v${l.version}\x1b[0m
|
|
124
3
|
|
|
125
|
-
Live server running at: \x1b[90m${
|
|
126
|
-
- Backend URL: \x1b[90m${
|
|
127
|
-
- Live sync: ${
|
|
128
|
-
- Parallel process: ${
|
|
129
|
-
- Access key: ${
|
|
130
|
-
`);
|
|
131
|
-
});
|
|
132
|
-
const cleanup = () => {
|
|
133
|
-
if (eventListener) {
|
|
134
|
-
appLogger("Closing SSE connection...");
|
|
135
|
-
eventListener.cleanup();
|
|
136
|
-
}
|
|
137
|
-
if (parallelProcess) parallelProcess.kill();
|
|
138
|
-
server.close(() => {
|
|
139
|
-
appLogger("Live sync server stopped");
|
|
140
|
-
process.exit(0);
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
process.on("SIGINT", cleanup);
|
|
144
|
-
process.on("SIGTERM", cleanup);
|
|
145
|
-
process.on("exit", cleanup);
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
//#endregion
|
|
149
|
-
export { liveSync };
|
|
4
|
+
Live server running at: \x1b[90m${m}\x1b[0m
|
|
5
|
+
- Backend URL: \x1b[90m${d.editor.backendURL??`-`}\x1b[0m
|
|
6
|
+
- Live sync: ${v()}
|
|
7
|
+
- Parallel process: ${a?.with?`\x1b[90m${Array.isArray(a.with)?a.with.join(` `):a.with}\x1b[0m`:`-`}
|
|
8
|
+
- Access key: ${d.editor.clientId??`-`}
|
|
9
|
+
`)});let y=()=>{g&&(f(`Closing SSE connection...`),g.cleanup()),h&&h.kill(),_.close(()=>{f(`Live sync server stopped`),process.exit(0)})};process.on(`SIGINT`,y),process.on(`SIGTERM`,y),process.on(`exit`,y)};export{d as liveSync};
|
|
150
10
|
//# sourceMappingURL=liveSync.mjs.map
|