@drawcall/market 0.1.35 → 0.1.37
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 +6 -3
- package/dist/asset-implementation.d.ts +16 -7
- package/dist/asset-implementation.d.ts.map +1 -1
- package/dist/asset-implementation.js +20 -1
- package/dist/asset-implementation.js.map +1 -1
- package/dist/cli.js +14 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/install.d.ts +3 -4
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +57 -11
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +17 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +26 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +64 -2
- package/dist/commands/upload.js.map +1 -1
- package/dist/contract.d.ts +9 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -1
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +14 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +133 -23
- package/dist/install.js.map +1 -1
- package/dist/market-lock.d.ts +17 -0
- package/dist/market-lock.d.ts.map +1 -0
- package/dist/market-lock.js +44 -0
- package/dist/market-lock.js.map +1 -0
- package/dist/output.d.ts +4 -2
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +28 -7
- package/dist/output.js.map +1 -1
- package/dist/package-json.d.ts +11 -0
- package/dist/package-json.d.ts.map +1 -0
- package/dist/package-json.js +23 -0
- package/dist/package-json.js.map +1 -0
- package/dist/skill.d.ts +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +20 -9
- package/dist/skill.js.map +1 -1
- package/package.json +2 -2
- package/src/asset-implementation.ts +40 -6
- package/src/cli.ts +24 -6
- package/src/commands/install.ts +76 -16
- package/src/commands/list.ts +47 -0
- package/src/commands/upload.ts +84 -2
- package/src/contract.ts +10 -1
- package/src/index.ts +15 -0
- package/src/install.ts +197 -35
- package/src/market-lock.ts +65 -0
- package/src/output.ts +36 -8
- package/src/package-json.ts +37 -0
- package/src/skill.ts +20 -9
- package/tests/install-command.test.ts +23 -1
- package/tests/install-layout.test.ts +117 -0
- package/tests/list-command.test.ts +76 -0
- package/tests/output.test.ts +69 -3
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ export { createMarketClient } from './client.js';
|
|
|
2
2
|
export type { MarketClient, MarketClientOptions } from './client.js';
|
|
3
3
|
export { contract } from './contract.js';
|
|
4
4
|
export type { AppContract } from './contract.js';
|
|
5
|
-
export type { Asset, AssetVersion, AssetSearchResult, PaginatedList, User, GenerateAssetResult, } from './contract.js';
|
|
6
|
-
export type { AssetDownloadZipInput, AssetExactInput, AssetGenerateInput, AssetImplementation, AssetProvider, AssetSearchInput, AssetUploadZipInput, } from './asset-implementation.js';
|
|
5
|
+
export type { Asset, AssetInstallMetadata, AssetVersion, AssetSearchResult, PaginatedList, User, GenerateAssetResult, } from './contract.js';
|
|
6
|
+
export type { AssetDownloadZipInput, AssetExactInput, AssetGenerateInput, AssetImplementation, AssetProvider, RankedAssetSearchResult, AssetSearchInput, AssetUploadZipInput, } from './asset-implementation.js';
|
|
7
|
+
export { ASSET_RELEVANCE_SCORE, assetRelevanceScore, installMetadataForProvider, withAssetRelevanceScore, } from './asset-implementation.js';
|
|
7
8
|
export { resolve, ResolutionError } from './resolve.js';
|
|
8
9
|
export type { ResolvedAsset, ResolveResult } from './resolve.js';
|
|
9
10
|
export { generateAndWait, GenerateError } from './generate.js';
|
|
@@ -11,4 +12,6 @@ export type { GenerateInput, GenerateResult, GenerateOptions } from './generate.
|
|
|
11
12
|
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, } from './schemas.js';
|
|
12
13
|
export type { AssetType } from './schemas.js';
|
|
13
14
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js';
|
|
15
|
+
export { packageJsonAssetDependencies, packageJsonAssetDependenciesFromFiles, parsePackageJson, } from './package-json.js';
|
|
16
|
+
export type { PackageJson } from './package-json.js';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,YAAY,EACV,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGnF,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,YAAY,EACV,KAAK,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EACV,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGnF,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAErF,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,EACrC,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export { createMarketClient } from './client.js';
|
|
3
3
|
// Contracts
|
|
4
4
|
export { contract } from './contract.js';
|
|
5
|
+
export { ASSET_RELEVANCE_SCORE, assetRelevanceScore, installMetadataForProvider, withAssetRelevanceScore, } from './asset-implementation.js';
|
|
5
6
|
// Resolve
|
|
6
7
|
export { resolve, ResolutionError } from './resolve.js';
|
|
7
8
|
// Generate
|
|
@@ -10,4 +11,5 @@ export { generateAndWait, GenerateError } from './generate.js';
|
|
|
10
11
|
export { ASSET_TYPES, MAX_UPLOAD_ZIP_SIZE_BYTES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, skillDependenciesSchema, uploadZipSchema, downloadZipSchema, exactAssetSchema, generateAssetSchema, updateProfileSchema, listAssetsSchema, } from './schemas.js';
|
|
11
12
|
// Constants
|
|
12
13
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js';
|
|
14
|
+
export { packageJsonAssetDependencies, packageJsonAssetDependenciesFromFiles, parsePackageJson, } from './package-json.js';
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAwBxC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,2BAA2B,CAAA;AAElC,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGvD,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG9D,UAAU;AACV,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAGrB,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAErF,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,EACrC,gBAAgB,GACjB,MAAM,mBAAmB,CAAA"}
|
package/dist/install.d.ts
CHANGED
|
@@ -10,10 +10,17 @@
|
|
|
10
10
|
* only used by the CLI binary; it is NOT exported from the package index.
|
|
11
11
|
*/
|
|
12
12
|
import type { MarketClient } from './client.js';
|
|
13
|
+
import type { AssetInstallMetadata } from './contract.js';
|
|
13
14
|
import type { ResolveResult } from './resolve.js';
|
|
14
15
|
export interface InstallOptions {
|
|
15
16
|
/** Directory to start project root discovery from (default: cwd) */
|
|
16
17
|
cwd?: string;
|
|
18
|
+
/** Overwrite existing files that differ from the asset zip. */
|
|
19
|
+
force?: boolean;
|
|
20
|
+
/** Top-level assets requested by the user, used for package.json assetDependencies. */
|
|
21
|
+
rootRequests?: InstallRootRequest[];
|
|
22
|
+
/** Asset-type install policy from the Market API. */
|
|
23
|
+
installMetadata?: Record<string, AssetInstallMetadata>;
|
|
17
24
|
/** Log progress */
|
|
18
25
|
onProgress?: (message: string) => void;
|
|
19
26
|
/**
|
|
@@ -23,6 +30,12 @@ export interface InstallOptions {
|
|
|
23
30
|
*/
|
|
24
31
|
runSkillAdd?: (source: string, cwd: string) => Promise<void>;
|
|
25
32
|
}
|
|
33
|
+
export interface InstallRootRequest {
|
|
34
|
+
name: string;
|
|
35
|
+
range: string;
|
|
36
|
+
saveRange: string;
|
|
37
|
+
save: boolean;
|
|
38
|
+
}
|
|
26
39
|
export interface InstalledAsset {
|
|
27
40
|
name: string;
|
|
28
41
|
type: string;
|
|
@@ -35,6 +48,7 @@ export interface InstallResult {
|
|
|
35
48
|
npmDependencies: Record<string, string>;
|
|
36
49
|
/** Installed skills, keyed by label, with the source passed to `skills add`. */
|
|
37
50
|
skillDependencies: Record<string, string>;
|
|
51
|
+
warnings: string[];
|
|
38
52
|
}
|
|
39
53
|
export declare function install(client: MarketClient, resolution: ResolveResult, opts?: InstallOptions): Promise<InstallResult>;
|
|
40
54
|
export declare function findInstallRoot(cwd?: string): Promise<string>;
|
package/dist/install.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uFAAuF;IACvF,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACtD,mBAAmB;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAYD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,aAAa,EACzB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CAyCxB;AAED,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF"}
|
package/dist/install.js
CHANGED
|
@@ -14,21 +14,40 @@ import * as fs from 'fs/promises';
|
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { unzipSync } from 'fflate';
|
|
16
16
|
import { detectPackageManager, installDependencies } from 'nypm';
|
|
17
|
+
import { readMarketLock, sha256, writeMarketLock } from './market-lock.js';
|
|
18
|
+
import { parsePackageJson } from './package-json.js';
|
|
17
19
|
export async function install(client, resolution, opts = {}) {
|
|
18
20
|
const log = opts.onProgress ?? (() => { });
|
|
19
21
|
const installRoot = await findInstallRoot(opts.cwd ?? process.cwd());
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
const metadata = opts.installMetadata ?? {};
|
|
23
|
+
const download = await downloadAssets(client, resolution, installRoot, {
|
|
24
|
+
force: opts.force ?? false,
|
|
25
|
+
log,
|
|
26
|
+
});
|
|
27
|
+
await writeInstalledAssetLock(installRoot, download.assets);
|
|
28
|
+
const packageJsonUpdate = await updatePackageJson(resolution, installRoot, {
|
|
29
|
+
rootRequests: opts.rootRequests ?? [],
|
|
30
|
+
installMetadata: metadata,
|
|
31
|
+
packageManagerNeeded: download.wrotePackageJson,
|
|
32
|
+
});
|
|
33
|
+
if (packageJsonUpdate.packageManagerNeeded) {
|
|
34
|
+
await runPackageManagerInstall(installRoot, log);
|
|
35
|
+
}
|
|
24
36
|
// Skills are installed after asset files land on disk: a skill source may be
|
|
25
37
|
// a local path pointing at a skill directory shipped inside an installed
|
|
26
38
|
// asset, which only exists once downloadAssets has completed.
|
|
27
39
|
const skillDependencies = await installSkills(resolution, installRoot, log, opts.runSkillAdd ?? defaultRunSkillAdd);
|
|
28
40
|
return {
|
|
29
|
-
assets
|
|
41
|
+
assets: download.assets.map((asset) => ({
|
|
42
|
+
name: asset.name,
|
|
43
|
+
type: asset.type,
|
|
44
|
+
version: asset.version,
|
|
45
|
+
description: asset.description,
|
|
46
|
+
files: asset.files,
|
|
47
|
+
})),
|
|
30
48
|
npmDependencies: resolution.npmDependencies,
|
|
31
49
|
skillDependencies,
|
|
50
|
+
warnings: download.warnings,
|
|
32
51
|
};
|
|
33
52
|
}
|
|
34
53
|
export async function findInstallRoot(cwd = process.cwd()) {
|
|
@@ -42,13 +61,16 @@ export async function findInstallRoot(cwd = process.cwd()) {
|
|
|
42
61
|
}
|
|
43
62
|
}
|
|
44
63
|
}
|
|
45
|
-
async function downloadAssets(client, resolution, projectRoot,
|
|
64
|
+
async function downloadAssets(client, resolution, projectRoot, opts) {
|
|
46
65
|
const installedAssets = [];
|
|
66
|
+
const warnings = [];
|
|
67
|
+
let wrotePackageJson = false;
|
|
47
68
|
for (const asset of resolution.assets) {
|
|
48
|
-
log(`Downloading ${asset.name}@${asset.version}...`);
|
|
69
|
+
opts.log(`Downloading ${asset.name}@${asset.version}...`);
|
|
49
70
|
const zip = await client.asset.downloadZip({ name: asset.name, version: asset.version });
|
|
50
71
|
const files = unzipSync(new Uint8Array(await zip.arrayBuffer()));
|
|
51
72
|
const installedFiles = [];
|
|
73
|
+
const fileHashes = {};
|
|
52
74
|
for (const [relativePath, content] of Object.entries(files)) {
|
|
53
75
|
const zipPath = relativePath.replace(/\\/g, '/');
|
|
54
76
|
if (zipPath.split('/').includes('..') ||
|
|
@@ -58,14 +80,25 @@ async function downloadAssets(client, resolution, projectRoot, log) {
|
|
|
58
80
|
}
|
|
59
81
|
const normalizedPath = path.posix.normalize(zipPath);
|
|
60
82
|
if (normalizedPath === '.' ||
|
|
61
|
-
normalizedPath === 'README.md' ||
|
|
83
|
+
(normalizedPath === 'README.md' && asset.type !== 'template') ||
|
|
62
84
|
normalizedPath.endsWith('/')) {
|
|
63
85
|
continue;
|
|
64
86
|
}
|
|
65
87
|
const filePath = path.join(projectRoot, normalizedPath);
|
|
66
|
-
await
|
|
67
|
-
|
|
88
|
+
const existing = await maybeReadFile(filePath);
|
|
89
|
+
if (existing && !bytesEqual(existing, content) && !opts.force) {
|
|
90
|
+
warnings.push(`Skipped ${normalizedPath} from ${asset.name}@${asset.version}; file already exists. Re-run with --force to overwrite.`);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (!existing || !bytesEqual(existing, content)) {
|
|
94
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
95
|
+
await fs.writeFile(filePath, content);
|
|
96
|
+
if (normalizedPath === 'package.json') {
|
|
97
|
+
wrotePackageJson = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
68
100
|
installedFiles.push(normalizedPath);
|
|
101
|
+
fileHashes[normalizedPath] = { sha256: sha256(content) };
|
|
69
102
|
}
|
|
70
103
|
installedAssets.push({
|
|
71
104
|
name: asset.name,
|
|
@@ -73,10 +106,11 @@ async function downloadAssets(client, resolution, projectRoot, log) {
|
|
|
73
106
|
version: asset.version,
|
|
74
107
|
description: asset.description,
|
|
75
108
|
files: installedFiles,
|
|
109
|
+
fileHashes,
|
|
76
110
|
});
|
|
77
|
-
log(`Downloaded ${installedFiles.length} files.`);
|
|
111
|
+
opts.log(`Downloaded ${installedFiles.length} files.`);
|
|
78
112
|
}
|
|
79
|
-
return installedAssets;
|
|
113
|
+
return { assets: installedAssets, wrotePackageJson, warnings };
|
|
80
114
|
}
|
|
81
115
|
async function isFile(file) {
|
|
82
116
|
try {
|
|
@@ -86,25 +120,101 @@ async function isFile(file) {
|
|
|
86
120
|
return false;
|
|
87
121
|
}
|
|
88
122
|
}
|
|
89
|
-
async function
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
123
|
+
async function maybeReadFile(file) {
|
|
124
|
+
try {
|
|
125
|
+
return await fs.readFile(file);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (isMissingFile(error))
|
|
129
|
+
return null;
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function isMissingFile(error) {
|
|
134
|
+
return error instanceof Error && 'code' in error && error.code === 'ENOENT';
|
|
135
|
+
}
|
|
136
|
+
async function updatePackageJson(resolution, projectRoot, opts) {
|
|
93
137
|
const pkgPath = path.join(projectRoot, 'package.json');
|
|
94
|
-
// Only synthesize a package.json when none exists. A malformed existing file
|
|
95
|
-
// is a real error that must surface — never silently overwrite it.
|
|
96
138
|
const pkg = (await isFile(pkgPath))
|
|
97
|
-
?
|
|
98
|
-
:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
139
|
+
? parsePackageJson(await fs.readFile(pkgPath, 'utf-8'), pkgPath)
|
|
140
|
+
: defaultPackageJson();
|
|
141
|
+
let changed = false;
|
|
142
|
+
let packageManagerNeeded = opts.packageManagerNeeded;
|
|
143
|
+
const npmChanged = mergeRecord(pkg, 'dependencies', resolution.npmDependencies);
|
|
144
|
+
if (npmChanged) {
|
|
145
|
+
changed = true;
|
|
146
|
+
packageManagerNeeded = true;
|
|
147
|
+
}
|
|
148
|
+
const assetDependencies = assetDependenciesToSave(resolution, opts.rootRequests, opts.installMetadata);
|
|
149
|
+
if (mergeRecord(pkg, 'assetDependencies', assetDependencies)) {
|
|
150
|
+
changed = true;
|
|
151
|
+
}
|
|
152
|
+
if (changed) {
|
|
153
|
+
await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
154
|
+
}
|
|
155
|
+
return { packageManagerNeeded };
|
|
156
|
+
}
|
|
157
|
+
async function runPackageManagerInstall(projectRoot, log) {
|
|
158
|
+
log('Installing npm dependencies...');
|
|
102
159
|
const pm = await detectPackageManager(projectRoot);
|
|
103
160
|
const pmName = pm?.name ?? 'npm';
|
|
104
161
|
log(`Using ${pmName}...`);
|
|
105
162
|
await installDependencies({ cwd: projectRoot, packageManager: { name: pmName, command: pmName } });
|
|
106
163
|
log('npm dependencies installed.');
|
|
107
164
|
}
|
|
165
|
+
async function writeInstalledAssetLock(projectRoot, assets) {
|
|
166
|
+
const lock = await readMarketLock(projectRoot);
|
|
167
|
+
for (const asset of assets) {
|
|
168
|
+
lock.assets[asset.name] = {
|
|
169
|
+
version: asset.version,
|
|
170
|
+
type: asset.type,
|
|
171
|
+
files: asset.fileHashes,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
await writeMarketLock(projectRoot, lock);
|
|
175
|
+
}
|
|
176
|
+
function defaultPackageJson() {
|
|
177
|
+
return { name: 'my-project', private: true, dependencies: {} };
|
|
178
|
+
}
|
|
179
|
+
function mergeRecord(pkg, field, values) {
|
|
180
|
+
const entries = Object.entries(values);
|
|
181
|
+
if (entries.length === 0)
|
|
182
|
+
return false;
|
|
183
|
+
const current = pkg[field] ?? {};
|
|
184
|
+
let changed = false;
|
|
185
|
+
for (const [name, range] of entries) {
|
|
186
|
+
if (current[name] === range)
|
|
187
|
+
continue;
|
|
188
|
+
current[name] = range;
|
|
189
|
+
changed = true;
|
|
190
|
+
}
|
|
191
|
+
pkg[field] = current;
|
|
192
|
+
return changed;
|
|
193
|
+
}
|
|
194
|
+
function assetDependenciesToSave(resolution, rootRequests, metadata) {
|
|
195
|
+
const resolvedByName = new Map(resolution.assets.map((asset) => [asset.name, asset]));
|
|
196
|
+
const out = {};
|
|
197
|
+
for (const request of rootRequests) {
|
|
198
|
+
if (!request.save)
|
|
199
|
+
continue;
|
|
200
|
+
const asset = resolvedByName.get(request.name);
|
|
201
|
+
if (!asset)
|
|
202
|
+
continue;
|
|
203
|
+
if ((metadata[asset.type]?.saveOnInstall ?? true) === false)
|
|
204
|
+
continue;
|
|
205
|
+
out[asset.name] = request.saveRange;
|
|
206
|
+
}
|
|
207
|
+
return out;
|
|
208
|
+
}
|
|
209
|
+
function bytesEqual(a, b) {
|
|
210
|
+
if (a.length !== b.length)
|
|
211
|
+
return false;
|
|
212
|
+
for (let i = 0; i < a.length; i += 1) {
|
|
213
|
+
if (a[i] !== b[i])
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
108
218
|
async function installSkills(resolution, projectRoot, log, runSkillAdd) {
|
|
109
219
|
const skills = resolution.skillDependencies ?? {};
|
|
110
220
|
const entries = Object.entries(skills);
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const MARKET_LOCK_PATH = ".drawcall/market-lock.json";
|
|
2
|
+
export interface MarketLockAsset {
|
|
3
|
+
version: string;
|
|
4
|
+
type: string;
|
|
5
|
+
files: Record<string, {
|
|
6
|
+
sha256: string;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
export interface MarketLock {
|
|
10
|
+
version: 1;
|
|
11
|
+
assets: Record<string, MarketLockAsset>;
|
|
12
|
+
}
|
|
13
|
+
export declare function readMarketLock(projectRoot: string): Promise<MarketLock>;
|
|
14
|
+
export declare function writeMarketLock(projectRoot: string, lock: MarketLock): Promise<void>;
|
|
15
|
+
export declare function emptyMarketLock(): MarketLock;
|
|
16
|
+
export declare function sha256(bytes: Uint8Array): string;
|
|
17
|
+
//# sourceMappingURL=market-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-lock.d.ts","sourceRoot":"","sources":["../src/market-lock.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,+BAA+B,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,CAAA;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACxC;AAmBD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ7E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F;AAED,wBAAgB,eAAe,IAAI,UAAU,CAK5C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createHash } from 'crypto';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export const MARKET_LOCK_PATH = '.drawcall/market-lock.json';
|
|
6
|
+
const marketLockSchema = z.object({
|
|
7
|
+
version: z.literal(1),
|
|
8
|
+
assets: z.record(z.string(), z.object({
|
|
9
|
+
version: z.string(),
|
|
10
|
+
type: z.string(),
|
|
11
|
+
files: z.record(z.string(), z.object({
|
|
12
|
+
sha256: z.string(),
|
|
13
|
+
})),
|
|
14
|
+
})),
|
|
15
|
+
});
|
|
16
|
+
export async function readMarketLock(projectRoot) {
|
|
17
|
+
const lockPath = path.join(projectRoot, MARKET_LOCK_PATH);
|
|
18
|
+
try {
|
|
19
|
+
return marketLockSchema.parse(JSON.parse(await fs.readFile(lockPath, 'utf-8')));
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (isMissingFile(error))
|
|
23
|
+
return emptyMarketLock();
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function writeMarketLock(projectRoot, lock) {
|
|
28
|
+
const lockPath = path.join(projectRoot, MARKET_LOCK_PATH);
|
|
29
|
+
await fs.mkdir(path.dirname(lockPath), { recursive: true });
|
|
30
|
+
await fs.writeFile(lockPath, JSON.stringify(lock, null, 2) + '\n');
|
|
31
|
+
}
|
|
32
|
+
export function emptyMarketLock() {
|
|
33
|
+
return {
|
|
34
|
+
version: 1,
|
|
35
|
+
assets: {},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function sha256(bytes) {
|
|
39
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
40
|
+
}
|
|
41
|
+
function isMissingFile(error) {
|
|
42
|
+
return error instanceof Error && 'code' in error && error.code === 'ENOENT';
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=market-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-lock.js","sourceRoot":"","sources":["../src/market-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AAa5D,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,CACd,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CACb,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC,CACH;KACF,CAAC,CACH;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IACzD,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,eAAe,EAAE,CAAA;QAClD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAgB;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;IACzD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;KACX,CAAA;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC7E,CAAC"}
|
package/dist/output.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AssetSearchResult } from './contract.js';
|
|
1
|
+
import type { AssetInstallMetadata, AssetSearchResult } from './contract.js';
|
|
2
|
+
import type { ListInstalledAssetsResult } from './commands/list.js';
|
|
2
3
|
import type { InstallResult } from './install.js';
|
|
3
4
|
export declare function assetVersionRef(name: string, version?: string): string;
|
|
4
5
|
export declare function assetApproval(approved: boolean): 'approved' | 'unapproved';
|
|
@@ -10,7 +11,8 @@ export declare function searchSummary(input: {
|
|
|
10
11
|
total: number;
|
|
11
12
|
}): string;
|
|
12
13
|
export declare function assetSearchResultLine(item: AssetSearchResult): string;
|
|
13
|
-
export declare function installResult(result: InstallResult,
|
|
14
|
+
export declare function installResult(result: InstallResult, installMetadata?: Record<string, AssetInstallMetadata>): string;
|
|
15
|
+
export declare function listResult(result: ListInstalledAssetsResult): string;
|
|
14
16
|
export declare function generatedInstallResult(name: string, version: string): string;
|
|
15
17
|
export declare function uploadResult(name: string, version: string): string;
|
|
16
18
|
export declare function unchangedUploadResult(name: string, version: string): string;
|
package/dist/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAE1E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAOT;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAKrE;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAM,GACzD,MAAM,CAuCR;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAWpE;AAkCD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,MAAM,CAGvD"}
|
package/dist/output.js
CHANGED
|
@@ -16,19 +16,16 @@ export function assetSearchResultLine(item) {
|
|
|
16
16
|
const description = item.description ? ` | ${normalizeInline(item.description)}` : '';
|
|
17
17
|
return `- ${assetVersionRef(item.name, item.latestVersion)} | ${item.type} | ${assetApproval(item.approved)}${description}`;
|
|
18
18
|
}
|
|
19
|
-
export function installResult(result,
|
|
19
|
+
export function installResult(result, installMetadata = {}) {
|
|
20
20
|
const npmDependencies = Object.entries(result.npmDependencies);
|
|
21
21
|
const lines = ['Installed:'];
|
|
22
22
|
for (const asset of result.assets) {
|
|
23
|
-
|
|
24
|
-
lines.push(`- ${assetVersionRef(asset.name, asset.version)} (${asset.type})`);
|
|
23
|
+
lines.push(assetLine(asset));
|
|
25
24
|
if (asset.description) {
|
|
26
25
|
lines.push(...block(' description: ', asset.description));
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
const message = postInstallMessages[asset.type];
|
|
27
|
+
lines.push(...assetFileLines(asset.files));
|
|
28
|
+
const message = installMetadata[asset.type]?.installMessage;
|
|
32
29
|
if (message) {
|
|
33
30
|
lines.push(...block(' note: ', message));
|
|
34
31
|
}
|
|
@@ -44,8 +41,32 @@ export function installResult(result, postInstallMessages = {}) {
|
|
|
44
41
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
45
42
|
.map(([label, source]) => `- ${label} ← ${source} (skill)`));
|
|
46
43
|
}
|
|
44
|
+
if (result.warnings.length > 0) {
|
|
45
|
+
lines.push('Warnings:', ...result.warnings.map((warning) => `- ${warning}`));
|
|
46
|
+
}
|
|
47
|
+
return lines.join('\n');
|
|
48
|
+
}
|
|
49
|
+
export function listResult(result) {
|
|
50
|
+
if (result.assets.length === 0) {
|
|
51
|
+
return 'No installed assets found.';
|
|
52
|
+
}
|
|
53
|
+
const lines = [`Installed assets: ${result.assets.length}`];
|
|
54
|
+
for (const asset of result.assets) {
|
|
55
|
+
lines.push(assetLine(asset), ...assetFileLines(asset.files));
|
|
56
|
+
}
|
|
47
57
|
return lines.join('\n');
|
|
48
58
|
}
|
|
59
|
+
function assetLine(asset) {
|
|
60
|
+
return `- ${assetVersionRef(asset.name, asset.version)} (${asset.type})`;
|
|
61
|
+
}
|
|
62
|
+
function assetFileLines(paths) {
|
|
63
|
+
const lines = [];
|
|
64
|
+
const files = unique(paths);
|
|
65
|
+
if (files.length > 0) {
|
|
66
|
+
lines.push(' files:', ...indent(fileTree(files), ' '));
|
|
67
|
+
}
|
|
68
|
+
return lines;
|
|
69
|
+
}
|
|
49
70
|
function block(label, message, width = 68) {
|
|
50
71
|
const hang = ' '.repeat(label.length);
|
|
51
72
|
const words = normalizeInline(message).split(' ').filter(Boolean);
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface PackageJson {
|
|
2
|
+
name?: string;
|
|
3
|
+
private?: boolean;
|
|
4
|
+
dependencies?: Record<string, string>;
|
|
5
|
+
assetDependencies?: Record<string, string>;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare function packageJsonAssetDependenciesFromFiles(files: Record<string, Uint8Array>): Record<string, string>;
|
|
9
|
+
export declare function packageJsonAssetDependencies(json: string, source: string): Record<string, string>;
|
|
10
|
+
export declare function parsePackageJson(json: string, source: string): PackageJson;
|
|
11
|
+
//# sourceMappingURL=package-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAID,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMjG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAO1E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const stringRecordSchema = z.record(z.string(), z.string());
|
|
3
|
+
export function packageJsonAssetDependenciesFromFiles(files) {
|
|
4
|
+
const bytes = files['package.json'];
|
|
5
|
+
if (!bytes)
|
|
6
|
+
return {};
|
|
7
|
+
return packageJsonAssetDependencies(new TextDecoder().decode(bytes), 'package.json');
|
|
8
|
+
}
|
|
9
|
+
export function packageJsonAssetDependencies(json, source) {
|
|
10
|
+
const parsed = parsePackageJson(json, source);
|
|
11
|
+
const dependencies = parsed.assetDependencies;
|
|
12
|
+
if (dependencies === undefined)
|
|
13
|
+
return {};
|
|
14
|
+
return stringRecordSchema.parse(dependencies);
|
|
15
|
+
}
|
|
16
|
+
export function parsePackageJson(json, source) {
|
|
17
|
+
const parsed = JSON.parse(json);
|
|
18
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
19
|
+
throw new Error(`${source} must contain a JSON object`);
|
|
20
|
+
}
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AAE3D,MAAM,UAAU,qCAAqC,CACnD,KAAiC;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IAErB,OAAO,4BAA4B,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,MAAc;IACvE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAA;IAC7C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEzC,OAAO,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAc;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;IAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,6BAA6B,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,MAAqB,CAAA;AAC9B,CAAC"}
|