@notambourine/metafields 0.0.7 → 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 (69) hide show
  1. package/README.md +120 -95
  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 -7
  7. package/dist/admin.d.ts.map +1 -1
  8. package/dist/admin.js +77 -118
  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 +153 -85
  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 +7 -6
  27. package/dist/fleet.d.ts.map +1 -1
  28. package/dist/fleet.js +18 -18
  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 +12 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +6 -1
  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 +2 -2
  48. package/dist/planner.d.ts.map +1 -1
  49. package/dist/planner.js +5 -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
  66. package/dist/repair.d.ts +0 -16
  67. package/dist/repair.d.ts.map +0 -1
  68. package/dist/repair.js +0 -53
  69. package/dist/repair.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ // A difference on the generated API version means this release is stale; on another version,
2
+ // the shipped table was never authoritative and upgrading cannot repair the mismatch.
3
+ import { METAFIELD_OWNER_TYPES, METAFIELD_TYPES } from './metafield-types.js';
4
+ function validationsOf(type) {
5
+ return type.supportedValidations.map((validation) => validation.name).sort();
6
+ }
7
+ // Only what the generated table actually carries. A field the generator drops is not a
8
+ // difference this package can act on, and reporting it would be noise in someone else's CI.
9
+ function changes(live, shipped) {
10
+ const differences = [];
11
+ if (live.category !== shipped.category) {
12
+ differences.push(`category ${shipped.category} -> ${live.category}`);
13
+ }
14
+ if (live.supportsDefinitionMigrations !== shipped.migratable) {
15
+ differences.push(`migratable ${String(shipped.migratable)} -> ${String(live.supportsDefinitionMigrations)}`);
16
+ }
17
+ const now = validationsOf(live);
18
+ const before = [...shipped.validations].sort();
19
+ const added = now.filter((name) => !before.includes(name));
20
+ const removed = before.filter((name) => !now.includes(name));
21
+ if (added.length > 0)
22
+ differences.push(`validations +${added.join(' +')}`);
23
+ if (removed.length > 0)
24
+ differences.push(`validations -${removed.join(' -')}`);
25
+ return differences;
26
+ }
27
+ function compareNames(live, shipped) {
28
+ const differences = [];
29
+ for (const name of [...live].sort()) {
30
+ if (!shipped.includes(name))
31
+ differences.push({ kind: 'added', name });
32
+ }
33
+ for (const name of [...shipped].sort()) {
34
+ if (!live.includes(name))
35
+ differences.push({ kind: 'removed', name });
36
+ }
37
+ return differences;
38
+ }
39
+ export function compareRegistry(registry) {
40
+ const shipped = METAFIELD_TYPES;
41
+ const types = [];
42
+ for (const type of [...registry.types].sort((a, b) => a.name.localeCompare(b.name))) {
43
+ const known = shipped[type.name];
44
+ if (!known) {
45
+ types.push({ kind: 'added', name: type.name });
46
+ continue;
47
+ }
48
+ const differences = changes(type, known);
49
+ if (differences.length > 0) {
50
+ types.push({ kind: 'changed', name: type.name, detail: differences.join(', ') });
51
+ }
52
+ }
53
+ const live = new Set(registry.types.map((type) => type.name));
54
+ for (const name of Object.keys(METAFIELD_TYPES).sort()) {
55
+ if (!live.has(name))
56
+ types.push({ kind: 'removed', name });
57
+ }
58
+ const owners = compareNames(registry.owners, METAFIELD_OWNER_TYPES);
59
+ return { version: registry.version, matches: types.length === 0 && owners.length === 0, types, owners };
60
+ }
61
+ //# sourceMappingURL=type-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-check.js","sourceRoot":"","sources":["../src/type-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface RegistryType {
2
+ readonly name: string;
3
+ readonly category: string;
4
+ readonly supportsDefinitionMigrations: boolean;
5
+ readonly supportedValidations: readonly {
6
+ readonly name: string;
7
+ readonly type: string;
8
+ }[];
9
+ }
10
+ export interface Registry {
11
+ readonly version: string;
12
+ readonly types: readonly RegistryType[];
13
+ readonly owners: readonly string[];
14
+ }
15
+ export type RegistryFailure = 'unsupported-version' | 'unavailable';
16
+ export declare class RegistryError extends Error {
17
+ readonly kind: RegistryFailure;
18
+ constructor(kind: RegistryFailure, message: string);
19
+ }
20
+ export declare function fetchRegistry(version: string): Promise<Registry>;
21
+ //# sourceMappingURL=type-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-registry.d.ts","sourceRoot":"","sources":["../src/type-registry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5F;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAUD,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG,aAAa,CAAC;AAEpE,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,YAAY,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAIjD;CACF;AAwBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAetE"}
@@ -0,0 +1,48 @@
1
+ // shopify.dev exposes Shopify's type registry without store credentials and rejects aged-out
2
+ // API versions, so the same request supplies metadata and validates the version pin.
3
+ const PROXY = 'https://shopify.dev/admin-graphql-direct-proxy';
4
+ const TYPES_QUERY = '{ metafieldDefinitionTypes { name category supportsDefinitionMigrations supportedValidations { name type } } }';
5
+ const OWNERS_QUERY = '{ __type(name: "MetafieldOwnerType") { enumValues { name } } }';
6
+ export class RegistryError extends Error {
7
+ kind;
8
+ constructor(kind, message) {
9
+ super(message);
10
+ this.name = 'RegistryError';
11
+ this.kind = kind;
12
+ }
13
+ }
14
+ async function query(version, document) {
15
+ let response;
16
+ try {
17
+ response = await fetch(`${PROXY}/${version}`, {
18
+ method: 'POST',
19
+ headers: { 'content-type': 'application/json' },
20
+ body: JSON.stringify({ query: document }),
21
+ });
22
+ }
23
+ catch (error) {
24
+ throw new RegistryError('unavailable', `cannot reach shopify.dev: ${error instanceof Error ? error.message : String(error)}`);
25
+ }
26
+ const body = await response.json().catch(() => undefined);
27
+ // Read before the status: the refusal arrives as a 400 carrying {"error":"Invalid API version"}.
28
+ if (body?.error)
29
+ throw new RegistryError('unsupported-version', body.error);
30
+ if (!response.ok)
31
+ throw new RegistryError('unavailable', `proxy answered HTTP ${response.status}`);
32
+ if (!body?.data) {
33
+ throw new RegistryError('unavailable', `proxy returned no data: ${JSON.stringify(body?.errors)}`);
34
+ }
35
+ return body.data;
36
+ }
37
+ export async function fetchRegistry(version) {
38
+ const { metafieldDefinitionTypes } = await query(version, TYPES_QUERY);
39
+ const { __type: ownerEnum } = await query(version, OWNERS_QUERY);
40
+ if (!ownerEnum)
41
+ throw new RegistryError('unavailable', 'MetafieldOwnerType is missing from the schema');
42
+ return {
43
+ version,
44
+ types: metafieldDefinitionTypes,
45
+ owners: ownerEnum.enumValues.map((value) => value.name),
46
+ };
47
+ }
48
+ //# sourceMappingURL=type-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-registry.js","sourceRoot":"","sources":["../src/type-registry.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,qFAAqF;AAerF,MAAM,KAAK,GAAG,gDAAgD,CAAC;AAE/D,MAAM,WAAW,GACf,gHAAgH,CAAC;AACnH,MAAM,YAAY,GAAG,gEAAgE,CAAC;AAMtF,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAkB;IAE/B,YAAY,IAAqB,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,KAAK,UAAU,KAAK,CAAI,OAAe,EAAE,QAAgB;IACvD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,KAAK,IAAI,OAAO,EAAE,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CACI,CAAC;IAC7D,iGAAiG;IACjG,IAAI,IAAI,EAAE,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,KAAK,CAC9C,OAAO,EACP,WAAW,CACZ,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CACvC,OAAO,EACP,YAAY,CACb,CAAC;IACF,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,+CAA+C,CAAC,CAAC;IACxG,OAAO;QACL,OAAO;QACP,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KACxD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notambourine/metafields",
3
- "version": "0.0.7",
3
+ "version": "0.1.0",
4
4
  "description": "Create-only Shopify custom-data schema CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -31,7 +31,8 @@
31
31
  ],
32
32
  "scripts": {
33
33
  "build": "tsc -p tsconfig.build.json",
34
- "check": "npm run build && tsc -p test/tsconfig.json --noEmit && tsc -p test-d/tsconfig.json --noEmit",
34
+ "check": "npm run build && tsc -p test/tsconfig.json --noEmit && tsc -p test-d/tsconfig.json --noEmit && tsc -p scripts/tsconfig.json --noEmit",
35
+ "generate:metafield-types": "npm run build && node scripts/generate-metafield-types.ts",
35
36
  "test": "npm run build && node --test test/*.test.ts",
36
37
  "prepack": "npm run build"
37
38
  },
package/dist/repair.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import { type Plan, type PlanItem } from './planner.js';
2
- export interface RepairItem {
3
- item: PlanItem;
4
- repairs: string[];
5
- blockers: string[];
6
- }
7
- export interface RepairPlan {
8
- items: RepairItem[];
9
- repairable: number;
10
- blocked: number;
11
- }
12
- export declare function planRepair(plan: Plan): RepairPlan;
13
- export declare function withoutRepairs(plan: Plan, repair: RepairPlan): Plan;
14
- export declare function repairedIdentities(repair: RepairPlan): RepairItem[];
15
- export declare function attribute(item: PlanItem, reason: string): string;
16
- //# sourceMappingURL=repair.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../src/repair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IAIf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAiBjD;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAInE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAEnE;AAID,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhE"}
package/dist/repair.js DELETED
@@ -1,53 +0,0 @@
1
- import { planFrom } from './planner.js';
2
- export function planRepair(plan) {
3
- const items = [];
4
- for (const item of plan.items) {
5
- if (item.status !== 'CONFLICT' && item.status !== 'INDETERMINATE')
6
- continue;
7
- const repairs = [];
8
- const blockers = [];
9
- for (const reason of item.reasons) {
10
- (isRepairable(item, reason) ? repairs : blockers).push(reason);
11
- }
12
- if (repairs.length === 0 && blockers.length === 0)
13
- continue;
14
- items.push({ item, repairs, blockers });
15
- }
16
- return {
17
- items,
18
- repairable: items.filter((entry) => entry.blockers.length === 0).length,
19
- blocked: items.filter((entry) => entry.blockers.length > 0).length,
20
- };
21
- }
22
- // The plan items `--repair` can resolve, so a store still holding unrepairable drift keeps
23
- // blocking every write in the fleet.
24
- export function withoutRepairs(plan, repair) {
25
- const resolved = new Set(repair.items.filter((entry) => entry.blockers.length === 0)
26
- .map((entry) => entry.item.identity));
27
- return planFrom(plan.items.filter((item) => !resolved.has(item.identity)));
28
- }
29
- export function repairedIdentities(repair) {
30
- return repair.items.filter((entry) => entry.blockers.length === 0);
31
- }
32
- // Reasons carry the item identity for metafields but not for metaobjects, so strip it before
33
- // matching an attribute path.
34
- export function attribute(item, reason) {
35
- return reason.startsWith(`${item.identity}.`) ? reason.slice(item.identity.length + 1) : reason;
36
- }
37
- function isRepairable(item, reason) {
38
- // IN_PROGRESS validation: wait, do not write.
39
- if (item.status === 'INDETERMINATE')
40
- return false;
41
- const path = attribute(item, reason);
42
- // Shopify will not retype a definition that has stored values; that is what migrations are for.
43
- if (/(^|\.)type: expected /.test(path))
44
- return false;
45
- // Invalid stored values are data, not shape.
46
- if (path.startsWith('stored values include '))
47
- return false;
48
- // A metaobject update needs the definition's Shopify id, which only a read supplies.
49
- if (item.kind === 'metaobject' && item.existing?.id === undefined)
50
- return false;
51
- return true;
52
- }
53
- //# sourceMappingURL=repair.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repair.js","sourceRoot":"","sources":["../src/repair.ts"],"names":[],"mappings":"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"}