@drawcall/market 0.1.21 → 0.1.23

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.
@@ -41,7 +41,7 @@ export interface AssetProvider {
41
41
  }): Promise<AssetVersion>;
42
42
  downloadZip(input: AssetDownloadZipInput): Promise<Blob>;
43
43
  downloadPreviewImage?(input: AssetDownloadZipInput): Promise<Blob>;
44
- generate(input: AssetGenerateInput): Promise<GenerateAssetResult>;
44
+ generate?(input: AssetGenerateInput): Promise<GenerateAssetResult>;
45
45
  }
46
46
  export type AssetImplementation = AssetProvider;
47
47
  //# sourceMappingURL=asset-implementation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,EAAE,IAAI,CAAA;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC1E,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAChE,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACjG,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,oBAAoB,CAAC,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAClE;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA"}
1
+ {"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,OAAO,CAAA;IAC1B,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,EAAE,IAAI,CAAA;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC1E,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAChE,SAAS,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACjG,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,oBAAoB,CAAC,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,QAAQ,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACnE;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAA"}
@@ -1,9 +1,17 @@
1
+ import { type Ora } from 'ora';
1
2
  import { type AssetType } from '../schemas.js';
3
+ import type { MarketClient } from '../client.js';
2
4
  export interface InstallCommandOptions {
3
5
  type?: AssetType;
4
6
  unapproved?: boolean;
5
7
  cwd?: string;
6
8
  baseUrl?: string;
7
9
  }
10
+ interface AssetRequest {
11
+ name: string;
12
+ range: string;
13
+ }
8
14
  export declare function installCommand(args: string[], opts: InstallCommandOptions): Promise<void>;
15
+ export declare function resolveArg(client: MarketClient, arg: string, type: AssetType | undefined, spinner: Ora, canGenerate: boolean, includeUnapproved: boolean): Promise<AssetRequest>;
16
+ export {};
9
17
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAInC,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAAC,YAAY,CAAC,CAqEvB"}
@@ -36,7 +36,7 @@ export async function installCommand(args, opts) {
36
36
  throw err;
37
37
  }
38
38
  }
39
- async function resolveArg(client, arg, type, spinner, canGenerate, includeUnapproved) {
39
+ export async function resolveArg(client, arg, type, spinner, canGenerate, includeUnapproved) {
40
40
  const parsed = parseNameAndRange(arg);
41
41
  if (parsed) {
42
42
  const existing = await client.asset.exact({
@@ -46,6 +46,19 @@ async function resolveArg(client, arg, type, spinner, canGenerate, includeUnappr
46
46
  });
47
47
  if (existing)
48
48
  return parsed;
49
+ if (!includeUnapproved) {
50
+ const hidden = await client.asset.exact({
51
+ name: parsed.name,
52
+ type,
53
+ includeUnapproved: true,
54
+ });
55
+ if (hidden) {
56
+ throw new Error(`Asset "${parsed.name}" exists but has no approved versions. Re-run with \`--unapproved\` if you have access.`);
57
+ }
58
+ }
59
+ if (arg.includes('@')) {
60
+ return parsed;
61
+ }
49
62
  }
50
63
  spinner.text = `Searching "${truncate(arg, 40)}"`;
51
64
  const results = await client.asset.search({
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
package/dist/skill.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const marketSkill = "---\nname: market\ndescription: Find, preview, install, generate, and publish Drawcall Market assets from a coding agent.\n---\n\n# Drawcall Market\n\nUse the `market` CLI. Keep commands short and read the summary line plus asset bullets.\n\n## Quick Start\n\n```sh\nmarket search \"wooden chair\" --type model --limit 3\nmarket install wooden-chair --type model --cwd \"$PWD\"\nmarket preview wooden-chair --out /tmp/wooden-chair.png\n```\n\n## Workflow\n\n1. Search first unless the user gave an exact asset name.\n2. Search requires `--type`; use `model` unless the user names another supported type: `humanoid-model`, `texture`, `humanoid-animation`, `template`, `sound-effect`, or `environment`.\n3. Use `--limit 1` for lookup, `--limit 3` for choice. Search caps at 5.\n4. Use `--verbose` only when the one-line descriptions are not enough.\n5. Use `--unapproved` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.\n6. Preview before installing when visual fit matters: `market preview <name> --out <file>`. Preview is not supported for `humanoid-animation`, `template`, or `sound-effect`.\n7. Generate only when the user wants a new asset and auth is available. Generate is not supported for `template`.\n8. Upload only when publishing is requested.\n9. Installed `environment` assets contain `public/environment/<name>.hdr` for Three.js IBL lighting and `public/environment/<name>-background.webp` for the visible equirectangular background.\n\n## Output\n\nCommands print concise summaries:\n\n```text\nResults: 2/8 query=\"wooden chair\" type=model approval=approved\n- wooden-chair@1.0.0 | model | approved | Low-poly wooden chair\nInstalled 1 asset: wooden-chair@1.0.0\nSaved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png\n```\n\nIf search returns no results, try one broader noun phrase before generating. If a command returns `Error: Not logged in...`, ask before running `market login`.\n";
1
+ export declare const marketSkill = "---\nname: market\ndescription: Find, preview, install, generate, and publish Drawcall Market assets from a coding agent.\n---\n\n# Drawcall Market\n\nUse the `market` CLI. Keep commands short and read the summary line plus asset bullets.\n\n## Quick Start\n\n```sh\nmarket search \"wooden chair\" --type model --limit 3\nmarket install wooden-chair --type model --cwd \"$PWD\"\nmarket preview wooden-chair --out /tmp/wooden-chair.png\n```\n\n## Workflow\n\n1. Search first unless the user gave an exact asset name.\n2. Search requires `--type`; use `model` unless the user names another supported type: `humanoid-model`, `texture`, `humanoid-animation`, `template`, `sound-effect`, or `environment`.\n3. Use `--limit 1` for lookup, `--limit 3` for choice. Search caps at 5.\n4. Use `--verbose` only when the one-line descriptions are not enough.\n5. Use `--unapproved` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.\n6. Preview before installing when visual fit matters: `market preview <name> --out <file>`. Preview is not supported for `humanoid-animation`, `template`, or `sound-effect`.\n7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.\n8. Upload only when publishing is requested.\n9. Installed `environment` assets contain `public/environment/<name>.hdr` for Three.js IBL lighting and `public/environment/<name>-background.webp` for the visible equirectangular background. Use `market preview` to fetch the preview image separately.\n\n## Output\n\nCommands print concise summaries:\n\n```text\nResults: 2/8 query=\"wooden chair\" type=model approval=approved\n- wooden-chair@1.0.0 | model | approved | Low-poly wooden chair\nInstalled 1 asset: wooden-chair@1.0.0\nSaved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png\n```\n\nIf search returns no results, try one broader noun phrase. If a command returns `Error: Not logged in...`, ask before running `market login`.\n";
2
2
  //# sourceMappingURL=skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,o8DAyCvB,CAAA"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,giEAyCvB,CAAA"}
package/dist/skill.js CHANGED
@@ -23,9 +23,9 @@ market preview wooden-chair --out /tmp/wooden-chair.png
23
23
  4. Use \`--verbose\` only when the one-line descriptions are not enough.
24
24
  5. Use \`--unapproved\` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.
25
25
  6. Preview before installing when visual fit matters: \`market preview <name> --out <file>\`. Preview is not supported for \`humanoid-animation\`, \`template\`, or \`sound-effect\`.
26
- 7. Generate only when the user wants a new asset and auth is available. Generate is not supported for \`template\`.
26
+ 7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.
27
27
  8. Upload only when publishing is requested.
28
- 9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background.
28
+ 9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background. Use \`market preview\` to fetch the preview image separately.
29
29
 
30
30
  ## Output
31
31
 
@@ -38,6 +38,6 @@ Installed 1 asset: wooden-chair@1.0.0
38
38
  Saved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png
39
39
  \`\`\`
40
40
 
41
- If search returns no results, try one broader noun phrase before generating. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
41
+ If search returns no results, try one broader noun phrase. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
42
42
  `;
43
43
  //# sourceMappingURL=skill.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawcall/market",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/drawcall-ai/market",
@@ -31,7 +31,7 @@
31
31
  "scripts": {
32
32
  "build": "tsc",
33
33
  "dev": "tsx src/cli.ts",
34
- "test:install-layout": "tsx --test tests/install-layout.test.ts",
34
+ "test:install-layout": "tsx --test tests/install-layout.test.ts tests/install-command.test.ts",
35
35
  "typecheck": "tsc --noEmit"
36
36
  },
37
37
  "dependencies": {
@@ -49,7 +49,7 @@ export interface AssetProvider {
49
49
  uploadZip(input: AssetUploadZipInput, owner: { id: string; role: string }): Promise<AssetVersion>
50
50
  downloadZip(input: AssetDownloadZipInput): Promise<Blob>
51
51
  downloadPreviewImage?(input: AssetDownloadZipInput): Promise<Blob>
52
- generate(input: AssetGenerateInput): Promise<GenerateAssetResult>
52
+ generate?(input: AssetGenerateInput): Promise<GenerateAssetResult>
53
53
  }
54
54
 
55
55
  export type AssetImplementation = AssetProvider
@@ -56,7 +56,7 @@ export async function installCommand(args: string[], opts: InstallCommandOptions
56
56
  }
57
57
  }
58
58
 
59
- async function resolveArg(
59
+ export async function resolveArg(
60
60
  client: MarketClient,
61
61
  arg: string,
62
62
  type: AssetType | undefined,
@@ -72,6 +72,23 @@ async function resolveArg(
72
72
  includeUnapproved,
73
73
  })
74
74
  if (existing) return parsed
75
+
76
+ if (!includeUnapproved) {
77
+ const hidden = await client.asset.exact({
78
+ name: parsed.name,
79
+ type,
80
+ includeUnapproved: true,
81
+ })
82
+ if (hidden) {
83
+ throw new Error(
84
+ `Asset "${parsed.name}" exists but has no approved versions. Re-run with \`--unapproved\` if you have access.`,
85
+ )
86
+ }
87
+ }
88
+
89
+ if (arg.includes('@')) {
90
+ return parsed
91
+ }
75
92
  }
76
93
 
77
94
  spinner.text = `Searching "${truncate(arg, 40)}"`
package/src/skill.ts CHANGED
@@ -23,9 +23,9 @@ market preview wooden-chair --out /tmp/wooden-chair.png
23
23
  4. Use \`--verbose\` only when the one-line descriptions are not enough.
24
24
  5. Use \`--unapproved\` only when the user asks for unapproved/private/admin assets. Do not install unapproved assets without explicit acceptance.
25
25
  6. Preview before installing when visual fit matters: \`market preview <name> --out <file>\`. Preview is not supported for \`humanoid-animation\`, \`template\`, or \`sound-effect\`.
26
- 7. Generate only when the user wants a new asset and auth is available. Generate is not supported for \`template\`.
26
+ 7. Generate only when the user wants a new asset, auth is available, and the requested asset type supports generation. No asset type currently supports generation.
27
27
  8. Upload only when publishing is requested.
28
- 9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background.
28
+ 9. Installed \`environment\` assets contain \`public/environment/<name>.hdr\` for Three.js IBL lighting and \`public/environment/<name>-background.webp\` for the visible equirectangular background. Use \`market preview\` to fetch the preview image separately.
29
29
 
30
30
  ## Output
31
31
 
@@ -38,5 +38,5 @@ Installed 1 asset: wooden-chair@1.0.0
38
38
  Saved preview for wooden-chair@1.0.0: /tmp/wooden-chair.png
39
39
  \`\`\`
40
40
 
41
- If search returns no results, try one broader noun phrase before generating. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
41
+ If search returns no results, try one broader noun phrase. If a command returns \`Error: Not logged in...\`, ask before running \`market login\`.
42
42
  `
@@ -0,0 +1,78 @@
1
+ import assert from 'node:assert/strict'
2
+ import test from 'node:test'
3
+ import { resolveArg } from '../src/commands/install.js'
4
+
5
+ test('resolveArg reports unapproved explicit assets instead of falling through to generation', async () => {
6
+ let searchCalls = 0
7
+ const client = {
8
+ asset: {
9
+ exact: async ({
10
+ includeUnapproved,
11
+ }: {
12
+ name: string
13
+ type?: string
14
+ includeUnapproved: boolean
15
+ }) =>
16
+ includeUnapproved
17
+ ? {
18
+ name: 'qwantani-moon-noon-puresky',
19
+ latestVersion: '1.0.2',
20
+ approved: false,
21
+ }
22
+ : null,
23
+ search: async () => {
24
+ searchCalls += 1
25
+ return { items: [], total: 0, page: 1, limit: 1, totalPages: 0 }
26
+ },
27
+ },
28
+ } as never
29
+
30
+ await assert.rejects(
31
+ resolveArg(
32
+ client,
33
+ 'qwantani-moon-noon-puresky@1.0.2',
34
+ 'environment',
35
+ silentSpinner(),
36
+ true,
37
+ false,
38
+ ),
39
+ /has no approved versions/u,
40
+ )
41
+
42
+ assert.equal(searchCalls, 0)
43
+ })
44
+
45
+ test('resolveArg keeps explicit versioned asset refs exact when nothing matches yet', async () => {
46
+ let searchCalls = 0
47
+ const client = {
48
+ asset: {
49
+ exact: async () => null,
50
+ search: async () => {
51
+ searchCalls += 1
52
+ return { items: [], total: 0, page: 1, limit: 1, totalPages: 0 }
53
+ },
54
+ },
55
+ } as never
56
+
57
+ const request = await resolveArg(
58
+ client,
59
+ 'fresh-sky@1.2.3',
60
+ 'environment',
61
+ silentSpinner(),
62
+ true,
63
+ false,
64
+ )
65
+
66
+ assert.deepEqual(request, { name: 'fresh-sky', range: '1.2.3' })
67
+ assert.equal(searchCalls, 0)
68
+ })
69
+
70
+ function silentSpinner() {
71
+ return {
72
+ text: '',
73
+ info() {},
74
+ start() {
75
+ return this
76
+ },
77
+ } as never
78
+ }