@pie-element/cli 0.1.1 → 0.1.2-next.1
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 +48 -10
- package/dist/commands/dev/demo/index.d.ts +1 -1
- package/dist/commands/dev/demo/index.js +21 -0
- package/dist/commands/dev/demo/index.js.map +1 -1
- package/dist/commands/dev/test-bundler.d.ts +0 -1
- package/dist/commands/dev/test-bundler.js +2 -10
- package/dist/commands/dev/test-bundler.js.map +1 -1
- package/dist/commands/docs/generate.d.ts +16 -0
- package/dist/commands/docs/generate.js +150 -0
- package/dist/commands/docs/generate.js.map +1 -0
- package/dist/commands/docs/verify.d.ts +12 -0
- package/dist/commands/docs/verify.js +40 -0
- package/dist/commands/docs/verify.js.map +1 -0
- package/dist/commands/packages/create-controllers.d.ts +0 -1
- package/dist/commands/packages/create-controllers.js.map +1 -1
- package/dist/commands/packages/create-lib-react.d.ts +0 -1
- package/dist/commands/packages/create-lib-react.js +1 -3
- package/dist/commands/packages/create-lib-react.js.map +1 -1
- package/dist/commands/packages/create-react-elements.d.ts +0 -1
- package/dist/commands/packages/create-react-elements.js +2 -3
- package/dist/commands/packages/create-react-elements.js.map +1 -1
- package/dist/commands/packages/enable-publishing.d.ts +0 -1
- package/dist/commands/packages/enable-publishing.js +26 -23
- package/dist/commands/packages/enable-publishing.js.map +1 -1
- package/dist/commands/packages/init-synced-elements.d.ts +0 -1
- package/dist/commands/packages/init-synced-elements.js +1 -1
- package/dist/commands/packages/init-synced-elements.js.map +1 -1
- package/dist/commands/upstream/analyze-esm.d.ts +0 -1
- package/dist/commands/upstream/analyze-esm.js +5 -1
- package/dist/commands/upstream/analyze-esm.js.map +1 -1
- package/dist/commands/upstream/check.d.ts +0 -1
- package/dist/commands/upstream/check.js.map +1 -1
- package/dist/commands/upstream/deps.d.ts +0 -1
- package/dist/commands/upstream/deps.js.map +1 -1
- package/dist/commands/upstream/sync.d.ts +11 -2
- package/dist/commands/upstream/sync.js +364 -25
- package/dist/commands/upstream/sync.js.map +1 -1
- package/dist/commands/upstream/track.d.ts +0 -1
- package/dist/commands/upstream/track.js.map +1 -1
- package/dist/commands/upstream/update.d.ts +0 -1
- package/dist/commands/upstream/update.js +37 -7
- package/dist/commands/upstream/update.js.map +1 -1
- package/dist/commands/verify/controllers.d.ts +0 -1
- package/dist/commands/verify/controllers.js +213 -59
- package/dist/commands/verify/controllers.js.map +1 -1
- package/dist/commands/verify/dependency-integrity.d.ts +18 -0
- package/dist/commands/verify/dependency-integrity.js +147 -0
- package/dist/commands/verify/dependency-integrity.js.map +1 -0
- package/dist/commands/verify/react-build.d.ts +0 -1
- package/dist/commands/verify/react-build.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/docs/contract-validator.d.ts +12 -0
- package/dist/lib/docs/contract-validator.js +38 -0
- package/dist/lib/docs/contract-validator.js.map +1 -0
- package/dist/lib/docs/contracts.d.ts +11 -0
- package/dist/lib/docs/contracts.js +241 -0
- package/dist/lib/docs/contracts.js.map +1 -0
- package/dist/lib/docs/discovery.d.ts +10 -0
- package/dist/lib/docs/discovery.js +91 -0
- package/dist/lib/docs/discovery.js.map +1 -0
- package/dist/lib/docs/generator.d.ts +14 -0
- package/dist/lib/docs/generator.js +450 -0
- package/dist/lib/docs/generator.js.map +1 -0
- package/dist/lib/docs/source-extractor.d.ts +2 -0
- package/dist/lib/docs/source-extractor.js +209 -0
- package/dist/lib/docs/source-extractor.js.map +1 -0
- package/dist/lib/docs/types.d.ts +77 -0
- package/dist/lib/docs/types.js +2 -0
- package/dist/lib/docs/types.js.map +1 -0
- package/dist/lib/upstream/repo-utils.d.ts +0 -1
- package/dist/lib/upstream/repo-utils.js.map +1 -1
- package/dist/lib/upstream/sync-compatibility.d.ts +0 -1
- package/dist/lib/upstream/sync-compatibility.js.map +1 -1
- package/dist/lib/upstream/sync-constants.d.ts +35 -7
- package/dist/lib/upstream/sync-constants.js +40 -11
- package/dist/lib/upstream/sync-constants.js.map +1 -1
- package/dist/lib/upstream/sync-controllers-strategy.d.ts +0 -1
- package/dist/lib/upstream/sync-controllers-strategy.js +14 -4
- package/dist/lib/upstream/sync-controllers-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-demo-metadata.d.ts +0 -1
- package/dist/lib/upstream/sync-demo-metadata.js +1 -1
- package/dist/lib/upstream/sync-demo-metadata.js.map +1 -1
- package/dist/lib/upstream/sync-entry-discovery.d.ts +3 -0
- package/dist/lib/upstream/sync-entry-discovery.js +23 -0
- package/dist/lib/upstream/sync-entry-discovery.js.map +1 -0
- package/dist/lib/upstream/sync-externals.d.ts +7 -7
- package/dist/lib/upstream/sync-externals.js +51 -35
- package/dist/lib/upstream/sync-externals.js.map +1 -1
- package/dist/lib/upstream/sync-filesystem.d.ts +0 -1
- package/dist/lib/upstream/sync-filesystem.js.map +1 -1
- package/dist/lib/upstream/sync-imports.d.ts +82 -62
- package/dist/lib/upstream/sync-imports.js +658 -185
- package/dist/lib/upstream/sync-imports.js.map +1 -1
- package/dist/lib/upstream/sync-package-json.d.ts +0 -1
- package/dist/lib/upstream/sync-package-json.js +7 -0
- package/dist/lib/upstream/sync-package-json.js.map +1 -1
- package/dist/lib/upstream/sync-package-manager.d.ts +14 -4
- package/dist/lib/upstream/sync-package-manager.js +408 -72
- package/dist/lib/upstream/sync-package-manager.js.map +1 -1
- package/dist/lib/upstream/sync-pielib-strategy.d.ts +2 -1
- package/dist/lib/upstream/sync-pielib-strategy.js +228 -110
- package/dist/lib/upstream/sync-pielib-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-presets.d.ts +53 -0
- package/dist/lib/upstream/sync-presets.js +203 -0
- package/dist/lib/upstream/sync-presets.js.map +1 -0
- package/dist/lib/upstream/sync-react-strategy.d.ts +6 -1
- package/dist/lib/upstream/sync-react-strategy.js +342 -134
- package/dist/lib/upstream/sync-react-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-source-edit.d.ts +14 -0
- package/dist/lib/upstream/sync-source-edit.js +89 -0
- package/dist/lib/upstream/sync-source-edit.js.map +1 -0
- package/dist/lib/upstream/sync-source-tree.d.ts +22 -0
- package/dist/lib/upstream/sync-source-tree.js +99 -0
- package/dist/lib/upstream/sync-source-tree.js.map +1 -0
- package/dist/lib/upstream/sync-strategy.d.ts +1 -1
- package/dist/lib/upstream/sync-strategy.js.map +1 -1
- package/dist/lib/upstream/sync-summary.d.ts +0 -1
- package/dist/lib/upstream/sync-summary.js.map +1 -1
- package/dist/lib/upstream/sync-transforms.d.ts +13 -11
- package/dist/lib/upstream/sync-transforms.js +23 -17
- package/dist/lib/upstream/sync-transforms.js.map +1 -1
- package/dist/lib/upstream/sync-vite-config.d.ts +13 -1
- package/dist/lib/upstream/sync-vite-config.js +65 -46
- package/dist/lib/upstream/sync-vite-config.js.map +1 -1
- package/dist/utils/compatibility.d.ts +13 -1
- package/dist/utils/compatibility.js +143 -2
- package/dist/utils/compatibility.js.map +1 -1
- package/dist/utils/conversion.d.ts +0 -1
- package/dist/utils/conversion.js.map +1 -1
- package/dist/utils/dependency-integrity.d.ts +37 -0
- package/dist/utils/dependency-integrity.js +557 -0
- package/dist/utils/dependency-integrity.js.map +1 -0
- package/dist/utils/git.d.ts +0 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/package-json.d.ts +0 -1
- package/dist/utils/package-json.js.map +1 -1
- package/package.json +24 -12
- package/.compatibility/report.json +0 -2491
- package/.turbo/turbo-build.log +0 -1
- package/CHANGELOG.md +0 -8
- package/REFACTORING.md +0 -131
- package/bin/dev.js +0 -5
- package/dist/commands/dev/demo/index.d.ts.map +0 -1
- package/dist/commands/dev/test-bundler.d.ts.map +0 -1
- package/dist/commands/mathquill/migrate.d.ts +0 -20
- package/dist/commands/mathquill/migrate.d.ts.map +0 -1
- package/dist/commands/mathquill/migrate.js +0 -240
- package/dist/commands/mathquill/migrate.js.map +0 -1
- package/dist/commands/mathquill/status.d.ts +0 -20
- package/dist/commands/mathquill/status.d.ts.map +0 -1
- package/dist/commands/mathquill/status.js +0 -231
- package/dist/commands/mathquill/status.js.map +0 -1
- package/dist/commands/packages/create-controllers.d.ts.map +0 -1
- package/dist/commands/packages/create-lib-react.d.ts.map +0 -1
- package/dist/commands/packages/create-react-elements.d.ts.map +0 -1
- package/dist/commands/packages/enable-publishing.d.ts.map +0 -1
- package/dist/commands/packages/init-synced-elements.d.ts.map +0 -1
- package/dist/commands/upstream/analyze-esm.d.ts.map +0 -1
- package/dist/commands/upstream/check.d.ts.map +0 -1
- package/dist/commands/upstream/deps.d.ts.map +0 -1
- package/dist/commands/upstream/sync-mathquill.d.ts +0 -12
- package/dist/commands/upstream/sync-mathquill.d.ts.map +0 -1
- package/dist/commands/upstream/sync-mathquill.js +0 -97
- package/dist/commands/upstream/sync-mathquill.js.map +0 -1
- package/dist/commands/upstream/sync.d.ts.map +0 -1
- package/dist/commands/upstream/track.d.ts.map +0 -1
- package/dist/commands/upstream/update.d.ts.map +0 -1
- package/dist/commands/verify/controllers.d.ts.map +0 -1
- package/dist/commands/verify/react-build.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/mathquill/extension-generator.d.ts +0 -9
- package/dist/lib/mathquill/extension-generator.d.ts.map +0 -1
- package/dist/lib/mathquill/extension-generator.js +0 -107
- package/dist/lib/mathquill/extension-generator.js.map +0 -1
- package/dist/lib/mathquill/khan-extractor.d.ts +0 -16
- package/dist/lib/mathquill/khan-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/khan-extractor.js +0 -148
- package/dist/lib/mathquill/khan-extractor.js.map +0 -1
- package/dist/lib/mathquill/learnosity-extractor.d.ts +0 -15
- package/dist/lib/mathquill/learnosity-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/learnosity-extractor.js +0 -170
- package/dist/lib/mathquill/learnosity-extractor.js.map +0 -1
- package/dist/lib/mathquill/migration-orchestrator.d.ts +0 -77
- package/dist/lib/mathquill/migration-orchestrator.d.ts.map +0 -1
- package/dist/lib/mathquill/migration-orchestrator.js +0 -391
- package/dist/lib/mathquill/migration-orchestrator.js.map +0 -1
- package/dist/lib/mathquill/package-updater.d.ts +0 -9
- package/dist/lib/mathquill/package-updater.d.ts.map +0 -1
- package/dist/lib/mathquill/package-updater.js +0 -103
- package/dist/lib/mathquill/package-updater.js.map +0 -1
- package/dist/lib/mathquill/pie-extractor.d.ts +0 -14
- package/dist/lib/mathquill/pie-extractor.d.ts.map +0 -1
- package/dist/lib/mathquill/pie-extractor.js +0 -167
- package/dist/lib/mathquill/pie-extractor.js.map +0 -1
- package/dist/lib/upstream/repo-utils.d.ts.map +0 -1
- package/dist/lib/upstream/sync-compatibility.d.ts.map +0 -1
- package/dist/lib/upstream/sync-constants.d.ts.map +0 -1
- package/dist/lib/upstream/sync-controllers-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-demo-metadata.d.ts.map +0 -1
- package/dist/lib/upstream/sync-dev-exports.d.ts +0 -13
- package/dist/lib/upstream/sync-dev-exports.d.ts.map +0 -1
- package/dist/lib/upstream/sync-dev-exports.js +0 -115
- package/dist/lib/upstream/sync-dev-exports.js.map +0 -1
- package/dist/lib/upstream/sync-externals.d.ts.map +0 -1
- package/dist/lib/upstream/sync-filesystem.d.ts.map +0 -1
- package/dist/lib/upstream/sync-imports.d.ts.map +0 -1
- package/dist/lib/upstream/sync-mathquill.d.ts +0 -19
- package/dist/lib/upstream/sync-mathquill.d.ts.map +0 -1
- package/dist/lib/upstream/sync-mathquill.js +0 -160
- package/dist/lib/upstream/sync-mathquill.js.map +0 -1
- package/dist/lib/upstream/sync-package-json.d.ts.map +0 -1
- package/dist/lib/upstream/sync-package-manager.d.ts.map +0 -1
- package/dist/lib/upstream/sync-pielib-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-react-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-strategy.d.ts.map +0 -1
- package/dist/lib/upstream/sync-summary.d.ts.map +0 -1
- package/dist/lib/upstream/sync-transforms.d.ts.map +0 -1
- package/dist/lib/upstream/sync-vite-config.d.ts.map +0 -1
- package/dist/utils/compatibility.d.ts.map +0 -1
- package/dist/utils/conversion.d.ts.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/package-json.d.ts.map +0 -1
- package/packages/cli/bin/dev.js +0 -5
- package/packages/cli/bin/run.js +0 -5
- package/src/commands/dev/demo/index.ts +0 -313
- package/src/commands/dev/test-bundler.ts +0 -345
- package/src/commands/mathquill/migrate.ts +0 -269
- package/src/commands/mathquill/status.ts +0 -267
- package/src/commands/packages/create-controllers.ts +0 -127
- package/src/commands/packages/create-lib-react.ts +0 -279
- package/src/commands/packages/create-react-elements.ts +0 -306
- package/src/commands/packages/enable-publishing.ts +0 -161
- package/src/commands/packages/init-synced-elements.ts +0 -259
- package/src/commands/upstream/README.md +0 -444
- package/src/commands/upstream/analyze-esm.ts +0 -1973
- package/src/commands/upstream/check.ts +0 -228
- package/src/commands/upstream/deps.ts +0 -222
- package/src/commands/upstream/sync-mathquill.ts +0 -108
- package/src/commands/upstream/sync.ts +0 -687
- package/src/commands/upstream/track.ts +0 -145
- package/src/commands/upstream/update.ts +0 -110
- package/src/commands/verify/controllers.ts +0 -166
- package/src/commands/verify/react-build.ts +0 -171
- package/src/index.ts +0 -1
- package/src/lib/mathquill/extension-generator.ts +0 -111
- package/src/lib/mathquill/khan-extractor.ts +0 -175
- package/src/lib/mathquill/learnosity-extractor.ts +0 -198
- package/src/lib/mathquill/migration-orchestrator.ts +0 -513
- package/src/lib/mathquill/package-updater.ts +0 -120
- package/src/lib/mathquill/pie-extractor.ts +0 -194
- package/src/lib/upstream/repo-utils.ts +0 -18
- package/src/lib/upstream/sync-compatibility.ts +0 -89
- package/src/lib/upstream/sync-constants.ts +0 -77
- package/src/lib/upstream/sync-controllers-strategy.ts +0 -291
- package/src/lib/upstream/sync-demo-metadata.ts +0 -199
- package/src/lib/upstream/sync-dev-exports.ts +0 -151
- package/src/lib/upstream/sync-externals.ts +0 -159
- package/src/lib/upstream/sync-filesystem.ts +0 -87
- package/src/lib/upstream/sync-imports.ts +0 -992
- package/src/lib/upstream/sync-mathquill.ts +0 -194
- package/src/lib/upstream/sync-package-json.ts +0 -86
- package/src/lib/upstream/sync-package-manager.ts +0 -694
- package/src/lib/upstream/sync-pielib-strategy.ts +0 -441
- package/src/lib/upstream/sync-react-strategy.ts +0 -945
- package/src/lib/upstream/sync-strategy.ts +0 -61
- package/src/lib/upstream/sync-summary.ts +0 -194
- package/src/lib/upstream/sync-transforms.ts +0 -154
- package/src/lib/upstream/sync-vite-config.ts +0 -243
- package/src/types/es-module-lexer.d.ts +0 -4
- package/src/utils/compatibility.ts +0 -182
- package/src/utils/conversion.ts +0 -153
- package/src/utils/git.ts +0 -63
- package/src/utils/logger.ts +0 -69
- package/src/utils/package-json.ts +0 -43
- package/tests/sync-package-manager.test.ts +0 -112
- package/tests/transform-assign-props.test.ts +0 -101
- package/tsconfig.json +0 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/utils/conversion.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/utils/conversion.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * JavaScript to TypeScript conversion utilities\n */\n\nexport interface ConversionMetadata {\n sourcePath: string;\n commit: string;\n}\n\nexport interface ConversionResult {\n code: string;\n hasDefaultObjectExport: boolean;\n}\n\n/**\n * Convert JavaScript to TypeScript\n */\nexport function convertJsToTs(jsCode: string, metadata: ConversionMetadata): ConversionResult {\n // We intentionally do NOT transform the JavaScript syntax.\n // Goal: keep upstream source as-is, while letting the monorepo's TS/Vite pipeline build it.\n // TypeScript diagnostics are suppressed for synced files.\n let tsCode = jsCode;\n const hasDefaultObjectExport = false;\n\n // Convert CommonJS module.exports to ES modules\n tsCode = convertModuleExportsToEsm(tsCode);\n\n // Must be at the very top of the file to reliably suppress TypeScript diagnostics.\n // We keep synced files buildable even when upstream JS has type issues.\n const tsNoCheck = `// @ts-nocheck\\n`;\n\n // Add sync metadata header\n const header = `/**\n * @synced-from ${metadata.sourcePath}\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\n`;\n return { code: tsNoCheck + header + tsCode, hasDefaultObjectExport };\n}\n\n/**\n * Convert CommonJS module.exports to ES module exports\n */\nfunction convertModuleExportsToEsm(content: string): string {\n // Match: module.exports = { key: value, key2: value2, ... };\n const moduleExportsPattern = /module\\.exports\\s*=\\s*\\{([\\s\\S]*?)\\};?/;\n const match = content.match(moduleExportsPattern);\n\n if (!match) {\n return content;\n }\n\n const [fullMatch, objectContent] = match;\n\n // Parse the object content into key-value pairs\n const exports: string[] = [];\n const lines = objectContent.split('\\n');\n\n let currentKey: string | null = null;\n let currentValue: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === '{' || trimmed === '}') continue;\n\n // Check if this line starts a new key\n const keyMatch = trimmed.match(/^(\\w+):\\s*(.*)/);\n if (keyMatch) {\n // Save previous export if any\n if (currentKey) {\n const value = currentValue.join('\\n').replace(/,\\s*$/, ''); // Remove trailing comma\n exports.push(`export const ${currentKey} =\\n${value};`);\n }\n\n // Start new export\n currentKey = keyMatch[1];\n currentValue = [keyMatch[2]];\n } else {\n // Continuation of current value\n currentValue.push(line);\n }\n }\n\n // Save last export\n if (currentKey) {\n const value = currentValue.join('\\n').replace(/,\\s*$/, '');\n exports.push(`export const ${currentKey} =\\n${value};`);\n }\n\n // Replace the module.exports block with ES module exports\n const esmExports = exports.join('\\n\\n');\n return content.replace(fullMatch, esmExports);\n}\n\n/**\n * Convert JSX to TSX\n */\nexport function convertJsxToTsx(jsxCode: string, metadata: ConversionMetadata): ConversionResult {\n // We intentionally do NOT transform the JavaScript/JSX syntax.\n // Goal: keep upstream source as-is, while letting the monorepo's TS/Vite pipeline build it.\n // TypeScript diagnostics are suppressed for synced files.\n const tsxCode = jsxCode;\n const hasDefaultObjectExport = false;\n\n // Must be at the very top of the file to reliably suppress TypeScript diagnostics.\n // We keep synced files buildable even when upstream JSX has type issues.\n const tsNoCheck = `// @ts-nocheck\\n`;\n\n // Add sync metadata header\n const header = `/**\n * @synced-from ${metadata.sourcePath}\n * @auto-generated\n *\n * This file is automatically synced from pie-elements and converted to TypeScript.\n * Manual edits will be overwritten on next sync.\n * To make changes, edit the upstream JavaScript file and run sync again.\n */\n\n`;\n return { code: tsNoCheck + header + tsxCode, hasDefaultObjectExport };\n}\n\n/**\n * Fix imports from default export files\n * Some files export default objects but are imported with named imports\n */\nexport function fixImports(content: string, hasDefaultObjectExport: boolean): string {\n if (!hasDefaultObjectExport) {\n return content;\n }\n\n // Convert: import { something } from './file'\n // To: import * as file from './file'\n // This is needed when the imported file has export default {}\n return content.replace(\n /import\\s+{\\s*([^}]+)\\s*}\\s+from\\s+(['\"]\\.\\/[^'\"]+['\"])/g,\n (_match, _imports, path) => {\n // Extract filename from path\n const filename =\n path\n .replace(/['\"]/g, '')\n .split('/')\n .pop()\n ?.replace(/\\.\\w+$/, '') || 'module';\n return `import * as ${filename} from ${path}`;\n }\n );\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type ImportIntegrityStatus = 'direct' | 'transitive' | 'hoist' | 'broken' | 'peer';
|
|
2
|
+
export interface ImportIntegrityIssue {
|
|
3
|
+
dependency: string;
|
|
4
|
+
status: ImportIntegrityStatus;
|
|
5
|
+
declaredDirect: boolean;
|
|
6
|
+
resolvedPath?: string;
|
|
7
|
+
requiredBy?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PackageIntegrityResult {
|
|
10
|
+
packageName: string;
|
|
11
|
+
packagePath: string;
|
|
12
|
+
issues: ImportIntegrityIssue[];
|
|
13
|
+
}
|
|
14
|
+
interface CollectWorkspaceOptions {
|
|
15
|
+
includeNonPackageWorkspaces?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface AnalyzeIntegrityOptions {
|
|
18
|
+
includePeerGaps?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface AutoFixDependencyOptions extends CollectWorkspaceOptions {
|
|
21
|
+
packageName?: string;
|
|
22
|
+
includeTransitive?: boolean;
|
|
23
|
+
includePeerGaps?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface AutoFixDependencyResult {
|
|
26
|
+
packagesScanned: number;
|
|
27
|
+
packagesUpdated: number;
|
|
28
|
+
dependenciesAdded: number;
|
|
29
|
+
unresolved: Array<{
|
|
30
|
+
packageName: string;
|
|
31
|
+
dependency: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare function analyzePackageDependencyIntegrity(packagePath: string, options?: AnalyzeIntegrityOptions): Promise<PackageIntegrityResult | null>;
|
|
35
|
+
export declare function collectWorkspacePackageDirs(root: string, options?: CollectWorkspaceOptions): Promise<string[]>;
|
|
36
|
+
export declare function autoFixWorkspaceDependencyDeclarations(root: string, options?: AutoFixDependencyOptions): Promise<AutoFixDependencyResult>;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { createRequire, builtinModules } from 'node:module';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { readFile, readdir, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { init, parse } from 'es-module-lexer';
|
|
6
|
+
import { loadPackageJson } from './package-json.js';
|
|
7
|
+
const BUILTIN_SET = new Set([...builtinModules, ...builtinModules.map((m) => `node:${m}`)]);
|
|
8
|
+
const VALID_BARE_SPECIFIER = /^(@[a-z0-9._-]+\/[a-z0-9._-]+|[a-z0-9._-]+)(\/[a-z0-9._-]+)*$/i;
|
|
9
|
+
const WORKSPACE_SCAN_PREFIXES = ['packages/', 'apps/', 'tools/'];
|
|
10
|
+
const PLACEHOLDER_IMPORT_SPECIFIERS = new Set(['package', 'x']);
|
|
11
|
+
const IGNORED_PEER_DEPENDENCIES = new Set([
|
|
12
|
+
'react',
|
|
13
|
+
'react-dom',
|
|
14
|
+
'@emotion/react',
|
|
15
|
+
'@emotion/styled',
|
|
16
|
+
'@emotion/core',
|
|
17
|
+
]);
|
|
18
|
+
const FALLBACK_DEPENDENCY_VERSIONS = {
|
|
19
|
+
'js-combinatorics': '^2.1.2',
|
|
20
|
+
'nested-property': '^4.0.0',
|
|
21
|
+
'prosemirror-state': '^1.4.4',
|
|
22
|
+
'@testing-library/react': '^16.3.2',
|
|
23
|
+
'@testing-library/dom': '^10.4.1',
|
|
24
|
+
'@tiptap/extensions': '^3.20.0',
|
|
25
|
+
'@tiptap/extension-list': '^3.20.0',
|
|
26
|
+
'@tiptap/extension-code-block': '^3.20.0',
|
|
27
|
+
'react-is': '^19.2.0',
|
|
28
|
+
pluralize: '^8.0.0',
|
|
29
|
+
};
|
|
30
|
+
export async function analyzePackageDependencyIntegrity(packagePath, options = {}) {
|
|
31
|
+
const absPackagePath = resolve(packagePath);
|
|
32
|
+
const pkgJsonPath = join(absPackagePath, 'package.json');
|
|
33
|
+
if (!existsSync(pkgJsonPath)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const pkgJson = (await loadPackageJson(pkgJsonPath));
|
|
37
|
+
if (!pkgJson?.name) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const sourceDir = join(absPackagePath, 'src');
|
|
41
|
+
if (!existsSync(sourceDir)) {
|
|
42
|
+
return {
|
|
43
|
+
packageName: pkgJson.name,
|
|
44
|
+
packagePath: absPackagePath,
|
|
45
|
+
issues: [],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const importedPackages = await collectImportedPackages(sourceDir);
|
|
49
|
+
const declaredDirect = new Set([
|
|
50
|
+
...Object.keys(pkgJson.dependencies || {}),
|
|
51
|
+
...Object.keys(pkgJson.devDependencies || {}),
|
|
52
|
+
...Object.keys(pkgJson.peerDependencies || {}),
|
|
53
|
+
...Object.keys(pkgJson.optionalDependencies || {}),
|
|
54
|
+
]);
|
|
55
|
+
const resolveFromPackage = createRequire(pkgJsonPath);
|
|
56
|
+
const transitiveNames = await collectTransitiveDependencyNames(resolveFromPackage, declaredDirect);
|
|
57
|
+
const issues = [];
|
|
58
|
+
for (const dep of Array.from(importedPackages.keys()).sort()) {
|
|
59
|
+
if (dep === pkgJson.name) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const direct = declaredDirect.has(dep);
|
|
63
|
+
const specifiers = importedPackages.get(dep) || new Set([dep]);
|
|
64
|
+
const resolvedPath = resolveDependencyFromPackage(resolveFromPackage, dep, specifiers);
|
|
65
|
+
if (!resolvedPath) {
|
|
66
|
+
if (direct) {
|
|
67
|
+
const declaredManifest = resolveDeclaredPackageManifest(resolveFromPackage, dep);
|
|
68
|
+
if (declaredManifest) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
issues.push({
|
|
73
|
+
dependency: dep,
|
|
74
|
+
status: 'broken',
|
|
75
|
+
declaredDirect: direct,
|
|
76
|
+
});
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (direct) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (transitiveNames.has(dep)) {
|
|
83
|
+
issues.push({
|
|
84
|
+
dependency: dep,
|
|
85
|
+
status: 'transitive',
|
|
86
|
+
declaredDirect: false,
|
|
87
|
+
resolvedPath,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
issues.push({
|
|
92
|
+
dependency: dep,
|
|
93
|
+
status: 'hoist',
|
|
94
|
+
declaredDirect: false,
|
|
95
|
+
resolvedPath,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (options.includePeerGaps) {
|
|
100
|
+
const peerIssues = await collectMissingPeerDependencyIssues(pkgJson, declaredDirect, resolveFromPackage);
|
|
101
|
+
for (const peerIssue of peerIssues) {
|
|
102
|
+
const alreadyReported = issues.some((issue) => issue.dependency === peerIssue.dependency);
|
|
103
|
+
if (!alreadyReported) {
|
|
104
|
+
issues.push(peerIssue);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
packageName: pkgJson.name,
|
|
110
|
+
packagePath: absPackagePath,
|
|
111
|
+
issues,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export async function collectWorkspacePackageDirs(root, options = {}) {
|
|
115
|
+
const absRoot = resolve(root);
|
|
116
|
+
const out = new Set();
|
|
117
|
+
const rootPkgPath = join(absRoot, 'package.json');
|
|
118
|
+
const rootPkg = (await loadPackageJson(rootPkgPath));
|
|
119
|
+
const workspaces = rootPkg?.workspaces || [];
|
|
120
|
+
for (const pattern of workspaces) {
|
|
121
|
+
if (!WORKSPACE_SCAN_PREFIXES.some((prefix) => pattern.startsWith(prefix))) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const isPackagesWorkspace = pattern.startsWith('packages/');
|
|
125
|
+
if (!isPackagesWorkspace && !options.includeNonPackageWorkspaces) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const matches = await expandWorkspacePattern(absRoot, pattern);
|
|
129
|
+
for (const match of matches) {
|
|
130
|
+
if (existsSync(join(match, 'package.json'))) {
|
|
131
|
+
out.add(match);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return Array.from(out).sort();
|
|
136
|
+
}
|
|
137
|
+
async function expandWorkspacePattern(root, pattern) {
|
|
138
|
+
const normalized = pattern.replace(/\\/g, '/').replace(/\/$/, '');
|
|
139
|
+
if (!normalized.includes('*')) {
|
|
140
|
+
return [join(root, normalized)];
|
|
141
|
+
}
|
|
142
|
+
const [prefix, suffix = ''] = normalized.split('*');
|
|
143
|
+
const prefixPath = join(root, prefix);
|
|
144
|
+
if (!existsSync(prefixPath)) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
const dirEntries = await readdir(prefixPath, { withFileTypes: true });
|
|
148
|
+
const matches = [];
|
|
149
|
+
for (const entry of dirEntries) {
|
|
150
|
+
if (!entry.isDirectory()) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const candidate = join(prefixPath, entry.name, suffix);
|
|
154
|
+
if (existsSync(candidate)) {
|
|
155
|
+
matches.push(candidate);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return matches;
|
|
159
|
+
}
|
|
160
|
+
function resolveDependencyFromPackage(resolveFromPackage, dep, specifiers) {
|
|
161
|
+
const candidates = new Set([...specifiers, dep]);
|
|
162
|
+
for (const candidate of candidates) {
|
|
163
|
+
try {
|
|
164
|
+
return resolveFromPackage.resolve(candidate);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// try next candidate
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
function resolveDeclaredPackageManifest(resolveFromPackage, dep) {
|
|
173
|
+
const searchPaths = resolveFromPackage.resolve.paths(dep) || [];
|
|
174
|
+
for (const basePath of searchPaths) {
|
|
175
|
+
const manifestPath = join(basePath, dep, 'package.json');
|
|
176
|
+
if (existsSync(manifestPath)) {
|
|
177
|
+
return manifestPath;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
async function collectMissingPeerDependencyIssues(pkgJson, declaredDirect, resolveFromPackage) {
|
|
183
|
+
const issues = [];
|
|
184
|
+
const checkedPeers = new Set();
|
|
185
|
+
for (const directDep of Array.from(declaredDirect)) {
|
|
186
|
+
if (!directDep || directDep === pkgJson.name)
|
|
187
|
+
continue;
|
|
188
|
+
const depRoot = await resolvePackageRoot(resolveFromPackage, directDep);
|
|
189
|
+
const depPkgPath = depRoot && existsSync(join(depRoot, 'package.json'))
|
|
190
|
+
? join(depRoot, 'package.json')
|
|
191
|
+
: resolveDeclaredPackageManifest(resolveFromPackage, directDep);
|
|
192
|
+
if (!depPkgPath || !existsSync(depPkgPath)) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const depPkg = (await loadPackageJson(depPkgPath).catch(() => null));
|
|
196
|
+
if (!depPkg?.peerDependencies || typeof depPkg.peerDependencies !== 'object') {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
const optionalPeers = new Set(Object.entries(depPkg.peerDependenciesMeta || {})
|
|
200
|
+
.filter(([, meta]) => meta?.optional)
|
|
201
|
+
.map(([name]) => name));
|
|
202
|
+
for (const peerDep of Object.keys(depPkg.peerDependencies)) {
|
|
203
|
+
if (!peerDep || peerDep === pkgJson.name || optionalPeers.has(peerDep))
|
|
204
|
+
continue;
|
|
205
|
+
if (IGNORED_PEER_DEPENDENCIES.has(peerDep))
|
|
206
|
+
continue;
|
|
207
|
+
if (declaredDirect.has(peerDep) || checkedPeers.has(peerDep))
|
|
208
|
+
continue;
|
|
209
|
+
checkedPeers.add(peerDep);
|
|
210
|
+
const resolvedPath = resolveDependencyFromPackage(resolveFromPackage, peerDep, new Set([peerDep]));
|
|
211
|
+
issues.push({
|
|
212
|
+
dependency: peerDep,
|
|
213
|
+
status: 'peer',
|
|
214
|
+
declaredDirect: false,
|
|
215
|
+
resolvedPath: resolvedPath || undefined,
|
|
216
|
+
requiredBy: directDep,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return issues;
|
|
221
|
+
}
|
|
222
|
+
async function collectImportedPackages(sourceDir) {
|
|
223
|
+
const files = await listSourceFiles(sourceDir);
|
|
224
|
+
const imported = new Map();
|
|
225
|
+
for (const file of files) {
|
|
226
|
+
const content = await readFile(file, 'utf-8');
|
|
227
|
+
if (file.includes('/src/lib/element-imports.') ||
|
|
228
|
+
content.includes('AUTO-GENERATED') ||
|
|
229
|
+
content.includes('DO NOT EDIT MANUALLY')) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
for (const importedSpec of await extractBareImports(content)) {
|
|
233
|
+
if (!imported.has(importedSpec.packageName)) {
|
|
234
|
+
imported.set(importedSpec.packageName, new Set());
|
|
235
|
+
}
|
|
236
|
+
imported.get(importedSpec.packageName)?.add(importedSpec.rawSpecifier);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return imported;
|
|
240
|
+
}
|
|
241
|
+
async function listSourceFiles(dir) {
|
|
242
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
243
|
+
const files = [];
|
|
244
|
+
for (const entry of entries) {
|
|
245
|
+
const fullPath = join(dir, entry.name);
|
|
246
|
+
if (entry.isDirectory()) {
|
|
247
|
+
files.push(...(await listSourceFiles(fullPath)));
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
if (/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(entry.name)) {
|
|
251
|
+
files.push(fullPath);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return files;
|
|
255
|
+
}
|
|
256
|
+
async function extractBareImports(content) {
|
|
257
|
+
const imports = new Map();
|
|
258
|
+
try {
|
|
259
|
+
await init;
|
|
260
|
+
const [parsedImports] = parse(content);
|
|
261
|
+
for (const parsed of parsedImports) {
|
|
262
|
+
const rawSpecifier = parsed.n;
|
|
263
|
+
if (!rawSpecifier)
|
|
264
|
+
continue;
|
|
265
|
+
const dep = normalizeBarePackageSpecifier(rawSpecifier);
|
|
266
|
+
if (!dep)
|
|
267
|
+
continue;
|
|
268
|
+
if (!imports.has(dep)) {
|
|
269
|
+
imports.set(dep, new Set());
|
|
270
|
+
}
|
|
271
|
+
imports.get(dep)?.add(rawSpecifier);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
const staticPatterns = [
|
|
276
|
+
/^\s*import\s+[^'"]*?\s+from\s+['"]([^'"]+)['"]/gm,
|
|
277
|
+
/^\s*import\s*['"]([^'"]+)['"]/gm,
|
|
278
|
+
/^\s*export\s+[^'"]*?\s+from\s+['"]([^'"]+)['"]/gm,
|
|
279
|
+
/(?:^|[^\w$"'`])import\(\s*['"]([^'"]+)['"]\s*\)/gm,
|
|
280
|
+
];
|
|
281
|
+
for (const pattern of staticPatterns) {
|
|
282
|
+
let match = pattern.exec(content);
|
|
283
|
+
while (match !== null) {
|
|
284
|
+
const rawSpecifier = match[1];
|
|
285
|
+
const dep = normalizeBarePackageSpecifier(rawSpecifier);
|
|
286
|
+
if (dep) {
|
|
287
|
+
if (!imports.has(dep)) {
|
|
288
|
+
imports.set(dep, new Set());
|
|
289
|
+
}
|
|
290
|
+
imports.get(dep)?.add(rawSpecifier);
|
|
291
|
+
}
|
|
292
|
+
match = pattern.exec(content);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const requireContent = stripComments(content);
|
|
297
|
+
const requirePattern = /^\s*(?:const|let|var)?[\w${}\s,*=:.[\]-]*\brequire\(\s*['"]([^'"]+)['"]\s*\)/gm;
|
|
298
|
+
let requireMatch = requirePattern.exec(requireContent);
|
|
299
|
+
while (requireMatch !== null) {
|
|
300
|
+
const rawSpecifier = requireMatch[1];
|
|
301
|
+
const dep = normalizeBarePackageSpecifier(rawSpecifier);
|
|
302
|
+
if (dep) {
|
|
303
|
+
if (!imports.has(dep)) {
|
|
304
|
+
imports.set(dep, new Set());
|
|
305
|
+
}
|
|
306
|
+
imports.get(dep)?.add(rawSpecifier);
|
|
307
|
+
}
|
|
308
|
+
requireMatch = requirePattern.exec(requireContent);
|
|
309
|
+
}
|
|
310
|
+
const out = [];
|
|
311
|
+
for (const [packageName, specifiers] of imports) {
|
|
312
|
+
for (const rawSpecifier of specifiers) {
|
|
313
|
+
out.push({ packageName, rawSpecifier });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return out;
|
|
317
|
+
}
|
|
318
|
+
function stripComments(content) {
|
|
319
|
+
return content.replace(/\/\*[\s\S]*?\*\//g, '').replace(/(^|[^\\:])\/\/.*$/gm, '$1');
|
|
320
|
+
}
|
|
321
|
+
function normalizeBarePackageSpecifier(specifier) {
|
|
322
|
+
if (!specifier ||
|
|
323
|
+
specifier.startsWith('.') ||
|
|
324
|
+
specifier.startsWith('/') ||
|
|
325
|
+
specifier.startsWith('node:') ||
|
|
326
|
+
specifier.startsWith('$')) {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
if (BUILTIN_SET.has(specifier)) {
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
// Ignore virtual modules and URL/protocol specifiers.
|
|
333
|
+
if (specifier.includes(':')) {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
if (!VALID_BARE_SPECIFIER.test(specifier)) {
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
if (PLACEHOLDER_IMPORT_SPECIFIERS.has(specifier)) {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
if (specifier.startsWith('@')) {
|
|
343
|
+
const parts = specifier.split('/');
|
|
344
|
+
return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : null;
|
|
345
|
+
}
|
|
346
|
+
return specifier.split('/')[0] || null;
|
|
347
|
+
}
|
|
348
|
+
async function collectTransitiveDependencyNames(resolveFromPackage, roots) {
|
|
349
|
+
const seen = new Set();
|
|
350
|
+
const queue = Array.from(roots);
|
|
351
|
+
const transitive = new Set();
|
|
352
|
+
while (queue.length > 0) {
|
|
353
|
+
const dep = queue.shift();
|
|
354
|
+
if (!dep || seen.has(dep))
|
|
355
|
+
continue;
|
|
356
|
+
seen.add(dep);
|
|
357
|
+
transitive.add(dep);
|
|
358
|
+
const root = await resolvePackageRoot(resolveFromPackage, dep);
|
|
359
|
+
if (!root)
|
|
360
|
+
continue;
|
|
361
|
+
const pkgJsonPath = join(root, 'package.json');
|
|
362
|
+
if (!existsSync(pkgJsonPath))
|
|
363
|
+
continue;
|
|
364
|
+
let pkg = null;
|
|
365
|
+
try {
|
|
366
|
+
pkg = (await loadPackageJson(pkgJsonPath));
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
pkg = null;
|
|
370
|
+
}
|
|
371
|
+
if (!pkg)
|
|
372
|
+
continue;
|
|
373
|
+
const childDeps = Object.keys(pkg.dependencies || {});
|
|
374
|
+
for (const child of childDeps) {
|
|
375
|
+
if (!seen.has(child))
|
|
376
|
+
queue.push(child);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return transitive;
|
|
380
|
+
}
|
|
381
|
+
export async function autoFixWorkspaceDependencyDeclarations(root, options = {}) {
|
|
382
|
+
const absRoot = resolve(root);
|
|
383
|
+
const packageDirs = await collectWorkspacePackageDirs(absRoot, {
|
|
384
|
+
includeNonPackageWorkspaces: options.includeNonPackageWorkspaces,
|
|
385
|
+
});
|
|
386
|
+
const catalog = await buildDependencyVersionCatalog(absRoot, packageDirs);
|
|
387
|
+
const workspacePackages = await buildWorkspacePackageNameMap(packageDirs);
|
|
388
|
+
let packagesScanned = 0;
|
|
389
|
+
let packagesUpdated = 0;
|
|
390
|
+
let dependenciesAdded = 0;
|
|
391
|
+
const unresolved = [];
|
|
392
|
+
for (const packageDir of packageDirs) {
|
|
393
|
+
const analysis = await analyzePackageDependencyIntegrity(packageDir, {
|
|
394
|
+
includePeerGaps: options.includePeerGaps,
|
|
395
|
+
});
|
|
396
|
+
if (!analysis)
|
|
397
|
+
continue;
|
|
398
|
+
if (options.packageName && analysis.packageName !== options.packageName) {
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
packagesScanned++;
|
|
402
|
+
const pkgJsonPath = join(packageDir, 'package.json');
|
|
403
|
+
const pkgJson = (await loadPackageJson(pkgJsonPath));
|
|
404
|
+
if (!pkgJson)
|
|
405
|
+
continue;
|
|
406
|
+
const needs = analysis.issues.filter((issue) => {
|
|
407
|
+
if (issue.declaredDirect) {
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
if (issue.status === 'hoist' || issue.status === 'broken' || issue.status === 'peer') {
|
|
411
|
+
return true;
|
|
412
|
+
}
|
|
413
|
+
return options.includeTransitive === true && issue.status === 'transitive';
|
|
414
|
+
});
|
|
415
|
+
if (needs.length === 0) {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
if (!pkgJson.dependencies || typeof pkgJson.dependencies !== 'object') {
|
|
419
|
+
pkgJson.dependencies = {};
|
|
420
|
+
}
|
|
421
|
+
const deps = pkgJson.dependencies;
|
|
422
|
+
let modified = false;
|
|
423
|
+
for (const issue of needs) {
|
|
424
|
+
if (deps[issue.dependency]) {
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
const version = await resolveDependencyVersionForPackage(issue.dependency, pkgJsonPath, absRoot, catalog, workspacePackages);
|
|
428
|
+
if (!version) {
|
|
429
|
+
unresolved.push({ packageName: analysis.packageName, dependency: issue.dependency });
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
deps[issue.dependency] = version;
|
|
433
|
+
modified = true;
|
|
434
|
+
dependenciesAdded++;
|
|
435
|
+
}
|
|
436
|
+
if (modified) {
|
|
437
|
+
await writeFile(pkgJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`, 'utf-8');
|
|
438
|
+
packagesUpdated++;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
return {
|
|
442
|
+
packagesScanned,
|
|
443
|
+
packagesUpdated,
|
|
444
|
+
dependenciesAdded,
|
|
445
|
+
unresolved,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
async function buildWorkspacePackageNameMap(packageDirs) {
|
|
449
|
+
const map = new Map();
|
|
450
|
+
for (const packageDir of packageDirs) {
|
|
451
|
+
const pkgPath = join(packageDir, 'package.json');
|
|
452
|
+
if (!existsSync(pkgPath))
|
|
453
|
+
continue;
|
|
454
|
+
const pkg = (await loadPackageJson(pkgPath));
|
|
455
|
+
if (pkg?.name) {
|
|
456
|
+
map.set(pkg.name, packageDir);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return map;
|
|
460
|
+
}
|
|
461
|
+
async function buildDependencyVersionCatalog(rootDir, packageDirs) {
|
|
462
|
+
const catalog = new Map();
|
|
463
|
+
const addVersions = (record) => {
|
|
464
|
+
if (!record)
|
|
465
|
+
return;
|
|
466
|
+
for (const [name, version] of Object.entries(record)) {
|
|
467
|
+
if (!catalog.has(name)) {
|
|
468
|
+
catalog.set(name, version);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
const rootPkgPath = join(rootDir, 'package.json');
|
|
473
|
+
if (existsSync(rootPkgPath)) {
|
|
474
|
+
const rootPkg = (await loadPackageJson(rootPkgPath));
|
|
475
|
+
if (rootPkg) {
|
|
476
|
+
addVersions(rootPkg.dependencies);
|
|
477
|
+
addVersions(rootPkg.devDependencies);
|
|
478
|
+
addVersions(rootPkg.peerDependencies);
|
|
479
|
+
addVersions(rootPkg.optionalDependencies);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
for (const packageDir of packageDirs) {
|
|
483
|
+
const pkgPath = join(packageDir, 'package.json');
|
|
484
|
+
if (!existsSync(pkgPath))
|
|
485
|
+
continue;
|
|
486
|
+
const pkg = (await loadPackageJson(pkgPath));
|
|
487
|
+
if (!pkg)
|
|
488
|
+
continue;
|
|
489
|
+
addVersions(pkg.dependencies);
|
|
490
|
+
addVersions(pkg.devDependencies);
|
|
491
|
+
addVersions(pkg.peerDependencies);
|
|
492
|
+
addVersions(pkg.optionalDependencies);
|
|
493
|
+
}
|
|
494
|
+
return catalog;
|
|
495
|
+
}
|
|
496
|
+
async function resolveDependencyVersionForPackage(dep, pkgJsonPath, rootDir, catalog, workspacePackages) {
|
|
497
|
+
if (workspacePackages.has(dep)) {
|
|
498
|
+
return 'workspace:*';
|
|
499
|
+
}
|
|
500
|
+
const catalogVersion = catalog.get(dep);
|
|
501
|
+
if (catalogVersion) {
|
|
502
|
+
return catalogVersion;
|
|
503
|
+
}
|
|
504
|
+
if (FALLBACK_DEPENDENCY_VERSIONS[dep]) {
|
|
505
|
+
return FALLBACK_DEPENDENCY_VERSIONS[dep];
|
|
506
|
+
}
|
|
507
|
+
const requireFromPackage = createRequire(pkgJsonPath);
|
|
508
|
+
const packageRoot = await resolvePackageRoot(requireFromPackage, dep);
|
|
509
|
+
if (!packageRoot) {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
const depPkgPath = join(packageRoot, 'package.json');
|
|
513
|
+
if (!existsSync(depPkgPath)) {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
const depPkg = (await loadPackageJson(depPkgPath));
|
|
517
|
+
if (!depPkg?.version) {
|
|
518
|
+
return null;
|
|
519
|
+
}
|
|
520
|
+
// Keep workspace references if dependency resolves to local workspace package path.
|
|
521
|
+
if (packageRoot.startsWith(join(rootDir, 'packages')) ||
|
|
522
|
+
packageRoot.startsWith(join(rootDir, 'apps'))) {
|
|
523
|
+
return 'workspace:*';
|
|
524
|
+
}
|
|
525
|
+
return `^${depPkg.version}`;
|
|
526
|
+
}
|
|
527
|
+
async function resolvePackageRoot(resolveFromPackage, dep) {
|
|
528
|
+
let resolvedFile;
|
|
529
|
+
try {
|
|
530
|
+
resolvedFile = resolveFromPackage.resolve(dep);
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
let current = dirname(resolvedFile);
|
|
536
|
+
const floor = dirname(current);
|
|
537
|
+
while (current !== floor) {
|
|
538
|
+
const pkgJsonPath = join(current, 'package.json');
|
|
539
|
+
if (existsSync(pkgJsonPath)) {
|
|
540
|
+
try {
|
|
541
|
+
const pkg = (await loadPackageJson(pkgJsonPath));
|
|
542
|
+
if (pkg.name === dep) {
|
|
543
|
+
return current;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
// ignore parse/load errors and keep walking
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
const parent = dirname(current);
|
|
551
|
+
if (parent === current)
|
|
552
|
+
break;
|
|
553
|
+
current = parent;
|
|
554
|
+
}
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=dependency-integrity.js.map
|