@notambourine/metafields 0.0.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/dist/admin.d.ts +34 -0
  4. package/dist/admin.d.ts.map +1 -0
  5. package/dist/admin.js +303 -0
  6. package/dist/admin.js.map +1 -0
  7. package/dist/builders.d.ts +28 -0
  8. package/dist/builders.d.ts.map +1 -0
  9. package/dist/builders.js +103 -0
  10. package/dist/builders.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +244 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/generator.d.ts +14 -0
  16. package/dist/generator.d.ts.map +1 -0
  17. package/dist/generator.js +168 -0
  18. package/dist/generator.js.map +1 -0
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/loader.d.ts +4 -0
  24. package/dist/loader.d.ts.map +1 -0
  25. package/dist/loader.js +20 -0
  26. package/dist/loader.js.map +1 -0
  27. package/dist/migration.d.ts +62 -0
  28. package/dist/migration.d.ts.map +1 -0
  29. package/dist/migration.js +265 -0
  30. package/dist/migration.js.map +1 -0
  31. package/dist/planner.d.ts +60 -0
  32. package/dist/planner.d.ts.map +1 -0
  33. package/dist/planner.js +161 -0
  34. package/dist/planner.js.map +1 -0
  35. package/dist/pull.d.ts +11 -0
  36. package/dist/pull.d.ts.map +1 -0
  37. package/dist/pull.js +133 -0
  38. package/dist/pull.js.map +1 -0
  39. package/dist/schema.d.ts +58 -0
  40. package/dist/schema.d.ts.map +1 -0
  41. package/dist/schema.js +232 -0
  42. package/dist/schema.js.map +1 -0
  43. package/dist/types.d.ts +145 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +4 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +46 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Not a Tambourine
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # @notambourine/metafields
2
+
3
+ Declare merchant-owned Shopify metafield and metaobject definitions in TypeScript, inspect drift,
4
+ and create only what is missing. The CLI never updates or deletes definitions during schema sync.
5
+
6
+ ```ts
7
+ import { defineSchema, field, metaobject } from '@notambourine/metafields';
8
+
9
+ export default defineSchema({
10
+ metaobjects: {
11
+ faq: metaobject({
12
+ name: 'FAQ',
13
+ displayNameKey: 'question',
14
+ fields: {
15
+ question: field.string({ name: 'Question', required: true }),
16
+ answer: field.richText({ name: 'Answer', required: true }),
17
+ },
18
+ }),
19
+ },
20
+ metafields: {
21
+ product: {
22
+ custom: {
23
+ promo_text: field.string({ name: 'Promo text' }),
24
+ faq: field.metaobject('faq', { name: 'FAQ' }),
25
+ },
26
+ },
27
+ },
28
+ });
29
+ ```
30
+
31
+ ```sh
32
+ npx @notambourine/metafields ./schema.ts --validate
33
+ npx @notambourine/metafields ./schema.ts --store example.myshopify.com
34
+ npx @notambourine/metafields ./schema.ts --store example.myshopify.com --apply
35
+ npx @notambourine/metafields ./schema.ts --store example.myshopify.com --check
36
+ ```
37
+
38
+ Store operations read `SHOPIFY_ADMIN_ACCESS_TOKEN`. The default command is a dry run. Importing a
39
+ TypeScript schema executes trusted local code, so compile declarations to canonical JSON before a
40
+ secret-bearing workflow consumes pull-request output.
41
+
42
+ Schema modules use Node's built-in type stripping and must use erasable TypeScript syntax.
43
+
44
+ See `metafields --help` for `pull`, `compile`, and migration commands.
45
+
46
+ ## Behavior
47
+
48
+ - Dry run reports missing definitions without writing them.
49
+ - `--apply` creates missing metaobject definitions in dependency order, then metafield definitions.
50
+ - `--check` exits nonzero for missing or incompatible operational shape.
51
+ - Cosmetic name and description drift is reported but never changed.
52
+ - Existing definitions, values, and entries are never updated or deleted by schema sync.
53
+
54
+ Exit `0` means the selected condition is satisfied, exit `1` means schema or migration drift, and
55
+ exit `2` means invalid input, indeterminate Shopify state, or an API failure.
56
+
57
+ `pull` requires explicit owners and namespaces:
58
+
59
+ ```sh
60
+ metafields pull --store example.myshopify.com \
61
+ --owner product --namespace custom --metaobjects --out schema.ts
62
+ ```
63
+
64
+ The output path must not exist. Without `--out`, the generated module is written to stdout.
65
+
66
+ ## Migrations
67
+
68
+ Migrations are declarative, copy-only, and compiled before credentials are introduced:
69
+
70
+ ```ts
71
+ import { defineMigration, transforms } from '@notambourine/metafields';
72
+ import schema from './schema.js';
73
+
74
+ export default defineMigration({
75
+ id: 'product-internet-url-v1',
76
+ from: schema.metafields.product.custom.internet,
77
+ to: schema.metafields.product.custom.internet_url,
78
+ mode: 'copy',
79
+ transform: transforms.url({
80
+ allowedSchemes: ['http', 'https'],
81
+ bareHost: 'reject',
82
+ trim: true,
83
+ }),
84
+ onInvalid: 'fail',
85
+ onTargetConflict: 'fail',
86
+ });
87
+ ```
88
+
89
+ ```sh
90
+ metafields compile ./migration.ts --out ./migration.json
91
+ metafields migrate ./migration.json --store example.myshopify.com
92
+ metafields migrate ./migration.json --store example.myshopify.com --apply
93
+ ```
94
+
95
+ `0.0.x` is prerelease quality. Confirm owner scopes and behavior against a development store before
96
+ production use.
@@ -0,0 +1,34 @@
1
+ import type { CanonicalMetafield, CanonicalMetaobject, CompiledSchema } from './schema.js';
2
+ import type { ExistingMetafield, ExistingMetaobject, ExistingSchema, Plan } from './planner.js';
3
+ export declare const DEFAULT_API_VERSION = "2026-07";
4
+ export declare class AdminError extends Error {
5
+ readonly requestId?: string;
6
+ constructor(message: string, requestId?: string);
7
+ }
8
+ export interface AdminClientOptions {
9
+ store: string;
10
+ token: string;
11
+ apiVersion?: string;
12
+ timeoutMs?: number;
13
+ retries?: number;
14
+ fetch?: typeof globalThis.fetch;
15
+ }
16
+ export declare class AdminClient {
17
+ #private;
18
+ readonly store: string;
19
+ readonly apiVersion: string;
20
+ readonly endpoint: string;
21
+ constructor(options: AdminClientOptions);
22
+ request<T>(query: string, variables?: Record<string, unknown>, mutation?: boolean): Promise<T>;
23
+ readSchema(schema: CompiledSchema): Promise<ExistingSchema>;
24
+ readMetaobject(type: string): Promise<ExistingMetaobject | null>;
25
+ readMetafield(definition: Pick<CanonicalMetafield, 'ownerType' | 'namespace' | 'key'>): Promise<ExistingMetafield | null>;
26
+ createMetaobject(definition: CanonicalMetaobject): Promise<void>;
27
+ createMetafield(definition: CanonicalMetafield): Promise<void>;
28
+ }
29
+ export interface ApplyResult {
30
+ plan: Plan;
31
+ applied: string[];
32
+ }
33
+ export declare function synchronize(client: AdminClient, schema: CompiledSchema, mode: 'dry-run' | 'check' | 'apply'): Promise<ApplyResult>;
34
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGhG,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAKhD;AAQD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,WAAW;;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAMd,OAAO,EAAE,kBAAkB;IAmBjC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IA2ChG,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAc3D,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAQhE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IASzH,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,eAAe,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CASrE;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAClC,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
package/dist/admin.js ADDED
@@ -0,0 +1,303 @@
1
+ import { exitCodeForPlan, planSchema } from './planner.js';
2
+ export const DEFAULT_API_VERSION = '2026-07';
3
+ export class AdminError extends Error {
4
+ requestId;
5
+ constructor(message, requestId) {
6
+ super(message);
7
+ this.name = 'AdminError';
8
+ if (requestId !== undefined)
9
+ this.requestId = requestId;
10
+ }
11
+ }
12
+ export class AdminClient {
13
+ store;
14
+ apiVersion;
15
+ endpoint;
16
+ #token;
17
+ #timeoutMs;
18
+ #retries;
19
+ #fetch;
20
+ constructor(options) {
21
+ const store = options.store.toLowerCase();
22
+ if (!/^[a-z0-9][a-z0-9-]*\.myshopify\.com$/.test(store)) {
23
+ throw new AdminError('store must be a *.myshopify.com host');
24
+ }
25
+ const apiVersion = options.apiVersion ?? DEFAULT_API_VERSION;
26
+ if (!/^20\d{2}-(01|04|07|10)$/.test(apiVersion)) {
27
+ throw new AdminError('API version must use YYYY-01, YYYY-04, YYYY-07, or YYYY-10');
28
+ }
29
+ if (options.token.length === 0)
30
+ throw new AdminError('SHOPIFY_ADMIN_ACCESS_TOKEN is required');
31
+ this.store = store;
32
+ this.apiVersion = apiVersion;
33
+ this.endpoint = `https://${store}/admin/api/${apiVersion}/graphql.json`;
34
+ this.#token = options.token;
35
+ this.#timeoutMs = options.timeoutMs ?? 20_000;
36
+ this.#retries = options.retries ?? 3;
37
+ this.#fetch = options.fetch ?? globalThis.fetch;
38
+ }
39
+ async request(query, variables = {}, mutation = false) {
40
+ const attempts = mutation ? 1 : this.#retries + 1;
41
+ let lastError;
42
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
43
+ try {
44
+ const response = await this.#fetch(this.endpoint, {
45
+ method: 'POST',
46
+ headers: {
47
+ 'content-type': 'application/json',
48
+ 'x-shopify-access-token': this.#token,
49
+ },
50
+ body: JSON.stringify({ query, variables }),
51
+ signal: AbortSignal.timeout(this.#timeoutMs),
52
+ });
53
+ const requestId = response.headers.get('x-request-id') ?? undefined;
54
+ if (!response.ok) {
55
+ const retryable = response.status === 429 || response.status >= 500;
56
+ if (retryable && attempt + 1 < attempts) {
57
+ await delay(backoff(attempt, response.headers.get('retry-after')));
58
+ continue;
59
+ }
60
+ throw new AdminError(`Shopify Admin API returned HTTP ${response.status}`, requestId);
61
+ }
62
+ const envelope = await response.json();
63
+ if (envelope.errors?.length) {
64
+ const throttled = envelope.errors.some((error) => /throttled/i.test(error.message));
65
+ if (throttled && attempt + 1 < attempts) {
66
+ await delay(backoff(attempt));
67
+ continue;
68
+ }
69
+ throw new AdminError(`Shopify GraphQL error: ${envelope.errors.map((error) => error.message).join('; ')}`, requestId);
70
+ }
71
+ if (envelope.data === undefined)
72
+ throw new AdminError('Shopify response contained no data', requestId);
73
+ return envelope.data;
74
+ }
75
+ catch (error) {
76
+ lastError = error;
77
+ if (error instanceof AdminError || attempt + 1 >= attempts)
78
+ throw redactError(error);
79
+ await delay(backoff(attempt));
80
+ }
81
+ }
82
+ throw redactError(lastError);
83
+ }
84
+ async readSchema(schema) {
85
+ const metaobjects = [];
86
+ const metafields = [];
87
+ for (const definition of schema.metaobjects) {
88
+ const result = await this.readMetaobject(definition.type);
89
+ if (result)
90
+ metaobjects.push(result);
91
+ }
92
+ for (const definition of schema.metafields) {
93
+ const result = await this.readMetafield(definition);
94
+ if (result)
95
+ metafields.push(result);
96
+ }
97
+ return { metaobjects, metafields };
98
+ }
99
+ async readMetaobject(type) {
100
+ const data = await this.request(METAOBJECT_QUERY, { type });
101
+ return data.metaobjectDefinitionByType ? mapMetaobject(data.metaobjectDefinitionByType) : null;
102
+ }
103
+ async readMetafield(definition) {
104
+ const data = await this.request(METAFIELD_QUERY, {
105
+ ownerType: definition.ownerType,
106
+ namespace: definition.namespace,
107
+ key: definition.key,
108
+ });
109
+ return data.metafieldDefinition ? mapMetafield(data.metafieldDefinition) : null;
110
+ }
111
+ async createMetaobject(definition) {
112
+ const data = await this.request(METAOBJECT_CREATE, { definition: metaobjectCreateInput(definition) }, true);
113
+ assertMutation(data.metaobjectDefinitionCreate, `metaobject:${definition.type}`);
114
+ }
115
+ async createMetafield(definition) {
116
+ const data = await this.request(METAFIELD_CREATE, { definition: metafieldCreateInput(definition) }, true);
117
+ assertMutation({
118
+ created: data.metafieldDefinitionCreate.createdDefinition,
119
+ userErrors: data.metafieldDefinitionCreate.userErrors,
120
+ }, `metafield:${definition.ownerType}:${definition.namespace}.${definition.key}`);
121
+ }
122
+ }
123
+ export async function synchronize(client, schema, mode) {
124
+ const before = planSchema(schema, await client.readSchema(schema));
125
+ if (mode !== 'apply' || exitCodeForPlan(before, mode) !== 0)
126
+ return { plan: before, applied: [] };
127
+ const applied = [];
128
+ try {
129
+ for (const item of before.items.filter((value) => value.kind === 'metaobject' && value.status === 'CREATE')) {
130
+ await client.createMetaobject(item.desired);
131
+ applied.push(item.identity);
132
+ }
133
+ for (const item of before.items.filter((value) => value.kind === 'metafield' && value.status === 'CREATE')) {
134
+ await client.createMetafield(item.desired);
135
+ applied.push(item.identity);
136
+ }
137
+ }
138
+ catch (error) {
139
+ const landed = applied.length > 0 ? `; created before failure: ${applied.join(', ')}` : '';
140
+ throw new AdminError(`${error instanceof Error ? error.message : String(error)}${landed}`);
141
+ }
142
+ const after = planSchema(schema, await client.readSchema(schema));
143
+ if (exitCodeForPlan(after, 'check') !== 0) {
144
+ throw new AdminError(`post-apply verification failed; created: ${applied.join(', ') || 'none'}`);
145
+ }
146
+ return { plan: after, applied };
147
+ }
148
+ function assertMutation(payload, identity) {
149
+ if (payload.userErrors.length > 0) {
150
+ throw new AdminError(`${identity}: ${payload.userErrors.map((error) => error.message).join('; ')}`);
151
+ }
152
+ if (payload.metaobjectDefinition == null && payload.created == null) {
153
+ throw new AdminError(`${identity}: Shopify returned no created definition`);
154
+ }
155
+ }
156
+ function metafieldCreateInput(definition) {
157
+ const input = {
158
+ name: definition.name,
159
+ namespace: definition.namespace,
160
+ key: definition.key,
161
+ ownerType: definition.ownerType,
162
+ type: definition.type,
163
+ };
164
+ if (definition.description !== undefined)
165
+ input.description = definition.description;
166
+ if (definition.validations.length > 0)
167
+ input.validations = definition.validations;
168
+ if (definition.access)
169
+ input.access = definition.access;
170
+ if (definition.capabilities)
171
+ input.capabilities = capabilityInput(definition.capabilities);
172
+ if (definition.constraints)
173
+ input.constraints = definition.constraints;
174
+ return input;
175
+ }
176
+ function metaobjectCreateInput(definition) {
177
+ const input = {
178
+ type: definition.type,
179
+ name: definition.name,
180
+ fieldDefinitions: definition.fields.map((field) => {
181
+ const result = { key: field.key, name: field.name, type: field.type };
182
+ if (field.description !== undefined)
183
+ result.description = field.description;
184
+ if (field.required !== undefined)
185
+ result.required = field.required;
186
+ if (field.validations.length > 0)
187
+ result.validations = field.validations;
188
+ return result;
189
+ }),
190
+ };
191
+ if (definition.description !== undefined)
192
+ input.description = definition.description;
193
+ if (definition.displayNameKey !== undefined)
194
+ input.displayNameKey = definition.displayNameKey;
195
+ if (definition.access)
196
+ input.access = definition.access;
197
+ if (definition.capabilities)
198
+ input.capabilities = capabilityInput(definition.capabilities);
199
+ return input;
200
+ }
201
+ function capabilityInput(capabilities) {
202
+ return Object.fromEntries(Object.entries(capabilities).map(([key, enabled]) => [key, { enabled }]));
203
+ }
204
+ function mapField(field) {
205
+ return {
206
+ key: field.key,
207
+ name: field.name,
208
+ description: field.description,
209
+ type: field.type,
210
+ required: field.required,
211
+ validations: field.validations,
212
+ };
213
+ }
214
+ function mapMetaobject(value) {
215
+ return {
216
+ id: value.id,
217
+ type: value.type,
218
+ name: value.name,
219
+ description: value.description,
220
+ displayNameKey: value.displayNameKey,
221
+ access: value.access,
222
+ capabilities: {
223
+ publishable: value.capabilities.publishable.enabled,
224
+ translatable: value.capabilities.translatable.enabled,
225
+ },
226
+ fields: value.fieldDefinitions.map(mapField),
227
+ };
228
+ }
229
+ function mapMetafield(value) {
230
+ return {
231
+ ...mapField(value),
232
+ id: value.id,
233
+ namespace: value.namespace,
234
+ ownerType: value.ownerType,
235
+ access: value.access,
236
+ capabilities: Object.fromEntries(Object.entries(value.capabilities).map(([key, item]) => [key, item.enabled])),
237
+ constraints: value.constraints
238
+ ? { key: value.constraints.key, values: value.constraints.values.nodes.map((item) => item.value) }
239
+ : null,
240
+ validationStatus: value.validationStatus,
241
+ invalidCount: value.invalidCount,
242
+ };
243
+ }
244
+ function redactError(error) {
245
+ if (error instanceof AdminError)
246
+ return error;
247
+ const message = error instanceof Error ? error.message : String(error);
248
+ return new AdminError(message.replace(/shpat_[A-Za-z0-9_-]+/g, '[REDACTED]'));
249
+ }
250
+ function backoff(attempt, retryAfter) {
251
+ const seconds = retryAfter === undefined || retryAfter === null ? Number.NaN : Number(retryAfter);
252
+ if (Number.isFinite(seconds))
253
+ return Math.min(seconds * 1000, 10_000);
254
+ return Math.min(250 * 2 ** attempt, 4_000);
255
+ }
256
+ function delay(milliseconds) {
257
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
258
+ }
259
+ const FIELD_SELECTION = `
260
+ key name description type { name } required validations { name value }
261
+ `;
262
+ const METAOBJECT_QUERY = `
263
+ query MetaobjectDefinition($type: String!) {
264
+ metaobjectDefinitionByType(type: $type) {
265
+ id type name description displayNameKey
266
+ access { admin storefront }
267
+ capabilities { publishable { enabled } translatable { enabled } }
268
+ fieldDefinitions { ${FIELD_SELECTION} }
269
+ }
270
+ }`;
271
+ const METAFIELD_QUERY = `
272
+ query MetafieldDefinition($ownerType: MetafieldOwnerType!, $namespace: String!, $key: String!) {
273
+ metafieldDefinition(ownerType: $ownerType, namespace: $namespace, key: $key) {
274
+ id namespace key ownerType name description type { name }
275
+ validations { name value }
276
+ access { admin storefront customerAccount }
277
+ capabilities {
278
+ adminFilterable { enabled }
279
+ analyticsQueryable { enabled }
280
+ cartToOrderCopyable { enabled }
281
+ smartCollectionCondition { enabled }
282
+ uniqueValues { enabled }
283
+ }
284
+ constraints { key values(first: 250) { nodes { value } } }
285
+ validationStatus
286
+ invalidCount: metafieldsCount(validationStatus: INVALID)
287
+ }
288
+ }`;
289
+ const METAOBJECT_CREATE = `
290
+ mutation CreateMetaobjectDefinition($definition: MetaobjectDefinitionCreateInput!) {
291
+ metaobjectDefinitionCreate(definition: $definition) {
292
+ metaobjectDefinition { id }
293
+ userErrors { field message code }
294
+ }
295
+ }`;
296
+ const METAFIELD_CREATE = `
297
+ mutation CreateMetafieldDefinition($definition: MetafieldDefinitionInput!) {
298
+ metafieldDefinitionCreate(definition: $definition) {
299
+ createdDefinition { id }
300
+ userErrors { field message code }
301
+ }
302
+ }`;
303
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type CollectionReference, type Decimal, type FieldDefinition, type FieldOptions, type Fields, type FileReference, type JsonOptions, type ListOptions, type MetaobjectDefinition, type MetaobjectOptions, type MetaobjectReference, type Metafields, type Metaobjects, type NumberOptions, type ProductReference, type RichText, type SchemaDefinition, type TextOptions, type Url, type ValidMetafields, type ValidMetaobjects, type VariantReference } from './types.js';
2
+ type RequiredFlag<O> = O extends {
3
+ readonly required: true;
4
+ } ? true : false;
5
+ export declare const field: {
6
+ string<const O extends TextOptions = {}>(options?: O): FieldDefinition<string, RequiredFlag<O>, never>;
7
+ text<const O extends TextOptions = {}>(options?: O): FieldDefinition<string, RequiredFlag<O>, never>;
8
+ richText<const O extends FieldOptions = {}>(options?: O): FieldDefinition<RichText, RequiredFlag<O>, never>;
9
+ integer<const O extends NumberOptions = {}>(options?: O): FieldDefinition<number, RequiredFlag<O>, never>;
10
+ decimal<const O extends NumberOptions = {}>(options?: O): FieldDefinition<Decimal, RequiredFlag<O>, never>;
11
+ boolean<const O extends FieldOptions = {}>(options?: O): FieldDefinition<boolean, RequiredFlag<O>, never>;
12
+ url<const O extends FieldOptions = {}>(options?: O): FieldDefinition<Url, RequiredFlag<O>, never>;
13
+ json<Value = unknown, const O extends JsonOptions = JsonOptions>(options?: O): FieldDefinition<Value, RequiredFlag<O>, never>;
14
+ product<const O extends FieldOptions = {}>(options?: O): FieldDefinition<ProductReference, RequiredFlag<O>, never>;
15
+ variant<const O extends FieldOptions = {}>(options?: O): FieldDefinition<VariantReference, RequiredFlag<O>, never>;
16
+ collection<const O extends FieldOptions = {}>(options?: O): FieldDefinition<CollectionReference, RequiredFlag<O>, never>;
17
+ file<const O extends FieldOptions = {}>(options?: O): FieldDefinition<FileReference, RequiredFlag<O>, never>;
18
+ metaobject<const Key extends string, const O extends FieldOptions = {}>(key: Key, options?: O): FieldDefinition<MetaobjectReference<Key>, RequiredFlag<O>, Key>;
19
+ mixedMetaobject<const Keys extends readonly [string, ...string[]], const O extends FieldOptions = {}>(keys: Keys, options?: O): FieldDefinition<MetaobjectReference<Keys[number]>, RequiredFlag<O>, Keys[number]>;
20
+ list<Value, InnerRequired extends boolean, Targets extends string, const O extends ListOptions = {}>(inner: FieldDefinition<Value, InnerRequired, Targets>, options?: O): FieldDefinition<Value[], RequiredFlag<O>, Targets>;
21
+ };
22
+ export declare function metaobject<const F extends Fields>(definition: MetaobjectOptions<F>): MetaobjectDefinition<F>;
23
+ export declare function defineSchema<const M extends Metaobjects, const F extends Metafields>(schema: {
24
+ readonly metaobjects: M & ValidMetaobjects<M, keyof M>;
25
+ readonly metafields: F & ValidMetafields<F, keyof M>;
26
+ }): SchemaDefinition<M, F>;
27
+ export {};
28
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,GAAG,EAER,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAEpB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,KAAK,CAAC;AAgC5E,eAAO,MAAM,KAAK;iBACH,CAAC,SAAS,WAAW,iBAAuB,CAAC;eAG/C,CAAC,SAAS,WAAW,iBAAuB,CAAC;mBAGzC,CAAC,SAAS,YAAY,iBAAuB,CAAC;kBAG/C,CAAC,SAAS,aAAa,iBAAuB,CAAC;kBAG/C,CAAC,SAAS,aAAa,iBAAuB,CAAC;kBAG/C,CAAC,SAAS,YAAY,iBAAuB,CAAC;cAGlD,CAAC,SAAS,YAAY,iBAAuB,CAAC;SAGnD,KAAK,kBAAkB,CAAC,SAAS,WAAW,0BAAgC,CAAC;kBAGpE,CAAC,SAAS,YAAY,iBAAuB,CAAC;kBAG9C,CAAC,SAAS,YAAY,iBAAuB,CAAC;qBAG3C,CAAC,SAAS,YAAY,iBAAuB,CAAC;eAGpD,CAAC,SAAS,YAAY,iBAAuB,CAAC;qBAGxC,GAAG,SAAS,MAAM,QAAQ,CAAC,SAAS,YAAY,YAAY,GAAG,YAAkB,CAAC;0BAQ7E,IAAI,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,YAAY,aACvF,IAAI,YACM,CAAC;SAUjB,KAAK,EACL,aAAa,SAAS,OAAO,EAC7B,OAAO,SAAS,MAAM,QAChB,CAAC,SAAS,WAAW,cACpB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,YAAkB,CAAC,GAgBnE,eAAe,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;CAE1D,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAC/C,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC/B,oBAAoB,CAAC,CAAC,CAAC,CAEzB;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,CAAC,CAAC,SAAS,UAAU,EAClF,MAAM,EAAE;IACN,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,GACA,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAaxB"}
@@ -0,0 +1,103 @@
1
+ import { FIELD_MARKER, METAOBJECT_MARKER, SCHEMA_MARKER, } from './types.js';
2
+ function validations(options, numeric = false) {
3
+ const result = [];
4
+ for (const name of ['min', 'max', 'regex']) {
5
+ const value = options[name];
6
+ if (value !== undefined)
7
+ result.push({ name, value: String(value) });
8
+ }
9
+ if (options.choices !== undefined) {
10
+ result.push({ name: 'choices', value: JSON.stringify(options.choices) });
11
+ }
12
+ if (options.schema !== undefined) {
13
+ result.push({ name: 'json_schema', value: JSON.stringify(options.schema) });
14
+ }
15
+ return result;
16
+ }
17
+ function makeField(type, options, extraValidations = [], targets = []) {
18
+ return {
19
+ __kind: FIELD_MARKER,
20
+ type,
21
+ options,
22
+ validations: [...validations(options), ...extraValidations],
23
+ targets,
24
+ };
25
+ }
26
+ export const field = {
27
+ string(options = {}) {
28
+ return makeField('single_line_text_field', options);
29
+ },
30
+ text(options = {}) {
31
+ return makeField('multi_line_text_field', options);
32
+ },
33
+ richText(options = {}) {
34
+ return makeField('rich_text_field', options);
35
+ },
36
+ integer(options = {}) {
37
+ return makeField('number_integer', options);
38
+ },
39
+ decimal(options = {}) {
40
+ return makeField('number_decimal', options);
41
+ },
42
+ boolean(options = {}) {
43
+ return makeField('boolean', options);
44
+ },
45
+ url(options = {}) {
46
+ return makeField('url', options);
47
+ },
48
+ json(options = {}) {
49
+ return makeField('json', options);
50
+ },
51
+ product(options = {}) {
52
+ return makeField('product_reference', options);
53
+ },
54
+ variant(options = {}) {
55
+ return makeField('variant_reference', options);
56
+ },
57
+ collection(options = {}) {
58
+ return makeField('collection_reference', options);
59
+ },
60
+ file(options = {}) {
61
+ return makeField('file_reference', options);
62
+ },
63
+ metaobject(key, options = {}) {
64
+ return makeField('metaobject_reference', options, [{ name: 'metaobject_definition_type', value: key }], [key]);
65
+ },
66
+ mixedMetaobject(keys, options = {}) {
67
+ return makeField('mixed_reference', options, [{ name: 'metaobject_definition_types', value: JSON.stringify([...keys].sort()) }], keys);
68
+ },
69
+ list(inner, options = {}) {
70
+ const listValidations = validations(options).map((validation) => ({
71
+ ...validation,
72
+ name: validation.name === 'min' || validation.name === 'max'
73
+ ? `list.${validation.name}`
74
+ : validation.name,
75
+ }));
76
+ const referenceValidations = inner.validations.filter((validation) => validation.name.startsWith('metaobject_definition_'));
77
+ return {
78
+ __kind: FIELD_MARKER,
79
+ type: `list.${inner.type}`,
80
+ options,
81
+ validations: [...listValidations, ...referenceValidations],
82
+ targets: inner.targets,
83
+ };
84
+ },
85
+ };
86
+ export function metaobject(definition) {
87
+ return { __kind: METAOBJECT_MARKER, ...definition };
88
+ }
89
+ export function defineSchema(schema) {
90
+ for (const [owner, namespaces] of Object.entries(schema.metafields)) {
91
+ for (const [namespace, fields] of Object.entries(namespaces)) {
92
+ for (const [key, definition] of Object.entries(fields)) {
93
+ Object.defineProperty(definition, 'identity', {
94
+ value: Object.freeze({ owner, namespace, key }),
95
+ enumerable: true,
96
+ configurable: false,
97
+ });
98
+ }
99
+ }
100
+ }
101
+ return { __kind: SCHEMA_MARKER, ...schema };
102
+ }
103
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}