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,38 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { exists, isDirectory, readTextFile } from './fs.js';
|
|
3
|
-
import { findFilesByExtension } from './file-processing.js';
|
|
4
|
-
import { PACKAGE_INDEX_FILENAME } from './package-index-yml.js';
|
|
5
|
-
import { isAllowedRegistryPath, isRootRegistryPath, isSkippableRegistryPath, normalizeRegistryPath } from './registry-entry-filter.js';
|
|
6
|
-
const UTF8_ENCODING = 'utf8';
|
|
1
|
+
import { readPackageFilesForRegistry } from './package-copy.js';
|
|
7
2
|
export async function readLocalPackageFilesForIndex(packageDir) {
|
|
8
|
-
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
const entries = await findFilesByExtension(packageDir, [], packageDir);
|
|
12
|
-
const files = [];
|
|
13
|
-
for (const entry of entries) {
|
|
14
|
-
const normalizedPath = normalizeRegistryPath(entry.relativePath);
|
|
15
|
-
if (normalizedPath === PACKAGE_INDEX_FILENAME) {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
const isAllowed = isAllowedRegistryPath(normalizedPath);
|
|
19
|
-
const isRoot = isRootRegistryPath(normalizedPath);
|
|
20
|
-
const isYamlOverride = isYamlOverrideFile(normalizedPath);
|
|
21
|
-
const isPackageYml = normalizedPath === FILE_PATTERNS.PACKAGE_YML;
|
|
22
|
-
const isRootLevelFile = !normalizedPath.includes('/');
|
|
23
|
-
if (!isAllowed && !isRoot && !isYamlOverride && !isPackageYml && !isRootLevelFile) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const content = await readTextFile(entry.fullPath, UTF8_ENCODING);
|
|
27
|
-
files.push({
|
|
28
|
-
path: normalizedPath,
|
|
29
|
-
content,
|
|
30
|
-
encoding: UTF8_ENCODING
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
return files;
|
|
34
|
-
}
|
|
35
|
-
function isYamlOverrideFile(normalizedPath) {
|
|
36
|
-
return normalizedPath !== FILE_PATTERNS.PACKAGE_YML && isSkippableRegistryPath(normalizedPath);
|
|
3
|
+
return await readPackageFilesForRegistry(packageDir);
|
|
37
4
|
}
|
|
38
5
|
//# sourceMappingURL=package-local-files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-local-files.js","sourceRoot":"","sources":["../../src/utils/package-local-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-local-files.js","sourceRoot":"","sources":["../../src/utils/package-local-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,UAAkB;IACpE,OAAO,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { basename,
|
|
1
|
+
import { basename, relative } from 'path';
|
|
2
2
|
import semver from 'semver';
|
|
3
3
|
import { parsePackageYml, writePackageYml } from './package-yml.js';
|
|
4
|
-
import { exists, ensureDir
|
|
4
|
+
import { exists, ensureDir } from './fs.js';
|
|
5
5
|
import { logger } from './logger.js';
|
|
6
6
|
import { getLocalOpenPackageDir, getLocalPackageYmlPath, getLocalPackagesDir, getLocalPackageDir } from './paths.js';
|
|
7
7
|
import { DEPENDENCY_ARRAYS } from '../constants/index.js';
|
|
@@ -9,7 +9,9 @@ import { createCaretRange, hasExplicitPrereleaseIntent, isPrereleaseVersion } fr
|
|
|
9
9
|
import { extractBaseVersion } from './version-generator.js';
|
|
10
10
|
import { normalizePackageName, arePackageNamesEquivalent } from './package-name.js';
|
|
11
11
|
import { packageManager } from '../core/package.js';
|
|
12
|
-
import {
|
|
12
|
+
import { promptPackageDetailsForNamed } from './prompts.js';
|
|
13
|
+
import { writePackageFilesToDirectory } from './package-copy.js';
|
|
14
|
+
import { getPackageFilesDir, getPackageYmlPath } from '../core/package-context.js';
|
|
13
15
|
/**
|
|
14
16
|
* Ensure local OpenPackage directory structure exists
|
|
15
17
|
* Shared utility for both install and save commands
|
|
@@ -23,12 +25,12 @@ export async function ensureLocalOpenPackageStructure(cwd) {
|
|
|
23
25
|
]);
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
* Create a basic package.yml file if it doesn't exist
|
|
28
|
+
* Create a basic package.yml file for workspace if it doesn't exist
|
|
27
29
|
* Shared utility for both install and save commands
|
|
28
30
|
* @param force - If true, overwrite existing package.yml
|
|
29
31
|
* @returns the package.yml if it was created, null if it already existed and force=false
|
|
30
32
|
*/
|
|
31
|
-
export async function
|
|
33
|
+
export async function createWorkspacePackageYml(cwd, force = false) {
|
|
32
34
|
await ensureLocalOpenPackageStructure(cwd);
|
|
33
35
|
const packageYmlPath = getLocalPackageYmlPath(cwd);
|
|
34
36
|
const projectName = basename(cwd);
|
|
@@ -52,6 +54,54 @@ export async function createBasicPackageYml(cwd, force = false) {
|
|
|
52
54
|
console.log(`📋 Initialized workspace package.yml in .openpackage/`);
|
|
53
55
|
return basicPackageYml;
|
|
54
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Ensure a nested package directory and package.yml exist, optionally prompting for details.
|
|
59
|
+
* This is for NESTED packages only. Root packages use different flow.
|
|
60
|
+
*/
|
|
61
|
+
export async function ensurePackageWithYml(cwd, packageName, options = {}) {
|
|
62
|
+
await ensureLocalOpenPackageStructure(cwd);
|
|
63
|
+
const normalizedName = normalizePackageName(packageName);
|
|
64
|
+
const packageDir = getPackageFilesDir(cwd, 'nested', normalizedName);
|
|
65
|
+
const packageYmlPath = getPackageYmlPath(cwd, 'nested', normalizedName);
|
|
66
|
+
await ensureDir(packageDir);
|
|
67
|
+
let packageConfig;
|
|
68
|
+
let isNew = false;
|
|
69
|
+
if (await exists(packageYmlPath)) {
|
|
70
|
+
packageConfig = await parsePackageYml(packageYmlPath);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
isNew = true;
|
|
74
|
+
if (options.interactive) {
|
|
75
|
+
packageConfig = await promptPackageDetailsForNamed(normalizedName);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
packageConfig = {
|
|
79
|
+
name: normalizedName,
|
|
80
|
+
version: options.defaultVersion ?? '0.1.0'
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (!packageConfig.include || packageConfig.include.length === 0) {
|
|
84
|
+
packageConfig = {
|
|
85
|
+
...packageConfig,
|
|
86
|
+
include: ['**']
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
await writePackageYml(packageYmlPath, packageConfig);
|
|
90
|
+
logger.info(`Created new package '${packageConfig.name}@${packageConfig.version}' at ${relative(cwd, packageDir)}`);
|
|
91
|
+
}
|
|
92
|
+
if (packageConfig.name !== normalizedName) {
|
|
93
|
+
const updatedConfig = { ...packageConfig, name: normalizedName };
|
|
94
|
+
await writePackageYml(packageYmlPath, updatedConfig);
|
|
95
|
+
packageConfig = updatedConfig;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
normalizedName,
|
|
99
|
+
packageDir,
|
|
100
|
+
packageYmlPath,
|
|
101
|
+
packageConfig,
|
|
102
|
+
isNew
|
|
103
|
+
};
|
|
104
|
+
}
|
|
55
105
|
/**
|
|
56
106
|
* Add a package dependency to package.yml with smart placement logic
|
|
57
107
|
* Shared utility for both install and save commands
|
|
@@ -167,42 +217,14 @@ silent = false) {
|
|
|
167
217
|
}
|
|
168
218
|
/**
|
|
169
219
|
* Copy the full package directory from the local registry into the project structure
|
|
170
|
-
* Removes all existing files except package
|
|
220
|
+
* Removes all existing files except the package index file before writing new files
|
|
171
221
|
*/
|
|
172
222
|
export async function writeLocalPackageFromRegistry(cwd, packageName, version) {
|
|
173
223
|
const pkg = await packageManager.loadPackage(packageName, version);
|
|
174
224
|
const localPackageDir = getLocalPackageDir(cwd, packageName);
|
|
175
|
-
await
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
// Always preserve package.index.yml
|
|
179
|
-
filesToKeep.add(PACKAGE_INDEX_FILENAME);
|
|
180
|
-
// List all existing files in the directory
|
|
181
|
-
const existingFiles = [];
|
|
182
|
-
if (await exists(localPackageDir)) {
|
|
183
|
-
for await (const filePath of walkFiles(localPackageDir)) {
|
|
184
|
-
const relPath = relative(localPackageDir, filePath);
|
|
185
|
-
existingFiles.push(relPath);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// Remove files that are no longer in the package (except package.index.yml)
|
|
189
|
-
const filesToRemove = existingFiles.filter(file => !filesToKeep.has(file));
|
|
190
|
-
await Promise.all(filesToRemove.map(async (file) => {
|
|
191
|
-
const filePath = join(localPackageDir, file);
|
|
192
|
-
try {
|
|
193
|
-
await remove(filePath);
|
|
194
|
-
logger.debug(`Removed residual file: ${filePath}`);
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
logger.warn(`Failed to remove residual file ${filePath}: ${error}`);
|
|
198
|
-
}
|
|
199
|
-
}));
|
|
200
|
-
// Write all files from the package
|
|
201
|
-
await Promise.all(pkg.files.map(async (file) => {
|
|
202
|
-
const targetPath = join(localPackageDir, file.path);
|
|
203
|
-
const encoding = (file.encoding ?? 'utf8');
|
|
204
|
-
await writeTextFile(targetPath, file.content, encoding);
|
|
205
|
-
}));
|
|
225
|
+
await writePackageFilesToDirectory(localPackageDir, pkg.files, {
|
|
226
|
+
preserveIndexFile: true
|
|
227
|
+
});
|
|
206
228
|
}
|
|
207
229
|
function rangeIncludesVersion(range, version) {
|
|
208
230
|
if (!range || !version) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-management.js","sourceRoot":"","sources":["../../src/utils/package-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"package-management.js","sourceRoot":"","sources":["../../src/utils/package-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import * as yaml from 'js-yaml';
|
|
2
2
|
import { readTextFile, writeTextFile } from './fs.js';
|
|
3
3
|
import { isScopedName } from '../core/scoping/package-scoping.js';
|
|
4
|
+
function normalizeStringArray(value) {
|
|
5
|
+
if (!Array.isArray(value)) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const result = value
|
|
9
|
+
.filter((entry) => typeof entry === 'string')
|
|
10
|
+
.map(entry => entry.trim())
|
|
11
|
+
.filter(entry => entry.length > 0);
|
|
12
|
+
return result.length > 0 ? result : undefined;
|
|
13
|
+
}
|
|
4
14
|
/**
|
|
5
15
|
* Parse package.yml file with validation
|
|
6
16
|
*/
|
|
@@ -12,6 +22,20 @@ export async function parsePackageYml(packageYmlPath) {
|
|
|
12
22
|
if (!parsed.name || !parsed.version) {
|
|
13
23
|
throw new Error('package.yml must contain name and version fields');
|
|
14
24
|
}
|
|
25
|
+
const includeFilters = normalizeStringArray(parsed.include);
|
|
26
|
+
const excludeFilters = normalizeStringArray(parsed.exclude);
|
|
27
|
+
if (includeFilters) {
|
|
28
|
+
parsed.include = includeFilters;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
delete parsed.include;
|
|
32
|
+
}
|
|
33
|
+
if (excludeFilters) {
|
|
34
|
+
parsed.exclude = excludeFilters;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
delete parsed.exclude;
|
|
38
|
+
}
|
|
15
39
|
return parsed;
|
|
16
40
|
}
|
|
17
41
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-yml.js","sourceRoot":"","sources":["../../src/utils/package-yml.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"package-yml.js","sourceRoot":"","sources":["../../src/utils/package-yml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import { basename,
|
|
1
|
+
import { basename, normalize, relative, sep, isAbsolute, resolve } from 'path';
|
|
2
2
|
/**
|
|
3
3
|
* Centralized path normalization utilities for cross-platform compatibility
|
|
4
4
|
* Provides consistent path handling across different filesystem types (Windows, macOS, Linux)
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
7
|
-
* Determine if we're on a case-insensitive filesystem (primarily Windows)
|
|
8
|
-
*/
|
|
9
|
-
export function isCaseInsensitiveFilesystem() {
|
|
10
|
-
return process.platform === 'win32';
|
|
11
|
-
}
|
|
12
6
|
/**
|
|
13
7
|
* Normalize a path to use consistent forward slashes for internal processing
|
|
14
8
|
* This ensures cross-platform compatibility while maintaining the original path semantics
|
|
@@ -16,15 +10,6 @@ export function isCaseInsensitiveFilesystem() {
|
|
|
16
10
|
export function normalizePathForProcessing(path) {
|
|
17
11
|
return normalize(path).replace(/\\/g, '/');
|
|
18
12
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Split a path into components using the appropriate separator for the current platform
|
|
21
|
-
* This replaces hard-coded split('/') operations that fail on Windows
|
|
22
|
-
*/
|
|
23
|
-
export function splitPath(path) {
|
|
24
|
-
// Normalize first to handle mixed separators, then split on the platform separator
|
|
25
|
-
const normalized = normalize(path);
|
|
26
|
-
return normalized.split(sep);
|
|
27
|
-
}
|
|
28
13
|
/**
|
|
29
14
|
* Get the last component of a path (equivalent to basename but cross-platform safe)
|
|
30
15
|
*/
|
|
@@ -33,14 +18,6 @@ export function getPathLeaf(path) {
|
|
|
33
18
|
const normalizedSlashes = path.replace(/\\/g, '/');
|
|
34
19
|
return basename(normalizedSlashes);
|
|
35
20
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Get the parent directory of a path (equivalent to dirname but cross-platform safe)
|
|
38
|
-
*/
|
|
39
|
-
export function getPathParent(path) {
|
|
40
|
-
// First normalize backslashes to forward slashes, then get dirname
|
|
41
|
-
const normalizedSlashes = path.replace(/\\/g, '/');
|
|
42
|
-
return dirname(normalizedSlashes);
|
|
43
|
-
}
|
|
44
21
|
/**
|
|
45
22
|
* Get relative path components by splitting on platform-appropriate separators
|
|
46
23
|
* Returns the individual directory/file components of a relative path
|
|
@@ -66,27 +43,6 @@ export function getPathAfterFirstComponent(relativePath) {
|
|
|
66
43
|
const parts = getRelativePathParts(relativePath);
|
|
67
44
|
return parts.length > 1 ? parts.slice(1).join(sep) : '';
|
|
68
45
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Check if a path contains a specific component at any level
|
|
71
|
-
* Performs case-insensitive matching on case-insensitive filesystems
|
|
72
|
-
*/
|
|
73
|
-
export function pathContainsComponent(path, component) {
|
|
74
|
-
const parts = splitPath(path);
|
|
75
|
-
const isCaseInsensitive = process.platform === 'win32';
|
|
76
|
-
const searchComponent = isCaseInsensitive ? component.toLowerCase() : component;
|
|
77
|
-
return parts.some(part => {
|
|
78
|
-
const comparePart = isCaseInsensitive ? part.toLowerCase() : part;
|
|
79
|
-
return comparePart === searchComponent;
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Create a platform-safe relative path from components
|
|
84
|
-
* This replaces manual path.join() operations in some cases
|
|
85
|
-
*/
|
|
86
|
-
export function joinRelativePath(...components) {
|
|
87
|
-
// Filter out empty components and join with platform separator
|
|
88
|
-
return components.filter(comp => comp && comp !== '.').join(sep);
|
|
89
|
-
}
|
|
90
46
|
/**
|
|
91
47
|
* Extract relative path from a full path given a base directory
|
|
92
48
|
* This replaces manual substring operations like fullPath.substring(baseDir.length + 1)
|
|
@@ -156,14 +112,13 @@ export function findSubpathIndex(fullPath, subpath) {
|
|
|
156
112
|
* - './already/normalized' -> './already/normalized' (unchanged)
|
|
157
113
|
* - '/absolute/path' -> '/absolute/path' (unchanged)
|
|
158
114
|
*/
|
|
159
|
-
export function
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
!isAbsolute(input)) {
|
|
165
|
-
return `./${input}`;
|
|
115
|
+
export function isWithinDirectory(parentDir, targetPath) {
|
|
116
|
+
const resolvedParent = resolve(parentDir);
|
|
117
|
+
const resolvedTarget = resolve(targetPath);
|
|
118
|
+
if (resolvedParent === resolvedTarget) {
|
|
119
|
+
return true;
|
|
166
120
|
}
|
|
167
|
-
|
|
121
|
+
const rel = relative(resolvedParent, resolvedTarget);
|
|
122
|
+
return !!rel && !rel.startsWith('..') && !isAbsolute(rel);
|
|
168
123
|
}
|
|
169
124
|
//# sourceMappingURL=path-normalization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-normalization.js","sourceRoot":"","sources":["../../src/utils/path-normalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"path-normalization.js","sourceRoot":"","sources":["../../src/utils/path-normalization.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/paths.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
|
-
import {
|
|
2
|
+
import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../constants/index.js';
|
|
3
|
+
import { DEFAULT_INSTALL_ROOT } from '../constants/workspace.js';
|
|
3
4
|
import { exists } from './fs.js';
|
|
4
5
|
import { arePackageNamesEquivalent, SCOPED_PACKAGE_REGEX } from './package-name.js';
|
|
5
6
|
import { parsePackageYml } from './package-yml.js';
|
|
@@ -11,7 +12,7 @@ import { parsePackageYml } from './package-yml.js';
|
|
|
11
12
|
* Get the path to the local package.yml file
|
|
12
13
|
*/
|
|
13
14
|
export function getLocalPackageYmlPath(cwd) {
|
|
14
|
-
return join(cwd,
|
|
15
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.PACKAGE_YML);
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* Check if a package name matches the root package in .openpackage/package.yml
|
|
@@ -33,13 +34,13 @@ export async function isRootPackage(cwd, packageName) {
|
|
|
33
34
|
* Get the local OpenPackage directory path
|
|
34
35
|
*/
|
|
35
36
|
export function getLocalOpenPackageDir(cwd) {
|
|
36
|
-
return join(cwd,
|
|
37
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE);
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Get the local packages directory path
|
|
40
41
|
*/
|
|
41
42
|
export function getLocalPackagesDir(cwd) {
|
|
42
|
-
return join(cwd,
|
|
43
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES);
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
46
|
* Get the local package directory path for a specific package
|
|
@@ -49,14 +50,21 @@ export function getLocalPackageDir(cwd, packageName) {
|
|
|
49
50
|
const scopedMatch = packageName.match(SCOPED_PACKAGE_REGEX);
|
|
50
51
|
if (scopedMatch) {
|
|
51
52
|
const [, scope, localName] = scopedMatch;
|
|
52
|
-
return join(cwd,
|
|
53
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES, '@' + scope, localName);
|
|
53
54
|
}
|
|
54
|
-
return join(cwd,
|
|
55
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES, packageName);
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
57
|
-
* Get the
|
|
58
|
+
* Get the content directory (.openpackage/) for a nested package.
|
|
59
|
+
* This is where package.yml, the package index file, and universal content live.
|
|
58
60
|
*/
|
|
59
|
-
export function
|
|
60
|
-
return join(cwd,
|
|
61
|
+
export function getLocalPackageContentDir(cwd, packageName) {
|
|
62
|
+
return join(getLocalPackageDir(cwd, packageName), DIR_PATTERNS.OPENPACKAGE);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the default workspace install root path
|
|
66
|
+
*/
|
|
67
|
+
export function getInstallRootDir(cwd) {
|
|
68
|
+
return join(cwd, DEFAULT_INSTALL_ROOT);
|
|
61
69
|
}
|
|
62
70
|
//# sourceMappingURL=paths.js.map
|
package/dist/utils/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,WAAmB;IAClE,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACzD,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,WAAmB;IACjE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC5D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW,EAAE,WAAmB;IACxE,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Shared utilities for handling platform-specific file paths and extensions
|
|
4
4
|
*/
|
|
5
5
|
import { basename } from 'path';
|
|
6
|
-
import { getPlatformDefinition, isPlatformId } from '../core/platforms.js';
|
|
7
|
-
import { FILE_PATTERNS, UNIVERSAL_SUBDIRS
|
|
8
|
-
import { getFirstPathComponent, parsePathWithPrefix } from './path-normalization.js';
|
|
6
|
+
import { getPlatformDefinition, getAllPlatforms, isPlatformId, getWorkspaceExt } from '../core/platforms.js';
|
|
7
|
+
import { DIR_PATTERNS, FILE_PATTERNS, UNIVERSAL_SUBDIRS } from '../constants/index.js';
|
|
8
|
+
import { getFirstPathComponent, parsePathWithPrefix, normalizePathForProcessing } from './path-normalization.js';
|
|
9
9
|
/**
|
|
10
10
|
* Parse a registry or universal path to extract subdir and relative path info
|
|
11
11
|
* Platform suffix detection is always enabled and supports both file-level and directory-level suffixes.
|
|
@@ -16,9 +16,13 @@ import { getFirstPathComponent, parsePathWithPrefix } from './path-normalization
|
|
|
16
16
|
export function parseUniversalPath(path, options = {}) {
|
|
17
17
|
// Check if path starts with universal subdirs
|
|
18
18
|
const universalSubdirs = Object.values(UNIVERSAL_SUBDIRS);
|
|
19
|
-
const knownPlatforms =
|
|
19
|
+
const knownPlatforms = getAllPlatforms({ includeDisabled: true });
|
|
20
|
+
const normalized = normalizePathForProcessing(path);
|
|
21
|
+
const withoutPrefix = normalized.startsWith(`${DIR_PATTERNS.OPENPACKAGE}/`)
|
|
22
|
+
? normalized.slice(DIR_PATTERNS.OPENPACKAGE.length + 1)
|
|
23
|
+
: normalized;
|
|
20
24
|
for (const subdir of universalSubdirs) {
|
|
21
|
-
const parsed = parsePathWithPrefix(
|
|
25
|
+
const parsed = parsePathWithPrefix(withoutPrefix, subdir);
|
|
22
26
|
if (parsed) {
|
|
23
27
|
const remainingPath = parsed.remaining;
|
|
24
28
|
let platformSuffix;
|
|
@@ -63,54 +67,6 @@ export function parseUniversalPath(path, options = {}) {
|
|
|
63
67
|
};
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
|
-
// Check if path starts with ai/ followed by universal subdirs (for AI directory files)
|
|
67
|
-
const aiParsed = parsePathWithPrefix(path, PLATFORM_DIRS.AI);
|
|
68
|
-
if (aiParsed) {
|
|
69
|
-
const aiPath = aiParsed.remaining;
|
|
70
|
-
for (const subdir of universalSubdirs) {
|
|
71
|
-
const subdirParsed = parsePathWithPrefix(aiPath, subdir);
|
|
72
|
-
if (subdirParsed) {
|
|
73
|
-
const remainingPath = subdirParsed.remaining;
|
|
74
|
-
let platformSuffix;
|
|
75
|
-
let normalizedRelPath = remainingPath;
|
|
76
|
-
// Platform suffix detection is always enabled
|
|
77
|
-
if (options.allowPlatformSuffix !== false) {
|
|
78
|
-
// Check for directory-level platform suffix
|
|
79
|
-
const segments = remainingPath.split('/');
|
|
80
|
-
for (let i = 0; i < segments.length - 1; i++) {
|
|
81
|
-
const segment = segments[i];
|
|
82
|
-
for (const platform of knownPlatforms) {
|
|
83
|
-
if (segment.endsWith(`.${platform}`) && isPlatformId(platform)) {
|
|
84
|
-
platformSuffix = platform;
|
|
85
|
-
segments[i] = segment.slice(0, -platform.length - 1);
|
|
86
|
-
normalizedRelPath = segments.join('/');
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (platformSuffix)
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
// Check for file-level platform suffix if not already found
|
|
94
|
-
if (!platformSuffix) {
|
|
95
|
-
const parts = remainingPath.split('.');
|
|
96
|
-
if (parts.length >= 3 && parts[parts.length - 1] === 'md') {
|
|
97
|
-
const possiblePlatformSuffix = parts[parts.length - 2];
|
|
98
|
-
if (isPlatformId(possiblePlatformSuffix)) {
|
|
99
|
-
platformSuffix = possiblePlatformSuffix;
|
|
100
|
-
const baseName = parts.slice(0, -2).join('.');
|
|
101
|
-
normalizedRelPath = baseName + FILE_PATTERNS.MD_FILES;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
universalSubdir: subdir,
|
|
108
|
-
relPath: normalizedRelPath,
|
|
109
|
-
platformSuffix
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
70
|
return null;
|
|
115
71
|
}
|
|
116
72
|
/**
|
|
@@ -129,13 +85,14 @@ export function getPlatformSpecificFilename(universalPath, platform) {
|
|
|
129
85
|
// Fallback to original filename if subdir not supported by platform
|
|
130
86
|
return registryFileName;
|
|
131
87
|
}
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return registryFileName; // Preserve original extension
|
|
88
|
+
const extensionMatch = registryFileName.match(/\.[^.]+$/);
|
|
89
|
+
const packageExt = extensionMatch?.[0] ?? '';
|
|
90
|
+
if (!packageExt) {
|
|
91
|
+
return registryFileName;
|
|
137
92
|
}
|
|
138
|
-
|
|
93
|
+
const baseName = registryFileName.slice(0, -packageExt.length);
|
|
94
|
+
const workspaceExt = getWorkspaceExt(subdirDef, packageExt);
|
|
95
|
+
return baseName + workspaceExt;
|
|
139
96
|
}
|
|
140
97
|
/**
|
|
141
98
|
* Get platform-specific file path information (full paths with directories)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-file.js","sourceRoot":"","sources":["../../src/utils/platform-file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"platform-file.js","sourceRoot":"","sources":["../../src/utils/platform-file.ts"],"names":[],"mappings":"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"}
|