@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.
Files changed (63) hide show
  1. package/README.md +6 -3
  2. package/dist/asset-implementation.d.ts +16 -7
  3. package/dist/asset-implementation.d.ts.map +1 -1
  4. package/dist/asset-implementation.js +20 -1
  5. package/dist/asset-implementation.js.map +1 -1
  6. package/dist/cli.js +14 -2
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/install.d.ts +3 -4
  9. package/dist/commands/install.d.ts.map +1 -1
  10. package/dist/commands/install.js +57 -11
  11. package/dist/commands/install.js.map +1 -1
  12. package/dist/commands/list.d.ts +17 -0
  13. package/dist/commands/list.d.ts.map +1 -0
  14. package/dist/commands/list.js +26 -0
  15. package/dist/commands/list.js.map +1 -0
  16. package/dist/commands/upload.d.ts.map +1 -1
  17. package/dist/commands/upload.js +64 -2
  18. package/dist/commands/upload.js.map +1 -1
  19. package/dist/contract.d.ts +9 -1
  20. package/dist/contract.d.ts.map +1 -1
  21. package/dist/contract.js +1 -1
  22. package/dist/contract.js.map +1 -1
  23. package/dist/index.d.ts +5 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/install.d.ts +14 -0
  28. package/dist/install.d.ts.map +1 -1
  29. package/dist/install.js +133 -23
  30. package/dist/install.js.map +1 -1
  31. package/dist/market-lock.d.ts +17 -0
  32. package/dist/market-lock.d.ts.map +1 -0
  33. package/dist/market-lock.js +44 -0
  34. package/dist/market-lock.js.map +1 -0
  35. package/dist/output.d.ts +4 -2
  36. package/dist/output.d.ts.map +1 -1
  37. package/dist/output.js +28 -7
  38. package/dist/output.js.map +1 -1
  39. package/dist/package-json.d.ts +11 -0
  40. package/dist/package-json.d.ts.map +1 -0
  41. package/dist/package-json.js +23 -0
  42. package/dist/package-json.js.map +1 -0
  43. package/dist/skill.d.ts +1 -1
  44. package/dist/skill.d.ts.map +1 -1
  45. package/dist/skill.js +20 -9
  46. package/dist/skill.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/asset-implementation.ts +40 -6
  49. package/src/cli.ts +24 -6
  50. package/src/commands/install.ts +76 -16
  51. package/src/commands/list.ts +47 -0
  52. package/src/commands/upload.ts +84 -2
  53. package/src/contract.ts +10 -1
  54. package/src/index.ts +15 -0
  55. package/src/install.ts +197 -35
  56. package/src/market-lock.ts +65 -0
  57. package/src/output.ts +36 -8
  58. package/src/package-json.ts +37 -0
  59. package/src/skill.ts +20 -9
  60. package/tests/install-command.test.ts +23 -1
  61. package/tests/install-layout.test.ts +117 -0
  62. package/tests/list-command.test.ts +76 -0
  63. 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
@@ -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;AAuBxC,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"}
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>;
@@ -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;AASjD,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,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,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;CAC1C;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,aAAa,EACzB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAED,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF"}
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 [assets] = await Promise.all([
21
- downloadAssets(client, resolution, installRoot, log),
22
- installNpmDeps(resolution, installRoot, log),
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, log) {
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 fs.mkdir(path.dirname(filePath), { recursive: true });
67
- await fs.writeFile(filePath, content);
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 installNpmDeps(resolution, projectRoot, log) {
90
- const deps = resolution.npmDependencies;
91
- if (Object.keys(deps).length === 0)
92
- return;
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
- ? JSON.parse(await fs.readFile(pkgPath, 'utf-8'))
98
- : { name: 'my-project', private: true, dependencies: {} };
99
- pkg.dependencies = { ...pkg.dependencies, ...deps };
100
- await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
101
- log(`Installing npm dependencies: ${Object.keys(deps).join(', ')}`);
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);
@@ -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;AAuChE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAoB,EACpB,UAAyB,EACzB,OAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAEpE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC;QACpD,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,CAAC;KAC7C,CAAC,CAAA;IAEF,6EAA6E;IAC7E,yEAAyE;IACzE,8DAA8D;IAC9D,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAC3C,UAAU,EACV,WAAW,EACX,GAAG,EACH,IAAI,CAAC,WAAW,IAAI,kBAAkB,CACvC,CAAA;IAED,OAAO;QACL,MAAM;QACN,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,iBAAiB;KAClB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAE/B,KAAK,IAAI,GAAG,GAAG,KAAK,GAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAAoB,EACpB,UAAyB,EACzB,WAAmB,EACnB,GAA0B;IAE1B,MAAM,eAAe,GAAqB,EAAE,CAAA;IAE5C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,CAAA;QAEpD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACxF,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAChE,MAAM,cAAc,GAAa,EAAE,CAAA;QAEnC,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAA2B,EAAE,CAAC;YACtF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAChD,IACE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAC9B,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAA;YACjE,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACpD,IACE,cAAc,KAAK,GAAG;gBACtB,cAAc,KAAK,WAAW;gBAC9B,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,CAAC;gBACD,SAAQ;YACV,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;YACvD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACrC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACrC,CAAC;QAED,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,cAAc;SACtB,CAAC,CAAA;QAEF,GAAG,CAAC,cAAc,cAAc,CAAC,MAAM,SAAS,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,UAAyB,EACzB,WAAmB,EACnB,GAA0B;IAE1B,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAA;IACvC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IACtD,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,GAAG,GAAgB,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAiB;QAClE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;IAE3D,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,CAAA;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAEhE,GAAG,CAAC,gCAAgC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEnE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,EAAE,EAAE,IAAI,IAAI,KAAK,CAAA;IAEhC,GAAG,CAAC,SAAS,MAAM,KAAK,CAAC,CAAA;IACzB,MAAM,mBAAmB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;IAClG,GAAG,CAAC,6BAA6B,CAAC,CAAA;AACpC,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,UAAyB,EACzB,WAAmB,EACnB,GAA0B,EAC1B,WAA2D;IAE3D,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,IAAI,EAAE,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEnC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC9D,GAAG,CAAC,oBAAoB,KAAK,KAAK,MAAM,MAAM,CAAC,CAAA;QAC/C,MAAM,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IAChD,CAAC;IAED,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtE,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAc,EAAE,WAAmB;IAC7D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,IAAI;QACf,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAC/B,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAc,EAAE,GAAW;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5F,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAA;gBAC7C,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
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, postInstallMessages?: Record<string, string>): string;
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;
@@ -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;AACtD,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,mBAAmB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC/C,MAAM,CAsCR;AAqBD,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"}
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, postInstallMessages = {}) {
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
- const files = unique(asset.files);
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
- if (files.length > 0) {
29
- lines.push(' files:', ...indent(fileTree(files), ' '));
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);
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAgB;IAC5D,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAM7B;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAA;IAC7E,MAAM,KAAK,GAAG,UAAU,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,IAAI,aAAa,QAAQ,EAAE,CAAA;IAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,eAAe,KAAK,EAAE,CAAA;IAC/B,CAAC;IACD,OAAO,YAAY,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACrF,OAAO,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,aAAa,CAC1F,IAAI,CAAC,QAAQ,CACd,GAAG,WAAW,EAAE,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAqB,EACrB,sBAA8C,EAAE;IAEhD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAE9D,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,CAAA;IAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QAC7E,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,GAAG,eAAe;aACf,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CACzE,CAAA;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACxE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CACR,GAAG,iBAAiB;aACjB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,MAAM,UAAU,CAAC,CAC9D,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,OAAe,EAAE,KAAK,GAAG,EAAE;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEjE,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClB,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACxC,CAAC;IACH,CAAC;IACD,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE5B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAClE,OAAO,2BAA2B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe;IACxD,OAAO,YAAY,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe;IACjE,OAAO,qBAAqB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,GAAW;IACtE,OAAO,qBAAqB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,UAAkB;IAC3D,OAAO,gBAAgB,KAAK,aAAa,UAAU,GAAG,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,UAAU,CAAC,CAAC,CAAC,uBAAuB,UAAU,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,GAAG,GAAG,EAAE;IAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACzC,OAAO,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAA;AACpF,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAMD,SAAS,QAAQ,CAAC,KAAe;IAC/B,MAAM,IAAI,GAAiB,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAA;IAElD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAA;gBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAChC,CAAC;YACD,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,IAAkB,EAAE,MAAM,GAAG,EAAE,EAAE,aAAa,GAAG,KAAK;IAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;QACnF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAA;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAA;QACtC,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/D,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1E,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,MAAM,CAAI,MAAW;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,KAAe,EAAE,MAAc;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAA;AAChD,CAAC"}
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"}