@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.
- package/LICENSE +21 -0
- package/README.md +96 -0
- package/dist/admin.d.ts +34 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +303 -0
- package/dist/admin.js.map +1 -0
- package/dist/builders.d.ts +28 -0
- package/dist/builders.d.ts.map +1 -0
- package/dist/builders.js +103 -0
- package/dist/builders.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +244 -0
- package/dist/cli.js.map +1 -0
- package/dist/generator.d.ts +14 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +168 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +4 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/migration.d.ts +62 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +265 -0
- package/dist/migration.js.map +1 -0
- package/dist/planner.d.ts +60 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +161 -0
- package/dist/planner.js.map +1 -0
- package/dist/pull.d.ts +11 -0
- package/dist/pull.d.ts.map +1 -0
- package/dist/pull.js +133 -0
- package/dist/pull.js.map +1 -0
- package/dist/schema.d.ts +58 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +232 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +145 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { open, readFile } from 'node:fs/promises';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { AdminClient, DEFAULT_API_VERSION, synchronize } from './admin.js';
|
|
5
|
+
import { generateSchemaModule } from './generator.js';
|
|
6
|
+
import { loadDefault, loadSchema } from './loader.js';
|
|
7
|
+
import { assertCompiledMigration, compileMigration, migrationExitCode, MIGRATION_MARKER, runMigration, } from './migration.js';
|
|
8
|
+
import { exitCodeForPlan } from './planner.js';
|
|
9
|
+
import { pullSchema } from './pull.js';
|
|
10
|
+
import { compileSchema, OWNER_TYPES, SCHEMA_MARKER, stringifyCanonical } from './schema.js';
|
|
11
|
+
const valueOptions = new Set(['store', 'api-version', 'owner', 'namespace', 'out']);
|
|
12
|
+
const booleanOptions = new Set([
|
|
13
|
+
'apply', 'check', 'json', 'validate', 'metaobjects', 'all-owners', 'all-namespaces', 'help', 'version',
|
|
14
|
+
]);
|
|
15
|
+
async function main(argv) {
|
|
16
|
+
const args = parseArguments(argv);
|
|
17
|
+
if (args.command === 'help' || args.flags.has('help')) {
|
|
18
|
+
process.stdout.write(HELP);
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
if (args.command === 'version' || args.flags.has('version')) {
|
|
22
|
+
process.stdout.write('0.0.1\n');
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
if (args.flags.has('apply') && args.flags.has('check')) {
|
|
26
|
+
throw new Error('--apply and --check are mutually exclusive');
|
|
27
|
+
}
|
|
28
|
+
if (args.command === 'compile')
|
|
29
|
+
return compileCommand(args);
|
|
30
|
+
if (args.command === 'pull')
|
|
31
|
+
return pullCommand(args);
|
|
32
|
+
if (args.command === 'migrate')
|
|
33
|
+
return migrateCommand(args);
|
|
34
|
+
return syncCommand(args);
|
|
35
|
+
}
|
|
36
|
+
async function syncCommand(args) {
|
|
37
|
+
const path = onlyPositional(args, 'schema module');
|
|
38
|
+
const schema = await loadSchema(path);
|
|
39
|
+
if (args.flags.has('validate')) {
|
|
40
|
+
output(args, { status: 'valid', metaobjects: schema.metaobjects.length, metafields: schema.metafields.length }, `VALID ${schema.metaobjects.length} metaobject definition(s), ${schema.metafields.length} metafield definition(s)\n`);
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
const mode = modeFrom(args);
|
|
44
|
+
const client = clientFrom(args);
|
|
45
|
+
const result = await synchronize(client, schema, mode);
|
|
46
|
+
const code = exitCodeForPlan(result.plan, mode);
|
|
47
|
+
output(args, { mode, ...result }, renderPlan(result.plan, result.applied));
|
|
48
|
+
return code;
|
|
49
|
+
}
|
|
50
|
+
async function pullCommand(args) {
|
|
51
|
+
if (args.positional.length > 0)
|
|
52
|
+
throw new Error('pull accepts no positional arguments');
|
|
53
|
+
const allOwners = args.flags.has('all-owners');
|
|
54
|
+
const ownerValues = values(args, 'owner');
|
|
55
|
+
if (allOwners && ownerValues.length > 0)
|
|
56
|
+
throw new Error('--all-owners and --owner are mutually exclusive');
|
|
57
|
+
if (!allOwners && ownerValues.length === 0)
|
|
58
|
+
throw new Error('pull requires --owner or --all-owners');
|
|
59
|
+
const owners = (allOwners ? Object.keys(OWNER_TYPES) : ownerValues);
|
|
60
|
+
for (const owner of owners)
|
|
61
|
+
if (!(owner in OWNER_TYPES))
|
|
62
|
+
throw new Error(`unsupported owner: ${owner}`);
|
|
63
|
+
const allNamespaces = args.flags.has('all-namespaces');
|
|
64
|
+
const namespaces = values(args, 'namespace');
|
|
65
|
+
if (allNamespaces && namespaces.length > 0)
|
|
66
|
+
throw new Error('--all-namespaces and --namespace are mutually exclusive');
|
|
67
|
+
if (!allNamespaces && namespaces.length === 0)
|
|
68
|
+
throw new Error('pull requires --namespace or --all-namespaces');
|
|
69
|
+
const pulled = await pullSchema(clientFrom(args), {
|
|
70
|
+
owners,
|
|
71
|
+
namespaces,
|
|
72
|
+
allNamespaces,
|
|
73
|
+
metaobjects: args.flags.has('metaobjects'),
|
|
74
|
+
});
|
|
75
|
+
const generated = generateSchemaModule(pulled);
|
|
76
|
+
const out = oneValue(args, 'out', false);
|
|
77
|
+
if (out) {
|
|
78
|
+
const handle = await open(resolve(process.cwd(), out), 'wx');
|
|
79
|
+
await handle.writeFile(generated);
|
|
80
|
+
await handle.close();
|
|
81
|
+
output(args, { status: 'written', out, excluded: pulled.excluded }, `WROTE ${out}\n`);
|
|
82
|
+
}
|
|
83
|
+
else if (args.flags.has('json')) {
|
|
84
|
+
output(args, { schema: generated, excluded: pulled.excluded }, '');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
process.stdout.write(generated);
|
|
88
|
+
for (const identity of pulled.excluded)
|
|
89
|
+
process.stderr.write(`EXCLUDED ${identity}\n`);
|
|
90
|
+
}
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
async function compileCommand(args) {
|
|
94
|
+
const path = onlyPositional(args, 'schema or migration module');
|
|
95
|
+
const value = await loadDefault(path);
|
|
96
|
+
let compiled;
|
|
97
|
+
if (isRecord(value) && value.__kind === SCHEMA_MARKER)
|
|
98
|
+
compiled = compileSchema(value);
|
|
99
|
+
else if (isRecord(value) && value.__kind === MIGRATION_MARKER)
|
|
100
|
+
compiled = compileMigration(value);
|
|
101
|
+
else
|
|
102
|
+
throw new Error('default export is neither a schema nor a migration declaration');
|
|
103
|
+
const text = stringifyCanonical(compiled);
|
|
104
|
+
const out = oneValue(args, 'out', false);
|
|
105
|
+
if (out) {
|
|
106
|
+
const handle = await open(resolve(process.cwd(), out), 'wx');
|
|
107
|
+
await handle.writeFile(text);
|
|
108
|
+
await handle.close();
|
|
109
|
+
process.stdout.write(`WROTE ${out}\n`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
process.stdout.write(text);
|
|
113
|
+
}
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
async function migrateCommand(args) {
|
|
117
|
+
const path = onlyPositional(args, 'compiled migration');
|
|
118
|
+
const migration = JSON.parse(await readFile(resolve(process.cwd(), path), 'utf8'));
|
|
119
|
+
assertCompiledMigration(migration);
|
|
120
|
+
const mode = modeFrom(args);
|
|
121
|
+
const result = await runMigration(clientFrom(args), migration, mode);
|
|
122
|
+
output(args, { mode, ...result }, [
|
|
123
|
+
`MIGRATION ${result.id}`,
|
|
124
|
+
`source=${result.source} pending=${result.pending} equal=${result.equal}`,
|
|
125
|
+
`invalid=${result.invalid} conflicts=${result.conflicts} applied=${result.applied}`,
|
|
126
|
+
'',
|
|
127
|
+
].join('\n'));
|
|
128
|
+
return migrationExitCode(result, mode);
|
|
129
|
+
}
|
|
130
|
+
function parseArguments(argv) {
|
|
131
|
+
const values = new Map();
|
|
132
|
+
const flags = new Set();
|
|
133
|
+
const positional = [];
|
|
134
|
+
let command = 'sync';
|
|
135
|
+
const rest = [...argv];
|
|
136
|
+
const first = rest[0];
|
|
137
|
+
if (first && ['sync', 'pull', 'compile', 'migrate', 'help', 'version'].includes(first)) {
|
|
138
|
+
command = rest.shift();
|
|
139
|
+
}
|
|
140
|
+
while (rest.length > 0) {
|
|
141
|
+
const argument = rest.shift();
|
|
142
|
+
if (!argument)
|
|
143
|
+
break;
|
|
144
|
+
if (!argument.startsWith('--')) {
|
|
145
|
+
positional.push(argument);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const [rawName, inline] = argument.slice(2).split('=', 2);
|
|
149
|
+
if (!rawName)
|
|
150
|
+
throw new Error(`invalid option: ${argument}`);
|
|
151
|
+
if (valueOptions.has(rawName)) {
|
|
152
|
+
const value = inline ?? rest.shift();
|
|
153
|
+
if (!value || value.startsWith('--'))
|
|
154
|
+
throw new Error(`--${rawName} requires a value`);
|
|
155
|
+
values.set(rawName, [...(values.get(rawName) ?? []), value]);
|
|
156
|
+
}
|
|
157
|
+
else if (booleanOptions.has(rawName)) {
|
|
158
|
+
if (inline !== undefined)
|
|
159
|
+
throw new Error(`--${rawName} does not accept a value`);
|
|
160
|
+
flags.add(rawName);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new Error(`unknown option: --${rawName}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { command, positional, values, flags };
|
|
167
|
+
}
|
|
168
|
+
function modeFrom(args) {
|
|
169
|
+
if (args.flags.has('apply'))
|
|
170
|
+
return 'apply';
|
|
171
|
+
if (args.flags.has('check'))
|
|
172
|
+
return 'check';
|
|
173
|
+
return 'dry-run';
|
|
174
|
+
}
|
|
175
|
+
function clientFrom(args) {
|
|
176
|
+
const store = oneValue(args, 'store', true);
|
|
177
|
+
const token = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN ?? '';
|
|
178
|
+
return new AdminClient({
|
|
179
|
+
store,
|
|
180
|
+
token,
|
|
181
|
+
apiVersion: oneValue(args, 'api-version', false) ?? DEFAULT_API_VERSION,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function values(args, name) {
|
|
185
|
+
return args.values.get(name) ?? [];
|
|
186
|
+
}
|
|
187
|
+
function oneValue(args, name, required) {
|
|
188
|
+
const found = values(args, name);
|
|
189
|
+
if (found.length > 1)
|
|
190
|
+
throw new Error(`--${name} may be specified only once`);
|
|
191
|
+
if (required && found.length === 0)
|
|
192
|
+
throw new Error(`--${name} is required`);
|
|
193
|
+
return found[0];
|
|
194
|
+
}
|
|
195
|
+
function onlyPositional(args, label) {
|
|
196
|
+
if (args.positional.length !== 1)
|
|
197
|
+
throw new Error(`${args.command} requires exactly one ${label}`);
|
|
198
|
+
return args.positional[0];
|
|
199
|
+
}
|
|
200
|
+
function output(args, json, text) {
|
|
201
|
+
process.stdout.write(args.flags.has('json') ? stringifyCanonical(json) : text);
|
|
202
|
+
}
|
|
203
|
+
function renderPlan(plan, applied) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
for (const item of plan.items) {
|
|
206
|
+
lines.push(`${item.status} ${item.identity}`);
|
|
207
|
+
for (const reason of item.reasons)
|
|
208
|
+
lines.push(` ${reason}`);
|
|
209
|
+
for (const notice of item.notices)
|
|
210
|
+
lines.push(`NOTICE ${notice}`);
|
|
211
|
+
}
|
|
212
|
+
for (const identity of applied)
|
|
213
|
+
lines.push(`APPLIED ${identity}`);
|
|
214
|
+
lines.push('');
|
|
215
|
+
return lines.join('\n');
|
|
216
|
+
}
|
|
217
|
+
function isRecord(value) {
|
|
218
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
219
|
+
}
|
|
220
|
+
const HELP = `@notambourine/metafields 0.0.1
|
|
221
|
+
|
|
222
|
+
Usage:
|
|
223
|
+
metafields <schema.ts> --validate
|
|
224
|
+
metafields <schema.ts> --store <store.myshopify.com> [--apply | --check] [--json]
|
|
225
|
+
metafields pull --store <store.myshopify.com> --owner <owner> --namespace <namespace>
|
|
226
|
+
[--metaobjects] [--out <schema.ts>]
|
|
227
|
+
metafields compile <schema-or-migration.ts> [--out <compiled.json>]
|
|
228
|
+
metafields migrate <compiled-migration.json> --store <store.myshopify.com>
|
|
229
|
+
[--apply | --check] [--json]
|
|
230
|
+
|
|
231
|
+
Options:
|
|
232
|
+
--api-version <YYYY-MM> Shopify Admin API version (default: ${DEFAULT_API_VERSION})
|
|
233
|
+
--all-owners Pull every supported owner type
|
|
234
|
+
--all-namespaces Pull every merchant-owned namespace
|
|
235
|
+
--help Show help
|
|
236
|
+
--version Show version
|
|
237
|
+
`;
|
|
238
|
+
main(process.argv.slice(2)).then((code) => {
|
|
239
|
+
process.exitCode = code;
|
|
240
|
+
}).catch((error) => {
|
|
241
|
+
process.stderr.write(`ERROR ${error instanceof Error ? error.message : String(error)}\n`);
|
|
242
|
+
process.exitCode = 2;
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ExistingMetafield, ExistingMetaobject } from './planner.js';
|
|
2
|
+
import { type Owner } from './schema.js';
|
|
3
|
+
export interface PulledSchema {
|
|
4
|
+
metaobjects: ExistingMetaobject[];
|
|
5
|
+
metafields: (ExistingMetafield & {
|
|
6
|
+
owner: Owner;
|
|
7
|
+
})[];
|
|
8
|
+
excluded: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function generateSchemaModule(pulled: PulledSchema): string;
|
|
11
|
+
export declare function filterPulledMetafields(fields: (ExistingMetafield & {
|
|
12
|
+
owner: Owner;
|
|
13
|
+
})[]): PulledSchema['metafields'];
|
|
14
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { isReservedNamespace } from './schema.js';
|
|
2
|
+
function quote(value) {
|
|
3
|
+
return JSON.stringify(value);
|
|
4
|
+
}
|
|
5
|
+
function property(key) {
|
|
6
|
+
return /^[A-Za-z_$][\w$]*$/.test(key) ? key : quote(key);
|
|
7
|
+
}
|
|
8
|
+
function options(field, metaobjectField = false) {
|
|
9
|
+
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']) {
|
|
18
|
+
const value = validationMap.get(name);
|
|
19
|
+
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('json_schema');
|
|
29
|
+
if (jsonSchema !== undefined)
|
|
30
|
+
result.push(`schema: ${jsonSchema}`);
|
|
31
|
+
if (!metaobjectField && 'access' in field && field.access) {
|
|
32
|
+
const access = Object.entries(field.access)
|
|
33
|
+
.filter(([key]) => key === 'admin' || key === 'storefront')
|
|
34
|
+
.filter(([, value]) => value !== null)
|
|
35
|
+
.map(([key, value]) => `${key}: ${quote(String(value).toLowerCase())}`);
|
|
36
|
+
if (access.length > 0)
|
|
37
|
+
result.push(`access: { ${access.join(', ')} }`);
|
|
38
|
+
}
|
|
39
|
+
if (!metaobjectField && 'capabilities' in field && field.capabilities) {
|
|
40
|
+
for (const key of [
|
|
41
|
+
'adminFilterable', 'analyticsQueryable', 'cartToOrderCopyable', 'smartCollectionCondition', 'uniqueValues',
|
|
42
|
+
]) {
|
|
43
|
+
if (field.capabilities[key] !== undefined)
|
|
44
|
+
result.push(`${key}: ${String(field.capabilities[key])}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!metaobjectField && 'constraints' in field && field.constraints?.key) {
|
|
48
|
+
result.push(`constraints: { key: ${quote(field.constraints.key)}, values: ${JSON.stringify([...field.constraints.values].sort())} }`);
|
|
49
|
+
}
|
|
50
|
+
return result.length > 0 ? `{ ${result.join(', ')} }` : '';
|
|
51
|
+
}
|
|
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) {
|
|
67
|
+
const rawType = typeof field.type === 'string' ? field.type : field.type.name;
|
|
68
|
+
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;
|
|
100
|
+
}
|
|
101
|
+
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))) {
|
|
109
|
+
const metaOptions = [`name: ${quote(definition.name)}`];
|
|
110
|
+
if (definition.description)
|
|
111
|
+
metaOptions.push(`description: ${quote(definition.description)}`);
|
|
112
|
+
if (definition.displayNameKey)
|
|
113
|
+
metaOptions.push(`displayNameKey: ${quote(definition.displayNameKey)}`);
|
|
114
|
+
if (definition.access) {
|
|
115
|
+
const values = Object.entries(definition.access)
|
|
116
|
+
.filter(([key]) => key === 'admin' || key === 'storefront')
|
|
117
|
+
.filter(([, value]) => value !== null)
|
|
118
|
+
.map(([key, value]) => `${key}: ${quote(String(value).toLowerCase())}`);
|
|
119
|
+
if (values.length > 0)
|
|
120
|
+
metaOptions.push(`access: { ${values.join(', ')} }`);
|
|
121
|
+
}
|
|
122
|
+
if (definition.capabilities) {
|
|
123
|
+
const values = Object.entries(definition.capabilities).map(([key, value]) => `${key}: ${String(value)}`);
|
|
124
|
+
if (values.length > 0)
|
|
125
|
+
metaOptions.push(`capabilities: { ${values.join(', ')} }`);
|
|
126
|
+
}
|
|
127
|
+
lines.push(` ${property(definition.type)}: metaobject({`);
|
|
128
|
+
for (const option of metaOptions)
|
|
129
|
+
lines.push(` ${option},`);
|
|
130
|
+
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)},`);
|
|
133
|
+
}
|
|
134
|
+
lines.push(' },', ' }),');
|
|
135
|
+
}
|
|
136
|
+
lines.push(' },', ' metafields: {');
|
|
137
|
+
const owners = groupBy(pulled.metafields, (field) => field.owner);
|
|
138
|
+
for (const [owner, ownerFields] of [...owners].sort(([a], [b]) => a.localeCompare(b))) {
|
|
139
|
+
lines.push(` ${property(owner)}: {`);
|
|
140
|
+
const namespaces = groupBy(ownerFields, (field) => field.namespace);
|
|
141
|
+
for (const [namespace, fields] of [...namespaces].sort(([a], [b]) => a.localeCompare(b))) {
|
|
142
|
+
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)},`);
|
|
145
|
+
}
|
|
146
|
+
lines.push(' },');
|
|
147
|
+
}
|
|
148
|
+
lines.push(' },');
|
|
149
|
+
}
|
|
150
|
+
lines.push(' },', '});', '');
|
|
151
|
+
return lines.join('\n');
|
|
152
|
+
}
|
|
153
|
+
function groupBy(values, key) {
|
|
154
|
+
const groups = new Map();
|
|
155
|
+
for (const value of values) {
|
|
156
|
+
const group = key(value);
|
|
157
|
+
const existing = groups.get(group);
|
|
158
|
+
if (existing)
|
|
159
|
+
existing.push(value);
|
|
160
|
+
else
|
|
161
|
+
groups.set(group, [value]);
|
|
162
|
+
}
|
|
163
|
+
return groups;
|
|
164
|
+
}
|
|
165
|
+
export function filterPulledMetafields(fields) {
|
|
166
|
+
return fields.filter((field) => !isReservedNamespace(field.namespace));
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { defineSchema, field, metaobject } from './builders.js';
|
|
2
|
+
export { defineMigration, transforms } from './migration.js';
|
|
3
|
+
export { compileSchema, stringifyCanonical } from './schema.js';
|
|
4
|
+
export { compileMigration } from './migration.js';
|
|
5
|
+
export { planSchema, exitCodeForPlan } from './planner.js';
|
|
6
|
+
export { AdminClient, DEFAULT_API_VERSION, synchronize } from './admin.js';
|
|
7
|
+
export type { CollectionReference, Decimal, FileReference, InferMetafields, InferMetaobjects, MetaobjectReference, ProductReference, RichText, Url, VariantReference, } from './types.js';
|
|
8
|
+
export type { CompiledSchema, Owner } from './schema.js';
|
|
9
|
+
export type { CompiledMigration, MigrationResult } from './migration.js';
|
|
10
|
+
export type { ExistingSchema, Plan, PlanItem } from './planner.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3E,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,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { defineSchema, field, metaobject } from './builders.js';
|
|
2
|
+
export { defineMigration, transforms } from './migration.js';
|
|
3
|
+
export { compileSchema, stringifyCanonical } from './schema.js';
|
|
4
|
+
export { compileMigration } from './migration.js';
|
|
5
|
+
export { planSchema, exitCodeForPlan } from './planner.js';
|
|
6
|
+
export { AdminClient, DEFAULT_API_VERSION, synchronize } from './admin.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","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,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUhE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAEtE"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { compileSchema } from './schema.js';
|
|
4
|
+
export async function loadDefault(path) {
|
|
5
|
+
const absolute = resolve(process.cwd(), path);
|
|
6
|
+
let module;
|
|
7
|
+
try {
|
|
8
|
+
module = await import(pathToFileURL(absolute).href);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
throw new Error(`could not load ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
12
|
+
}
|
|
13
|
+
if (!('default' in module))
|
|
14
|
+
throw new Error(`${path}: module has no default export`);
|
|
15
|
+
return module.default;
|
|
16
|
+
}
|
|
17
|
+
export async function loadSchema(path) {
|
|
18
|
+
return compileSchema(await loadDefault(path));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAA4B,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,OAAO,aAAa,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AdminClient } from './admin.js';
|
|
2
|
+
import { type Owner } from './schema.js';
|
|
3
|
+
import { type FieldDefinition } from './types.js';
|
|
4
|
+
export declare const MIGRATION_MARKER: "@notambourine/metafields/migration";
|
|
5
|
+
export interface UrlTransform {
|
|
6
|
+
readonly kind: 'url';
|
|
7
|
+
readonly allowedSchemes: readonly ('http' | 'https' | 'mailto' | 'sms' | 'tel')[];
|
|
8
|
+
readonly bareHost: 'reject';
|
|
9
|
+
readonly trim: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface MigrationDefinition {
|
|
12
|
+
readonly __kind: typeof MIGRATION_MARKER;
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly from: FieldDefinition;
|
|
15
|
+
readonly to: FieldDefinition;
|
|
16
|
+
readonly mode: 'copy';
|
|
17
|
+
readonly transform: UrlTransform;
|
|
18
|
+
readonly onInvalid: 'fail';
|
|
19
|
+
readonly onTargetConflict: 'fail';
|
|
20
|
+
}
|
|
21
|
+
export interface CompiledMigration {
|
|
22
|
+
format: '@notambourine/metafields/migration-v1';
|
|
23
|
+
id: string;
|
|
24
|
+
source: FieldIdentity & {
|
|
25
|
+
type: string;
|
|
26
|
+
};
|
|
27
|
+
target: FieldIdentity & {
|
|
28
|
+
type: string;
|
|
29
|
+
};
|
|
30
|
+
mode: 'copy';
|
|
31
|
+
transform: UrlTransform;
|
|
32
|
+
onInvalid: 'fail';
|
|
33
|
+
onTargetConflict: 'fail';
|
|
34
|
+
checksum: string;
|
|
35
|
+
}
|
|
36
|
+
interface FieldIdentity {
|
|
37
|
+
owner: Owner;
|
|
38
|
+
namespace: string;
|
|
39
|
+
key: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const transforms: {
|
|
42
|
+
url(options: Omit<UrlTransform, "kind">): UrlTransform;
|
|
43
|
+
};
|
|
44
|
+
export declare function defineMigration<const M extends Omit<MigrationDefinition, '__kind'>>(definition: M): M & {
|
|
45
|
+
readonly __kind: typeof MIGRATION_MARKER;
|
|
46
|
+
};
|
|
47
|
+
export declare function compileMigration(value: unknown): CompiledMigration;
|
|
48
|
+
export declare function assertCompiledMigration(value: unknown): asserts value is CompiledMigration;
|
|
49
|
+
export interface MigrationResult {
|
|
50
|
+
id: string;
|
|
51
|
+
checksum: string;
|
|
52
|
+
source: number;
|
|
53
|
+
pending: number;
|
|
54
|
+
equal: number;
|
|
55
|
+
invalid: number;
|
|
56
|
+
conflicts: number;
|
|
57
|
+
applied: number;
|
|
58
|
+
}
|
|
59
|
+
export declare function runMigration(client: AdminClient, migration: CompiledMigration, mode: 'dry-run' | 'check' | 'apply'): Promise<MigrationResult>;
|
|
60
|
+
export declare function migrationExitCode(result: MigrationResult, mode: 'dry-run' | 'check' | 'apply'): number;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|