@notambourine/metafields 0.1.0 → 0.2.1

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.
@@ -0,0 +1,78 @@
1
+ // What the DSL can say about a Shopify type, in one table. The builders emit validations through
2
+ // it, pull chooses what it can write from it, and a test compares it against the generated
3
+ // registry, so a type Shopify adds surfaces as a failing check rather than a customer-side abort.
4
+ import { METAFIELD_TYPES } from './metafield-types.js';
5
+ export const BUILDERS = {
6
+ article_reference: 'article',
7
+ boolean: 'boolean',
8
+ collection_reference: 'collection',
9
+ color: 'color',
10
+ company_reference: 'company',
11
+ customer_reference: 'customer',
12
+ date: 'date',
13
+ date_time: 'dateTime',
14
+ file_reference: 'file',
15
+ id: 'id',
16
+ json: 'json',
17
+ jurisdiction: 'jurisdiction',
18
+ language: 'language',
19
+ link: 'link',
20
+ metaobject_reference: 'metaobject',
21
+ mixed_reference: 'mixedMetaobject',
22
+ money: 'money',
23
+ multi_line_text_field: 'text',
24
+ number_decimal: 'decimal',
25
+ number_integer: 'integer',
26
+ order_reference: 'order',
27
+ page_reference: 'page',
28
+ product_reference: 'product',
29
+ rating: 'rating',
30
+ rich_text_field: 'richText',
31
+ single_line_text_field: 'string',
32
+ url: 'url',
33
+ variant_reference: 'variant',
34
+ };
35
+ // Types this release will not declare, and why. Each names something Shopify owns on the store
36
+ // itself, so a schema that travels between stores cannot carry it.
37
+ export const DECLINED = {
38
+ disclosure_reference: 'points at Shopify-owned metaobject definitions no schema can create',
39
+ product_taxonomy_disclosure_reference: 'points at Shopify-owned disclosure definitions',
40
+ product_taxonomy_value_reference: "names a handle from Shopify's product taxonomy",
41
+ };
42
+ // Shopify validation name to the builder option that declares it. A validation absent here is one
43
+ // no schema can state, which is why pull reports the field instead of writing a definition that
44
+ // says less than the store does.
45
+ export const VALIDATION_OPTIONS = {
46
+ min: 'min',
47
+ max: 'max',
48
+ regex: 'regex',
49
+ choices: 'choices',
50
+ schema: 'schema',
51
+ max_precision: 'maxPrecision',
52
+ scale_min: 'scaleMin',
53
+ scale_max: 'scaleMax',
54
+ };
55
+ export function baseType(type) {
56
+ return type.startsWith('list.') ? type.slice('list.'.length) : type;
57
+ }
58
+ export function builderFor(type) {
59
+ const base = baseType(type);
60
+ const name = BUILDERS[base];
61
+ if (name !== undefined)
62
+ return { name, args: [] };
63
+ const types = METAFIELD_TYPES;
64
+ return types[base]?.category === 'MEASUREMENT'
65
+ ? { name: 'measurement', args: [JSON.stringify(base)] }
66
+ : undefined;
67
+ }
68
+ // Every type the table accounts for, paired with how. The coverage test walks the registry against
69
+ // this, so a new type is either declarable or a deliberate omission with a reason.
70
+ export function declarability(type) {
71
+ const base = baseType(type);
72
+ const builder = builderFor(base);
73
+ if (builder)
74
+ return { builder };
75
+ const declined = DECLINED[base];
76
+ return declined === undefined ? undefined : { declined };
77
+ }
78
+ //# sourceMappingURL=declarable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarable.js","sourceRoot":"","sources":["../src/declarable.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,2FAA2F;AAC3F,kGAAkG;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C,iBAAiB,EAAE,SAAS;IAC5B,OAAO,EAAE,SAAS;IAClB,oBAAoB,EAAE,YAAY;IAClC,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAE,SAAS;IAC5B,kBAAkB,EAAE,UAAU;IAC9B,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,UAAU;IACrB,cAAc,EAAE,MAAM;IACtB,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,oBAAoB,EAAE,YAAY;IAClC,eAAe,EAAE,iBAAiB;IAClC,KAAK,EAAE,OAAO;IACd,qBAAqB,EAAE,MAAM;IAC7B,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,OAAO;IACxB,cAAc,EAAE,MAAM;IACtB,iBAAiB,EAAE,SAAS;IAC5B,MAAM,EAAE,QAAQ;IAChB,eAAe,EAAE,UAAU;IAC3B,sBAAsB,EAAE,QAAQ;IAChC,GAAG,EAAE,KAAK;IACV,iBAAiB,EAAE,SAAS;CAC7B,CAAC;AAEF,+FAA+F;AAC/F,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C,oBAAoB,EAAE,qEAAqE;IAC3F,qCAAqC,EAAE,gDAAgD;IACvF,gCAAgC,EAAE,gDAAgD;CACnF,CAAC;AAEF,kGAAkG;AAClG,gGAAgG;AAChG,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,cAAc;IAC7B,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,UAAU;CACtB,CAAC;AAOF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClD,MAAM,KAAK,GAAqD,eAAe,CAAC;IAChF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,aAAa;QAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;QACvD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,mGAAmG;AACnG,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3D,CAAC"}
@@ -7,7 +7,15 @@ export interface PulledSchema {
7
7
  })[];
8
8
  excluded: string[];
9
9
  }
10
- export declare function generateSchemaModule(pulled: PulledSchema): string;
10
+ export interface SkippedDefinition {
11
+ identity: string;
12
+ reason: string;
13
+ }
14
+ export interface GeneratedSchema {
15
+ module: string;
16
+ skipped: SkippedDefinition[];
17
+ }
18
+ export declare function generateSchemaModule(pulled: PulledSchema): GeneratedSchema;
11
19
  export declare function filterPulledMetafields(fields: (ExistingMetafield & {
12
20
  owner: Owner;
13
21
  })[]): PulledSchema['metafields'];
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,UAAU,EAAE,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,EAAE,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA2FD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA8CjE;AAaD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,CAAC,iBAAiB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,EAAE,GAC/C,YAAY,CAAC,YAAY,CAAC,CAE5B"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAG9D,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,UAAU,EAAE,CAAC,iBAAiB,GAAG;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,EAAE,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AA6LD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAwD1E;AAaD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,CAAC,iBAAiB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,EAAE,GAC/C,YAAY,CAAC,YAAY,CAAC,CAE5B"}
package/dist/generator.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { baseType, builderFor, VALIDATION_OPTIONS } from './declarable.js';
1
2
  import { isReservedNamespace } from './schema.js';
2
3
  function quote(value) {
3
4
  return JSON.stringify(value);
@@ -5,30 +6,36 @@ function quote(value) {
5
6
  function property(key) {
6
7
  return /^[A-Za-z_$][\w$]*$/.test(key) ? key : quote(key);
7
8
  }
8
- function options(field, metaobjectField = false) {
9
+ // Shopify sends every validation as a string. Bounds carry a number, a date, or a measurement's
10
+ // value and unit; the rest already arrive as the JSON their option accepts.
11
+ function renderValidation(name, value) {
12
+ if (name === 'regex')
13
+ return quote(value);
14
+ if (name !== 'min' && name !== 'max')
15
+ return value;
16
+ const trimmed = value.trim();
17
+ if (trimmed.startsWith('{'))
18
+ return trimmed;
19
+ const numeric = Number(trimmed);
20
+ return JSON.stringify(trimmed === '' || Number.isNaN(numeric) ? value : numeric);
21
+ }
22
+ function options(field, validations, metaobjectField, attributes = true) {
9
23
  const result = [];
10
- if (field.name)
11
- result.push(`name: ${quote(field.name)}`);
12
- if (field.description)
13
- result.push(`description: ${quote(field.description)}`);
14
- if (field.required === true)
15
- result.push('required: true');
16
- const validationMap = new Map(field.validations?.map((item) => [item.name, item.value]));
17
- for (const name of ['min', 'max']) {
24
+ if (attributes) {
25
+ if (field.name)
26
+ result.push(`name: ${quote(field.name)}`);
27
+ if (field.description)
28
+ result.push(`description: ${quote(field.description)}`);
29
+ if (field.required === true)
30
+ result.push('required: true');
31
+ }
32
+ const validationMap = new Map(validations.map((item) => [item.name, item.value]));
33
+ for (const [name, option] of Object.entries(VALIDATION_OPTIONS)) {
18
34
  const value = validationMap.get(name);
19
35
  if (value !== undefined)
20
- result.push(`${name}: ${JSON.stringify(Number.isNaN(Number(value)) ? value : Number(value))}`);
21
- }
22
- const regex = validationMap.get('regex');
23
- if (regex !== undefined)
24
- result.push(`regex: ${quote(regex)}`);
25
- const choices = validationMap.get('choices');
26
- if (choices !== undefined)
27
- result.push(`choices: ${choices}`);
28
- const jsonSchema = validationMap.get('schema');
29
- if (jsonSchema !== undefined)
30
- result.push(`schema: ${jsonSchema}`);
31
- if (!metaobjectField && 'access' in field && field.access) {
36
+ result.push(`${option}: ${renderValidation(name, value)}`);
37
+ }
38
+ if (attributes && !metaobjectField && 'access' in field && field.access) {
32
39
  const access = Object.entries(field.access)
33
40
  .filter(([key]) => key === 'admin' || key === 'storefront')
34
41
  .filter(([, value]) => value !== null)
@@ -36,7 +43,7 @@ function options(field, metaobjectField = false) {
36
43
  if (access.length > 0)
37
44
  result.push(`access: { ${access.join(', ')} }`);
38
45
  }
39
- if (!metaobjectField && 'capabilities' in field && field.capabilities) {
46
+ if (attributes && !metaobjectField && 'capabilities' in field && field.capabilities) {
40
47
  for (const key of [
41
48
  'adminFilterable', 'analyticsQueryable', 'cartToOrderCopyable', 'smartCollectionCondition', 'uniqueValues',
42
49
  ]) {
@@ -44,73 +51,142 @@ function options(field, metaobjectField = false) {
44
51
  result.push(`${key}: ${String(field.capabilities[key])}`);
45
52
  }
46
53
  }
47
- if (!metaobjectField && 'constraints' in field && field.constraints?.key) {
54
+ if (attributes && !metaobjectField && 'constraints' in field && field.constraints?.key) {
48
55
  result.push(`constraints: { key: ${quote(field.constraints.key)}, values: ${JSON.stringify([...field.constraints.values].sort())} }`);
49
56
  }
50
57
  return result.length > 0 ? `{ ${result.join(', ')} }` : '';
51
58
  }
52
- const builders = {
53
- single_line_text_field: 'string',
54
- multi_line_text_field: 'text',
55
- rich_text_field: 'richText',
56
- number_integer: 'integer',
57
- number_decimal: 'decimal',
58
- boolean: 'boolean',
59
- url: 'url',
60
- json: 'json<unknown>',
61
- product_reference: 'product',
62
- variant_reference: 'variant',
63
- collection_reference: 'collection',
64
- file_reference: 'file',
65
- };
66
- function fieldExpression(field, metaobjectField = false) {
59
+ // The pulled definition says nothing about the shape behind a json value, so the generic stays
60
+ // unknown for the operator to narrow.
61
+ const TYPE_ARGUMENTS = { json: '<unknown>' };
62
+ // Reference targets become builder arguments rather than options.
63
+ const REFERENCE_VALIDATIONS = new Set(['metaobject_definition_type', 'metaobject_definition_types']);
64
+ function referenceTargets(type, validations) {
65
+ const value = validations.find((item) => item.name === (type === 'mixed_reference' ? 'metaobject_definition_types' : 'metaobject_definition_type'))?.value;
66
+ if (value === undefined)
67
+ return undefined;
68
+ if (type !== 'mixed_reference')
69
+ return [value];
70
+ let parsed;
71
+ try {
72
+ parsed = JSON.parse(value);
73
+ }
74
+ catch {
75
+ return undefined;
76
+ }
77
+ return Array.isArray(parsed) && parsed.every((item) => typeof item === 'string') ? parsed : undefined;
78
+ }
79
+ function fieldExpression(field, declared, metaobjectField) {
67
80
  const rawType = typeof field.type === 'string' ? field.type : field.type.name;
68
81
  const list = rawType.startsWith('list.');
69
- const type = list ? rawType.slice(5) : rawType;
70
- const validations = new Map(field.validations?.map((item) => [item.name, item.value]));
71
- let expression;
72
- if (type === 'metaobject_reference') {
73
- const target = validations.get('metaobject_definition_type');
74
- if (!target)
75
- throw new Error(`${field.key}: metaobject reference has no portable type validation`);
76
- expression = `field.metaobject(${quote(target)})`;
77
- }
78
- else if (type === 'mixed_reference') {
79
- const value = validations.get('metaobject_definition_types');
80
- if (!value)
81
- throw new Error(`${field.key}: mixed reference has no portable type validation`);
82
- expression = `field.mixedMetaobject(${value})`;
83
- }
84
- else {
85
- const builder = builders[type];
86
- if (!builder)
87
- throw new Error(`${field.key}: unsupported Shopify type ${rawType}`);
88
- expression = `field.${builder}()`;
89
- }
90
- const fieldOptions = options(field, metaobjectField);
91
- if (fieldOptions && !list)
92
- expression = expression.replace(/\(\)$/, `(${fieldOptions})`);
93
- if (list) {
94
- const listValues = new Map(field.validations?.filter((item) => item.name.startsWith('list.'))
95
- .map((item) => [item.name.slice(5), item.value]));
96
- const listOptions = options({ ...field, validations: [...listValues].map(([name, value]) => ({ name, value })) }, metaobjectField);
97
- expression = `field.list(${expression}${listOptions ? `, ${listOptions}` : ''})`;
98
- }
99
- return expression;
82
+ const type = baseType(rawType);
83
+ const call = builderFor(type);
84
+ if (!call)
85
+ return { reason: `this release cannot declare ${rawType}` };
86
+ const all = field.validations ?? [];
87
+ const args = [...call.args];
88
+ if (type === 'metaobject_reference' || type === 'mixed_reference') {
89
+ const targets = referenceTargets(type, all);
90
+ if (!targets || targets.length === 0) {
91
+ // A reference Shopify stores as a definition id stays an id until a pulled metaobject names
92
+ // it, and an id belongs to one store, so the guidance travels with the definition it affects.
93
+ return {
94
+ reason: all.some((entry) => entry.name.startsWith('metaobject_definition_id'))
95
+ ? `${rawType} names a definition id this store owns; rerun pull with --metaobjects to resolve it`
96
+ : `${rawType} names no metaobject type`,
97
+ };
98
+ }
99
+ const missing = targets.filter((target) => !declared.has(target));
100
+ if (missing.length > 0) {
101
+ return { reason: `references ${missing.join(', ')}, which this pull did not write` };
102
+ }
103
+ args.push(type === 'mixed_reference' ? JSON.stringify(targets) : quote(targets[0]));
104
+ }
105
+ const itemValidations = all.filter((entry) => !entry.name.startsWith('list.') && !REFERENCE_VALIDATIONS.has(entry.name));
106
+ const undeclarable = itemValidations.find((entry) => !(entry.name in VALIDATION_OPTIONS));
107
+ if (undeclarable) {
108
+ return { reason: `no option declares the ${undeclarable.name} validation on ${rawType}` };
109
+ }
110
+ const builder = `field.${call.name}${TYPE_ARGUMENTS[type] ?? ''}`;
111
+ if (!list) {
112
+ const fieldOptions = options(field, itemValidations, metaobjectField);
113
+ return { code: `${builder}(${[...args, fieldOptions].filter((part) => part !== '').join(', ')})` };
114
+ }
115
+ const inner = `${builder}(${[...args, options(field, itemValidations, metaobjectField, false)].filter((part) => part !== '').join(', ')})`;
116
+ const bounds = all
117
+ .filter((entry) => entry.name.startsWith('list.'))
118
+ .map((entry) => ({ name: entry.name.slice('list.'.length), value: entry.value }));
119
+ const outer = options(field, bounds, metaobjectField);
120
+ return { code: `field.list(${inner}${outer === '' ? '' : `, ${outer}`})` };
121
+ }
122
+ // A metaobject with nothing left to declare is dropped, which can strand a reference to it, which
123
+ // can empty another metaobject. Passing until the set stops shrinking keeps the written schema one
124
+ // that compiles.
125
+ function declarable(pulled) {
126
+ const declared = new Set(pulled.metaobjects.map((definition) => definition.type));
127
+ const dropped = new Map();
128
+ let metaobjects = [];
129
+ let skipped = [];
130
+ for (;;) {
131
+ metaobjects = [];
132
+ skipped = [];
133
+ const emptied = [];
134
+ for (const definition of pulled.metaobjects) {
135
+ if (!declared.has(definition.type))
136
+ continue;
137
+ const fields = [];
138
+ const reasons = [];
139
+ for (const field of definition.fields) {
140
+ const result = fieldExpression(field, declared, true);
141
+ if (result.code !== undefined)
142
+ fields.push({ key: field.key, code: result.code });
143
+ else
144
+ reasons.push({ identity: `metaobject:${definition.type}.${field.key}`, reason: result.reason });
145
+ }
146
+ if (fields.length > 0) {
147
+ metaobjects.push({ definition, fields });
148
+ skipped.push(...reasons);
149
+ continue;
150
+ }
151
+ emptied.push(definition.type);
152
+ dropped.set(definition.type, `no field this release can declare, starting with ${reasons[0]?.reason ?? 'no field at all'}`);
153
+ }
154
+ if (emptied.length === 0)
155
+ break;
156
+ for (const type of emptied)
157
+ declared.delete(type);
158
+ }
159
+ const metafields = [];
160
+ for (const field of pulled.metafields) {
161
+ const result = fieldExpression(field, declared, false);
162
+ if (result.code !== undefined)
163
+ metafields.push({ field, code: result.code });
164
+ else
165
+ skipped.push({ identity: `${field.owner}:${field.namespace}.${field.key}`, reason: result.reason });
166
+ }
167
+ for (const [type, reason] of dropped)
168
+ skipped.push({ identity: `metaobject:${type}`, reason });
169
+ skipped.sort((a, b) => a.identity.localeCompare(b.identity));
170
+ return { metaobjects, metafields, skipped };
100
171
  }
101
172
  export function generateSchemaModule(pulled) {
102
- const lines = [
103
- "import { defineSchema, field, metaobject } from '@notambourine/metafields';",
104
- '',
105
- 'export default defineSchema({',
106
- ' metaobjects: {',
107
- ];
108
- for (const definition of [...pulled.metaobjects].sort((a, b) => a.type.localeCompare(b.type))) {
173
+ const { metaobjects, metafields, skipped } = declarable(pulled);
174
+ const lines = [];
175
+ if (skipped.length > 0) {
176
+ lines.push(`// Pulled without ${skipped.length} definition(s) this release cannot declare:`);
177
+ for (const entry of skipped)
178
+ lines.push(`// ${entry.identity}: ${entry.reason}`);
179
+ lines.push('');
180
+ }
181
+ lines.push("import { defineSchema, field, metaobject } from '@notambourine/metafields';", '', 'export default defineSchema({', ' metaobjects: {');
182
+ for (const { definition, fields } of [...metaobjects].sort((a, b) => a.definition.type.localeCompare(b.definition.type))) {
109
183
  const metaOptions = [`name: ${quote(definition.name)}`];
110
184
  if (definition.description)
111
185
  metaOptions.push(`description: ${quote(definition.description)}`);
112
- if (definition.displayNameKey)
186
+ // A display key naming a field this file could not declare would not compile.
187
+ if (definition.displayNameKey && fields.some((field) => field.key === definition.displayNameKey)) {
113
188
  metaOptions.push(`displayNameKey: ${quote(definition.displayNameKey)}`);
189
+ }
114
190
  if (definition.access) {
115
191
  const values = Object.entries(definition.access)
116
192
  .filter(([key]) => key === 'admin' || key === 'storefront')
@@ -128,27 +204,27 @@ export function generateSchemaModule(pulled) {
128
204
  for (const option of metaOptions)
129
205
  lines.push(` ${option},`);
130
206
  lines.push(' fields: {');
131
- for (const field of [...definition.fields].sort((a, b) => a.key.localeCompare(b.key))) {
132
- lines.push(` ${property(field.key)}: ${fieldExpression(field, true)},`);
207
+ for (const field of [...fields].sort((a, b) => a.key.localeCompare(b.key))) {
208
+ lines.push(` ${property(field.key)}: ${field.code},`);
133
209
  }
134
210
  lines.push(' },', ' }),');
135
211
  }
136
212
  lines.push(' },', ' metafields: {');
137
- const owners = groupBy(pulled.metafields, (field) => field.owner);
213
+ const owners = groupBy(metafields, (entry) => entry.field.owner);
138
214
  for (const [owner, ownerFields] of [...owners].sort(([a], [b]) => a.localeCompare(b))) {
139
215
  lines.push(` ${property(owner)}: {`);
140
- const namespaces = groupBy(ownerFields, (field) => field.namespace);
216
+ const namespaces = groupBy(ownerFields, (entry) => entry.field.namespace);
141
217
  for (const [namespace, fields] of [...namespaces].sort(([a], [b]) => a.localeCompare(b))) {
142
218
  lines.push(` ${property(namespace)}: {`);
143
- for (const field of [...fields].sort((a, b) => a.key.localeCompare(b.key))) {
144
- lines.push(` ${property(field.key)}: ${fieldExpression(field)},`);
219
+ for (const entry of [...fields].sort((a, b) => a.field.key.localeCompare(b.field.key))) {
220
+ lines.push(` ${property(entry.field.key)}: ${entry.code},`);
145
221
  }
146
222
  lines.push(' },');
147
223
  }
148
224
  lines.push(' },');
149
225
  }
150
226
  lines.push(' },', '});', '');
151
- return lines.join('\n');
227
+ return { module: lines.join('\n'), skipped };
152
228
  }
153
229
  function groupBy(values, key) {
154
230
  const groups = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ export { METAFIELD_OWNER_TYPES, METAFIELD_TYPES } from './metafield-types.js';
14
14
  export { compareRegistry } from './type-check.js';
15
15
  export { doctorExitCode, runDoctor } from './doctor.js';
16
16
  export { fetchRegistry, RegistryError } from './type-registry.js';
17
- export type { CollectionReference, Decimal, FileReference, InferMetafields, InferMetaobjects, MetaobjectReference, ProductReference, RichText, Url, VariantReference, } from './types.js';
17
+ export type { ArticleReference, CollectionReference, Color, CompanyReference, CustomerReference, DateOnly, DateTime, Decimal, FileReference, Id, InferMetafields, InferMetaobjects, Jurisdiction, LanguageCode, Link, Measurement, MeasurementType, MeasurementValue, MetaobjectReference, Money, OrderReference, PageReference, ProductReference, Rating, RichText, Url, VariantReference, } from './types.js';
18
18
  export type { CompiledSchema, Owner } from './schema.js';
19
19
  export type { MetafieldOwnerType, MetafieldTypeInfo, MetafieldTypeName } from './metafield-types.js';
20
20
  export type { TypeCheck, TypeDifference } from './type-check.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EACV,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,GAAG,EACH,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrG,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChG,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,aAAa,EACb,EAAE,EACF,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,EACL,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,GAAG,EACH,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrG,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjF,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChG,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"liquid.d.ts","sourceRoot":"","sources":["../src/liquid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,aAAa,CAAC;AAkBzD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAkBvE;AASD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG9D"}
1
+ {"version":3,"file":"liquid.d.ts","sourceRoot":"","sources":["../src/liquid.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,aAAa,CAAC;AAkBzD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAkBvE;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG9D"}
package/dist/liquid.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { baseType } from './declarable.js';
1
2
  import { METAFIELD_TYPES } from './metafield-types.js';
2
3
  // The Liquid language server groups definitions by these handles and has none for
3
4
  // customer or draft_order, so metafields on those owners cannot be represented.
@@ -35,9 +36,8 @@ export function emitLiquidMetafields(schema) {
35
36
  }
36
37
  // The language server ignores categories; UNKNOWN exposes types missing from Shopify's list.
37
38
  function categoryOf(type) {
38
- const base = type.startsWith('list.') ? type.slice('list.'.length) : type;
39
39
  const types = METAFIELD_TYPES;
40
- return (types[type] ?? types[base])?.category ?? 'UNKNOWN';
40
+ return (types[type] ?? types[baseType(type)])?.category ?? 'UNKNOWN';
41
41
  }
42
42
  export function isLiquidMetafieldsFile(value) {
43
43
  return typeof value === 'object' && value !== null && !Array.isArray(value) &&
@@ -1 +1 @@
1
- {"version":3,"file":"liquid.js","sourceRoot":"","sources":["../src/liquid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,SAAS;IAC1B,IAAI,EAAE,MAAM;CACqC,CAAC;AAiBpD,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAI,aAAgD,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;YAC/B,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,EAAE;YACxC,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;SACrE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,6FAA6F;AAC7F,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,KAAK,GAAqD,eAAe,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"liquid.js","sourceRoot":"","sources":["../src/liquid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,SAAS;IAC1B,IAAI,EAAE,MAAM;CACqC,CAAC;AAiBpD,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAI,aAAgD,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;YAC/B,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,EAAE;YACxC,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;SACrE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,6FAA6F;AAC7F,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAqD,eAAe,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAoC,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAO3E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA2DjG"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAoC,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAO3E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgEjG"}
package/dist/pull.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { mapMetafield, mapMetaobject, METAFIELD_SELECTION, METAOBJECT_SELECTION, } from './admin-shapes.js';
2
+ import { toPortableField } from './references.js';
2
3
  import { isReservedNamespace, OWNER_TYPES } from './schema.js';
3
4
  export async function pullSchema(client, options) {
4
5
  const metafields = [];
@@ -27,19 +28,18 @@ export async function pullSchema(client, options) {
27
28
  } while (after);
28
29
  }
29
30
  }
30
- const hasMetaobjectReferences = metafields.some((field) => {
31
- const type = typeof field.type === 'string' ? field.type : field.type.name;
32
- return type.endsWith('metaobject_reference') || type.endsWith('mixed_reference');
33
- });
34
- if (hasMetaobjectReferences && !options.metaobjects) {
35
- throw new Error('selected metafields contain metaobject references; rerun pull with --metaobjects');
36
- }
31
+ // Without --metaobjects there is nothing for a reference to name, so the generator reports those
32
+ // metafields as skipped. Refusing the whole read instead would leave the operator nothing.
37
33
  const metaobjects = [];
34
+ // Reserved definitions are excluded from the schema but stay in the index: a kept metafield may
35
+ // still reference one, and naming its type beats emitting an id no other store shares.
36
+ const typeById = new Map();
38
37
  if (options.metaobjects) {
39
38
  let after = null;
40
39
  do {
41
40
  const data = await client.request(METAOBJECT_DEFINITIONS_QUERY, { after });
42
41
  for (const raw of data.metaobjectDefinitions.nodes) {
42
+ typeById.set(raw.id, raw.type);
43
43
  if (/^(app|shopify)--/i.test(raw.type)) {
44
44
  excluded.push(`metaobject:${raw.type}`);
45
45
  continue;
@@ -51,7 +51,14 @@ export async function pullSchema(client, options) {
51
51
  : null;
52
52
  } while (after);
53
53
  }
54
- return { metaobjects, metafields, excluded };
54
+ return {
55
+ metaobjects: metaobjects.map((definition) => ({
56
+ ...definition,
57
+ fields: definition.fields.map((field) => toPortableField(field, typeById)),
58
+ })),
59
+ metafields: metafields.map((definition) => toPortableField(definition, typeById)),
60
+ excluded,
61
+ };
55
62
  }
56
63
  const METAFIELD_DEFINITIONS_QUERY = `
57
64
  query PullMetafieldDefinitions(
package/dist/pull.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../src/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Validation } from './types.js';
2
+ export declare function toStoreField<T extends {
3
+ validations: readonly Validation[];
4
+ }>(definition: T, idByType: ReadonlyMap<string, string>): T;
5
+ export declare function toStoreMetaobject<T extends {
6
+ fields: readonly {
7
+ validations: readonly Validation[];
8
+ }[];
9
+ }>(definition: T, idByType: ReadonlyMap<string, string>): T;
10
+ export declare function toPortableField<T extends {
11
+ validations?: readonly Validation[] | undefined;
12
+ }>(field: T, typeById: ReadonlyMap<string, string>): T;
13
+ //# sourceMappingURL=references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA6C7C,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,EAC3E,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAEH;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,SAAS;QAAE,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,EAAE,CAAA;CAAE,EACvG,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAEH;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAA;CAAE,EAC3F,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,CAAC,CAEH"}