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
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSONC (JSON with Comments) file utilities
|
|
3
|
+
* Handles reading and parsing JSONC files with comment support
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'fs';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { parse } from 'jsonc-parser';
|
|
9
|
+
import { logger } from './logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Get the project root directory
|
|
12
|
+
* Works in both development (src/) and production (dist/) environments
|
|
13
|
+
*/
|
|
14
|
+
function getProjectRoot() {
|
|
15
|
+
// Get the directory of the current file
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
// If we're in dist/utils, go up two levels to project root
|
|
19
|
+
// If we're in src/utils, go up two levels to project root
|
|
20
|
+
// Both src/utils and dist/utils are 2 levels deep from root
|
|
21
|
+
return join(__dirname, '..', '..');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read and parse a JSONC file from the project root
|
|
25
|
+
* @param relativePath - Path relative to project root (e.g., 'platforms.jsonc')
|
|
26
|
+
* @returns Parsed JSON object
|
|
27
|
+
*/
|
|
28
|
+
export function readJsoncFileSync(relativePath) {
|
|
29
|
+
const projectRoot = getProjectRoot();
|
|
30
|
+
const fullPath = join(projectRoot, relativePath);
|
|
31
|
+
try {
|
|
32
|
+
const content = readFileSync(fullPath, 'utf-8');
|
|
33
|
+
const parsed = parse(content);
|
|
34
|
+
if (parsed === undefined) {
|
|
35
|
+
throw new Error(`Failed to parse JSONC file: ${relativePath}`);
|
|
36
|
+
}
|
|
37
|
+
return parsed;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger.error(`Failed to read JSONC file: ${relativePath}`, { error, fullPath });
|
|
41
|
+
throw new Error(`Failed to read JSONC file ${relativePath}: ${error}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=jsonc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/utils/jsonc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,SAAS,cAAc;IACrB,wCAAwC;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtC,2DAA2D;IAC3D,0DAA0D;IAC1D,4DAA4D;IAC5D,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAc,YAAoB;IACjE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,MAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package file I/O utilities for reading from and writing to package directories.
|
|
3
|
+
*
|
|
4
|
+
* This module provides two main operations:
|
|
5
|
+
* - readPackageFilesForRegistry: Collect files from a package directory into a
|
|
6
|
+
* registry-ready payload, applying static exclusions and manifest-based filters.
|
|
7
|
+
* - writePackageFilesToDirectory: Write a set of PackageFile entries to disk,
|
|
8
|
+
* syncing the directory contents (removing stale files).
|
|
9
|
+
*/
|
|
10
|
+
import { join, relative, dirname } from 'path';
|
|
11
|
+
import { DIR_PATTERNS, FILE_PATTERNS, PACKAGE_PATHS } from '../constants/index.js';
|
|
12
|
+
import { getAllPlatforms, getPlatformDefinition } from '../core/platforms.js';
|
|
13
|
+
import { exists, ensureDir, readTextFile, writeTextFile, walkFiles, remove } from './fs.js';
|
|
14
|
+
import { logger } from './logger.js';
|
|
15
|
+
import { normalizePathForProcessing } from './path-normalization.js';
|
|
16
|
+
import { parsePackageYml } from './package-yml.js';
|
|
17
|
+
import { createPackageFileFilter, isExcludedFromPackage } from './package-filters.js';
|
|
18
|
+
const MANIFEST_RELATIVE_PATHS = Object.freeze([
|
|
19
|
+
FILE_PATTERNS.PACKAGE_YML,
|
|
20
|
+
PACKAGE_PATHS.MANIFEST_RELATIVE
|
|
21
|
+
]);
|
|
22
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
23
|
+
// Reading package files
|
|
24
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
25
|
+
/**
|
|
26
|
+
* Read package files from disk and return a registry-ready payload.
|
|
27
|
+
*
|
|
28
|
+
* Applies two layers of filtering:
|
|
29
|
+
* 1. Static exclusions (package index file, packages/** nested dirs).
|
|
30
|
+
* 2. Manifest-based include/exclude patterns from package.yml.
|
|
31
|
+
*
|
|
32
|
+
* @param packageDir - Absolute path to the package root directory.
|
|
33
|
+
* @returns Array of PackageFile entries representing the canonical payload.
|
|
34
|
+
*/
|
|
35
|
+
export async function readPackageFilesForRegistry(packageDir) {
|
|
36
|
+
if (!(await exists(packageDir))) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const manifestFilter = await loadManifestFilter(packageDir);
|
|
40
|
+
const files = [];
|
|
41
|
+
for await (const fullPath of walkFiles(packageDir)) {
|
|
42
|
+
const relativePath = normalizePathForProcessing(relative(packageDir, fullPath));
|
|
43
|
+
// Layer 1: static exclusions (always enforced)
|
|
44
|
+
if (isExcludedFromPackage(relativePath)) {
|
|
45
|
+
logger.debug(`Skipping static-excluded path: ${relativePath}`);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Layer 2: manifest-based include/exclude
|
|
49
|
+
if (!manifestFilter(relativePath)) {
|
|
50
|
+
logger.debug(`Skipping path by manifest filter: ${relativePath}`);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const content = await readTextFile(fullPath);
|
|
54
|
+
files.push({ path: relativePath, content, encoding: 'utf8' });
|
|
55
|
+
}
|
|
56
|
+
return files;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build a filter function from the package.yml include/exclude fields.
|
|
60
|
+
* Returns a pass-all filter if no manifest or no patterns are defined.
|
|
61
|
+
*/
|
|
62
|
+
async function loadManifestFilter(packageDir) {
|
|
63
|
+
const manifestInfo = await findPackageManifest(packageDir);
|
|
64
|
+
let manifestConfigInclude;
|
|
65
|
+
let manifestConfigExclude;
|
|
66
|
+
if (manifestInfo) {
|
|
67
|
+
try {
|
|
68
|
+
const config = await parsePackageYml(manifestInfo.fullPath);
|
|
69
|
+
manifestConfigInclude = config.include;
|
|
70
|
+
manifestConfigExclude = config.exclude;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.warn(`Failed to load manifest filters from ${manifestInfo.fullPath}: ${String(error)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const defaults = await buildDefaultIncludeConfig(packageDir, manifestInfo);
|
|
77
|
+
const includePatterns = [
|
|
78
|
+
...defaults.includePatterns,
|
|
79
|
+
...(manifestConfigInclude ?? [])
|
|
80
|
+
];
|
|
81
|
+
const excludePatterns = manifestConfigExclude ?? [];
|
|
82
|
+
const baseFilter = createPackageFileFilter({
|
|
83
|
+
include: includePatterns,
|
|
84
|
+
exclude: excludePatterns
|
|
85
|
+
});
|
|
86
|
+
return (relativePath) => {
|
|
87
|
+
const normalized = normalizePathForProcessing(relativePath);
|
|
88
|
+
if (!normalized) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
if (defaults.hardIncludeFiles.has(normalized)) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return baseFilter(relativePath);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async function findPackageManifest(packageDir) {
|
|
98
|
+
for (const relativePath of MANIFEST_RELATIVE_PATHS) {
|
|
99
|
+
const fullPath = join(packageDir, relativePath);
|
|
100
|
+
if (await exists(fullPath)) {
|
|
101
|
+
return { fullPath, relativePath };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
async function buildDefaultIncludeConfig(packageDir, manifestInfo) {
|
|
107
|
+
const includePatterns = new Set();
|
|
108
|
+
const hardIncludeFiles = new Set();
|
|
109
|
+
// Include package.yml (at .openpackage/package.yml relative to package root)
|
|
110
|
+
includePatterns.add(PACKAGE_PATHS.MANIFEST_RELATIVE);
|
|
111
|
+
hardIncludeFiles.add(normalizePathForProcessing(PACKAGE_PATHS.MANIFEST_RELATIVE));
|
|
112
|
+
if (manifestInfo) {
|
|
113
|
+
includePatterns.add(manifestInfo.relativePath);
|
|
114
|
+
hardIncludeFiles.add(normalizePathForProcessing(manifestInfo.relativePath));
|
|
115
|
+
}
|
|
116
|
+
const rootFiles = new Set([FILE_PATTERNS.AGENTS_MD]);
|
|
117
|
+
const universalSubdirs = new Set();
|
|
118
|
+
for (const platform of getAllPlatforms({ includeDisabled: true })) {
|
|
119
|
+
const definition = getPlatformDefinition(platform);
|
|
120
|
+
if (definition.rootFile) {
|
|
121
|
+
rootFiles.add(definition.rootFile);
|
|
122
|
+
}
|
|
123
|
+
for (const subdirKey of Object.keys(definition.subdirs ?? {})) {
|
|
124
|
+
universalSubdirs.add(subdirKey);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const rootFile of rootFiles) {
|
|
128
|
+
includePatterns.add(rootFile);
|
|
129
|
+
}
|
|
130
|
+
// packageDir is the package root, so look for subdirs at packageDir/.openpackage/<subdir>/
|
|
131
|
+
await Promise.all(Array.from(universalSubdirs).map(async (subdirName) => {
|
|
132
|
+
const absoluteDir = join(packageDir, DIR_PATTERNS.OPENPACKAGE, subdirName);
|
|
133
|
+
if (await exists(absoluteDir)) {
|
|
134
|
+
includePatterns.add(`${DIR_PATTERNS.OPENPACKAGE}/${subdirName}/**`);
|
|
135
|
+
}
|
|
136
|
+
}));
|
|
137
|
+
return {
|
|
138
|
+
includePatterns: Array.from(includePatterns),
|
|
139
|
+
hardIncludeFiles
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Write package files to a directory, syncing its contents.
|
|
144
|
+
*
|
|
145
|
+
* - Creates the target directory if it doesn't exist.
|
|
146
|
+
* - Removes files that are no longer part of the payload (except protected paths).
|
|
147
|
+
* - Writes all incoming files, creating subdirectories as needed.
|
|
148
|
+
*
|
|
149
|
+
* @param targetDir - Absolute path to the destination directory.
|
|
150
|
+
* @param files - Array of PackageFile entries to write.
|
|
151
|
+
* @param options - Optional settings (e.g., preserveIndexFile).
|
|
152
|
+
*/
|
|
153
|
+
export async function writePackageFilesToDirectory(targetDir, files, options = {}) {
|
|
154
|
+
await ensureDir(targetDir);
|
|
155
|
+
// Build the set of paths that should remain after the write
|
|
156
|
+
const pathsToKeep = new Set(files.map(f => normalizePathForProcessing(f.path)));
|
|
157
|
+
if (options.preserveIndexFile) {
|
|
158
|
+
pathsToKeep.add(FILE_PATTERNS.PACKAGE_INDEX_YML);
|
|
159
|
+
}
|
|
160
|
+
// Remove stale files (but never touch protected paths like packages/**)
|
|
161
|
+
await removeStaleFiles(targetDir, pathsToKeep);
|
|
162
|
+
// Write all incoming files in parallel
|
|
163
|
+
await Promise.all(files.map(file => writeFile(targetDir, file)));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Remove files in targetDir that are not in pathsToKeep and are not protected.
|
|
167
|
+
*/
|
|
168
|
+
async function removeStaleFiles(targetDir, pathsToKeep) {
|
|
169
|
+
if (!(await exists(targetDir))) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
for await (const fullPath of walkFiles(targetDir)) {
|
|
173
|
+
const relPath = normalizePathForProcessing(relative(targetDir, fullPath));
|
|
174
|
+
// Skip files we want to keep
|
|
175
|
+
if (pathsToKeep.has(relPath)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
// Never delete protected paths (e.g., packages/**)
|
|
179
|
+
if (isExcludedFromPackage(relPath)) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
await remove(fullPath);
|
|
184
|
+
logger.debug(`Removed stale file: ${relPath}`);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger.warn(`Failed to remove stale file ${relPath}: ${error}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Write a single PackageFile to disk under targetDir.
|
|
193
|
+
*/
|
|
194
|
+
async function writeFile(targetDir, file) {
|
|
195
|
+
const targetPath = join(targetDir, file.path);
|
|
196
|
+
await ensureDir(dirname(targetPath));
|
|
197
|
+
await writeTextFile(targetPath, file.content, file.encoding ?? 'utf8');
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=package-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-copy.js","sourceRoot":"","sources":["../../src/utils/package-copy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { normalizePathForProcessing } from './path-normalization.js';
|
|
2
|
+
import { DIR_PATTERNS, FILE_PATTERNS, OPENPACKAGE_DIRS } from '../constants/index.js';
|
|
3
|
+
const EXCLUDED_DIR_PREFIXES = [
|
|
4
|
+
'packages', // Nested packages are independent units; never copy inline
|
|
5
|
+
`${DIR_PATTERNS.OPENPACKAGE}/${OPENPACKAGE_DIRS.PACKAGES}` // Current nested package layout under .openpackage/
|
|
6
|
+
];
|
|
7
|
+
const EXCLUDED_FILES = new Set([FILE_PATTERNS.PACKAGE_INDEX_YML]);
|
|
8
|
+
const MATCH_ALL = () => true;
|
|
9
|
+
const SPECIAL_REGEX_CHARS = /[\\^$+?.()|[\]{}]/g;
|
|
10
|
+
function escapeRegexCharacter(segment) {
|
|
11
|
+
return segment.replace(SPECIAL_REGEX_CHARS, '\\$&');
|
|
12
|
+
}
|
|
13
|
+
function normalizePattern(rawPattern) {
|
|
14
|
+
if (typeof rawPattern !== 'string') {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
let pattern = rawPattern.trim();
|
|
18
|
+
if (pattern.length === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
pattern = pattern.replace(/\\/g, '/');
|
|
22
|
+
pattern = pattern.replace(/^\.\/+/, '');
|
|
23
|
+
pattern = pattern.replace(/^\/+/, '');
|
|
24
|
+
pattern = pattern.replace(/\/+/g, '/');
|
|
25
|
+
if (pattern.length === 0) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (pattern.endsWith('/')) {
|
|
29
|
+
pattern = `${pattern}**`;
|
|
30
|
+
}
|
|
31
|
+
return pattern;
|
|
32
|
+
}
|
|
33
|
+
function globToRegExp(pattern) {
|
|
34
|
+
let regex = '^';
|
|
35
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
36
|
+
const char = pattern[i];
|
|
37
|
+
if (char === '*') {
|
|
38
|
+
const nextChar = pattern[i + 1];
|
|
39
|
+
if (nextChar === '*') {
|
|
40
|
+
const slashChar = pattern[i + 2];
|
|
41
|
+
if (slashChar === '/') {
|
|
42
|
+
regex += '(?:.*/)?';
|
|
43
|
+
i += 2;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
regex += '.*';
|
|
47
|
+
i += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
regex += '[^/]*';
|
|
52
|
+
}
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (char === '?') {
|
|
56
|
+
regex += '[^/]';
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
regex += escapeRegexCharacter(char);
|
|
60
|
+
}
|
|
61
|
+
regex += '$';
|
|
62
|
+
return new RegExp(regex);
|
|
63
|
+
}
|
|
64
|
+
function compilePatterns(patterns) {
|
|
65
|
+
if (!patterns) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
const compiled = [];
|
|
69
|
+
for (const rawPattern of patterns) {
|
|
70
|
+
const normalized = normalizePattern(rawPattern);
|
|
71
|
+
if (!normalized) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
compiled.push(globToRegExp(normalized));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Skip invalid patterns to avoid blocking save/pack flows.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return compiled;
|
|
82
|
+
}
|
|
83
|
+
function matches(path, patterns) {
|
|
84
|
+
return patterns.some(pattern => pattern.test(path));
|
|
85
|
+
}
|
|
86
|
+
export function isExcludedFromPackage(relativePath) {
|
|
87
|
+
const normalized = normalizePathForProcessing(relativePath);
|
|
88
|
+
if (!normalized) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
const baseName = normalized.split('/').pop();
|
|
92
|
+
if (baseName && EXCLUDED_FILES.has(baseName)) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return EXCLUDED_DIR_PREFIXES.some(prefix => {
|
|
96
|
+
const normalizedPrefix = normalizePathForProcessing(prefix);
|
|
97
|
+
return (normalized === normalizedPrefix ||
|
|
98
|
+
normalized.startsWith(`${normalizedPrefix}/`));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export function createPackageFileFilter(config) {
|
|
102
|
+
if (!config) {
|
|
103
|
+
return MATCH_ALL;
|
|
104
|
+
}
|
|
105
|
+
const includePatterns = compilePatterns(config.include);
|
|
106
|
+
const excludePatterns = compilePatterns(config.exclude);
|
|
107
|
+
const hasInclude = includePatterns.length > 0;
|
|
108
|
+
if (!hasInclude && excludePatterns.length === 0) {
|
|
109
|
+
return MATCH_ALL;
|
|
110
|
+
}
|
|
111
|
+
return (relativePath) => {
|
|
112
|
+
const normalized = normalizePathForProcessing(relativePath);
|
|
113
|
+
if (!normalized) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (hasInclude && !matches(normalized, includePatterns)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
if (excludePatterns.length > 0 && matches(normalized, excludePatterns)) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=package-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-filters.js","sourceRoot":"","sources":["../../src/utils/package-filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { join, dirname } from 'path';
|
|
2
2
|
import * as yaml from 'js-yaml';
|
|
3
|
+
import { FILE_PATTERNS } from '../constants/index.js';
|
|
3
4
|
import { exists, readTextFile, writeTextFile, ensureDir } from './fs.js';
|
|
4
|
-
import {
|
|
5
|
+
import { getLocalOpenPackageDir, getLocalPackageContentDir } from './paths.js';
|
|
5
6
|
import { normalizePathForProcessing } from './path-normalization.js';
|
|
6
7
|
import { logger } from './logger.js';
|
|
7
|
-
export const PACKAGE_INDEX_FILENAME = 'package.index.yml';
|
|
8
8
|
const HEADER_COMMENT = '# This file is managed by OpenPackage. Do not edit manually.';
|
|
9
|
-
export function getPackageIndexPath(cwd, packageName) {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export function getPackageIndexPath(cwd, packageName, location = 'nested') {
|
|
10
|
+
if (location === 'root') {
|
|
11
|
+
return join(getLocalOpenPackageDir(cwd), FILE_PATTERNS.PACKAGE_INDEX_YML);
|
|
12
|
+
}
|
|
13
|
+
// Nested: use content directory (cwd/.openpackage/packages/<name>/.openpackage/)
|
|
14
|
+
const contentDir = getLocalPackageContentDir(cwd, packageName);
|
|
15
|
+
return join(contentDir, FILE_PATTERNS.PACKAGE_INDEX_YML);
|
|
12
16
|
}
|
|
13
17
|
export function ensureTrailingSlash(value) {
|
|
14
18
|
return value.endsWith('/') ? value : `${value}/`;
|
|
@@ -63,8 +67,9 @@ export function sanitizeIndexData(data) {
|
|
|
63
67
|
files: sortMapping(entries)
|
|
64
68
|
};
|
|
65
69
|
}
|
|
66
|
-
export async function readPackageIndex(cwd, packageName) {
|
|
67
|
-
const
|
|
70
|
+
export async function readPackageIndex(cwd, packageName, location = 'nested') {
|
|
71
|
+
const canonicalPath = getPackageIndexPath(cwd, packageName, location);
|
|
72
|
+
const indexPath = canonicalPath;
|
|
68
73
|
if (!(await exists(indexPath))) {
|
|
69
74
|
return null;
|
|
70
75
|
}
|
|
@@ -82,7 +87,7 @@ export async function readPackageIndex(cwd, packageName) {
|
|
|
82
87
|
};
|
|
83
88
|
}
|
|
84
89
|
return {
|
|
85
|
-
path:
|
|
90
|
+
path: canonicalPath,
|
|
86
91
|
packageName,
|
|
87
92
|
workspace: sanitized.workspace,
|
|
88
93
|
files: sanitized.files
|
|
@@ -91,7 +96,7 @@ export async function readPackageIndex(cwd, packageName) {
|
|
|
91
96
|
catch (error) {
|
|
92
97
|
logger.warn(`Failed to read package index at ${indexPath}: ${error}`);
|
|
93
98
|
return {
|
|
94
|
-
path:
|
|
99
|
+
path: canonicalPath,
|
|
95
100
|
packageName,
|
|
96
101
|
workspace: { version: '', hash: undefined },
|
|
97
102
|
files: {}
|
|
@@ -102,7 +107,7 @@ export async function writePackageIndex(record) {
|
|
|
102
107
|
const { path: indexPath, files } = record;
|
|
103
108
|
const workspaceVer = record.workspace?.version;
|
|
104
109
|
if (!workspaceVer) {
|
|
105
|
-
throw new Error(
|
|
110
|
+
throw new Error(`workspace.version is required when writing ${FILE_PATTERNS.PACKAGE_INDEX_YML}`);
|
|
106
111
|
}
|
|
107
112
|
const workspace = {
|
|
108
113
|
hash: record.workspace?.hash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-index-yml.js","sourceRoot":"","sources":["../../src/utils/package-index-yml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-index-yml.js","sourceRoot":"","sources":["../../src/utils/package-index-yml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { logger } from './logger.js';
|
|
2
2
|
import { promptPlatformSelection } from './prompts.js';
|
|
3
|
-
import {
|
|
4
|
-
import { extractRemoteErrorReason } from './error-reasons.js';
|
|
3
|
+
import { getDetectedPlatforms } from '../core/platforms.js';
|
|
5
4
|
/**
|
|
6
5
|
* Detect existing platforms in the project
|
|
6
|
+
* Wrapper around getDetectedPlatforms that adds debug logging
|
|
7
7
|
*/
|
|
8
8
|
export async function detectPlatforms(targetDir) {
|
|
9
|
-
const
|
|
10
|
-
const detectedPlatforms = platformDetectionResults
|
|
11
|
-
.filter(result => result.detected)
|
|
12
|
-
.map(result => result.name);
|
|
9
|
+
const detectedPlatforms = await getDetectedPlatforms(targetDir);
|
|
13
10
|
if (detectedPlatforms.length > 0) {
|
|
14
11
|
logger.debug(`Auto-detected platforms: ${detectedPlatforms.join(', ')}`);
|
|
15
12
|
}
|
|
@@ -21,112 +18,6 @@ export async function detectPlatforms(targetDir) {
|
|
|
21
18
|
export async function promptForPlatformSelection() {
|
|
22
19
|
console.log('\nš¤ Platform Detection');
|
|
23
20
|
console.log('No AI development platform detected in this project.');
|
|
24
|
-
return await promptPlatformSelection();
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Display installation summary
|
|
28
|
-
*/
|
|
29
|
-
export function displayInstallationSummary(totalInstalled, totalSkipped, totalPackages, results) {
|
|
30
|
-
console.log(`\nā Installation Summary:`);
|
|
31
|
-
console.log(`ā Successfully installed: ${totalInstalled}/${totalPackages} packages`);
|
|
32
|
-
if (totalSkipped > 0) {
|
|
33
|
-
console.log(`ā Failed to install: ${totalSkipped} packages`);
|
|
34
|
-
console.log('\nFailed packages:');
|
|
35
|
-
results.filter(r => !r.success).forEach(result => {
|
|
36
|
-
console.log(` ⢠${result.name}: ${result.error}`);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Display installation results
|
|
42
|
-
*/
|
|
43
|
-
export function displayInstallationResults(packageName, resolvedPackages, platformResult, options, mainPackage, allAddedFiles, allUpdatedFiles, rootFileResults, missingPackages, missingPackageOutcomes) {
|
|
44
|
-
// Build installation summary
|
|
45
|
-
let summaryText = `ā Installed ${packageName}`;
|
|
46
|
-
if (mainPackage) {
|
|
47
|
-
summaryText += `@${mainPackage.version}`;
|
|
48
|
-
}
|
|
49
|
-
console.log(`${summaryText}`);
|
|
50
|
-
const dependencyPackages = resolvedPackages.filter(f => !f.isRoot);
|
|
51
|
-
if (dependencyPackages.length > 0) {
|
|
52
|
-
console.log(`ā Installed dependencies: ${dependencyPackages.length}`);
|
|
53
|
-
for (const dep of dependencyPackages) {
|
|
54
|
-
const packageSpecifier = typeof dep.name === 'string' && dep.name.startsWith('@')
|
|
55
|
-
? dep.name
|
|
56
|
-
: `@${dep.name}`;
|
|
57
|
-
console.log(` āāā ${packageSpecifier}@${dep.version}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
console.log(`ā Total packages processed: ${resolvedPackages.length}`);
|
|
61
|
-
// Show detailed file list
|
|
62
|
-
if (allAddedFiles && allAddedFiles.length > 0) {
|
|
63
|
-
console.log(`ā Added files: ${allAddedFiles.length}`);
|
|
64
|
-
const sortedFiles = [...allAddedFiles].sort((a, b) => a.localeCompare(b));
|
|
65
|
-
for (const file of sortedFiles) {
|
|
66
|
-
console.log(` āāā ${file}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (allUpdatedFiles && allUpdatedFiles.length > 0) {
|
|
70
|
-
console.log(`ā Updated files: ${allUpdatedFiles.length}`);
|
|
71
|
-
const sortedFiles = [...allUpdatedFiles].sort((a, b) => a.localeCompare(b));
|
|
72
|
-
for (const file of sortedFiles) {
|
|
73
|
-
console.log(` āāā ${file}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Root file installation results
|
|
77
|
-
if (rootFileResults) {
|
|
78
|
-
const totalRootFiles = rootFileResults.installed.length + rootFileResults.updated.length;
|
|
79
|
-
if (totalRootFiles > 0) {
|
|
80
|
-
console.log(`ā Root files: ${totalRootFiles} file(s)`);
|
|
81
|
-
// Show newly created root files
|
|
82
|
-
if (rootFileResults.installed.length > 0) {
|
|
83
|
-
const sortedInstalled = [...rootFileResults.installed].sort((a, b) => a.localeCompare(b));
|
|
84
|
-
for (const file of sortedInstalled) {
|
|
85
|
-
console.log(` āāā ${file} (created)`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Show updated root files
|
|
89
|
-
if (rootFileResults.updated.length > 0) {
|
|
90
|
-
const sortedUpdated = [...rootFileResults.updated].sort((a, b) => a.localeCompare(b));
|
|
91
|
-
for (const file of sortedUpdated) {
|
|
92
|
-
console.log(` āāā ${file} (updated)`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Platform and IDE template output
|
|
98
|
-
if (platformResult.created.length > 0) {
|
|
99
|
-
console.log(`ā Created platform directories: ${platformResult.created.join(', ')}`);
|
|
100
|
-
}
|
|
101
|
-
// Report missing packages (displayed last)
|
|
102
|
-
if (missingPackages && missingPackages.length > 0) {
|
|
103
|
-
console.log(`\nā ļø Missing dependencies detected:`);
|
|
104
|
-
for (const missing of missingPackages) {
|
|
105
|
-
const reasonLabel = formatMissingDependencyReason(missingPackageOutcomes?.[missing]);
|
|
106
|
-
console.log(` ⢠${missing} (${reasonLabel})`);
|
|
107
|
-
}
|
|
108
|
-
console.log(`\nš” To resolve missing dependencies:`);
|
|
109
|
-
console.log(` ⢠Create locally: opkg init && opkg save`);
|
|
110
|
-
console.log(` ⢠Pull from remote: opkg pull ${missingPackages.join(' ')}`);
|
|
111
|
-
console.log(` ⢠Remove from package.yml`);
|
|
112
|
-
console.log('');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
function formatMissingDependencyReason(outcome) {
|
|
116
|
-
if (!outcome) {
|
|
117
|
-
return 'not found in registry';
|
|
118
|
-
}
|
|
119
|
-
switch (outcome.reason) {
|
|
120
|
-
case 'not-found':
|
|
121
|
-
return 'not found in remote registry';
|
|
122
|
-
case 'access-denied':
|
|
123
|
-
return 'access denied';
|
|
124
|
-
case 'network':
|
|
125
|
-
return 'network error';
|
|
126
|
-
case 'integrity':
|
|
127
|
-
return 'integrity check failed';
|
|
128
|
-
default:
|
|
129
|
-
return extractRemoteErrorReason(outcome.message || 'unknown error');
|
|
130
|
-
}
|
|
21
|
+
return (await promptPlatformSelection());
|
|
131
22
|
}
|
|
132
23
|
//# sourceMappingURL=package-installation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-installation.js","sourceRoot":"","sources":["../../src/utils/package-installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-installation.js","sourceRoot":"","sources":["../../src/utils/package-installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAiB,MAAM,sBAAsB,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEhE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,4BAA4B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAEpE,OAAO,CAAC,MAAM,uBAAuB,EAAE,CAAe,CAAC;AACzD,CAAC"}
|