@intlayer/engine 9.5.5 → 9.5.7
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/README.md +0 -1
- package/dist/cjs/_virtual/_utils_asset.cjs +1 -1
- package/dist/cjs/build.cjs +4 -4
- package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs +2 -2
- package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs +3 -3
- package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs +1 -1
- package/dist/cjs/buildIntlayerDictionary/writeNestedDictionary.cjs +3 -3
- package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs +2 -2
- package/dist/cjs/buildIntlayerDictionary/writeUnmergedDictionary.cjs +2 -2
- package/dist/cjs/cleanOutputDir.cjs +1 -1
- package/dist/cjs/cleanRemovedContentDeclaration.cjs +1 -1
- package/dist/cjs/cli.cjs +3 -3
- package/dist/cjs/createDictionaryEntryPoint/createDictionaryEntryPoint.cjs +1 -1
- package/dist/cjs/createDictionaryEntryPoint/getBuiltDictionariesPath.cjs +2 -2
- package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs +2 -2
- package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs +2 -2
- package/dist/cjs/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.cjs +2 -2
- package/dist/cjs/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.cjs +2 -2
- package/dist/cjs/createType/createModuleAugmentation.cjs +3 -3
- package/dist/cjs/createType/createType.cjs +1 -1
- package/dist/cjs/docReview/index.cjs +5 -5
- package/dist/cjs/docReview/pipeline.cjs +4 -4
- package/dist/cjs/fetchDistantDictionaries.cjs +1 -1
- package/dist/cjs/handleContentDeclarationFileChange.cjs +2 -2
- package/dist/cjs/handleUnlinkedContentDeclarationFile.cjs +1 -1
- package/dist/cjs/init/frameworkSetup/nextAppRouter/restructure.cjs +1 -1
- package/dist/cjs/init/frameworkSetup/tanstackStart/restructure.cjs +1 -1
- package/dist/cjs/init/utils/fileSystem.cjs +1 -1
- package/dist/cjs/init/utils/githubActions.cjs +1 -1
- package/dist/cjs/init/utils/packageManager.cjs +1 -1
- package/dist/cjs/initConfig/index.cjs +1 -1
- package/dist/cjs/installLSP.cjs +1 -1
- package/dist/cjs/installMCP/installMCP.cjs +1 -1
- package/dist/cjs/installSkills/index.cjs +1 -1
- package/dist/cjs/listDictionariesPath.cjs +1 -1
- package/dist/cjs/listGitFiles.cjs +1 -1
- package/dist/cjs/loadDictionaries/getIntlayerBundle.cjs +2 -2
- package/dist/cjs/loadDictionaries/index.cjs +1 -1
- package/dist/cjs/loadDictionaries/loadContentDeclaration.cjs +2 -2
- package/dist/cjs/loadDictionaries/loadDictionaries.cjs +1 -1
- package/dist/cjs/loadDictionaries/loadLocalDictionaries.cjs +1 -1
- package/dist/cjs/loadDictionaries/loadMarkdownContentDeclaration.cjs +1 -1
- package/dist/cjs/logConfigDetails.cjs +1 -1
- package/dist/cjs/prepareIntlayer.cjs +4 -4
- package/dist/cjs/scan/index.cjs +1 -1
- package/dist/cjs/scan/scanWebsite.cjs +1 -1
- package/dist/cjs/syncPluginKit/createFileAdapter.cjs +1 -1
- package/dist/cjs/syncPluginKit/index.cjs +1 -1
- package/dist/cjs/utils/buildComponentFilesList.cjs +1 -1
- package/dist/cjs/utils/contentWatcherLock.cjs +2 -2
- package/dist/cjs/utils/index.cjs +4 -4
- package/dist/cjs/utils/readDictionariesFromDisk.cjs +1 -1
- package/dist/cjs/utils/runOnce.cjs +67 -16
- package/dist/cjs/utils/runOnce.cjs.map +1 -1
- package/dist/cjs/utils/runParallel/pidTree.cjs +1 -1
- package/dist/cjs/utils/withFileLock.cjs +1 -1
- package/dist/cjs/watcher.cjs +6 -6
- package/dist/cjs/writeConfiguration/index.cjs +1 -1
- package/dist/cjs/writeContentDeclaration/processContentDeclarationContent.cjs +2 -2
- package/dist/cjs/writeContentDeclaration/transformJSFile.cjs +1 -1
- package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs +4 -4
- package/dist/cjs/writeContentDeclaration/writeJSFile.cjs +3 -3
- package/dist/cjs/writeContentDeclaration/writeMarkdownFile.cjs +1 -1
- package/dist/cjs/writeContentDeclaration/writeYamlFile.cjs +1 -1
- package/dist/cjs/writeFileIfChanged.cjs +1 -1
- package/dist/esm/_virtual/_utils_asset.mjs +1 -1
- package/dist/esm/build.mjs +4 -4
- package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs +2 -2
- package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs +3 -3
- package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs +1 -1
- package/dist/esm/buildIntlayerDictionary/writeNestedDictionary.mjs +3 -3
- package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs +2 -2
- package/dist/esm/buildIntlayerDictionary/writeUnmergedDictionary.mjs +2 -2
- package/dist/esm/cleanOutputDir.mjs +1 -1
- package/dist/esm/cleanRemovedContentDeclaration.mjs +1 -1
- package/dist/esm/cli.mjs +3 -3
- package/dist/esm/createDictionaryEntryPoint/createDictionaryEntryPoint.mjs +1 -1
- package/dist/esm/createDictionaryEntryPoint/getBuiltDictionariesPath.mjs +2 -2
- package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs +2 -2
- package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs +2 -2
- package/dist/esm/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.mjs +2 -2
- package/dist/esm/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.mjs +2 -2
- package/dist/esm/createType/createModuleAugmentation.mjs +3 -3
- package/dist/esm/createType/createType.mjs +1 -1
- package/dist/esm/docReview/index.mjs +5 -5
- package/dist/esm/docReview/pipeline.mjs +4 -4
- package/dist/esm/fetchDistantDictionaries.mjs +1 -1
- package/dist/esm/handleContentDeclarationFileChange.mjs +2 -2
- package/dist/esm/handleUnlinkedContentDeclarationFile.mjs +1 -1
- package/dist/esm/init/frameworkSetup/nextAppRouter/restructure.mjs +1 -1
- package/dist/esm/init/frameworkSetup/tanstackStart/restructure.mjs +1 -1
- package/dist/esm/init/utils/fileSystem.mjs +1 -1
- package/dist/esm/init/utils/githubActions.mjs +1 -1
- package/dist/esm/init/utils/packageManager.mjs +1 -1
- package/dist/esm/initConfig/index.mjs +1 -1
- package/dist/esm/installLSP.mjs +1 -1
- package/dist/esm/installMCP/installMCP.mjs +1 -1
- package/dist/esm/installSkills/index.mjs +1 -1
- package/dist/esm/listDictionariesPath.mjs +1 -1
- package/dist/esm/listGitFiles.mjs +1 -1
- package/dist/esm/loadDictionaries/getIntlayerBundle.mjs +2 -2
- package/dist/esm/loadDictionaries/index.mjs +1 -1
- package/dist/esm/loadDictionaries/loadContentDeclaration.mjs +2 -2
- package/dist/esm/loadDictionaries/loadDictionaries.mjs +1 -1
- package/dist/esm/loadDictionaries/loadLocalDictionaries.mjs +1 -1
- package/dist/esm/loadDictionaries/loadMarkdownContentDeclaration.mjs +1 -1
- package/dist/esm/logConfigDetails.mjs +1 -1
- package/dist/esm/prepareIntlayer.mjs +4 -4
- package/dist/esm/scan/index.mjs +1 -1
- package/dist/esm/scan/scanWebsite.mjs +1 -1
- package/dist/esm/syncPluginKit/createFileAdapter.mjs +1 -1
- package/dist/esm/syncPluginKit/index.mjs +1 -1
- package/dist/esm/utils/buildComponentFilesList.mjs +1 -1
- package/dist/esm/utils/contentWatcherLock.mjs +2 -2
- package/dist/esm/utils/index.mjs +4 -4
- package/dist/esm/utils/readDictionariesFromDisk.mjs +1 -1
- package/dist/esm/utils/runOnce.mjs +68 -17
- package/dist/esm/utils/runOnce.mjs.map +1 -1
- package/dist/esm/utils/runParallel/pidTree.mjs +1 -1
- package/dist/esm/utils/withFileLock.mjs +1 -1
- package/dist/esm/watcher.mjs +6 -6
- package/dist/esm/writeConfiguration/index.mjs +1 -1
- package/dist/esm/writeContentDeclaration/processContentDeclarationContent.mjs +2 -2
- package/dist/esm/writeContentDeclaration/transformJSFile.mjs +1 -1
- package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs +4 -4
- package/dist/esm/writeContentDeclaration/writeJSFile.mjs +3 -3
- package/dist/esm/writeContentDeclaration/writeMarkdownFile.mjs +1 -1
- package/dist/esm/writeContentDeclaration/writeYamlFile.mjs +1 -1
- package/dist/esm/writeFileIfChanged.mjs +1 -1
- package/dist/types/utils/runOnce.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { readDictionariesFromDisk } from "./utils/readDictionariesFromDisk.mjs";
|
|
2
2
|
import { writeJsonIfChanged } from "./writeJsonIfChanged.mjs";
|
|
3
3
|
import { createDictionaryEntryPoint } from "./createDictionaryEntryPoint/createDictionaryEntryPoint.mjs";
|
|
4
|
-
import { readFile, rm } from "node:fs/promises";
|
|
5
4
|
import { join, normalize, relative } from "node:path";
|
|
6
5
|
import { colorizeKey, colorizePath, getAppLogger } from "@intlayer/config/logger";
|
|
7
6
|
import fg from "fast-glob";
|
|
7
|
+
import { readFile, rm } from "node:fs/promises";
|
|
8
8
|
import { normalizePath } from "@intlayer/config/client";
|
|
9
9
|
|
|
10
10
|
//#region src/cleanRemovedContentDeclaration.ts
|
package/dist/esm/cli.mjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
+
import { logConfigDetails } from "./logConfigDetails.mjs";
|
|
2
|
+
import { detectFormatCommand } from "./detectFormatCommand.mjs";
|
|
1
3
|
import { listDictionaries, listDictionariesWithStats } from "./listDictionariesPath.mjs";
|
|
2
4
|
import { prepareIntlayer } from "./prepareIntlayer.mjs";
|
|
3
5
|
import { detectExportedComponentName } from "./writeContentDeclaration/detectExportedComponentName.mjs";
|
|
4
6
|
import { transformJSFile } from "./writeContentDeclaration/transformJSFile.mjs";
|
|
5
|
-
import { detectFormatCommand } from "./detectFormatCommand.mjs";
|
|
6
7
|
import { getContentDeclarationFileTemplate } from "./getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.mjs";
|
|
7
8
|
import { writeJSFile } from "./writeContentDeclaration/writeJSFile.mjs";
|
|
8
9
|
import { writeContentDeclaration } from "./writeContentDeclaration/writeContentDeclaration.mjs";
|
|
9
|
-
import { installLSP } from "./installLSP.mjs";
|
|
10
10
|
import { getGitRootDir, listProjects } from "./listProjects.mjs";
|
|
11
11
|
import { enableEditorInConfig, setupCmsCredentials, writeCmsCredentialsToEnv } from "./init/cms.mjs";
|
|
12
12
|
import { COMPAT_I18N_LIBRARIES, detectCompatI18nLibraries, detectPackageManager, installPackages } from "./init/utils/packageManager.mjs";
|
|
13
13
|
import { NEXT_INTLAYER_BABEL_CONFIG_CONTENT } from "./init/utils/nextCompilerBabel.mjs";
|
|
14
14
|
import { getDefaultApplicationURL, initIntlayer } from "./init/index.mjs";
|
|
15
|
+
import { installLSP } from "./installLSP.mjs";
|
|
15
16
|
import { PLATFORMS, PLATFORMS_METADATA, SKILLS, SKILLS_METADATA, getInitialSkills, installSkills } from "./installSkills/index.mjs";
|
|
16
17
|
import { installMCP } from "./installMCP/installMCP.mjs";
|
|
17
18
|
import { listGitFiles, listGitLines } from "./listGitFiles.mjs";
|
|
18
|
-
import { logConfigDetails } from "./logConfigDetails.mjs";
|
|
19
19
|
|
|
20
20
|
export { COMPAT_I18N_LIBRARIES, NEXT_INTLAYER_BABEL_CONFIG_CONTENT, PLATFORMS, PLATFORMS_METADATA, SKILLS, SKILLS_METADATA, detectCompatI18nLibraries, detectExportedComponentName, detectFormatCommand, detectPackageManager, enableEditorInConfig, getContentDeclarationFileTemplate, getDefaultApplicationURL, getGitRootDir, getInitialSkills, initIntlayer, installLSP, installMCP, installPackages, installSkills, listDictionaries, listDictionariesWithStats, listGitFiles, listGitLines, listProjects, logConfigDetails, prepareIntlayer, setupCmsCredentials, transformJSFile, writeCmsCredentialsToEnv, writeContentDeclaration, writeJSFile };
|
|
@@ -6,9 +6,9 @@ import { getBuiltDynamicDictionariesPath } from "./getBuiltDynamicDictionariesPa
|
|
|
6
6
|
import { getBuiltFetchDictionariesPath } from "./getBuiltFetchDictionariesPath.mjs";
|
|
7
7
|
import { getBuiltRemoteDictionariesPath } from "./getBuiltRemoteDictionariesPath.mjs";
|
|
8
8
|
import { getBuiltUnmergedDictionariesPath } from "./getBuiltUnmergedDictionariesPath.mjs";
|
|
9
|
-
import { mkdir } from "node:fs/promises";
|
|
10
9
|
import { resolve } from "node:path";
|
|
11
10
|
import { getConfiguration } from "@intlayer/config/node";
|
|
11
|
+
import { mkdir } from "node:fs/promises";
|
|
12
12
|
|
|
13
13
|
//#region src/createDictionaryEntryPoint/createDictionaryEntryPoint.ts
|
|
14
14
|
const writeDictionaryFiles = async (paths, fileName, importType, functionName, format, configuration = getConfiguration()) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
4
2
|
import { normalizePath } from "@intlayer/config/utils";
|
|
5
3
|
import fg from "fast-glob";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/createDictionaryEntryPoint/getBuiltDictionariesPath.ts
|
|
8
8
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
4
2
|
import { normalizePath } from "@intlayer/config/utils";
|
|
5
3
|
import fg from "fast-glob";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.ts
|
|
8
8
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
4
2
|
import { normalizePath } from "@intlayer/config/utils";
|
|
5
3
|
import fg from "fast-glob";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.ts
|
|
8
8
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
4
2
|
import { normalizePath } from "@intlayer/config/utils";
|
|
5
3
|
import fg from "fast-glob";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.ts
|
|
8
8
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
1
|
import { basename } from "node:path";
|
|
4
2
|
import { normalizePath } from "@intlayer/config/utils";
|
|
5
3
|
import fg from "fast-glob";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { mkdir } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.ts
|
|
8
8
|
/**
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { writeFileIfChanged } from "../writeFileIfChanged.mjs";
|
|
2
1
|
import { getPathHash } from "../utils/getPathHash.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { writeFileIfChanged } from "../writeFileIfChanged.mjs";
|
|
4
3
|
import { basename, extname, join, relative } from "node:path";
|
|
5
4
|
import { kebabCaseToCamelCase, normalizePath } from "@intlayer/config/utils";
|
|
6
|
-
import { getDomainOrigin, getRewriteRules, isLocaleExclusiveOnDomain } from "@intlayer/core/localization";
|
|
7
5
|
import fg from "fast-glob";
|
|
6
|
+
import { mkdir } from "node:fs/promises";
|
|
7
|
+
import { getDomainOrigin, getRewriteRules, isLocaleExclusiveOnDomain } from "@intlayer/core/localization";
|
|
8
8
|
|
|
9
9
|
//#region src/createType/createModuleAugmentation.ts
|
|
10
10
|
const getTypeName = (key) => `${kebabCaseToCamelCase(key)}Content`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parallelize } from "../utils/parallelize.mjs";
|
|
2
2
|
import { writeFileIfChanged } from "../writeFileIfChanged.mjs";
|
|
3
|
-
import { mkdir } from "node:fs/promises";
|
|
4
3
|
import { resolve } from "node:path";
|
|
4
|
+
import { mkdir } from "node:fs/promises";
|
|
5
5
|
|
|
6
6
|
//#region src/createType/createType.ts
|
|
7
7
|
const generateTypeScriptType = (dictionary) => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalizeBlock } from "./normalizeBlock.mjs";
|
|
2
|
+
import { fingerprintBlock } from "./fingerprintBlock.mjs";
|
|
3
|
+
import { segmentDocument } from "./segmentDocument.mjs";
|
|
4
|
+
import { planAlignmentActions } from "./planActions.mjs";
|
|
2
5
|
import { computeJaccardSimilarity, generateCharacterShingles } from "./computeSimilarity.mjs";
|
|
3
6
|
import { alignBaseAndTargetBlocks } from "./alignBlocks.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import { normalizeBlock } from "./normalizeBlock.mjs";
|
|
7
|
+
import { mapChangedLinesToBlocks } from "./mapChangedLinesToBlocks.mjs";
|
|
6
8
|
import { identifySegmentsToReview, mergeReviewedSegments } from "./rebuildDocument.mjs";
|
|
7
|
-
import { segmentDocument } from "./segmentDocument.mjs";
|
|
8
9
|
import { buildAlignmentPlan } from "./pipeline.mjs";
|
|
9
|
-
import { planAlignmentActions } from "./planActions.mjs";
|
|
10
10
|
import { buildReviewReport, formatReviewReport } from "./reviewReport.mjs";
|
|
11
11
|
|
|
12
12
|
export { alignBaseAndTargetBlocks, buildAlignmentPlan, buildReviewReport, computeJaccardSimilarity, fingerprintBlock, formatReviewReport, generateCharacterShingles, identifySegmentsToReview, mapChangedLinesToBlocks, mergeReviewedSegments, normalizeBlock, planAlignmentActions, segmentDocument };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { mapChangedLinesToBlocks } from "./mapChangedLinesToBlocks.mjs";
|
|
2
|
-
import { alignBaseAndTargetBlocks } from "./alignBlocks.mjs";
|
|
3
|
-
import { fingerprintBlock } from "./fingerprintBlock.mjs";
|
|
4
1
|
import { normalizeBlock } from "./normalizeBlock.mjs";
|
|
5
|
-
import {
|
|
2
|
+
import { fingerprintBlock } from "./fingerprintBlock.mjs";
|
|
6
3
|
import { segmentDocument, segmentSections } from "./segmentDocument.mjs";
|
|
4
|
+
import { alignBaseAndTargetBlocks } from "./alignBlocks.mjs";
|
|
5
|
+
import { mapChangedLinesToBlocks } from "./mapChangedLinesToBlocks.mjs";
|
|
6
|
+
import { identifySegmentsToReview, mergeReviewedSegments } from "./rebuildDocument.mjs";
|
|
7
7
|
|
|
8
8
|
//#region src/docReview/pipeline.ts
|
|
9
9
|
/** Fingerprint a list of already-segmented blocks (context = neighbours). */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parallelize } from "./utils/parallelize.mjs";
|
|
2
1
|
import { chunkArray } from "./utils/chunkArray.mjs";
|
|
2
|
+
import { parallelize } from "./utils/parallelize.mjs";
|
|
3
3
|
import { getAppLogger, x } from "@intlayer/config/logger";
|
|
4
4
|
import { getConfiguration } from "@intlayer/config/node";
|
|
5
5
|
import { retryManager } from "@intlayer/config/utils";
|
|
@@ -6,10 +6,10 @@ import { createModuleAugmentation } from "./createType/createModuleAugmentation.
|
|
|
6
6
|
import { createTypes } from "./createType/createType.mjs";
|
|
7
7
|
import { loadLocalDictionaries } from "./loadDictionaries/loadLocalDictionaries.mjs";
|
|
8
8
|
import { cleanRemovedContentDeclaration } from "./cleanRemovedContentDeclaration.mjs";
|
|
9
|
-
import { existsSync } from "node:fs";
|
|
10
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
11
9
|
import { join } from "node:path";
|
|
12
10
|
import { getAppLogger } from "@intlayer/config/logger";
|
|
11
|
+
import { existsSync } from "node:fs";
|
|
12
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
13
13
|
|
|
14
14
|
//#region src/handleContentDeclarationFileChange.ts
|
|
15
15
|
const handleContentDeclarationFileChange = async (filePath, config) => {
|
|
@@ -3,8 +3,8 @@ import { buildDictionary } from "./buildIntlayerDictionary/buildIntlayerDictiona
|
|
|
3
3
|
import { createModuleAugmentation } from "./createType/createModuleAugmentation.mjs";
|
|
4
4
|
import { createTypes } from "./createType/createType.mjs";
|
|
5
5
|
import { loadLocalDictionaries } from "./loadDictionaries/loadLocalDictionaries.mjs";
|
|
6
|
-
import { cleanRemovedContentDeclaration } from "./cleanRemovedContentDeclaration.mjs";
|
|
7
6
|
import { listDictionaries } from "./listDictionariesPath.mjs";
|
|
7
|
+
import { cleanRemovedContentDeclaration } from "./cleanRemovedContentDeclaration.mjs";
|
|
8
8
|
import { normalize } from "node:path";
|
|
9
9
|
import { getAppLogger } from "@intlayer/config/logger";
|
|
10
10
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { babelTsParser } from "../../../utils/babelParser.mjs";
|
|
2
|
-
import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
|
|
3
2
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
3
|
import fg from "fast-glob";
|
|
4
|
+
import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
|
|
5
5
|
import * as recast from "recast";
|
|
6
6
|
|
|
7
7
|
//#region src/init/frameworkSetup/nextAppRouter/restructure.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { rewriteRelativeImports } from "../nextAppRouter/restructure.mjs";
|
|
2
|
-
import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
|
|
3
2
|
import { join, relative } from "node:path";
|
|
4
3
|
import fg from "fast-glob";
|
|
4
|
+
import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises";
|
|
5
5
|
|
|
6
6
|
//#region src/init/frameworkSetup/tanstackStart/restructure.ts
|
|
7
7
|
/** Source file extensions whose relative imports must be rewritten after a move. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
1
|
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
3
2
|
import { EXCLUDED_PATHS } from "@intlayer/config/defaultValues";
|
|
4
3
|
import fg from "fast-glob";
|
|
4
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
5
5
|
import { ALL_LOCALES } from "@intlayer/types/allLocales";
|
|
6
6
|
|
|
7
7
|
//#region src/init/utils/fileSystem.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getGitRootDir, listProjects } from "../../listProjects.mjs";
|
|
2
2
|
import { detectPackageManager } from "./packageManager.mjs";
|
|
3
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
4
3
|
import { join, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
|
|
6
6
|
//#region src/init/utils/githubActions.ts
|
|
7
7
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
1
|
import { join } from "node:path";
|
|
3
2
|
import { compareVersions } from "@intlayer/config/utils";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { execSync } from "node:child_process";
|
|
5
5
|
|
|
6
6
|
//#region src/init/utils/packageManager.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { readAsset } from "../_virtual/_utils_asset.mjs";
|
|
2
|
-
import { writeFile } from "node:fs/promises";
|
|
3
2
|
import { join, relative } from "node:path";
|
|
4
3
|
import { colorizePath, logger, v } from "@intlayer/config/logger";
|
|
5
4
|
import { searchConfigurationFile } from "@intlayer/config/node";
|
|
5
|
+
import { writeFile } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/initConfig/index.ts
|
|
8
8
|
const getTemplatePath = (format) => {
|
package/dist/esm/installLSP.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { readAsset } from "../_virtual/_utils_asset.mjs";
|
|
2
|
-
import { promises } from "node:fs";
|
|
3
2
|
import path from "node:path";
|
|
4
3
|
import { v } from "@intlayer/config/logger";
|
|
5
4
|
import { getMarkdownMetadata } from "@intlayer/core/markdown";
|
|
5
|
+
import { promises } from "node:fs";
|
|
6
6
|
|
|
7
7
|
//#region src/installSkills/index.ts
|
|
8
8
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
1
|
import { join } from "node:path";
|
|
3
|
-
import { bundleFile } from "@intlayer/config/file";
|
|
4
2
|
import { getProjectRequire } from "@intlayer/config/utils";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { bundleFile } from "@intlayer/config/file";
|
|
5
5
|
import { builtinModules, createRequire } from "node:module";
|
|
6
6
|
|
|
7
7
|
//#region src/loadDictionaries/getIntlayerBundle.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ensureIntlayerBundle, formatLocalDictionaries, loadContentDeclaration, loadContentDeclarations } from "./loadContentDeclaration.mjs";
|
|
2
|
-
import { loadLocalDictionaries } from "./loadLocalDictionaries.mjs";
|
|
3
2
|
import { formatDistantDictionaries, loadRemoteDictionaries } from "./loadRemoteDictionaries.mjs";
|
|
4
3
|
import { loadDictionaries } from "./loadDictionaries.mjs";
|
|
4
|
+
import { loadLocalDictionaries } from "./loadLocalDictionaries.mjs";
|
|
5
5
|
|
|
6
6
|
export { ensureIntlayerBundle, formatDistantDictionaries, formatLocalDictionaries, loadContentDeclaration, loadContentDeclarations, loadDictionaries, loadLocalDictionaries, loadRemoteDictionaries };
|
|
@@ -5,10 +5,10 @@ import { getIntlayerBundle } from "./getIntlayerBundle.mjs";
|
|
|
5
5
|
import { loadMarkdownContentDeclaration } from "./loadMarkdownContentDeclaration.mjs";
|
|
6
6
|
import { loadYamlContentDeclaration } from "./loadYamlContentDeclaration.mjs";
|
|
7
7
|
import { logTypeScriptErrors } from "./logTypeScriptErrors.mjs";
|
|
8
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
9
8
|
import { dirname, extname, join, relative } from "node:path";
|
|
10
|
-
import { loadExternalFile } from "@intlayer/config/file";
|
|
11
9
|
import { cacheDisk, getPackageJsonPath, getProjectRequire } from "@intlayer/config/utils";
|
|
10
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
11
|
+
import { loadExternalFile } from "@intlayer/config/file";
|
|
12
12
|
|
|
13
13
|
//#region src/loadDictionaries/loadContentDeclaration.ts
|
|
14
14
|
const formatLocalDictionaries = (dictionariesRecord, configuration) => Object.entries(dictionariesRecord).map(([relativePath, dict]) => ({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { filterInvalidDictionaries } from "../filterInvalidDictionaries.mjs";
|
|
2
|
-
import { loadContentDeclarations } from "./loadContentDeclaration.mjs";
|
|
3
2
|
import { formatDictionaries } from "../formatDictionary.mjs";
|
|
3
|
+
import { loadContentDeclarations } from "./loadContentDeclaration.mjs";
|
|
4
4
|
import { loadRemoteDictionaries } from "./loadRemoteDictionaries.mjs";
|
|
5
5
|
import { DictionariesLogger } from "./log.mjs";
|
|
6
6
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { loadContentDeclarations } from "./loadContentDeclaration.mjs";
|
|
2
|
-
import { mkdir } from "node:fs/promises";
|
|
3
2
|
import { relative, resolve } from "node:path";
|
|
3
|
+
import { mkdir } from "node:fs/promises";
|
|
4
4
|
|
|
5
5
|
//#region src/loadDictionaries/loadLocalDictionaries.ts
|
|
6
6
|
const loadLocalDictionaries = async (contentDeclarationsPaths, configuration) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseContentDeclarationFileName } from "../utils/parseContentDeclarationFileName.mjs";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
2
|
import { getMarkdownMetadata } from "@intlayer/core/markdown";
|
|
4
3
|
import { MARKDOWN } from "@intlayer/types/nodeType";
|
|
4
|
+
import { readFile } from "node:fs/promises";
|
|
5
5
|
|
|
6
6
|
//#region src/loadDictionaries/loadMarkdownContentDeclaration.ts
|
|
7
7
|
const loadMarkdownContentDeclaration = async (path, configuration) => {
|
|
@@ -2,9 +2,9 @@ import { formatPath } from "./utils/formatter.mjs";
|
|
|
2
2
|
import { runOnce } from "./utils/runOnce.mjs";
|
|
3
3
|
import { join, relative } from "node:path";
|
|
4
4
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
5
|
+
import { getEnvFilePath } from "@intlayer/config/env";
|
|
5
6
|
import { colorize, colorizePath, getAppLogger, x } from "@intlayer/config/logger";
|
|
6
7
|
import { getConfigurationAndFilePath, intlayerConfigSchema, intlayerConfigSchemaParseContext } from "@intlayer/config/node";
|
|
7
|
-
import { getEnvFilePath } from "@intlayer/config/env";
|
|
8
8
|
|
|
9
9
|
//#region src/logConfigDetails.ts
|
|
10
10
|
const logConfigDetails = (options) => {
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
import { runOnce } from "./utils/runOnce.mjs";
|
|
1
2
|
import { buildDictionary } from "./buildIntlayerDictionary/buildIntlayerDictionary.mjs";
|
|
3
|
+
import { cleanOutputDir } from "./cleanOutputDir.mjs";
|
|
2
4
|
import { createDictionaryEntryPoint } from "./createDictionaryEntryPoint/createDictionaryEntryPoint.mjs";
|
|
3
|
-
import { runOnce } from "./utils/runOnce.mjs";
|
|
4
5
|
import { createModuleAugmentation } from "./createType/createModuleAugmentation.mjs";
|
|
5
6
|
import { createTypes } from "./createType/createType.mjs";
|
|
6
|
-
import { listDictionariesWithStats } from "./listDictionariesPath.mjs";
|
|
7
7
|
import { loadDictionaries } from "./loadDictionaries/loadDictionaries.mjs";
|
|
8
8
|
import { writeRemoteDictionary } from "./buildIntlayerDictionary/writeRemoteDictionary.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { listDictionariesWithStats } from "./listDictionariesPath.mjs";
|
|
10
10
|
import { isCachedConfigurationUpToDate, writeConfiguration } from "./writeConfiguration/index.mjs";
|
|
11
|
-
import { stat } from "node:fs/promises";
|
|
12
11
|
import { join } from "node:path";
|
|
13
12
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
14
13
|
import { colorize, getAppLogger } from "@intlayer/config/logger";
|
|
15
14
|
import { cacheDisk } from "@intlayer/config/utils";
|
|
15
|
+
import { stat } from "node:fs/promises";
|
|
16
16
|
import packageJson from "@intlayer/config/package.json" with { type: "json" };
|
|
17
17
|
|
|
18
18
|
//#region src/prepareIntlayer.ts
|
package/dist/esm/scan/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { byteLength, extractAnchors, extractHreflangs, extractHtmlDir, extractHtmlLang, extractMetaDescription, extractOgImage, extractScriptUrls, extractTitle, extractVisibleTextStrings, hasCanonical } from "./parseHtml.mjs";
|
|
2
1
|
import { mutateScore, scoreRecord, toScorePercent } from "./calculateScore.mjs";
|
|
2
|
+
import { byteLength, extractAnchors, extractHreflangs, extractHtmlDir, extractHtmlLang, extractMetaDescription, extractOgImage, extractScriptUrls, extractTitle, extractVisibleTextStrings, hasCanonical } from "./parseHtml.mjs";
|
|
3
3
|
import { analyzeBundleContent } from "./analyzeBundleContent.mjs";
|
|
4
4
|
import { checkBundleContent, checkCanonical, checkHtmlAttributes, checkLinguisticStructure, checkRobots, checkSitemap, checkUrlStructure, formatSize } from "./checks.mjs";
|
|
5
5
|
import { scanWebsite } from "./scanWebsite.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { byteLength, extractAnchors, extractScriptUrls } from "./parseHtml.mjs";
|
|
2
1
|
import { mutateScore, toScorePercent } from "./calculateScore.mjs";
|
|
2
|
+
import { byteLength, extractAnchors, extractScriptUrls } from "./parseHtml.mjs";
|
|
3
3
|
import { checkBundleContent, checkCanonical, checkHtmlAttributes, checkLinguisticStructure, checkRobots, checkSitemap, checkUrlStructure } from "./checks.mjs";
|
|
4
4
|
import { GREY, GREY_LIGHT } from "@intlayer/config/colors";
|
|
5
5
|
import { colorize, logger } from "@intlayer/config/logger";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { writeFileIfChanged } from "../writeFileIfChanged.mjs";
|
|
2
2
|
import { extractKeyAndLocaleFromPath } from "./extractKeyAndLocaleFromPath.mjs";
|
|
3
3
|
import { buildFilePathPatternContext } from "./filePathPatternHelpers.mjs";
|
|
4
|
-
import { mkdir, readFile } from "node:fs/promises";
|
|
5
4
|
import { dirname, isAbsolute, resolve } from "node:path";
|
|
6
5
|
import { parseFilePathPattern } from "@intlayer/config/utils";
|
|
7
6
|
import fg from "fast-glob";
|
|
7
|
+
import { mkdir, readFile } from "node:fs/promises";
|
|
8
8
|
|
|
9
9
|
//#region src/syncPluginKit/createFileAdapter.ts
|
|
10
10
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createSyncPlugin } from "./createSyncPlugin.mjs";
|
|
2
1
|
import { extractKeyAndLocaleFromPath } from "./extractKeyAndLocaleFromPath.mjs";
|
|
3
2
|
import { buildFilePathPatternContext } from "./filePathPatternHelpers.mjs";
|
|
4
3
|
import { createFileAdapter, createFileReader } from "./createFileAdapter.mjs";
|
|
4
|
+
import { createSyncPlugin } from "./createSyncPlugin.mjs";
|
|
5
5
|
|
|
6
6
|
export { buildFilePathPatternContext, createFileAdapter, createFileReader, createSyncPlugin, extractKeyAndLocaleFromPath };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
-
import { normalizePath } from "@intlayer/config/utils";
|
|
3
2
|
import { TRAVERSE_PATTERN } from "@intlayer/config/defaultValues";
|
|
3
|
+
import { normalizePath } from "@intlayer/config/utils";
|
|
4
4
|
import fg from "fast-glob";
|
|
5
5
|
|
|
6
6
|
//#region src/utils/buildComponentFilesList.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { rmSync } from "node:fs";
|
|
2
|
-
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
1
|
import { dirname, join } from "node:path";
|
|
4
2
|
import * as ANSIColors from "@intlayer/config/colors";
|
|
5
3
|
import { colorize, getAppLogger } from "@intlayer/config/logger";
|
|
4
|
+
import { rmSync } from "node:fs";
|
|
5
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
6
6
|
|
|
7
7
|
//#region src/utils/contentWatcherLock.ts
|
|
8
8
|
/**
|
package/dist/esm/utils/index.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import { Queue, pLimit } from "./pLimit.mjs";
|
|
2
|
-
import { parallelize } from "./parallelize.mjs";
|
|
3
|
-
import { getPathHash } from "./getPathHash.mjs";
|
|
4
|
-
import { formatLocale, formatPath } from "./formatter.mjs";
|
|
5
1
|
import { autoDecorateContent } from "./autoDecorateContent.mjs";
|
|
6
2
|
import { buildComponentFilesList } from "./buildComponentFilesList.mjs";
|
|
7
3
|
import { chunkArray } from "./chunkArray.mjs";
|
|
@@ -9,9 +5,13 @@ import { splitTextByLines } from "./splitTextByLine.mjs";
|
|
|
9
5
|
import { getChunk } from "./getChunk.mjs";
|
|
10
6
|
import { assembleJSON, chunkJSON, reconstructFromSingleChunk } from "./chunkJSON.mjs";
|
|
11
7
|
import { CLI_CONTENT_WATCHER_ENV_VAR, acquireContentWatcherLock, claimCliContentWatcher, getCliContentWatcherLabel, getContentWatcherLockFilePath, getContentWatcherOwner, reportRedundantContentWatcher } from "./contentWatcherLock.mjs";
|
|
8
|
+
import { formatLocale, formatPath } from "./formatter.mjs";
|
|
12
9
|
import { getContentExtension } from "./getContentExtension.mjs";
|
|
13
10
|
import { getExtensionFromFormat, getFormatFromExtension } from "./getFormatFromExtension.mjs";
|
|
11
|
+
import { getPathHash } from "./getPathHash.mjs";
|
|
14
12
|
import { mergeChunks } from "./mergeChunks.mjs";
|
|
13
|
+
import { Queue, pLimit } from "./pLimit.mjs";
|
|
14
|
+
import { parallelize } from "./parallelize.mjs";
|
|
15
15
|
import { getGlobalLimiter, getTaskLimiter, parallelizeGlobal } from "./parallelizeGlobal.mjs";
|
|
16
16
|
import { parseContentDeclarationFileName } from "./parseContentDeclarationFileName.mjs";
|
|
17
17
|
import { excludeObjectFormat, reduceObjectFormat } from "./reduceObjectFormat.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { rmSync } from "node:fs";
|
|
2
|
-
import { mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
|
|
3
1
|
import { dirname } from "node:path";
|
|
2
|
+
import { rmSync } from "node:fs";
|
|
3
|
+
import { mkdir, readFile, rmdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
4
4
|
import packageJson from "@intlayer/core/package.json" with { type: "json" };
|
|
5
5
|
|
|
6
6
|
//#region src/utils/runOnce.ts
|
|
@@ -20,6 +20,12 @@ process.on("exit", () => {
|
|
|
20
20
|
for (const sentinelFilePath of ownedSentinelFilePaths) try {
|
|
21
21
|
rmSync(sentinelFilePath, { force: true });
|
|
22
22
|
} catch {}
|
|
23
|
+
for (const mutexDirPath of ownedMutexDirPaths) try {
|
|
24
|
+
rmSync(mutexDirPath, {
|
|
25
|
+
recursive: true,
|
|
26
|
+
force: true
|
|
27
|
+
});
|
|
28
|
+
} catch {}
|
|
23
29
|
});
|
|
24
30
|
/**
|
|
25
31
|
* Reads the sentinel file, returning `undefined` when it does not exist or
|
|
@@ -100,6 +106,53 @@ const removeSentinel = async (sentinelFilePath) => {
|
|
|
100
106
|
await unlink(sentinelFilePath);
|
|
101
107
|
} catch {}
|
|
102
108
|
};
|
|
109
|
+
/** Delay between two attempts to enter the sentinel critical section. */
|
|
110
|
+
const MUTEX_POLL_INTERVAL_MS = 10;
|
|
111
|
+
/**
|
|
112
|
+
* A critical-section mutex older than this was left behind by a process that
|
|
113
|
+
* died while holding it, and can be taken over.
|
|
114
|
+
*/
|
|
115
|
+
const MUTEX_STALE_MS = 1e4;
|
|
116
|
+
/** Mutex directories owned by this process, released on exit like sentinels. */
|
|
117
|
+
const ownedMutexDirPaths = /* @__PURE__ */ new Set();
|
|
118
|
+
/**
|
|
119
|
+
* Serializes the "read the sentinel, decide, replace it" sequence across
|
|
120
|
+
* processes so it behaves as a compare-and-swap.
|
|
121
|
+
*
|
|
122
|
+
* Without it, two contenders reading the same stale sentinel could both remove
|
|
123
|
+
* it, and the slower one would delete the `running` sentinel the faster one
|
|
124
|
+
* had just created — letting two callbacks run at once. A directory is used
|
|
125
|
+
* because `mkdir` is atomic on every platform.
|
|
126
|
+
*/
|
|
127
|
+
const withSentinelMutex = async (sentinelFilePath, criticalSection) => {
|
|
128
|
+
const mutexDirPath = `${sentinelFilePath}.mutex`;
|
|
129
|
+
while (true) try {
|
|
130
|
+
await mkdir(dirname(sentinelFilePath), { recursive: true });
|
|
131
|
+
await mkdir(mutexDirPath);
|
|
132
|
+
break;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
const code = error.code;
|
|
135
|
+
if (code === "ENOENT") continue;
|
|
136
|
+
if (code !== "EEXIST") throw error;
|
|
137
|
+
try {
|
|
138
|
+
const mutexStats = await stat(mutexDirPath);
|
|
139
|
+
if (Date.now() - mutexStats.mtime.getTime() > MUTEX_STALE_MS) {
|
|
140
|
+
await rmdir(mutexDirPath).catch(() => {});
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
} catch {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
await delay(MUTEX_POLL_INTERVAL_MS);
|
|
147
|
+
}
|
|
148
|
+
ownedMutexDirPaths.add(mutexDirPath);
|
|
149
|
+
try {
|
|
150
|
+
return await criticalSection();
|
|
151
|
+
} finally {
|
|
152
|
+
ownedMutexDirPaths.delete(mutexDirPath);
|
|
153
|
+
await rmdir(mutexDirPath).catch(() => {});
|
|
154
|
+
}
|
|
155
|
+
};
|
|
103
156
|
/**
|
|
104
157
|
* Ensures a callback function runs only once within a specified time window across multiple processes.
|
|
105
158
|
* Uses a sentinel file to coordinate execution and prevent duplicate work.
|
|
@@ -135,24 +188,22 @@ const runOnce = async (sentinelFilePath, callback, options) => {
|
|
|
135
188
|
const currentTimestamp = Date.now();
|
|
136
189
|
const waitDeadline = currentTimestamp + lockWaitTimeoutMs;
|
|
137
190
|
while (true) {
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
191
|
+
const outcome = await withSentinelMutex(sentinelFilePath, async () => {
|
|
192
|
+
const sentinelState = await readSentinelState(sentinelFilePath);
|
|
193
|
+
if (sentinelState) {
|
|
194
|
+
const sentinelAge = Date.now() - sentinelState.mtimeMs;
|
|
195
|
+
if (sentinelState.status === "running") {
|
|
196
|
+
if (!(sentinelAge > lockWaitTimeoutMs || !isOwnerProcessAlive(sentinelState.pid)) && Date.now() < waitDeadline) return "wait";
|
|
197
|
+
} else if (!forceRun && sentinelAge <= cacheTimeoutMs && sentinelState.version === packageJson.version) return "cached";
|
|
146
198
|
await removeSentinel(sentinelFilePath);
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
if (!forceRun && sentinelAge <= cacheTimeoutMs && sentinelState.version === packageJson.version) {
|
|
150
|
-
await onIsCached?.();
|
|
151
|
-
return;
|
|
152
199
|
}
|
|
153
|
-
await
|
|
200
|
+
return await acquireSentinel(sentinelFilePath, currentTimestamp) ? "acquired" : "wait";
|
|
201
|
+
});
|
|
202
|
+
if (outcome === "cached") {
|
|
203
|
+
await onIsCached?.();
|
|
204
|
+
return;
|
|
154
205
|
}
|
|
155
|
-
if (
|
|
206
|
+
if (outcome === "acquired") break;
|
|
156
207
|
await delay(LOCK_POLL_INTERVAL_MS);
|
|
157
208
|
}
|
|
158
209
|
ownedSentinelFilePaths.add(sentinelFilePath);
|