@notambourine/metafields 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +128 -73
  2. package/dist/admin-shapes.d.ts +57 -0
  3. package/dist/admin-shapes.d.ts.map +1 -0
  4. package/dist/admin-shapes.js +67 -0
  5. package/dist/admin-shapes.js.map +1 -0
  6. package/dist/admin.d.ts +8 -3
  7. package/dist/admin.d.ts.map +1 -1
  8. package/dist/admin.js +187 -102
  9. package/dist/admin.js.map +1 -1
  10. package/dist/app-config.d.ts +5 -0
  11. package/dist/app-config.d.ts.map +1 -0
  12. package/dist/app-config.js +50 -0
  13. package/dist/app-config.js.map +1 -0
  14. package/dist/builders.js +2 -2
  15. package/dist/builders.js.map +1 -1
  16. package/dist/changes.d.ts +20 -0
  17. package/dist/changes.d.ts.map +1 -0
  18. package/dist/changes.js +85 -0
  19. package/dist/changes.js.map +1 -0
  20. package/dist/cli.js +156 -73
  21. package/dist/cli.js.map +1 -1
  22. package/dist/doctor.d.ts +16 -0
  23. package/dist/doctor.d.ts.map +1 -0
  24. package/dist/doctor.js +61 -0
  25. package/dist/doctor.js.map +1 -0
  26. package/dist/fleet.d.ts +10 -3
  27. package/dist/fleet.d.ts.map +1 -1
  28. package/dist/fleet.js +20 -11
  29. package/dist/fleet.js.map +1 -1
  30. package/dist/generator.js +1 -1
  31. package/dist/generator.js.map +1 -1
  32. package/dist/index.d.ts +13 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +6 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/liquid.d.ts.map +1 -1
  37. package/dist/liquid.js +4 -19
  38. package/dist/liquid.js.map +1 -1
  39. package/dist/metafield-types.d.ts +601 -0
  40. package/dist/metafield-types.d.ts.map +1 -0
  41. package/dist/metafield-types.js +150 -0
  42. package/dist/metafield-types.js.map +1 -0
  43. package/dist/migration.d.ts +3 -2
  44. package/dist/migration.d.ts.map +1 -1
  45. package/dist/migration.js +4 -6
  46. package/dist/migration.js.map +1 -1
  47. package/dist/planner.d.ts +4 -2
  48. package/dist/planner.d.ts.map +1 -1
  49. package/dist/planner.js +10 -3
  50. package/dist/planner.js.map +1 -1
  51. package/dist/pull.d.ts.map +1 -1
  52. package/dist/pull.js +3 -62
  53. package/dist/pull.js.map +1 -1
  54. package/dist/schema.d.ts.map +1 -1
  55. package/dist/schema.js +1 -0
  56. package/dist/schema.js.map +1 -1
  57. package/dist/type-check.d.ts +14 -0
  58. package/dist/type-check.d.ts.map +1 -0
  59. package/dist/type-check.js +61 -0
  60. package/dist/type-check.js.map +1 -0
  61. package/dist/type-registry.d.ts +21 -0
  62. package/dist/type-registry.d.ts.map +1 -0
  63. package/dist/type-registry.js +48 -0
  64. package/dist/type-registry.js.map +1 -0
  65. package/package.json +3 -2
@@ -0,0 +1,85 @@
1
+ export function classifyDrift(plan) {
2
+ const items = [];
3
+ for (const item of plan.items) {
4
+ if (item.status === 'CREATE')
5
+ continue;
6
+ const buckets = { apply: [], force: [], blocked: [] };
7
+ // Labels are safe to rewrite but remain notices, so cosmetic-only drift still exits 0.
8
+ for (const reason of [...item.reasons, ...item.notices])
9
+ buckets[bucketFor(item, reason)].push(reason);
10
+ const entry = { item, applies: buckets.apply, needsForce: buckets.force, blocked: buckets.blocked };
11
+ if (entry.applies.length + entry.needsForce.length + entry.blocked.length > 0)
12
+ items.push(entry);
13
+ }
14
+ return {
15
+ items,
16
+ applies: items.filter((entry) => writes(entry, false)).length,
17
+ needsForce: items.filter((entry) => !writes(entry, false) && writes(entry, true)).length,
18
+ blocked: items.filter((entry) => entry.blocked.length > 0).length,
19
+ };
20
+ }
21
+ // The definitions this run rewrites. Everything else is left exactly as the store has it.
22
+ export function written(drift, force) {
23
+ return drift.items.filter((entry) => writes(entry, force));
24
+ }
25
+ // The drift still standing after this run: what force cannot reach, plus what it could have
26
+ // reached had it been passed. Post-apply verification ignores these; the exit code does not.
27
+ export function deferred(drift, force) {
28
+ return drift.items.filter((entry) => !writes(entry, force));
29
+ }
30
+ // The attributes an update carries, so a write never states an opinion about something the
31
+ // operator did not declare drifted.
32
+ export function changedPaths(entry, force) {
33
+ const reasons = force ? [...entry.applies, ...entry.needsForce] : entry.applies;
34
+ return reasons.map((reason) => attribute(entry.item, reason));
35
+ }
36
+ // Reasons carry the item identity for metafields but not for metaobjects, so strip it before
37
+ // matching an attribute path.
38
+ export function attribute(item, reason) {
39
+ return reason.startsWith(`${item.identity}.`) ? reason.slice(item.identity.length + 1) : reason;
40
+ }
41
+ // Why `--force` is the wrong reach. Someone hitting an unrelated refusal and typing `--force`
42
+ // is the one failure mode a generic flag name creates; saying so where they are looking closes it.
43
+ export function blockedAdvice(item, reason) {
44
+ const path = attribute(item, reason);
45
+ if (/(^|\.)type: expected /.test(path)) {
46
+ return 'Shopify will not retype a definition that holds values. --force cannot do this; use a migration.';
47
+ }
48
+ if (path.startsWith('stored values include ')) {
49
+ return 'Invalid stored values are data, not shape. --force cannot do this; correct the values.';
50
+ }
51
+ if (item.status === 'INDETERMINATE') {
52
+ return 'Shopify is still validating stored values. --force cannot do this; wait and re-run.';
53
+ }
54
+ return 'This definition cannot be read back for update. --force cannot do this.';
55
+ }
56
+ function writes(entry, force) {
57
+ return entry.blocked.length === 0 && (force || entry.needsForce.length === 0);
58
+ }
59
+ function bucketFor(item, reason) {
60
+ // IN_PROGRESS validation: wait, do not write, not even a label.
61
+ if (item.status === 'INDETERMINATE')
62
+ return 'blocked';
63
+ // A metaobject update needs the definition's Shopify id, which only a read supplies.
64
+ if (item.kind === 'metaobject' && item.existing?.id === undefined)
65
+ return 'blocked';
66
+ const path = attribute(item, reason);
67
+ // Shopify will not retype a definition that has stored values; that is what migrations are for.
68
+ if (/(^|\.)type: expected /.test(path))
69
+ return 'blocked';
70
+ // Invalid stored values are data, not shape.
71
+ if (path.startsWith('stored values include '))
72
+ return 'blocked';
73
+ // Risk follows the attribute, not direction; capabilities are the exception because their
74
+ // direction is explicit and enabling one is harmless.
75
+ if (/(^|\.)capabilities\.[^:]+: expected false/.test(path))
76
+ return 'force';
77
+ if (/(^|\.)access\./.test(path))
78
+ return 'force';
79
+ if (/(^|\.)(validations|constraints) differ$/.test(path))
80
+ return 'force';
81
+ if (/(^|\.)required: expected true/.test(path))
82
+ return 'force';
83
+ return 'apply';
84
+ }
85
+ //# sourceMappingURL=changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { mkdir, open, readFile, writeFile } from 'node:fs/promises';
3
3
  import { dirname, resolve } from 'node:path';
4
4
  import { AdminClient, DEFAULT_API_VERSION } from './admin.js';
5
+ import { readAppConfig } from './app-config.js';
5
6
  import { mintAccessToken } from './auth.js';
6
7
  import { fleetExitCode, synchronizeFleet } from './fleet.js';
7
8
  import { generateSchemaModule } from './generator.js';
@@ -9,14 +10,16 @@ import { descriptionViolations } from './limits.js';
9
10
  import { loadDefault, loadSchema } from './loader.js';
10
11
  import { assertCompiledMigration, compileMigration, migrationExitCode, MIGRATION_MARKER, runMigration, } from './migration.js';
11
12
  import { emitLiquidMetafields, isLiquidMetafieldsFile } from './liquid.js';
13
+ import { blockedAdvice } from './changes.js';
12
14
  import { pullSchema } from './pull.js';
13
15
  import { compileSchema, OWNER_TYPES, SCHEMA_MARKER, stringifyCanonical } from './schema.js';
16
+ import { doctorExitCode, runDoctor } from './doctor.js';
14
17
  const valueOptions = new Set([
15
- 'store', 'stores-from', 'client-id', 'api-version', 'owner', 'namespace', 'out',
18
+ 'store', 'stores-from', 'client-id', 'app-config', 'api-version', 'owner', 'namespace', 'out',
16
19
  ]);
17
20
  const booleanOptions = new Set([
18
- 'apply', 'check', 'json', 'validate', 'metaobjects', 'all-owners', 'all-namespaces', 'liquid',
19
- 'help', 'version',
21
+ 'apply', 'force', 'dry-run', 'json', 'validate', 'metaobjects', 'all-owners', 'all-namespaces',
22
+ 'liquid', 'help', 'version',
20
23
  ]);
21
24
  async function main(argv) {
22
25
  const args = parseArguments(argv);
@@ -28,8 +31,9 @@ async function main(argv) {
28
31
  process.stdout.write(`${await packageVersion()}\n`);
29
32
  return 0;
30
33
  }
31
- if (args.flags.has('apply') && args.flags.has('check')) {
32
- throw new Error('--apply and --check are mutually exclusive');
34
+ // Alone it modifies nothing: there is no write for it to widen.
35
+ if (args.flags.has('force') && !args.flags.has('apply') && args.command !== 'emit') {
36
+ throw new Error('--force requires --apply');
33
37
  }
34
38
  if (args.command === 'compile')
35
39
  return compileCommand(args);
@@ -39,8 +43,29 @@ async function main(argv) {
39
43
  return pullCommand(args);
40
44
  if (args.command === 'migrate')
41
45
  return migrateCommand(args);
46
+ if (args.command === 'doctor')
47
+ return doctorCommand(args);
42
48
  return syncCommand(args);
43
49
  }
50
+ // The one command that reaches Shopify without a store: shopify.dev proxies the type list to
51
+ // anyone. Kept out of sync so that no store operation depends on shopify.dev being up.
52
+ async function doctorCommand(args) {
53
+ if (args.positional.length > 0)
54
+ throw new Error('doctor accepts no positional arguments');
55
+ const report = await runDoctor(oneValue(args, 'api-version', false));
56
+ output(args, { installed: await packageVersion(), ...report }, renderDoctor(report));
57
+ return doctorExitCode(report);
58
+ }
59
+ function renderDoctor(report) {
60
+ const lines = [];
61
+ for (const check of report.checks) {
62
+ lines.push(`${check.ok ? 'OK ' : 'FAIL'} ${check.summary}`);
63
+ for (const line of check.details)
64
+ lines.push(` ${line}`);
65
+ }
66
+ lines.push('');
67
+ return lines.join('\n');
68
+ }
44
69
  async function syncCommand(args) {
45
70
  const path = onlyPositional(args, 'schema module');
46
71
  const schema = await loadSchema(path);
@@ -57,29 +82,23 @@ async function syncCommand(args) {
57
82
  }
58
83
  const mode = modeFrom(args);
59
84
  const targets = await storeTargets(args);
60
- const result = await synchronizeFleet(targets, schema, mode, connectorFrom(args, targets.length));
85
+ const result = await synchronizeFleet(targets, schema, mode, await connectorFrom(args, targets.length), {
86
+ force: args.flags.has('force'),
87
+ });
61
88
  output(args, result, renderFleet(result));
62
- return fleetExitCode(result, mode);
89
+ return fleetExitCode(result);
63
90
  }
64
91
  async function pullCommand(args) {
65
92
  if (args.positional.length > 0)
66
93
  throw new Error('pull accepts no positional arguments');
67
94
  const allOwners = args.flags.has('all-owners');
68
- const ownerValues = values(args, 'owner');
69
- if (allOwners && ownerValues.length > 0)
70
- throw new Error('--all-owners and --owner are mutually exclusive');
71
- if (!allOwners && ownerValues.length === 0)
72
- throw new Error('pull requires --owner or --all-owners');
95
+ const ownerValues = requireExactlyOne(args, 'owner', 'all-owners');
73
96
  const owners = (allOwners ? Object.keys(OWNER_TYPES) : ownerValues);
74
97
  for (const owner of owners)
75
98
  if (!(owner in OWNER_TYPES))
76
99
  throw new Error(`unsupported owner: ${owner}`);
77
100
  const allNamespaces = args.flags.has('all-namespaces');
78
- const namespaces = values(args, 'namespace');
79
- if (allNamespaces && namespaces.length > 0)
80
- throw new Error('--all-namespaces and --namespace are mutually exclusive');
81
- if (!allNamespaces && namespaces.length === 0)
82
- throw new Error('pull requires --namespace or --all-namespaces');
101
+ const namespaces = requireExactlyOne(args, 'namespace', 'all-namespaces');
83
102
  const pulled = await pullSchema(await clientFrom(args), {
84
103
  owners,
85
104
  namespaces,
@@ -87,21 +106,12 @@ async function pullCommand(args) {
87
106
  metaobjects: args.flags.has('metaobjects'),
88
107
  });
89
108
  const generated = generateSchemaModule(pulled);
90
- const out = oneValue(args, 'out', false);
91
- if (out) {
92
- const handle = await open(resolve(process.cwd(), out), 'wx');
93
- await handle.writeFile(generated);
94
- await handle.close();
95
- output(args, { status: 'written', out, excluded: pulled.excluded }, `WROTE ${out}\n`);
96
- }
97
- else if (args.flags.has('json')) {
98
- output(args, { schema: generated, excluded: pulled.excluded }, '');
99
- }
100
- else {
101
- process.stdout.write(generated);
102
- for (const identity of pulled.excluded)
103
- process.stderr.write(`EXCLUDED ${identity}\n`);
104
- }
109
+ await deliver(args, {
110
+ key: 'schema',
111
+ value: generated,
112
+ text: generated,
113
+ notes: { key: 'excluded', identities: pulled.excluded },
114
+ });
105
115
  return 0;
106
116
  }
107
117
  async function compileCommand(args) {
@@ -114,17 +124,7 @@ async function compileCommand(args) {
114
124
  compiled = compileMigration(value);
115
125
  else
116
126
  throw new Error('default export is neither a schema nor a migration declaration');
117
- const text = stringifyCanonical(compiled);
118
- const out = oneValue(args, 'out', false);
119
- if (out) {
120
- const handle = await open(resolve(process.cwd(), out), 'wx');
121
- await handle.writeFile(text);
122
- await handle.close();
123
- process.stdout.write(`WROTE ${out}\n`);
124
- }
125
- else {
126
- process.stdout.write(text);
127
- }
127
+ await deliver(args, { key: 'compiled', value: compiled, text: stringifyCanonical(compiled) });
128
128
  return 0;
129
129
  }
130
130
  async function emitCommand(args) {
@@ -132,24 +132,24 @@ async function emitCommand(args) {
132
132
  if (!args.flags.has('liquid'))
133
133
  throw new Error('emit requires an output format: --liquid');
134
134
  const { definitions, skipped } = emitLiquidMetafields(await loadSchema(path));
135
- const text = stringifyCanonical(definitions);
136
135
  const out = oneValue(args, 'out', false);
137
- if (!out) {
138
- process.stdout.write(text);
139
- for (const identity of skipped)
140
- process.stderr.write(`SKIPPED ${identity}\n`);
141
- return 0;
136
+ if (out !== undefined) {
137
+ await assertGeneratedTarget(resolve(process.cwd(), out), args.flags.has('force'));
142
138
  }
143
- const target = resolve(process.cwd(), out);
144
- await assertGeneratedTarget(target);
145
- await mkdir(dirname(target), { recursive: true });
146
- await writeFile(target, text);
147
- output(args, { status: 'written', out, skipped }, `WROTE ${out}\n`);
139
+ await deliver(args, {
140
+ key: 'definitions',
141
+ value: definitions,
142
+ text: stringifyCanonical(definitions),
143
+ notes: { key: 'skipped', identities: skipped },
144
+ overwrite: true,
145
+ });
148
146
  return 0;
149
147
  }
150
148
  // The target is a regenerated editor cache, so emit replaces it. Anything that is not
151
- // already one is refused rather than overwritten.
152
- async function assertGeneratedTarget(target) {
149
+ // already one is refused rather than overwritten, until --force says otherwise.
150
+ async function assertGeneratedTarget(target, force) {
151
+ if (force)
152
+ return;
153
153
  let existing;
154
154
  try {
155
155
  existing = await readFile(target, 'utf8');
@@ -180,7 +180,7 @@ async function migrateCommand(args) {
180
180
  `invalid=${result.invalid} conflicts=${result.conflicts} applied=${result.applied}`,
181
181
  '',
182
182
  ].join('\n'));
183
- return migrationExitCode(result, mode);
183
+ return migrationExitCode(result);
184
184
  }
185
185
  function parseArguments(argv) {
186
186
  const values = new Map();
@@ -189,7 +189,7 @@ function parseArguments(argv) {
189
189
  let command = 'sync';
190
190
  const rest = [...argv];
191
191
  const first = rest[0];
192
- if (first && ['sync', 'pull', 'compile', 'emit', 'migrate', 'help', 'version'].includes(first)) {
192
+ if (first && ['sync', 'pull', 'compile', 'emit', 'migrate', 'doctor', 'help', 'version'].includes(first)) {
193
193
  command = rest.shift();
194
194
  }
195
195
  while (rest.length > 0) {
@@ -220,12 +220,10 @@ function parseArguments(argv) {
220
220
  }
221
221
  return { command, positional, values, flags };
222
222
  }
223
+ // --dry-run cancels whatever write was asked for, so the exact command line CI runs takes one
224
+ // appended flag to show what it would do.
223
225
  function modeFrom(args) {
224
- if (args.flags.has('apply'))
225
- return 'apply';
226
- if (args.flags.has('check'))
227
- return 'check';
228
- return 'dry-run';
226
+ return args.flags.has('apply') && !args.flags.has('dry-run') ? 'apply' : 'dry-run';
229
227
  }
230
228
  async function storeTargets(args) {
231
229
  const targets = new Map();
@@ -244,10 +242,21 @@ async function storeTargets(args) {
244
242
  throw new Error('--store or --stores-from is required');
245
243
  return [...targets.values()];
246
244
  }
247
- function connectorFrom(args, storeCount) {
245
+ // Most explicit source first. The app TOML the Shopify CLI already requires carries the client
246
+ // id, so a caller should not have to cut it out of the file to pass --client-id.
247
+ async function clientIdFrom(args) {
248
+ const explicit = oneValue(args, 'client-id', false);
249
+ if (explicit !== undefined)
250
+ return explicit;
251
+ const appConfig = oneValue(args, 'app-config', false);
252
+ if (appConfig !== undefined)
253
+ return (await readAppConfig(resolve(process.cwd(), appConfig))).clientId;
254
+ return process.env.SHOPIFY_APP_CLIENT_ID ?? '';
255
+ }
256
+ async function connectorFrom(args, storeCount) {
248
257
  const apiVersion = oneValue(args, 'api-version', false) ?? DEFAULT_API_VERSION;
249
258
  // guarddog: the three documented auth inputs, read here only to reach the named stores.
250
- const clientId = oneValue(args, 'client-id', false) ?? process.env.SHOPIFY_APP_CLIENT_ID ?? '';
259
+ const clientId = await clientIdFrom(args);
251
260
  const clientSecret = process.env.SHOPIFY_APP_SECRET ?? ''; // guarddog: see above
252
261
  const token = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN ?? ''; // guarddog: see above
253
262
  if (clientId.length > 0 && clientSecret.length > 0) {
@@ -271,11 +280,49 @@ function connectorFrom(args, storeCount) {
271
280
  throw new Error('SHOPIFY_ADMIN_ACCESS_TOKEN reaches one store; a fleet needs SHOPIFY_APP_CLIENT_ID and SHOPIFY_APP_SECRET');
272
281
  }
273
282
  async function clientFrom(args) {
274
- return connectorFrom(args, 1)(oneValue(args, 'store', true));
283
+ return (await connectorFrom(args, 1))(oneValue(args, 'store', true));
275
284
  }
276
285
  function values(args, name) {
277
286
  return args.values.get(name) ?? [];
278
287
  }
288
+ // emit regenerates an editor cache in place; pull and compile refuse to clobber anything.
289
+ async function writeOut(out, text, overwrite = false) {
290
+ const path = resolve(process.cwd(), out);
291
+ if (!overwrite) {
292
+ const handle = await open(path, 'wx');
293
+ await handle.writeFile(text);
294
+ await handle.close();
295
+ return;
296
+ }
297
+ await mkdir(dirname(path), { recursive: true });
298
+ await writeFile(path, text);
299
+ }
300
+ async function deliver(args, delivery) {
301
+ const notes = delivery.notes ? { [delivery.notes.key]: delivery.notes.identities } : {};
302
+ const out = oneValue(args, 'out', false);
303
+ if (out !== undefined) {
304
+ await writeOut(out, delivery.text, delivery.overwrite);
305
+ output(args, { status: 'written', out, ...notes }, `WROTE ${out}\n`);
306
+ return;
307
+ }
308
+ if (args.flags.has('json')) {
309
+ output(args, { [delivery.key]: delivery.value, ...notes }, '');
310
+ return;
311
+ }
312
+ process.stdout.write(delivery.text);
313
+ for (const identity of delivery.notes?.identities ?? []) {
314
+ process.stderr.write(`${delivery.notes?.key.toUpperCase()} ${identity}\n`);
315
+ }
316
+ }
317
+ function requireExactlyOne(args, name, allFlag) {
318
+ const selected = values(args, name);
319
+ const all = args.flags.has(allFlag);
320
+ if (all && selected.length > 0)
321
+ throw new Error(`--${allFlag} and --${name} are mutually exclusive`);
322
+ if (!all && selected.length === 0)
323
+ throw new Error(`${args.command} requires --${name} or --${allFlag}`);
324
+ return selected;
325
+ }
279
326
  function oneValue(args, name, required) {
280
327
  const found = values(args, name);
281
328
  if (found.length > 1)
@@ -303,14 +350,43 @@ function renderFleet(result) {
303
350
  lines.push(`STORE ${outcome.store}`);
304
351
  for (const item of outcome.plan?.items ?? [])
305
352
  lines.push(...renderItem(item));
306
- for (const identity of outcome.applied ?? [])
307
- lines.push(`APPLIED ${identity}`);
353
+ const updated = new Set(outcome.updated ?? []);
354
+ const skipped = new Set(outcome.skipped ?? []);
355
+ for (const entry of outcome.drift?.items ?? []) {
356
+ // The reasons are already above, under the plan item; only a refusal repeats one, next to
357
+ // the line that says what to do about it.
358
+ if (updated.has(entry.item.identity))
359
+ lines.push(`UPDATED ${entry.item.identity}`);
360
+ else if (!skipped.has(entry.item.identity))
361
+ lines.push(`UPDATE ${entry.item.identity}`);
362
+ else
363
+ lines.push(...renderSkipped(entry));
364
+ }
365
+ for (const identity of outcome.created ?? [])
366
+ lines.push(`CREATED ${identity}`);
308
367
  if (outcome.refused !== undefined)
309
368
  lines.push(`REFUSED ${outcome.store}: ${outcome.refused}`);
310
369
  }
311
370
  lines.push('');
312
371
  return lines.join('\n');
313
372
  }
373
+ // The refusal carries the teaching, so the generic flag name costs nothing. BLOCKED matters
374
+ // most: saying "--force cannot do this" is what stops someone reaching for it here.
375
+ function renderSkipped(entry) {
376
+ if (entry.blocked.length === 0) {
377
+ return [
378
+ `SKIPPED ${entry.item.identity}`,
379
+ ...entry.needsForce.map((reason) => ` ${reason}`),
380
+ ' re-run with --force to apply it',
381
+ ];
382
+ }
383
+ const advice = [...new Set(entry.blocked.map((reason) => blockedAdvice(entry.item, reason)))];
384
+ return [
385
+ `BLOCKED ${entry.item.identity}`,
386
+ ...entry.blocked.map((reason) => ` ${reason}`),
387
+ ...advice.map((line) => ` ${line}`),
388
+ ];
389
+ }
314
390
  function renderItem(item) {
315
391
  return [
316
392
  `${item.status} ${item.identity}`,
@@ -333,19 +409,25 @@ async function help() {
333
409
 
334
410
  Usage:
335
411
  metafields <schema.ts> --validate
336
- metafields <schema.ts> --store <store.myshopify.com> [--apply | --check] [--json]
412
+ metafields <schema.ts> --store <store.myshopify.com> [--json]
413
+ metafields <schema.ts> --store <store.myshopify.com> --apply [--force] [--dry-run]
337
414
  metafields <schema.ts> --store <a> --store <b> --stores-from <stores.txt> [--apply]
338
415
  metafields pull --store <store.myshopify.com> --owner <owner> --namespace <namespace>
339
416
  [--metaobjects] [--out <schema.ts>]
340
417
  metafields compile <schema-or-migration.ts> [--out <compiled.json>]
341
- metafields emit <schema.ts> --liquid [--out .shopify/metafields.json]
418
+ metafields emit <schema.ts> --liquid [--out .shopify/metafields.json] [--force]
342
419
  metafields migrate <compiled-migration.json> --store <store.myshopify.com>
343
- [--apply | --check] [--json]
420
+ [--apply] [--dry-run] [--json]
421
+ metafields doctor [--api-version <YYYY-MM>] [--json]
344
422
 
345
423
  Options:
346
424
  --store <host> Target store; repeat for a fleet
347
425
  --stores-from <file> Sweep the stores listed one per line, '#' comments allowed
348
- --client-id <id> App client id (default: SHOPIFY_APP_CLIENT_ID)
426
+ --client-id <id> App client id; wins over --app-config and SHOPIFY_APP_CLIENT_ID
427
+ --app-config <path> Read client_id from a Shopify app TOML
428
+ --apply Make the store match the schema
429
+ --force Apply updates that can break a live storefront or strand stored values
430
+ --dry-run Report the writes --apply would make and make none
349
431
  --api-version <YYYY-MM> Shopify Admin API version (default: ${DEFAULT_API_VERSION})
350
432
  --all-owners Pull every supported owner type
351
433
  --all-namespaces Pull every merchant-owned namespace
@@ -354,7 +436,8 @@ Options:
354
436
  --version Show version
355
437
 
356
438
  Auth reads SHOPIFY_APP_CLIENT_ID and SHOPIFY_APP_SECRET to mint a short-lived Admin token
357
- per store, or SHOPIFY_ADMIN_ACCESS_TOKEN for a single store.
439
+ per store, or SHOPIFY_ADMIN_ACCESS_TOKEN for a single store. The client id can also come from
440
+ --client-id or --app-config ./shopify.app.toml; the secret is always an environment variable.
358
441
  `;
359
442
  }
360
443
  main(process.argv.slice(2)).then((code) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Registry } from './type-registry.js';
2
+ export interface DoctorCheck {
3
+ readonly name: string;
4
+ readonly ok: boolean;
5
+ readonly summary: string;
6
+ readonly details: readonly string[];
7
+ }
8
+ export interface DoctorReport {
9
+ readonly version: string;
10
+ readonly healthy: boolean;
11
+ readonly checks: readonly DoctorCheck[];
12
+ }
13
+ export type FetchRegistry = (version: string) => Promise<Registry>;
14
+ export declare function runDoctor(version?: string, fetch?: FetchRegistry): Promise<DoctorReport>;
15
+ export declare function doctorExitCode(report: DoctorReport): number;
16
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgC,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAMnE,wBAAsB,SAAS,CAC7B,OAAO,GAAE,MAA4B,EACrC,KAAK,GAAE,aAA6B,GACnC,OAAO,CAAC,YAAY,CAAC,CA6CvB;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAE3D"}
package/dist/doctor.js ADDED
@@ -0,0 +1,61 @@
1
+ // Checks whether this release describes the selected Shopify API without store credentials.
2
+ // Actionable differences are findings; checks that cannot run throw instead.
3
+ import { DEFAULT_API_VERSION } from './admin.js';
4
+ import { compareRegistry } from './type-check.js';
5
+ import { fetchRegistry, RegistryError } from './type-registry.js';
6
+ function report(version, checks) {
7
+ return { version, healthy: checks.every((check) => check.ok), checks };
8
+ }
9
+ export async function runDoctor(version = DEFAULT_API_VERSION, fetch = fetchRegistry) {
10
+ let registry;
11
+ try {
12
+ registry = await fetch(version);
13
+ }
14
+ catch (error) {
15
+ if (error instanceof RegistryError && error.kind === 'unsupported-version') {
16
+ return report(version, [{
17
+ name: 'api-version',
18
+ ok: false,
19
+ summary: `api version ${version} is not one Shopify serves`,
20
+ details: [
21
+ version === DEFAULT_API_VERSION
22
+ ? 'this release pins a version that has aged out; upgrade @notambourine/metafields'
23
+ : 'pass --api-version with a version Shopify still supports',
24
+ ],
25
+ }]);
26
+ }
27
+ throw error;
28
+ }
29
+ const types = compareRegistry(registry);
30
+ const differences = [
31
+ ...types.types.map((difference) => detail(difference.kind, 'type', difference.name, difference.detail)),
32
+ ...types.owners.map((difference) => detail(difference.kind, 'owner', difference.name, difference.detail)),
33
+ ];
34
+ return report(version, [
35
+ {
36
+ name: 'api-version',
37
+ ok: true,
38
+ summary: `api version ${version} is supported`,
39
+ details: [],
40
+ },
41
+ {
42
+ name: 'metafield-types',
43
+ ok: types.matches,
44
+ summary: types.matches
45
+ ? `type table matches the Admin API ${version}`
46
+ : `type table differs from the Admin API ${version}`,
47
+ // No upgrade carries a table for a version this release was not generated against, so
48
+ // saying "upgrade" off-version would send someone after a release that cannot exist.
49
+ details: types.matches ? [] : [...differences, version === DEFAULT_API_VERSION
50
+ ? 'upgrade @notambourine/metafields, or open an issue if it is already current'
51
+ : `this release ships the table for ${DEFAULT_API_VERSION}, not ${version}`],
52
+ },
53
+ ]);
54
+ }
55
+ function detail(kind, noun, name, extra) {
56
+ return `${kind} ${noun} ${name}${extra === undefined ? '' : `: ${extra}`}`;
57
+ }
58
+ export function doctorExitCode(report) {
59
+ return report.healthy ? 0 : 1;
60
+ }
61
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}