@drawcall/market 0.1.21 → 0.1.22

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.
@@ -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":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAe7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc,EAAE,IAA2B;IAC9E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAEtC,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;KAChC,CAAC,CAAC,KAAK,EAAE,CAAA;IACV,IAAI,CAAC;QACH,MAAM,QAAQ,GAAmB,EAAE,CAAA;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA;YACjD,QAAQ,CAAC,IAAI,CACX,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CACzF,CAAA;QACH,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAA;QAC1C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;YACvD,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;SAC5C,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;YAClD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAoB,EACpB,GAAW,EACX,IAA2B,EAC3B,OAAY,EACZ,WAAoB,EACpB,iBAA0B;IAE1B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI;YACJ,iBAAiB;SAClB,CAAC,CAAA;QACF,IAAI,QAAQ;YAAE,OAAO,MAAM,CAAA;QAE3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI;gBACJ,iBAAiB,EAAE,IAAI;aACxB,CAAC,CAAA;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,IAAI,yFAAyF,CAC/G,CAAA;YACH,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,cAAc,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,KAAK,EAAE,GAAG;QACV,IAAI;QACJ,iBAAiB;QACjB,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,WAAW;KAClB,CAAC,CAAA;IACF,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;YAC1E,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;IACvC,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,sEAAsE,CAC7F,CAAA;IACH,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,2BAA2B,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA;IAC9D,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,MAAM,EACN,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1B;QACE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;QACpB,CAAC;KACF,CACF,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,GAAG,sBAAsB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAC9F,CAAA;QACD,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAA;AAChE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACnD,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACrD,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawcall/market",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
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": {
@@ -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)}"`
@@ -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
+ }