opkg 0.5.0 → 0.6.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/README.md +49 -8
- package/dist/commands/add.js +11 -276
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.js +73 -145
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +26 -668
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/pack.js +10 -137
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/push.js +14 -8
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/save.js +12 -167
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +5 -5
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/constants/index.js +18 -45
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/workspace.js +9 -0
- package/dist/constants/workspace.js.map +1 -0
- package/dist/core/add/add-conflict-handler.js +68 -0
- package/dist/core/add/add-conflict-handler.js.map +1 -0
- package/dist/core/add/add-pipeline.js +137 -0
- package/dist/core/add/add-pipeline.js.map +1 -0
- package/dist/core/add/package-index-updater.js +62 -33
- package/dist/core/add/package-index-updater.js.map +1 -1
- package/dist/core/add/platform-path-transformer.js +47 -0
- package/dist/core/add/platform-path-transformer.js.map +1 -0
- package/dist/core/add/source-collector.js +57 -0
- package/dist/core/add/source-collector.js.map +1 -0
- package/dist/core/dependency-resolver.js +3 -1
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/directory.js +2 -2
- package/dist/core/directory.js.map +1 -1
- package/dist/core/discovery/file-discovery.js +55 -54
- package/dist/core/discovery/file-discovery.js.map +1 -1
- package/dist/core/discovery/platform-files-discovery.js +32 -17
- package/dist/core/discovery/platform-files-discovery.js.map +1 -1
- package/dist/core/install/bulk-install-pipeline.js +199 -0
- package/dist/core/install/bulk-install-pipeline.js.map +1 -0
- package/dist/core/install/canonical-plan.js +123 -0
- package/dist/core/install/canonical-plan.js.map +1 -0
- package/dist/core/install/dry-run.js +2 -2
- package/dist/core/install/dry-run.js.map +1 -1
- package/dist/core/install/index.js +3 -0
- package/dist/core/install/index.js.map +1 -0
- package/dist/core/install/install-errors.js +41 -0
- package/dist/core/install/install-errors.js.map +1 -0
- package/dist/core/install/install-flow.js +2 -5
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +228 -0
- package/dist/core/install/install-pipeline.js.map +1 -0
- package/dist/core/install/install-reporting.js +99 -0
- package/dist/core/install/install-reporting.js.map +1 -0
- package/dist/core/install/platform-resolution.js +6 -6
- package/dist/core/install/platform-resolution.js.map +1 -1
- package/dist/core/install/remote-flow.js +67 -1
- package/dist/core/install/remote-flow.js.map +1 -1
- package/dist/core/openpackage.js +16 -8
- package/dist/core/openpackage.js.map +1 -1
- package/dist/core/package-context.js +246 -0
- package/dist/core/package-context.js.map +1 -0
- package/dist/core/package.js +3 -2
- package/dist/core/package.js.map +1 -1
- package/dist/core/platforms.js +126 -217
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/registry/registry-rename.js +2 -1
- package/dist/core/registry/registry-rename.js.map +1 -1
- package/dist/core/registry.js +10 -3
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +2 -1
- package/dist/core/remote-pull.js.map +1 -1
- package/dist/core/save/constants.js +4 -0
- package/dist/core/save/constants.js.map +1 -1
- package/dist/core/save/name-resolution.js +31 -0
- package/dist/core/save/name-resolution.js.map +1 -0
- package/dist/core/save/package-detection.js +147 -0
- package/dist/core/save/package-detection.js.map +1 -0
- package/dist/core/save/package-saver.js +46 -43
- package/dist/core/save/package-saver.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +50 -71
- package/dist/core/save/package-yml-generator.js.map +1 -1
- package/dist/core/save/root-save-candidates.js.map +1 -1
- package/dist/core/save/save-candidate-loader.js +89 -0
- package/dist/core/save/save-candidate-loader.js.map +1 -0
- package/dist/core/save/save-conflict-resolution.js +72 -410
- package/dist/core/save/save-conflict-resolution.js.map +1 -1
- package/dist/core/save/save-conflict-resolver.js +277 -0
- package/dist/core/save/save-conflict-resolver.js.map +1 -0
- package/dist/core/save/save-pipeline.js +151 -0
- package/dist/core/save/save-pipeline.js.map +1 -0
- package/dist/core/save/save-types.js +2 -0
- package/dist/core/save/save-types.js.map +1 -0
- package/dist/core/save/save-yml-resolution.js +77 -39
- package/dist/core/save/save-yml-resolution.js.map +1 -1
- package/dist/core/save/workspace-rename.js +6 -6
- package/dist/core/save/workspace-rename.js.map +1 -1
- package/dist/core/scoping/package-scoping.js +13 -1
- package/dist/core/scoping/package-scoping.js.map +1 -1
- package/dist/core/status/status-file-discovery.js +12 -30
- package/dist/core/status/status-file-discovery.js.map +1 -1
- package/dist/core/sync/platform-sync.js +7 -4
- package/dist/core/sync/platform-sync.js.map +1 -1
- package/dist/core/sync/root-files-sync.js +59 -1
- package/dist/core/sync/root-files-sync.js.map +1 -1
- package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
- package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/file-processing.js +5 -58
- package/dist/utils/file-processing.js.map +1 -1
- package/dist/utils/index-based-installer.js +15 -33
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-file-discovery.js +3 -3
- package/dist/utils/install-file-discovery.js.map +1 -1
- package/dist/utils/install-orchestrator.js +21 -21
- package/dist/utils/install-orchestrator.js.map +1 -1
- package/dist/utils/jsonc.js +44 -0
- package/dist/utils/jsonc.js.map +1 -0
- package/dist/utils/package-copy.js +199 -0
- package/dist/utils/package-copy.js.map +1 -0
- package/dist/utils/package-filters.js +125 -0
- package/dist/utils/package-filters.js.map +1 -0
- package/dist/utils/package-index-yml.js +15 -10
- package/dist/utils/package-index-yml.js.map +1 -1
- package/dist/utils/package-installation.js +4 -113
- package/dist/utils/package-installation.js.map +1 -1
- package/dist/utils/package-local-files.js +2 -35
- package/dist/utils/package-local-files.js.map +1 -1
- package/dist/utils/package-management.js +59 -37
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-yml.js +24 -0
- package/dist/utils/package-yml.js.map +1 -1
- package/dist/utils/path-normalization.js +8 -53
- package/dist/utils/path-normalization.js.map +1 -1
- package/dist/utils/paths.js +17 -9
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-file.js +16 -59
- package/dist/utils/platform-file.js.map +1 -1
- package/dist/utils/platform-mapper.js +29 -41
- package/dist/utils/platform-mapper.js.map +1 -1
- package/dist/utils/platform-specific-paths.js.map +1 -1
- package/dist/utils/platform-utils.js +28 -139
- package/dist/utils/platform-utils.js.map +1 -1
- package/dist/utils/platform-yaml-merge.js +13 -6
- package/dist/utils/platform-yaml-merge.js.map +1 -1
- package/dist/utils/registry-entry-filter.js +38 -24
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +10 -0
- package/dist/utils/registry-paths.js.map +1 -0
- package/dist/utils/root-file-installer.js +19 -0
- package/dist/utils/root-file-installer.js.map +1 -1
- package/dist/utils/root-file-registry.js.map +1 -1
- package/package.json +3 -2
- package/platforms.jsonc +178 -0
- package/specs/package/README.md +60 -0
- package/specs/package/nested-packages-and-parent-packages.md +79 -0
- package/specs/package/package-index-yml.md +171 -0
- package/specs/package/package-root-layout.md +78 -0
- package/specs/package/registry-payload-and-copy.md +77 -0
- package/specs/package/universal-content.md +144 -0
- package/specs/platforms.md +193 -0
- package/specs/save/README.md +40 -0
- package/specs/save/save-conflict-resolution.md +146 -0
- package/specs/save/save-file-discovery.md +101 -0
- package/specs/save/save-frontmatter-overrides.md +81 -0
- package/specs/save/save-modes-inputs.md +53 -0
- package/specs/save/save-naming-scoping.md +93 -0
- package/specs/save/save-package-detection.md +60 -0
- package/specs/save/save-registry-sync.md +126 -0
- package/dist/commands/release.js +0 -33
- package/dist/commands/release.js.map +0 -1
- package/dist/commands/tag.js +0 -311
- package/dist/commands/tag.js.map +0 -1
- package/dist/commands/update.js +0 -30
- package/dist/commands/update.js.map +0 -1
- package/dist/core/add/formula-index-updater.js +0 -290
- package/dist/core/add/formula-index-updater.js.map +0 -1
- package/dist/core/discovery/ai-files-discovery.js +0 -2
- package/dist/core/discovery/ai-files-discovery.js.map +0 -1
- package/dist/core/discovery/formula-files-discovery.js +0 -14
- package/dist/core/discovery/formula-files-discovery.js.map +0 -1
- package/dist/core/discovery/index-files-discovery.js +0 -91
- package/dist/core/discovery/index-files-discovery.js.map +0 -1
- package/dist/core/discovery/md-files-discovery.js +0 -82
- package/dist/core/discovery/md-files-discovery.js.map +0 -1
- package/dist/core/discovery/package-files-discovery.js +0 -14
- package/dist/core/discovery/package-files-discovery.js.map +0 -1
- package/dist/core/discovery/platform-discovery.js +0 -84
- package/dist/core/discovery/platform-discovery.js.map +0 -1
- package/dist/core/discovery/root-files-discovery.js +0 -2
- package/dist/core/discovery/root-files-discovery.js.map +0 -1
- package/dist/core/formula.js +0 -170
- package/dist/core/formula.js.map +0 -1
- package/dist/core/git-registry.js +0 -46
- package/dist/core/git-registry.js.map +0 -1
- package/dist/core/groundzero.js +0 -277
- package/dist/core/groundzero.js.map +0 -1
- package/dist/core/install/scenario.js +0 -11
- package/dist/core/install/scenario.js.map +0 -1
- package/dist/core/package-sync.js +0 -219
- package/dist/core/package-sync.js.map +0 -1
- package/dist/core/save/formula-file-generator.js +0 -167
- package/dist/core/save/formula-file-generator.js.map +0 -1
- package/dist/core/save/formula-saver.js +0 -52
- package/dist/core/save/formula-saver.js.map +0 -1
- package/dist/core/save/formula-yml-generator.js +0 -89
- package/dist/core/save/formula-yml-generator.js.map +0 -1
- package/dist/core/save/formula-yml-versioning.js +0 -108
- package/dist/core/save/formula-yml-versioning.js.map +0 -1
- package/dist/core/save/generic-file-sync.js +0 -38
- package/dist/core/save/generic-file-sync.js.map +0 -1
- package/dist/core/save/md-files-sync.js +0 -33
- package/dist/core/save/md-files-sync.js.map +0 -1
- package/dist/core/save/package-yml-versioning.js +0 -108
- package/dist/core/save/package-yml-versioning.js.map +0 -1
- package/dist/core/save/platform-sync.js +0 -95
- package/dist/core/save/platform-sync.js.map +0 -1
- package/dist/core/save/root-files-sync.js +0 -140
- package/dist/core/save/root-files-sync.js.map +0 -1
- package/dist/core/save/save-candidate-types.js +0 -2
- package/dist/core/save/save-candidate-types.js.map +0 -1
- package/dist/core/save/save-conflict-types.js +0 -2
- package/dist/core/save/save-conflict-types.js.map +0 -1
- package/dist/core/save/save-file-discovery.js +0 -5
- package/dist/core/save/save-file-discovery.js.map +0 -1
- package/dist/core/status-file-discovery.js +0 -175
- package/dist/core/status-file-discovery.js.map +0 -1
- package/dist/utils/discovery/file-processing.js +0 -156
- package/dist/utils/discovery/file-processing.js.map +0 -1
- package/dist/utils/discovery/formula-discovery.js +0 -211
- package/dist/utils/discovery/formula-discovery.js.map +0 -1
- package/dist/utils/discovery/platform-discovery.js +0 -2
- package/dist/utils/discovery/platform-discovery.js.map +0 -1
- package/dist/utils/formula-discovery.js +0 -102
- package/dist/utils/formula-discovery.js.map +0 -1
- package/dist/utils/formula-index-yml.js +0 -122
- package/dist/utils/formula-index-yml.js.map +0 -1
- package/dist/utils/formula-installation.js +0 -110
- package/dist/utils/formula-installation.js.map +0 -1
- package/dist/utils/formula-local-files.js +0 -38
- package/dist/utils/formula-local-files.js.map +0 -1
- package/dist/utils/formula-management.js +0 -191
- package/dist/utils/formula-management.js.map +0 -1
- package/dist/utils/formula-name.js +0 -97
- package/dist/utils/formula-name.js.map +0 -1
- package/dist/utils/formula-versioning.js +0 -109
- package/dist/utils/formula-versioning.js.map +0 -1
- package/dist/utils/formula-yml.js +0 -82
- package/dist/utils/formula-yml.js.map +0 -1
- package/dist/utils/git.js +0 -54
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/id-based-discovery.js +0 -126
- package/dist/utils/id-based-discovery.js.map +0 -1
- package/dist/utils/id-based-installer.js +0 -249
- package/dist/utils/id-based-installer.js.map +0 -1
- package/dist/utils/index-yml-based-installer.js +0 -375
- package/dist/utils/index-yml-based-installer.js.map +0 -1
- package/dist/utils/index-yml.js +0 -124
- package/dist/utils/index-yml.js.map +0 -1
- package/dist/utils/md-frontmatter.js +0 -3
- package/dist/utils/md-frontmatter.js.map +0 -1
- package/dist/utils/package-link-yml.js +0 -92
- package/dist/utils/package-link-yml.js.map +0 -1
- package/dist/utils/platform-discovery.js +0 -2
- package/dist/utils/platform-discovery.js.map +0 -1
- package/dist/utils/platform-frontmatter-split.js +0 -15
- package/dist/utils/platform-frontmatter-split.js.map +0 -1
- package/dist/utils/timestamp-encoder.js +0 -13
- package/dist/utils/timestamp-encoder.js.map +0 -1
- package/dist/utils/wip-versioning.js +0 -24
- package/dist/utils/wip-versioning.js.map +0 -1
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ID-based Discovery Utilities
|
|
3
|
-
* Provides functions for scanning, mapping, and resolving files by their frontmatter IDs
|
|
4
|
-
* for platform-specific markdown files during installation.
|
|
5
|
-
*/
|
|
6
|
-
import { join, dirname } from 'path';
|
|
7
|
-
import { exists } from './fs.js';
|
|
8
|
-
import { isValidEntityId } from './entity-id.js';
|
|
9
|
-
import { formulaManager } from '../core/formula.js';
|
|
10
|
-
import { getPlatformDefinition } from '../core/platforms.js';
|
|
11
|
-
import { FILE_PATTERNS, PLATFORM_DIRS, PLATFORMS, UNIVERSAL_SUBDIRS } from '../constants/index.js';
|
|
12
|
-
import { findFilesByExtension } from './file-processing.js';
|
|
13
|
-
/**
|
|
14
|
-
* Build a map of file IDs to file info for all markdown files in cwd platform directories
|
|
15
|
-
* that have formula frontmatter matching the specified formula name.
|
|
16
|
-
*/
|
|
17
|
-
export async function buildCwdIdMap(cwd, platforms, formulaName) {
|
|
18
|
-
// Frontmatter support has been removed, return empty map
|
|
19
|
-
return new Map();
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Build a map of registry files with their IDs and adjacent file information
|
|
23
|
-
* for platform-specific markdown files in the formula.
|
|
24
|
-
*/
|
|
25
|
-
export async function buildRegistryIdMap(formulaName, version) {
|
|
26
|
-
// Frontmatter support removed, return empty map
|
|
27
|
-
return new Map();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Load platform-specific YAML override files from the registry for a formula version.
|
|
31
|
-
* Matches files in universal subdirs with pattern: "{subdir}/{base}.{platform}.yml"
|
|
32
|
-
*/
|
|
33
|
-
export async function loadRegistryYamlOverrides(formulaName, version) {
|
|
34
|
-
const overrides = [];
|
|
35
|
-
// Load formula from registry
|
|
36
|
-
const formula = await formulaManager.loadFormula(formulaName, version);
|
|
37
|
-
// Known platforms for suffix matching
|
|
38
|
-
const platformValues = Object.values(PLATFORMS);
|
|
39
|
-
const subdirs = Object.values(UNIVERSAL_SUBDIRS);
|
|
40
|
-
for (const file of formula.files) {
|
|
41
|
-
const path = file.path;
|
|
42
|
-
// Must be in a universal subdir
|
|
43
|
-
if (!subdirs.some(sd => path.startsWith(sd + '/')))
|
|
44
|
-
continue;
|
|
45
|
-
// Must end with .yml and have a platform suffix before it
|
|
46
|
-
if (!path.endsWith(FILE_PATTERNS.YML_FILE))
|
|
47
|
-
continue;
|
|
48
|
-
const lastDot = path.lastIndexOf('.');
|
|
49
|
-
const secondLastDot = path.lastIndexOf('.', lastDot - 1);
|
|
50
|
-
if (secondLastDot === -1)
|
|
51
|
-
continue;
|
|
52
|
-
const possiblePlatform = path.slice(secondLastDot + 1, lastDot);
|
|
53
|
-
if (!platformValues.includes(possiblePlatform))
|
|
54
|
-
continue;
|
|
55
|
-
overrides.push({ path: file.path, content: file.content, encoding: 'utf8' });
|
|
56
|
-
}
|
|
57
|
-
return overrides;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Find where to install a new file based on adjacent file locations in cwd
|
|
61
|
-
* Returns the directory path where the file should be installed, or null if no adjacent files found
|
|
62
|
-
*/
|
|
63
|
-
export async function resolveInstallPathFromAdjacent(adjacentIds, cwdIdMap) {
|
|
64
|
-
// Look for any adjacent file that exists in cwd
|
|
65
|
-
for (const adjacentId of adjacentIds) {
|
|
66
|
-
const cwdEntries = cwdIdMap.get(adjacentId);
|
|
67
|
-
if (cwdEntries && cwdEntries.length > 0) {
|
|
68
|
-
// Found adjacent files - use the first one's directory
|
|
69
|
-
return dirname(cwdEntries[0].fullPath);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Validate and clean invalid formula files in cwd
|
|
76
|
-
* - Files with valid IDs matching formula but not in registry → delete file
|
|
77
|
-
*/
|
|
78
|
-
export async function cleanupInvalidFormulaFiles(cwd, platforms, formulaName, registryIdMap) {
|
|
79
|
-
const cleaned = [];
|
|
80
|
-
const deleted = [];
|
|
81
|
-
// Build set of valid registry IDs
|
|
82
|
-
const validRegistryIds = new Set();
|
|
83
|
-
for (const [, info] of registryIdMap) {
|
|
84
|
-
if (info.id && isValidEntityId(info.id)) {
|
|
85
|
-
validRegistryIds.add(info.id);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Helper to process a file for cleanup
|
|
89
|
-
const processFileForCleanup = async (filePath) => {
|
|
90
|
-
// Frontmatter support removed - no cleanup needed
|
|
91
|
-
};
|
|
92
|
-
// 1) AI directory
|
|
93
|
-
const aiDir = join(cwd, PLATFORM_DIRS.AI);
|
|
94
|
-
if (await exists(aiDir)) {
|
|
95
|
-
const aiFiles = await findFilesByExtension(aiDir);
|
|
96
|
-
await Promise.all(aiFiles.map(f => processFileForCleanup(f.fullPath)));
|
|
97
|
-
}
|
|
98
|
-
// 2) All platform subdirectories
|
|
99
|
-
for (const platform of platforms) {
|
|
100
|
-
const platformDef = getPlatformDefinition(platform);
|
|
101
|
-
for (const [, subdirDef] of Object.entries(platformDef.subdirs)) {
|
|
102
|
-
const subdirPath = join(cwd, platformDef.rootDir, subdirDef.path);
|
|
103
|
-
if (!(await exists(subdirPath))) {
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
const patterns = subdirDef.readExts.length > 0 ? subdirDef.readExts : [];
|
|
107
|
-
const files = await findFilesByExtension(subdirPath, patterns);
|
|
108
|
-
await Promise.all(files.map(f => processFileForCleanup(f.fullPath)));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return { cleaned, deleted };
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Extract file ID information from a file path
|
|
115
|
-
*/
|
|
116
|
-
export async function extractFileIdInfo(filePath) {
|
|
117
|
-
// Frontmatter support removed
|
|
118
|
-
return {
|
|
119
|
-
fullPath: filePath,
|
|
120
|
-
id: null,
|
|
121
|
-
formulaName: null,
|
|
122
|
-
isValid: false,
|
|
123
|
-
frontmatter: null
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=id-based-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"id-based-discovery.js","sourceRoot":"","sources":["../../src/utils/id-based-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ID-based Installer
|
|
3
|
-
* Handles installation of platform-specific markdown files using ID-based matching
|
|
4
|
-
* instead of path-based matching, allowing custom file organization in cwd.
|
|
5
|
-
*/
|
|
6
|
-
import { join, dirname, relative } from 'path';
|
|
7
|
-
import { exists, ensureDir, writeTextFile, remove } from './fs.js';
|
|
8
|
-
import { logger } from './logger.js';
|
|
9
|
-
import { getFirstPathComponent, getPathAfterFirstComponent } from './path-normalization.js';
|
|
10
|
-
import { getPlatformDefinition } from '../core/platforms.js';
|
|
11
|
-
import { PLATFORM_DIRS } from '../constants/index.js';
|
|
12
|
-
import { buildCwdIdMap, resolveInstallPathFromAdjacent, cleanupInvalidFormulaFiles } from './id-based-discovery.js';
|
|
13
|
-
import { getPlatformSpecificFilename, parseUniversalPath } from './platform-file.js';
|
|
14
|
-
import { mergePlatformYamlOverride } from './platform-yaml-merge.js';
|
|
15
|
-
import { loadRegistryYamlOverrides } from './id-based-discovery.js';
|
|
16
|
-
import { rename } from 'fs/promises';
|
|
17
|
-
/**
|
|
18
|
-
* Variant that accepts a pre-discovered registry ID map to avoid duplicate discovery.
|
|
19
|
-
*/
|
|
20
|
-
export async function installFilesByIdWithMap(cwd, formulaName, version, platforms, registryIdMap, options, forceOverwrite = false) {
|
|
21
|
-
const result = {
|
|
22
|
-
installed: 0,
|
|
23
|
-
updated: 0,
|
|
24
|
-
renamed: 0,
|
|
25
|
-
cleaned: 0,
|
|
26
|
-
deleted: 0,
|
|
27
|
-
skipped: 0,
|
|
28
|
-
files: [],
|
|
29
|
-
installedFiles: [],
|
|
30
|
-
updatedFiles: []
|
|
31
|
-
};
|
|
32
|
-
logger.debug(`Installing platform files by ID (pre-discovered) for ${formulaName}@${version}`, {
|
|
33
|
-
platforms,
|
|
34
|
-
prediscovered: registryIdMap.size
|
|
35
|
-
});
|
|
36
|
-
// Load YAML overrides once per install (used lazily per platform)
|
|
37
|
-
const yamlOverrides = await loadRegistryYamlOverrides(formulaName, version);
|
|
38
|
-
// Step 1: Build cwd ID map
|
|
39
|
-
const cwdIdMap = await buildCwdIdMap(cwd, platforms, formulaName);
|
|
40
|
-
// Step 3: Clean up invalid files in cwd
|
|
41
|
-
const cleanupResult = await cleanupInvalidFormulaFiles(cwd, platforms, formulaName, registryIdMap);
|
|
42
|
-
result.cleaned = cleanupResult.cleaned.length;
|
|
43
|
-
result.deleted = cleanupResult.deleted.length;
|
|
44
|
-
// Split registry files into AI-scoped and platform-scoped
|
|
45
|
-
const aiFiles = [];
|
|
46
|
-
const nonAiFiles = [];
|
|
47
|
-
for (const [, fileInfo] of registryIdMap) {
|
|
48
|
-
if (fileInfo.parentDir === PLATFORM_DIRS.AI || fileInfo.parentDir.startsWith(PLATFORM_DIRS.AI + '/')) {
|
|
49
|
-
aiFiles.push(fileInfo);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
nonAiFiles.push(fileInfo);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Process AI files once (not per-platform)
|
|
56
|
-
if (aiFiles.length > 0) {
|
|
57
|
-
const aiFilesByDir = new Map();
|
|
58
|
-
for (const fileInfo of aiFiles) {
|
|
59
|
-
const parentDir = fileInfo.parentDir;
|
|
60
|
-
if (!aiFilesByDir.has(parentDir))
|
|
61
|
-
aiFilesByDir.set(parentDir, []);
|
|
62
|
-
aiFilesByDir.get(parentDir).push(fileInfo);
|
|
63
|
-
}
|
|
64
|
-
for (const [parentDir, files] of aiFilesByDir) {
|
|
65
|
-
await processBatchOfFilesForAi(cwd, parentDir, files, cwdIdMap, options, result);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Step 4: Process each platform separately for non-AI files
|
|
69
|
-
for (const platform of platforms) {
|
|
70
|
-
const filesByDir = new Map();
|
|
71
|
-
for (const fileInfo of nonAiFiles) {
|
|
72
|
-
const parentDir = fileInfo.parentDir;
|
|
73
|
-
if (!filesByDir.has(parentDir))
|
|
74
|
-
filesByDir.set(parentDir, []);
|
|
75
|
-
filesByDir.get(parentDir).push(fileInfo);
|
|
76
|
-
}
|
|
77
|
-
for (const [parentDir, files] of filesByDir) {
|
|
78
|
-
await processBatchOfFilesForPlatform(cwd, platform, parentDir, files, cwdIdMap, options, forceOverwrite, result, yamlOverrides);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
logger.info(`ID-based installation (pre-discovered) complete: ${result.installed} installed, ${result.updated} updated, ${result.renamed} renamed, ${result.skipped} skipped`);
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Split files into matching (existing ID in scope) and new (fresh) categories
|
|
86
|
-
*/
|
|
87
|
-
function splitMatchingAndNew(files, cwdIdMap, inScope) {
|
|
88
|
-
const matching = [];
|
|
89
|
-
const fresh = [];
|
|
90
|
-
for (const file of files) {
|
|
91
|
-
const entries = file.id ? cwdIdMap.get(file.id) : null;
|
|
92
|
-
const exists = entries?.some(inScope) ?? false;
|
|
93
|
-
(file.id && exists ? matching : fresh).push(file);
|
|
94
|
-
}
|
|
95
|
-
return { matching, fresh };
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Update matching entries with new content and optional rename
|
|
99
|
-
*/
|
|
100
|
-
async function updateMatchingEntries(cwd, registryFile, entries, computeTargetFileName, getContent, canOverwriteRename, options, result) {
|
|
101
|
-
for (const entry of entries) {
|
|
102
|
-
const currentPath = entry.fullPath;
|
|
103
|
-
const currentFileName = entry.fileName;
|
|
104
|
-
const targetFileName = computeTargetFileName(registryFile);
|
|
105
|
-
const needsRename = currentFileName !== targetFileName;
|
|
106
|
-
const targetPath = needsRename ? join(dirname(currentPath), targetFileName) : currentPath;
|
|
107
|
-
if (needsRename && (await exists(targetPath))) {
|
|
108
|
-
if (!(canOverwriteRename || options.force)) {
|
|
109
|
-
logger.warn(`Cannot rename ${currentFileName} to ${targetFileName}: target exists`);
|
|
110
|
-
result.skipped++;
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
await remove(targetPath);
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
const content = await getContent(registryFile);
|
|
117
|
-
await writeTextFile(currentPath, content);
|
|
118
|
-
if (needsRename) {
|
|
119
|
-
await rename(currentPath, targetPath);
|
|
120
|
-
result.renamed++;
|
|
121
|
-
}
|
|
122
|
-
result.updated++;
|
|
123
|
-
const rel = relative(cwd, targetPath);
|
|
124
|
-
result.files.push(rel);
|
|
125
|
-
result.updatedFiles.push(rel);
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
logger.error(`Failed to update file ${currentPath}: ${err}`);
|
|
129
|
-
result.skipped++;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Collect all adjacent IDs from a list of files (excluding each file's own ID)
|
|
135
|
-
*/
|
|
136
|
-
function collectAdjacentIds(files) {
|
|
137
|
-
const s = new Set();
|
|
138
|
-
for (const f of files)
|
|
139
|
-
for (const id of f.adjacentIds)
|
|
140
|
-
if (id !== f.id)
|
|
141
|
-
s.add(id);
|
|
142
|
-
return Array.from(s);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Resolve fallback target directory for a given scope (AI or platform)
|
|
146
|
-
*/
|
|
147
|
-
async function resolveTargetDirForScope(cwd, registryParentDir, scope) {
|
|
148
|
-
if (scope === PLATFORM_DIRS.AI) {
|
|
149
|
-
const relAfterAi = registryParentDir === PLATFORM_DIRS.AI
|
|
150
|
-
? ''
|
|
151
|
-
: registryParentDir.startsWith(PLATFORM_DIRS.AI + '/')
|
|
152
|
-
? registryParentDir.slice(PLATFORM_DIRS.AI.length + 1)
|
|
153
|
-
: registryParentDir;
|
|
154
|
-
return relAfterAi ? join(cwd, PLATFORM_DIRS.AI, relAfterAi) : join(cwd, PLATFORM_DIRS.AI);
|
|
155
|
-
}
|
|
156
|
-
return mapRegistryPathToCwd(cwd, [scope], registryParentDir);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Generic installer for new files with injected behavior
|
|
160
|
-
*/
|
|
161
|
-
async function installNewFilesGeneric(cwd, registryParentDir, files, cwdIdMap, resolveFallbackDir, getFileName, getContent, options, result) {
|
|
162
|
-
const resolvedDir = await resolveInstallPathFromAdjacent(collectAdjacentIds(files), cwdIdMap);
|
|
163
|
-
const targetDir = resolvedDir ?? (await resolveFallbackDir(cwd, registryParentDir));
|
|
164
|
-
if (!targetDir)
|
|
165
|
-
return;
|
|
166
|
-
for (const file of files) {
|
|
167
|
-
const fileName = getFileName(file);
|
|
168
|
-
const targetPath = join(targetDir, fileName);
|
|
169
|
-
if (await exists(targetPath)) {
|
|
170
|
-
if (!options.force) {
|
|
171
|
-
console.log(`Skipping ${fileName} - already exists at ${targetPath}`);
|
|
172
|
-
result.skipped++;
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
try {
|
|
177
|
-
await ensureDir(targetDir);
|
|
178
|
-
const content = await getContent(file);
|
|
179
|
-
await writeTextFile(targetPath, content);
|
|
180
|
-
result.installed++;
|
|
181
|
-
const rel = relative(cwd, targetPath);
|
|
182
|
-
result.files.push(rel);
|
|
183
|
-
result.installedFiles.push(rel);
|
|
184
|
-
}
|
|
185
|
-
catch (e) {
|
|
186
|
-
logger.error(`Failed to install ${fileName}: ${e}`);
|
|
187
|
-
result.skipped++;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Process a batch of files from the same parent directory in the registry for a specific platform
|
|
193
|
-
*/
|
|
194
|
-
async function processBatchOfFilesForPlatform(cwd, platform, parentDir, files, cwdIdMap, options, forceOverwrite, result, yamlOverrides) {
|
|
195
|
-
const { matching, fresh } = splitMatchingAndNew(files, cwdIdMap, e => e.platform === platform);
|
|
196
|
-
for (const file of matching) {
|
|
197
|
-
const entries = (file.id ? cwdIdMap.get(file.id) : [])?.filter(e => e.platform === platform) ?? [];
|
|
198
|
-
await updateMatchingEntries(cwd, file, entries, r => getPlatformSpecificFilename(r.registryPath, platform), r => {
|
|
199
|
-
const parsed = parseUniversalPath(r.registryPath);
|
|
200
|
-
return parsed
|
|
201
|
-
? mergePlatformYamlOverride(r.content, platform, parsed.universalSubdir, parsed.relPath, yamlOverrides)
|
|
202
|
-
: r.content;
|
|
203
|
-
},
|
|
204
|
-
/* canOverwriteRename */ forceOverwrite, options, result);
|
|
205
|
-
}
|
|
206
|
-
if (fresh.length > 0) {
|
|
207
|
-
await installNewFilesGeneric(cwd, parentDir, fresh, cwdIdMap, (cwd2, parent) => mapRegistryPathToCwd(cwd2, [platform], parent), f => getPlatformSpecificFilename(f.registryPath, platform), f => {
|
|
208
|
-
const parsed = parseUniversalPath(f.registryPath);
|
|
209
|
-
return parsed
|
|
210
|
-
? mergePlatformYamlOverride(f.content, platform, parsed.universalSubdir, parsed.relPath, yamlOverrides)
|
|
211
|
-
: f.content;
|
|
212
|
-
}, options, result);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Map a registry parent directory path to a cwd platform directory
|
|
217
|
-
* E.g., "rules/subdir" → ".cursor/rules/subdir" (for first available platform)
|
|
218
|
-
* Returns null if the platform doesn't support the universal subdirectory
|
|
219
|
-
*/
|
|
220
|
-
async function mapRegistryPathToCwd(cwd, platforms, registryParentDir) {
|
|
221
|
-
// Extract the universal subdir and relative path
|
|
222
|
-
const universalSubdir = getFirstPathComponent(registryParentDir);
|
|
223
|
-
const relativePath = getPathAfterFirstComponent(registryParentDir);
|
|
224
|
-
// Use the first platform to determine the target directory
|
|
225
|
-
const platform = platforms[0];
|
|
226
|
-
const platformDef = getPlatformDefinition(platform);
|
|
227
|
-
const subdirDef = platformDef.subdirs[universalSubdir];
|
|
228
|
-
if (!subdirDef) {
|
|
229
|
-
// Platform doesn't support this universal subdirectory
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
const baseDir = join(cwd, platformDef.rootDir, subdirDef.path);
|
|
233
|
-
return relativePath ? join(baseDir, relativePath) : baseDir;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Process a batch of AI files from the same parent directory in the registry
|
|
237
|
-
*/
|
|
238
|
-
async function processBatchOfFilesForAi(cwd, parentDir, files, cwdIdMap, options, result) {
|
|
239
|
-
const { matching, fresh } = splitMatchingAndNew(files, cwdIdMap, e => e.platform === PLATFORM_DIRS.AI);
|
|
240
|
-
for (const file of matching) {
|
|
241
|
-
const entries = (file.id ? cwdIdMap.get(file.id) : [])?.filter(e => e.platform === PLATFORM_DIRS.AI) ?? [];
|
|
242
|
-
await updateMatchingEntries(cwd, file, entries, r => r.fileName, r => r.content,
|
|
243
|
-
/* canOverwriteRename */ false, options, result);
|
|
244
|
-
}
|
|
245
|
-
if (fresh.length > 0) {
|
|
246
|
-
await installNewFilesGeneric(cwd, parentDir, fresh, cwdIdMap, (cwd2, parent) => resolveTargetDirForScope(cwd2, parent, PLATFORM_DIRS.AI), f => f.fileName, f => f.content, options, result);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
//# sourceMappingURL=id-based-installer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"id-based-installer.js","sourceRoot":"","sources":["../../src/utils/id-based-installer.ts"],"names":[],"mappings":"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"}
|