@intlayer/cli 8.1.2 → 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 -53
- 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 -51
- 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/listContentDeclaration.d.ts +1 -1
- package/dist/types/listContentDeclaration.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 +11 -11
package/dist/esm/init.mjs
CHANGED
|
@@ -1,318 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
-
import * as p from "@clack/prompts";
|
|
4
|
-
import { SKILLS, SKILLS_METADATA, initIntlayer, installSkills } from "@intlayer/chokidar/cli";
|
|
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/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
|
+
{"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 { listProjects } from "@intlayer/chokidar/cli";
|
|
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 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":"
|
|
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
|