@fmaplabs/meta-manifest 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/dist/{chunk-ZTWFDJHN.js → chunk-OEJJXMYC.js} +144 -44
- package/dist/chunk-OEJJXMYC.js.map +1 -0
- package/dist/cli/index.cjs +128 -43
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/index.cjs +143 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-ZTWFDJHN.js.map +0 -1
package/dist/cli/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts","../../src/sync/client.ts","../../src/config.ts","../../src/node/client.ts","../../src/cli/load-config.ts","../../src/cli/load-env.ts","../../src/cli/init.ts","../../src/codegen.ts","../../src/sync/diff.ts","../../src/sync/normalize.ts","../../src/sync/resolve.ts","../../src/sync/pull.ts","../../src/sync/push.ts","../../src/cli/plan.ts","../../src/cli/format.ts","../../src/cli/diff.ts","../../src/cli/push.ts","../../src/cli/pull.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { SyncTransportError } from \"../sync/client\";\nimport { createAdminClient } from \"../node/client\";\nimport { loadConfig, loadSchemas } from \"./load-config\";\nimport { loadDotEnv } from \"./load-env\";\nimport { runInit } from \"./init\";\nimport { runDiff } from \"./diff\";\nimport { runPush } from \"./push\";\nimport { runPull } from \"./pull\";\n\nexport interface Args {\n command?: string;\n config?: string;\n allowDestructive: boolean;\n force: boolean;\n help: boolean;\n}\n\nexport function parseArgs(argv: string[]): Args {\n const args: Args = { allowDestructive: false, force: false, help: false };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--help\" || a === \"-h\") args.help = true;\n else if (a === \"--allow-destructive\") args.allowDestructive = true;\n else if (a === \"--force\") args.force = true;\n else if (a === \"--config\") args.config = argv[++i];\n else if (!a.startsWith(\"-\") && !args.command) args.command = a;\n }\n return args;\n}\n\nconst HELP = `meta-manifest — sync Shopify metaobject definitions\n\nUsage: mm <command> [options]\n\nCommands:\n init Scaffold meta-manifest.config.ts + src/schema.ts\n pull Enumerate remote definitions and write schema source\n diff Show the changes a push would apply\n push Apply local schema to the store\n\nOptions:\n --config <path> Config file (default: meta-manifest.config.ts)\n --allow-destructive Apply destructive changes on push\n --force Overwrite schema on pull without warning\n -h, --help Show this help`;\n\nexport async function main(argv: string[]): Promise<number> {\n const args = parseArgs(argv);\n if (args.help || !args.command) {\n console.log(HELP);\n return args.command ? 0 : args.help ? 0 : 1;\n }\n try {\n if (args.command === \"init\") {\n await runInit();\n return 0;\n }\n loadDotEnv();\n const config = await loadConfig(args.config);\n const client = createAdminClient(config);\n if (args.command === \"pull\") {\n await runPull({ client, schemaPath: config.schema, force: args.force });\n return 0;\n }\n const schemas = await loadSchemas(config.schema);\n if (args.command === \"diff\") {\n await runDiff({ client, schemas, config });\n return 0;\n }\n if (args.command === \"push\") {\n const result = await runPush({ client, schemas, config, allowDestructive: args.allowDestructive });\n return result.ok ? 0 : 2;\n }\n console.error(`Unknown command: ${args.command}`);\n console.log(HELP);\n return 1;\n } catch (err) {\n if (err instanceof SyncTransportError) console.error(`Sync failed: Shopify rejected a request.`);\n else console.error(err instanceof Error ? err.message : String(err));\n return 1;\n }\n}\n\n// Invoked as the bin. Guarded so importing this module in tests (which read\n// `parseArgs`) does not trigger process.exit — vitest sets process.env.VITEST.\nif (process.env.VITEST === undefined) {\n main(process.argv.slice(2)).then((code) => process.exit(code));\n}\n","/**\n * The minimal Admin GraphQL transport the sync adapter depends on. The app\n * supplies a concrete implementation at its edge (wrapping `admin.graphql`),\n * keeping `@fmaplabs/meta-manifest` free of any runtime dependency on a GraphQL\n * client. [design §5]\n */\nexport interface AdminGraphQLClient {\n (query: string, options?: { variables?: Record<string, unknown> }): Promise<{ data?: unknown; errors?: unknown }>;\n}\n\n// GraphQL operation strings, copied verbatim from the schema-validated documents\n// in the design spec §3. Re-validated against Admin API 2026-07 during planning.\n// Do not edit by hand — keep equal to the validated documents (drift guard, §12).\n\nexport const PULL_DEFINITION_QUERY = `query PullMetaobjectDefinition($type: String!) {\n metaobjectDefinitionByType(type: $type) {\n id\n name\n type\n description\n displayNameKey\n fieldDefinitions {\n key\n name\n description\n required\n type { name }\n validations { name value }\n capabilities { adminFilterable { enabled } }\n }\n access { admin storefront customerAccount }\n capabilities {\n publishable { enabled }\n translatable { enabled }\n renderable { enabled data { metaTitleKey metaDescriptionKey } }\n onlineStore { enabled data { urlHandle } }\n }\n }\n}`;\n\nexport const LIST_DEFINITIONS_QUERY = `query ListMetaobjectDefinitions($after: String) {\n metaobjectDefinitions(first: 50, after: $after) {\n nodes {\n id\n name\n type\n description\n displayNameKey\n fieldDefinitions {\n key\n name\n description\n required\n type { name }\n validations { name value }\n capabilities { adminFilterable { enabled } }\n }\n access { admin storefront customerAccount }\n capabilities {\n publishable { enabled }\n translatable { enabled }\n renderable { enabled data { metaTitleKey metaDescriptionKey } }\n onlineStore { enabled data { urlHandle } }\n }\n }\n pageInfo { hasNextPage endCursor }\n }\n}`;\n\nexport const CREATE_DEFINITION_MUTATION = `mutation CreateMetaobjectDefinition($definition: MetaobjectDefinitionCreateInput!) {\n metaobjectDefinitionCreate(definition: $definition) {\n metaobjectDefinition { id type }\n userErrors { field message code }\n }\n}`;\n\nexport const UPDATE_DEFINITION_MUTATION = `mutation UpdateMetaobjectDefinition($id: ID!, $definition: MetaobjectDefinitionUpdateInput!) {\n metaobjectDefinitionUpdate(id: $id, definition: $definition) {\n metaobjectDefinition { id type }\n userErrors { field message code }\n }\n}`;\n\n/**\n * Thrown when a request fails at the transport or top-level GraphQL layer —\n * distinct from per-op `userErrors`, which `push` reports as `failed` rather\n * than throwing. Carries the offending top-level `errors` payload. [design §5]\n */\nexport class SyncTransportError extends Error {\n constructor(message: string, readonly errors: unknown) {\n super(message);\n this.name = \"SyncTransportError\";\n }\n}\n\n/**\n * Runs an operation through the injected client and returns its `data`.\n * A non-empty top-level `errors` payload becomes a `SyncTransportError`;\n * a rejected transport promise propagates unchanged. [design §5]\n */\nexport async function execute<T>(\n client: AdminGraphQLClient,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<T> {\n const result = await client(query, variables ? { variables } : undefined);\n if (Array.isArray(result.errors) ? result.errors.length > 0 : result.errors != null) {\n throw new SyncTransportError(\"GraphQL request failed\", result.errors);\n }\n return result.data as T;\n}\n","export const DEFAULT_API_VERSION = \"2026-07\";\n\nexport interface Config {\n /** e.g. \"my-store.myshopify.com\" */\n shop: string;\n /** Admin API access token; reference via process.env in your config file. */\n accessToken: string;\n /** Admin API version. Defaults to DEFAULT_API_VERSION. */\n apiVersion?: string;\n /** Path to the schema module whose `schemas` export drives diff/push, and pull writes. */\n schema: string;\n /** Scope for all metaobjects, unless overridden per-metaobject. Defaults to \"app\". */\n scope?: \"app\" | \"merchant\";\n /** Default admin access for app-scoped metaobjects: false → merchant_read, true → merchant_read_write. Defaults to false. */\n merchantEditable?: boolean;\n}\n\n/** Identity helper for type inference in `meta-manifest.config.ts`. */\nexport function defineConfig(config: Config): Config {\n return config;\n}\n\n/** Validate a loaded config object, throwing a one-line Error naming the first missing field. */\nexport function validateConfig(raw: unknown): Config {\n const c = raw as Partial<Config> | null | undefined;\n for (const key of [\"shop\", \"accessToken\", \"schema\"] as const) {\n if (!c || typeof c[key] !== \"string\" || c[key] === \"\") {\n throw new Error(`Invalid config: missing or empty \"${key}\".`);\n }\n }\n return c as Config;\n}\n","import type { AdminGraphQLClient } from \"../sync/client\";\nimport { SyncTransportError } from \"../sync/client\";\nimport { DEFAULT_API_VERSION } from \"../config\";\n\n/**\n * Build an AdminGraphQLClient that talks directly to a store using an Admin API\n * access token — the CLI's standalone equivalent of the app's session-based\n * `admin.graphql` wrapper. [design §2]\n */\nexport function createAdminClient(opts: {\n shop: string;\n accessToken: string;\n apiVersion?: string;\n}): AdminGraphQLClient {\n const version = opts.apiVersion ?? DEFAULT_API_VERSION;\n const endpoint = `https://${opts.shop}/admin/api/${version}/graphql.json`;\n return async (query, options) => {\n let res: Response;\n try {\n res = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-Shopify-Access-Token\": opts.accessToken },\n body: JSON.stringify({ query, variables: options?.variables }),\n });\n } catch (cause) {\n throw new SyncTransportError(`Request to ${opts.shop} failed`, cause);\n }\n if (!res.ok) {\n throw new SyncTransportError(`Admin API returned HTTP ${res.status}`, await res.text().catch(() => null));\n }\n return res.json() as Promise<{ data?: unknown; errors?: unknown }>;\n };\n}\n","import { resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { validateConfig } from \"../config\";\nimport type { Config } from \"../config\";\nimport type { AnySchema } from \"../index\";\n\nconst jiti = createJiti(import.meta.url);\n\n/** Load and validate meta-manifest.config.ts (default: ./meta-manifest.config.ts). */\nexport async function loadConfig(configPath = \"meta-manifest.config.ts\"): Promise<Config> {\n const abs = resolve(process.cwd(), configPath);\n const mod = await jiti.import<{ default?: unknown }>(abs);\n return validateConfig(mod.default);\n}\n\n/** Load the `schemas` export from a schema module. */\nexport async function loadSchemas(schemaPath: string): Promise<AnySchema[]> {\n const abs = resolve(process.cwd(), schemaPath);\n const mod = await jiti.import<{ schemas?: unknown }>(abs);\n if (!Array.isArray(mod.schemas)) {\n throw new Error(`Schema module \"${schemaPath}\" must export a \\`schemas\\` array.`);\n }\n return mod.schemas as AnySchema[];\n}\n","import { resolve } from \"node:path\";\n\n/**\n * Load a `.env` file from `cwd` into `process.env`, if one exists. Node does not\n * read `.env` automatically, so the CLI does it here before evaluating the config\n * (which reads secrets like `SHOPIFY_ADMIN_TOKEN` via `process.env`).\n *\n * Variables already present in the real environment win over the file, and a\n * missing `.env` is a silent no-op. Any other error (e.g. a malformed file)\n * surfaces so it isn't hidden.\n */\nexport function loadDotEnv(cwd = process.cwd()): void {\n try {\n process.loadEnvFile(resolve(cwd, \".env\"));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nconst CONFIG_TEMPLATE = `import { defineConfig } from \"@fmaplabs/meta-manifest\";\n\nexport default defineConfig({\n shop: \"my-store.myshopify.com\",\n accessToken: process.env.SHOPIFY_ADMIN_TOKEN!,\n schema: \"./src/schema.ts\",\n});\n`;\n\nconst SCHEMA_TEMPLATE = `import { defineMetaobject, m } from \"@fmaplabs/meta-manifest\";\n\nexport const Author = defineMetaobject(\"author\", {\n name: \"Author\",\n fields: {\n name: m.text({ required: true, max: 120 }),\n bio: m.multilineText(),\n },\n});\n\nexport const schemas = [Author];\n`;\n\n/** Scaffold config + schema files, never overwriting existing ones. */\nexport async function runInit(opts: { cwd?: string } = {}): Promise<{ created: string[] }> {\n const cwd = opts.cwd ?? process.cwd();\n const created: string[] = [];\n const write = (rel: string, contents: string) => {\n const abs = join(cwd, rel);\n if (existsSync(abs)) return;\n mkdirSync(dirname(abs), { recursive: true });\n writeFileSync(abs, contents);\n created.push(rel);\n };\n write(\"meta-manifest.config.ts\", CONFIG_TEMPLATE);\n write(\"src/schema.ts\", SCHEMA_TEMPLATE);\n if (created.length) {\n console.log(`Created: ${created.join(\", \")}`);\n console.log(\"Next: set SHOPIFY_ADMIN_TOKEN (export it or add it to .env), edit meta-manifest.config.ts, then run `mm diff`.\");\n } else {\n console.log(\"Nothing to do — config and schema already exist.\");\n }\n return { created };\n}\n","import type { RemoteAccess, RemoteCapabilities, RemoteDefinition, RemoteField } from \"./sync/normalize\";\nimport type { FieldValidation } from \"./fields/base\";\n\nconst APP_PREFIX = \"$app:\";\n\n/** A bare (non-`$app:`) type is merchant-scoped. [design §9] */\nfunction isMerchant(type: string): boolean {\n return !type.startsWith(APP_PREFIX);\n}\n\n/** `filterable: true` option entry when the field is used as an admin filter. */\nfunction filterableEntry(field: RemoteField): string[] {\n return field.filterable ? [\"filterable: true\"] : [];\n}\n\n/** Shopify scalar/reference type → m.* builder name (no special construction). */\nconst SIMPLE: Record<string, string> = {\n single_line_text_field: \"text\",\n multi_line_text_field: \"multilineText\",\n number_integer: \"integer\",\n number_decimal: \"decimal\",\n boolean: \"boolean\",\n date: \"date\",\n date_time: \"dateTime\",\n url: \"url\",\n color: \"color\",\n json: \"json\",\n money: \"money\",\n dimension: \"dimension\",\n weight: \"weight\",\n volume: \"volume\",\n product_reference: \"product\",\n variant_reference: \"variant\",\n collection_reference: \"collection\",\n page_reference: \"page\",\n file_reference: \"file\",\n};\n\nfunction handleOf(type: string): string {\n return type.startsWith(APP_PREFIX) ? type.slice(APP_PREFIX.length) : type;\n}\n\nfunction identOf(type: string): string {\n return handleOf(type)\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p[0].toUpperCase() + p.slice(1))\n .join(\"\");\n}\n\nfunction v(validations: FieldValidation[], name: string): string | undefined {\n return validations.find((x) => x.name === name)?.value;\n}\n\n/** Reference target ($app: type) from a metaobject_reference field's validations. */\nfunction refTarget(field: RemoteField): string | undefined {\n const single = v(field.validations, \"metaobject_definition_type\");\n if (single) return single;\n const many = v(field.validations, \"metaobject_definition_types\");\n if (many) {\n try {\n const arr = JSON.parse(many);\n if (Array.isArray(arr) && arr.length) return String(arr[0]);\n } catch {\n /* fall through */\n }\n }\n return undefined;\n}\n\n/** Build the options-object literal source (e.g. `{ required: true, max: 120 }`), or \"\". */\nfunction optsLiteral(entries: string[]): string {\n return entries.length ? `{ ${entries.join(\", \")} }` : \"\";\n}\n\n/** Number/string/JSON-array validation → option entries for scalar builders. */\nfunction scalarEntries(field: RemoteField, warnings: string[], builder: string): string[] {\n const e: string[] = [];\n if (field.required) e.push(\"required: true\");\n const num = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) e.push(`${opt}: ${Number(val)}`);\n };\n const str = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) e.push(`${opt}: ${JSON.stringify(val)}`);\n };\n const jsonArr = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) {\n try {\n e.push(`${opt}: ${JSON.stringify(JSON.parse(val))}`);\n } catch {\n warnings.push(`could not parse \"${name}\" on field \"${field.key}\"`);\n }\n }\n };\n // `date`/`date_time` store min/max as ISO date strings, not numbers — emit them as\n // quoted string literals so they round-trip (Number(\"2020-01-01\") is NaN).\n if (builder === \"date\" || builder === \"dateTime\") {\n str(\"min\", \"min\");\n str(\"max\", \"max\");\n } else {\n num(\"min\", \"min\");\n num(\"max\", \"max\");\n }\n str(\"regex\", \"regex\");\n jsonArr(\"choices\", \"choices\");\n num(\"max_precision\", \"maxPrecision\");\n jsonArr(\"allowed_domains\", \"allowedDomains\");\n jsonArr(\"file_type_options\", \"accept\");\n return e;\n}\n\nfunction scalarCall(builder: string, field: RemoteField, warnings: string[], extra: string[] = []): string {\n const lit = optsLiteral([...scalarEntries(field, warnings, builder), ...extra]);\n return lit ? `m.${builder}(${lit})` : `m.${builder}()`;\n}\n\n/** Build the m.* call source for a single field. */\nfunction fieldCall(field: RemoteField, typeToIdent: Map<string, string>, warnings: string[]): string {\n const type = field.type;\n\n if (type === \"rating\") {\n const min = v(field.validations, \"min\");\n const max = v(field.validations, \"max\");\n const e = [`min: ${Number(min ?? 1)}`, `max: ${Number(max ?? 5)}`];\n if (field.required) e.unshift(\"required: true\");\n e.push(...filterableEntry(field));\n if (min === undefined || max === undefined) warnings.push(`rating field \"${field.key}\" missing min/max`);\n return `m.rating(${optsLiteral(e)})`;\n }\n\n if (type === \"metaobject_reference\") {\n const target = refTarget(field);\n const ident = target ? typeToIdent.get(target) : undefined;\n if (!ident) {\n warnings.push(`unresolved reference on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped reference */`;\n }\n const refEntries: string[] = [];\n if (field.required) refEntries.push(\"required: true\");\n refEntries.push(...filterableEntry(field));\n const opts = optsLiteral(refEntries);\n return opts ? `m.ref(() => ${ident}, ${opts})` : `m.ref(() => ${ident})`;\n }\n\n if (type.startsWith(\"list.\")) {\n const inner = type.slice(\"list.\".length);\n const listEntries: string[] = [];\n if (field.required) listEntries.push(\"required: true\");\n const min = v(field.validations, \"list.min\");\n const max = v(field.validations, \"list.max\");\n if (min !== undefined) listEntries.push(`min: ${Number(min)}`);\n if (max !== undefined) listEntries.push(`max: ${Number(max)}`);\n listEntries.push(...filterableEntry(field));\n const listOpts = optsLiteral(listEntries);\n let innerCall: string;\n if (inner === \"metaobject_reference\") {\n const target = refTarget(field);\n const ident = target ? typeToIdent.get(target) : undefined;\n if (!ident) {\n warnings.push(`unresolved list reference on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped list reference */`;\n }\n innerCall = `m.ref(() => ${ident})`;\n } else if (SIMPLE[inner]) {\n // Inner scalar validations (min/max/regex/…) live on the same field; reuse scalarEntries\n // but drop list.* names (already consumed above).\n innerCall = scalarCall(SIMPLE[inner], { ...field, required: false }, warnings);\n } else {\n warnings.push(`unmapped list element type \"${inner}\" on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped list element ${inner} */`;\n }\n return listOpts ? `m.list(${innerCall}, ${listOpts})` : `m.list(${innerCall})`;\n }\n\n if (SIMPLE[type]) return scalarCall(SIMPLE[type], field, warnings, filterableEntry(field));\n\n warnings.push(`unmapped field type \"${type}\" on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped type ${type} */`;\n}\n\n/** Non-default access options as a config-object literal, or \"\" when all default. [design §9] */\nfunction accessSource(access: RemoteAccess | undefined): string {\n if (!access) return \"\";\n const parts: string[] = [];\n if (access.admin === \"MERCHANT_READ_WRITE\") parts.push(`admin: \"merchant_read_write\"`);\n if (access.storefront === \"PUBLIC_READ\") parts.push(`storefront: \"public_read\"`);\n if (access.customerAccount === \"READ\") parts.push(`customerAccount: \"read\"`);\n return parts.length ? `{ ${parts.join(\", \")} }` : \"\";\n}\n\n/** Enabled capabilities as a config-object literal, or \"\" when none are on. [design §9] */\nfunction capabilitiesSource(caps: RemoteCapabilities | undefined): string {\n if (!caps) return \"\";\n const parts: string[] = [];\n if (caps.publishable?.enabled) parts.push(`publishable: true`);\n if (caps.translatable?.enabled) parts.push(`translatable: true`);\n if (caps.renderable?.enabled) {\n const d = caps.renderable.data;\n const dparts: string[] = [];\n if (d?.metaTitleKey != null) dparts.push(`metaTitleKey: ${JSON.stringify(d.metaTitleKey)}`);\n if (d?.metaDescriptionKey != null) dparts.push(`metaDescriptionKey: ${JSON.stringify(d.metaDescriptionKey)}`);\n parts.push(dparts.length ? `renderable: { ${dparts.join(\", \")} }` : `renderable: true`);\n }\n if (caps.onlineStore?.enabled && caps.onlineStore.data?.urlHandle != null) {\n parts.push(`onlineStore: { urlHandle: ${JSON.stringify(caps.onlineStore.data.urlHandle)} }`);\n }\n return parts.length ? `{ ${parts.join(\", \")} }` : \"\";\n}\n\n/** The definition-level config entries (scope/name/displayName/description/access/capabilities). */\nfunction defConfigLines(def: RemoteDefinition): string {\n const lines: string[] = [];\n if (isMerchant(def.type)) lines.push(` scope: \"merchant\",`);\n if (def.name) lines.push(` name: ${JSON.stringify(def.name)},`);\n if (def.description != null) lines.push(` description: ${JSON.stringify(def.description)},`);\n if (def.displayNameKey != null) lines.push(` displayName: ${JSON.stringify(def.displayNameKey)},`);\n const access = accessSource(def.access);\n if (access) lines.push(` access: ${access},`);\n const caps = capabilitiesSource(def.capabilities);\n if (caps) lines.push(` capabilities: ${caps},`);\n return lines.length ? `\\n${lines.join(\"\\n\")}` : \"\";\n}\n\nfunction defSource(def: RemoteDefinition, typeToIdent: Map<string, string>, warnings: string[]): string {\n const ident = typeToIdent.get(def.type)!;\n const handle = handleOf(def.type);\n const fields = def.fields\n .map((f) => ` ${f.key}: ${fieldCall(f, typeToIdent, warnings)},`)\n .join(\"\\n\");\n return `export const ${ident} = defineMetaobject(${JSON.stringify(handle)}, {${defConfigLines(def)}\n fields: {\n${fields}\n },\n});`;\n}\n\n/** Edges: def.type → set of $app: types it references (for topological ordering). */\nfunction referencedTypes(def: RemoteDefinition): Set<string> {\n const out = new Set<string>();\n for (const f of def.fields) {\n if (f.type === \"metaobject_reference\" || f.type === \"list.metaobject_reference\") {\n const t = refTarget(f);\n if (t) out.add(t);\n }\n }\n return out;\n}\n\n/** Kahn topological sort: referenced definitions emitted before referencing ones. */\nfunction orderDefs(defs: RemoteDefinition[]): RemoteDefinition[] {\n const byType = new Map(defs.map((d) => [d.type, d]));\n const deps = new Map(defs.map((d) => [d.type, referencedTypes(d)]));\n const ordered: RemoteDefinition[] = [];\n const placed = new Set<string>();\n let progress = true;\n while (ordered.length < defs.length && progress) {\n progress = false;\n for (const d of defs) {\n if (placed.has(d.type)) continue;\n const unmet = [...(deps.get(d.type) ?? [])].filter((t) => byType.has(t) && !placed.has(t) && t !== d.type);\n if (unmet.length === 0) {\n ordered.push(d);\n placed.add(d.type);\n progress = true;\n }\n }\n }\n // Any remaining (cycles) appended in input order.\n for (const d of defs) if (!placed.has(d.type)) ordered.push(d);\n return ordered;\n}\n\n/**\n * Generate `schema.ts` source (using `defineMetaobject`/`m`) from remote definitions.\n * Definitions are emitted in dependency order so `m.ref(...)` points at a declared const.\n * Unmapped types/validations become `// TODO: unmapped …` and are logged via console.warn.\n */\nexport function generateSchemaSource(defs: RemoteDefinition[]): string {\n const ordered = orderDefs(defs);\n const typeToIdent = new Map(ordered.map((d) => [d.type, identOf(d.type)]));\n const warnings: string[] = [];\n const blocks = ordered.map((d) => defSource(d, typeToIdent, warnings));\n const idents = ordered.map((d) => typeToIdent.get(d.type)!);\n const header = `import { defineMetaobject, m } from \"@fmaplabs/meta-manifest\";`;\n const body = blocks.join(\"\\n\\n\");\n const footer = `export const schemas = [${idents.join(\", \")}];`;\n for (const w of warnings) console.warn(`[meta-manifest] codegen: ${w}`);\n return `${header}\\n\\n${body}\\n\\n${footer}\\n`;\n}\n","import type { FieldValidation } from \"../fields/base\";\nimport type { RemoteAccess, RemoteCapabilities, RemoteDefinition, RemoteField } from \"./normalize\";\n\n/** Definition-level metadata that `updateDefinition` reconciles. */\nexport type DefinitionChange = \"name\" | \"description\" | \"displayNameKey\" | \"access\" | \"capabilities\";\n\nexport type DiffOp =\n | { kind: \"createDefinition\"; type: string; definition: RemoteDefinition }\n | { kind: \"updateDefinition\"; type: string; changes: DefinitionChange[]; destructive?: true }\n | { kind: \"addField\"; type: string; field: RemoteField }\n | { kind: \"updateField\"; type: string; key: string; changes: Partial<RemoteField> }\n | { kind: \"changeFieldType\"; type: string; key: string; from: string; to: string; destructive: true }\n | { kind: \"removeField\"; type: string; key: string; destructive: true };\n\nfunction sameValidations(a: FieldValidation[], b: FieldValidation[]): boolean {\n const norm = (v: FieldValidation[]) => JSON.stringify([...v].sort((x, y) => x.name.localeCompare(y.name)));\n return norm(a) === norm(b);\n}\n\nconst CAP_KEYS = [\"publishable\", \"translatable\", \"renderable\", \"onlineStore\"] as const;\n\n/** Access changed only where the local side declares a value (undeclared = unmanaged). [design §8] */\nfunction accessChanged(local: RemoteAccess, remote: RemoteAccess | undefined): boolean {\n for (const key of [\"admin\", \"storefront\", \"customerAccount\"] as const) {\n const lv = local[key];\n if (lv != null && remote?.[key] !== lv) return true;\n }\n return false;\n}\n\n/**\n * A capability differs when its `enabled` flag differs (compared for every\n * capability present locally) or a locally-declared `data` key differs. Capabilities\n * absent locally are unmanaged and skipped; `onlineStore` is always present locally\n * (absence = disabled), so it is always compared. [design §8]\n */\nfunction capabilitiesChanged(local: RemoteCapabilities, remote: RemoteCapabilities | undefined): boolean {\n for (const key of CAP_KEYS) {\n const lc = local[key];\n if (!lc) continue;\n const rc = remote?.[key];\n if ((rc?.enabled ?? false) !== lc.enabled) return true;\n const ldata = (lc as { data?: Record<string, string> }).data;\n if (ldata) {\n const rdata = (rc as { data?: Record<string, unknown> } | undefined)?.data;\n for (const [k, v] of Object.entries(ldata)) {\n if (v != null && rdata?.[k] !== v) return true;\n }\n }\n }\n return false;\n}\n\n/** Disabling online-store rendering removes live pages, so it is gated destructive. [design §8] */\nfunction disablesOnlineStore(local: RemoteCapabilities, remote: RemoteCapabilities | undefined): boolean {\n return local.onlineStore?.enabled === false && remote?.onlineStore?.enabled === true;\n}\n\n/** The changed definition-level metadata fields (empty when nothing drifted). */\nfunction definitionChanges(local: RemoteDefinition, remote: RemoteDefinition): DefinitionChange[] {\n const changes: DefinitionChange[] = [];\n if (local.name != null && local.name !== remote.name) changes.push(\"name\");\n if (local.description != null && local.description !== remote.description) changes.push(\"description\");\n if (local.displayNameKey != null && local.displayNameKey !== remote.displayNameKey) changes.push(\"displayNameKey\");\n if (local.access && accessChanged(local.access, remote.access)) changes.push(\"access\");\n if (local.capabilities && capabilitiesChanged(local.capabilities, remote.capabilities)) changes.push(\"capabilities\");\n return changes;\n}\n\nexport function diff(local: RemoteDefinition[], remote: RemoteDefinition[]): DiffOp[] {\n const ops: DiffOp[] = [];\n const remoteByType = new Map(remote.map((d) => [d.type, d]));\n\n for (const localDef of local) {\n const remoteDef = remoteByType.get(localDef.type);\n if (!remoteDef) {\n ops.push({ kind: \"createDefinition\", type: localDef.type, definition: localDef });\n continue;\n }\n const remoteFields = new Map(remoteDef.fields.map((f) => [f.key, f]));\n const localKeys = new Set(localDef.fields.map((f) => f.key));\n\n for (const lf of localDef.fields) {\n const rf = remoteFields.get(lf.key);\n if (!rf) {\n ops.push({ kind: \"addField\", type: localDef.type, field: lf });\n continue;\n }\n if (rf.type !== lf.type) {\n ops.push({ kind: \"changeFieldType\", type: localDef.type, key: lf.key, from: rf.type, to: lf.type, destructive: true });\n continue;\n }\n const changes: Partial<RemoteField> = {};\n if (rf.required !== lf.required) changes.required = lf.required;\n if (rf.filterable !== lf.filterable) changes.filterable = lf.filterable;\n if (!sameValidations(rf.validations, lf.validations)) changes.validations = lf.validations;\n if (Object.keys(changes).length) {\n ops.push({ kind: \"updateField\", type: localDef.type, key: lf.key, changes });\n }\n }\n\n for (const rf of remoteDef.fields) {\n if (!localKeys.has(rf.key)) {\n ops.push({ kind: \"removeField\", type: localDef.type, key: rf.key, destructive: true });\n }\n }\n\n const metaChanges = definitionChanges(localDef, remoteDef);\n if (metaChanges.length) {\n const destructive = localDef.capabilities\n ? disablesOnlineStore(localDef.capabilities, remoteDef.capabilities)\n : false;\n ops.push({\n kind: \"updateDefinition\",\n type: localDef.type,\n changes: metaChanges,\n ...(destructive ? { destructive: true as const } : {}),\n });\n }\n }\n\n return ops;\n}\n","import type { MetaobjectSchema } from \"../define\";\nimport type { FieldMap } from \"../infer\";\nimport type { FieldValidation } from \"../fields/base\";\nimport type { CapabilitiesInput, MetaobjectDefinitionInput } from \"../definition-input\";\n\nexport interface RemoteAccess {\n admin?: string;\n storefront?: string;\n customerAccount?: string;\n}\n/** Normalized capability comparison shape. `enabled` is compared for every capability\n * present locally; `data` keys are compared only when locally declared. [design §8] */\nexport interface RemoteRenderable {\n enabled: boolean;\n data?: { metaTitleKey?: string; metaDescriptionKey?: string };\n}\nexport interface RemoteOnlineStore {\n enabled: boolean;\n data?: { urlHandle?: string };\n}\nexport interface RemoteCapabilities {\n publishable?: { enabled: boolean };\n translatable?: { enabled: boolean };\n renderable?: RemoteRenderable;\n onlineStore?: RemoteOnlineStore;\n}\nexport interface RemoteField {\n key: string;\n type: string;\n required: boolean;\n filterable: boolean;\n validations: FieldValidation[];\n}\nexport interface RemoteDefinition {\n type: string;\n name?: string;\n description?: string;\n displayNameKey?: string;\n access?: RemoteAccess;\n capabilities?: RemoteCapabilities;\n fields: RemoteField[];\n}\n\n/** Local capabilities: declared ones plus `onlineStore` (absence disables — decision 4). */\nfunction localCapabilities(caps: CapabilitiesInput | undefined): RemoteCapabilities {\n const out: RemoteCapabilities = {};\n if (caps?.publishable) out.publishable = { enabled: caps.publishable.enabled };\n if (caps?.translatable) out.translatable = { enabled: caps.translatable.enabled };\n if (caps?.renderable) {\n out.renderable = { enabled: caps.renderable.enabled };\n if (caps.renderable.data) out.renderable.data = { ...caps.renderable.data };\n }\n out.onlineStore = caps?.onlineStore\n ? { enabled: caps.onlineStore.enabled, data: { urlHandle: caps.onlineStore.data?.urlHandle } }\n : { enabled: false };\n return out;\n}\n\n/** Normalize a (already scope-resolved) definition input to the diff shape. */\nexport function normalizeDefinition(def: MetaobjectDefinitionInput): RemoteDefinition {\n const out: RemoteDefinition = {\n type: def.type,\n name: def.name,\n capabilities: localCapabilities(def.capabilities),\n fields: def.fieldDefinitions.map((f) => ({\n key: f.key,\n type: f.type,\n required: f.required,\n filterable: f.capabilities?.adminFilterable?.enabled ?? false,\n validations: f.validations,\n })),\n };\n if (def.description != null) out.description = def.description;\n if (def.displayNameKey != null) out.displayNameKey = def.displayNameKey;\n if (def.access) out.access = { ...def.access };\n return out;\n}\n\nexport function normalizeLocal<F extends FieldMap>(schema: MetaobjectSchema<F>): RemoteDefinition {\n return normalizeDefinition(schema.toDefinitionInput());\n}\n\nexport interface PulledFieldDefinition {\n key: string;\n type: { name: string } | string;\n required: boolean;\n validations?: FieldValidation[];\n capabilities?: { adminFilterable?: { enabled: boolean } | null } | null;\n}\nexport interface PulledAccess {\n admin?: string | null;\n storefront?: string | null;\n customerAccount?: string | null;\n}\nexport interface PulledCapabilities {\n publishable?: { enabled: boolean } | null;\n translatable?: { enabled: boolean } | null;\n renderable?: { enabled: boolean; data?: { metaTitleKey?: string | null; metaDescriptionKey?: string | null } | null } | null;\n onlineStore?: { enabled: boolean; data?: { urlHandle?: string | null } | null } | null;\n}\nexport interface PulledDefinition {\n type: string;\n name?: string;\n description?: string | null;\n displayNameKey?: string | null;\n access?: PulledAccess | null;\n capabilities?: PulledCapabilities | null;\n fieldDefinitions: PulledFieldDefinition[];\n}\n\nfunction remoteAccess(access: PulledAccess | null | undefined): RemoteAccess | undefined {\n if (!access) return undefined;\n const out: RemoteAccess = {};\n if (access.admin != null) out.admin = access.admin;\n if (access.storefront != null) out.storefront = access.storefront;\n if (access.customerAccount != null) out.customerAccount = access.customerAccount;\n return out;\n}\n\nfunction remoteCapabilities(caps: PulledCapabilities | null | undefined): RemoteCapabilities {\n const out: RemoteCapabilities = {};\n if (!caps) return out;\n if (caps.publishable) out.publishable = { enabled: !!caps.publishable.enabled };\n if (caps.translatable) out.translatable = { enabled: !!caps.translatable.enabled };\n if (caps.renderable) {\n out.renderable = { enabled: !!caps.renderable.enabled };\n const d = caps.renderable.data;\n if (d) {\n const data: { metaTitleKey?: string; metaDescriptionKey?: string } = {};\n if (d.metaTitleKey != null) data.metaTitleKey = d.metaTitleKey;\n if (d.metaDescriptionKey != null) data.metaDescriptionKey = d.metaDescriptionKey;\n if (Object.keys(data).length) out.renderable.data = data;\n }\n }\n if (caps.onlineStore) {\n out.onlineStore = { enabled: !!caps.onlineStore.enabled };\n if (caps.onlineStore.data?.urlHandle != null) out.onlineStore.data = { urlHandle: caps.onlineStore.data.urlHandle };\n }\n return out;\n}\n\nexport function normalizeRemote(def: PulledDefinition): RemoteDefinition {\n const out: RemoteDefinition = {\n type: def.type,\n name: def.name,\n capabilities: remoteCapabilities(def.capabilities),\n fields: def.fieldDefinitions.map((f) => ({\n key: f.key,\n type: typeof f.type === \"string\" ? f.type : f.type.name,\n required: f.required,\n filterable: f.capabilities?.adminFilterable?.enabled ?? false,\n validations: f.validations ?? [],\n })),\n };\n if (def.description != null) out.description = def.description;\n if (def.displayNameKey != null) out.displayNameKey = def.displayNameKey;\n const access = remoteAccess(def.access);\n if (access) out.access = access;\n return out;\n}\n","import type { Config } from \"../config\";\nimport type { MetaobjectSchema } from \"../define\";\nimport type { FieldValidation } from \"../fields/base\";\nimport type { FieldDefinitionInput, MetaobjectDefinitionInput } from \"../definition-input\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = MetaobjectSchema<any>;\n\n/** The subset of config that scope resolution reads. */\nexport type ScopeConfig = Pick<Config, \"scope\" | \"merchantEditable\">;\n\nexport type Scope = \"app\" | \"merchant\";\n\nconst APP_PREFIX = \"$app:\";\n\n/** Per-metaobject `scope` → global `config.scope` → `\"app\"`. [design §6] */\nfunction effectiveScope(schema: AnySchema, config: ScopeConfig): Scope {\n return schema.config.scope ?? config.scope ?? \"app\";\n}\n\n/** `$app:<handle>` for app scope, bare `<handle>` for merchant scope. [design §6] */\nfunction effectiveType(handle: string, scope: Scope): string {\n return scope === \"merchant\" ? handle : `${APP_PREFIX}${handle}`;\n}\n\n/**\n * Rewrite a reference-target validation from the canonical `$app:<handle>` form\n * to the referenced metaobject's effective type. Handles both the single\n * `metaobject_definition_type` value and each element of the\n * `metaobject_definition_types` JSON array. [design §6]\n */\nfunction rewriteReference(v: FieldValidation, effByCanonical: Map<string, string>): FieldValidation {\n if (v.name === \"metaobject_definition_type\") {\n const mapped = effByCanonical.get(v.value);\n return mapped ? { ...v, value: mapped } : v;\n }\n if (v.name === \"metaobject_definition_types\") {\n try {\n const parsed: unknown = JSON.parse(v.value);\n if (Array.isArray(parsed)) {\n const rewritten = parsed.map((t) => (typeof t === \"string\" ? (effByCanonical.get(t) ?? t) : t));\n return { ...v, value: JSON.stringify(rewritten) };\n }\n } catch {\n // Leave a malformed validation value untouched.\n }\n }\n return v;\n}\n\n/**\n * Resolve `access.admin` in place for a definition. App scope defaults from\n * `merchantEditable` when not set explicitly; merchant scope omits admin and\n * rejects an explicit admin (invalid on merchant-owned types). [design §6, §10]\n */\nfunction resolveAdmin(out: MetaobjectDefinitionInput, handle: string, scope: Scope, config: ScopeConfig): void {\n const explicitAdmin = out.access?.admin;\n if (scope === \"merchant\") {\n if (explicitAdmin != null) {\n throw new Error(\n `\"${handle}\" is merchant-scoped but sets access.admin; admin access is only valid on app-scoped metaobjects.`,\n );\n }\n return;\n }\n if (explicitAdmin == null) {\n const admin = config.merchantEditable ? \"MERCHANT_READ_WRITE\" : \"MERCHANT_READ\";\n out.access = { ...out.access, admin };\n }\n}\n\n/**\n * Resolve each schema's canonical (`$app:`) definition input into the effective\n * input the sync pipeline pushes: definition `type` and reference targets are\n * rewritten to each metaobject's effective scope, and `access.admin` is resolved.\n * `schema.type` / `m.ref` public values are unchanged. [design §6]\n */\nexport function resolveDefinitions(schemas: AnySchema[], config: ScopeConfig = {}): MetaobjectDefinitionInput[] {\n // Pass 1: canonical `$app:<handle>` → effective type, for reference rewriting.\n const effByCanonical = new Map<string, string>();\n for (const s of schemas) {\n effByCanonical.set(`${APP_PREFIX}${s.handle}`, effectiveType(s.handle, effectiveScope(s, config)));\n }\n\n return schemas.map((s) => {\n const scope = effectiveScope(s, config);\n const base = s.toDefinitionInput();\n const fieldDefinitions: FieldDefinitionInput[] = base.fieldDefinitions.map((f) => ({\n ...f,\n validations: f.validations.map((v) => rewriteReference(v, effByCanonical)),\n }));\n const out: MetaobjectDefinitionInput = { ...base, type: effectiveType(s.handle, scope), fieldDefinitions };\n resolveAdmin(out, s.handle, scope, config);\n return out;\n });\n}\n","import type { AdminGraphQLClient } from \"./client\";\nimport { execute, PULL_DEFINITION_QUERY, LIST_DEFINITIONS_QUERY } from \"./client\";\nimport type { PulledAccess, PulledCapabilities, PulledDefinition, PulledFieldDefinition } from \"./normalize\";\n\n/**\n * A definition read back from the store. `type` is the canonical \"$app:…\" key\n * (the REQUESTED type, re-labeled from the resolved `app--…` form Shopify\n * returns) so `diff()` matches local↔remote; `id` is the GID `push` threads into\n * update ops. [design §6]\n */\nexport interface PulledRemote {\n id: string;\n type: string;\n definition: PulledDefinition;\n}\n\ninterface PullNode {\n id: string;\n name?: string;\n type: string;\n description?: string | null;\n displayNameKey?: string | null;\n access?: PulledAccess | null;\n capabilities?: PulledCapabilities | null;\n fieldDefinitions: PulledFieldDefinition[];\n}\n\n/** Carry the pulled definition-level metadata into the normalize/diff shape. */\nfunction toDefinition(type: string, node: PullNode): PulledDefinition {\n return {\n type,\n name: node.name,\n description: node.description,\n displayNameKey: node.displayNameKey,\n access: node.access,\n capabilities: node.capabilities,\n fieldDefinitions: node.fieldDefinitions,\n };\n}\ninterface PullResponse {\n metaobjectDefinitionByType: PullNode | null;\n}\n\n/**\n * Reads the current metaobject definitions for the given `$app:` types. A type\n * absent from the store is omitted (so `diff()` emits a create). Each present\n * node is re-labeled with the requested type and its `id` is captured. [design §6]\n */\nexport async function pull(client: AdminGraphQLClient, types: readonly string[]): Promise<PulledRemote[]> {\n const out: PulledRemote[] = [];\n for (const type of types) {\n const data = await execute<PullResponse>(client, PULL_DEFINITION_QUERY, { type });\n const node = data.metaobjectDefinitionByType;\n if (!node) continue;\n out.push({ id: node.id, type, definition: toDefinition(type, node) });\n }\n return out;\n}\n\ninterface ListResponse {\n metaobjectDefinitions: {\n nodes: PullNode[];\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n };\n}\n\n/** Convert Shopify's resolved app type (\"app--<id>--<handle>\") to canonical \"$app:<handle>\". */\nfunction toCanonicalType(resolved: string): string | null {\n const m = /^app--\\d+--(.+)$/.exec(resolved);\n return m ? `$app:${m[1]}` : null;\n}\n\n/**\n * Enumerate every metaobject definition in the store. By default returns only\n * app-owned definitions, re-labeled to canonical \"$app:<handle>\" types so they\n * round-trip through `defineMetaobject`. [design §3]\n */\nexport async function pullAll(\n client: AdminGraphQLClient,\n opts: { appOwnedOnly?: boolean } = {},\n): Promise<PulledRemote[]> {\n const appOwnedOnly = opts.appOwnedOnly ?? true;\n const out: PulledRemote[] = [];\n let after: string | null = null;\n do {\n const data: ListResponse = await execute<ListResponse>(client, LIST_DEFINITIONS_QUERY, { after });\n for (const node of data.metaobjectDefinitions.nodes) {\n const canonical = toCanonicalType(node.type);\n if (appOwnedOnly && !canonical) continue;\n const type = canonical ?? node.type;\n out.push({ id: node.id, type, definition: toDefinition(type, node) });\n }\n after = data.metaobjectDefinitions.pageInfo.hasNextPage ? data.metaobjectDefinitions.pageInfo.endCursor : null;\n } while (after !== null);\n return out;\n}\n","import type { FieldValidation } from \"../fields/base\";\nimport type {\n AccessInput,\n CapabilitiesInput,\n FieldCapabilitiesInput,\n FieldDefinitionInput,\n MetaobjectDefinitionInput,\n} from \"../definition-input\";\nimport { CREATE_DEFINITION_MUTATION, execute, UPDATE_DEFINITION_MUTATION, type AdminGraphQLClient } from \"./client\";\nimport type { DefinitionChange, DiffOp } from \"./diff\";\nimport type { PulledRemote } from \"./pull\";\n\nexport interface PushOptions {\n /** Apply destructive ops (`removeField`, `changeFieldType`). Default false. */\n allowDestructive?: boolean;\n}\n\nexport type PushOpResult =\n | { op: DiffOp; status: \"applied\"; id?: string }\n | { op: DiffOp; status: \"skipped\"; reason: \"destructive\" }\n | { op: DiffOp; status: \"blocked\"; reason: string }\n | { op: DiffOp; status: \"failed\"; userErrors: UserError[] };\n\nexport interface PushResult {\n results: PushOpResult[];\n counts: { applied: number; skipped: number; blocked: number; failed: number };\n ok: boolean;\n}\n\ntype UserError = { field?: string[]; message: string; code?: string };\ntype MutationPayload = { metaobjectDefinition?: { id?: string } | null; userErrors: UserError[] };\ntype FieldUpdateInput = {\n key: string;\n name: string;\n description?: string;\n required: boolean;\n validations: FieldValidation[];\n capabilities?: FieldCapabilitiesInput;\n};\ntype FieldOpInput = { create: FieldDefinitionInput } | { update: FieldUpdateInput } | { delete: { key: string } };\n\n/** The `MetaobjectDefinitionUpdateInput` metadata carried by an `updateDefinition` op. */\ninterface DefinitionUpdateInput {\n name?: string;\n description?: string;\n displayNameKey?: string;\n access?: AccessInput;\n capabilities?: CapabilitiesInput;\n}\n\n/**\n * Build the definition-level update payload for the changed fields. `capabilities`\n * always sends an explicit `onlineStore` (absence means disabled — decision 4) so a\n * removed `onlineStore` config reconciles the live capability off. [design §8]\n */\nfunction definitionUpdateFor(def: MetaobjectDefinitionInput, changes: DefinitionChange[]): DefinitionUpdateInput {\n const out: DefinitionUpdateInput = {};\n for (const c of changes) {\n if (c === \"name\") out.name = def.name;\n else if (c === \"description\") out.description = def.description;\n else if (c === \"displayNameKey\") out.displayNameKey = def.displayNameKey;\n else if (c === \"access\") out.access = def.access;\n else if (c === \"capabilities\") {\n const caps = def.capabilities;\n const payload: CapabilitiesInput = {};\n if (caps?.publishable) payload.publishable = caps.publishable;\n if (caps?.translatable) payload.translatable = caps.translatable;\n if (caps?.renderable) payload.renderable = caps.renderable;\n payload.onlineStore = caps?.onlineStore ?? { enabled: false };\n out.capabilities = payload;\n }\n }\n return out;\n}\n\n/** The full local field input for a field, used to build create/update payloads. [design §7] */\nfunction fieldInputFor(\n defByType: Map<string, MetaobjectDefinitionInput>,\n type: string,\n key: string,\n): FieldDefinitionInput | undefined {\n return defByType.get(type)?.fieldDefinitions.find((f) => f.key === key);\n}\n\n/**\n * The `$app:` types a definition references, read from each field's\n * `metaobject_definition_type` (single) and `metaobject_definition_types` (JSON\n * array) validations. These are the dependency edges for create ordering. [design §7]\n */\nexport function referenceEdges(def: MetaobjectDefinitionInput): string[] {\n const out: string[] = [];\n for (const field of def.fieldDefinitions) {\n for (const v of field.validations) {\n if (v.name === \"metaobject_definition_type\") {\n out.push(v.value);\n } else if (v.name === \"metaobject_definition_types\") {\n try {\n const parsed: unknown = JSON.parse(v.value);\n if (Array.isArray(parsed)) for (const t of parsed) if (typeof t === \"string\") out.push(t);\n } catch {\n // Ignore a malformed validation value rather than failing the push.\n }\n }\n }\n }\n return out;\n}\n\n/**\n * Kahn's topological sort: returns create `types` in dependency-first order.\n * Types left unordered are entangled in a reference cycle. [design §7]\n */\nfunction topoSortCreates(types: Set<string>, deps: Map<string, Set<string>>): { ordered: string[]; unordered: string[] } {\n const remaining = new Map<string, number>();\n const dependents = new Map<string, string[]>();\n for (const t of types) {\n const d = deps.get(t) ?? new Set<string>();\n remaining.set(t, d.size);\n for (const dep of d) {\n const list = dependents.get(dep) ?? [];\n list.push(t);\n dependents.set(dep, list);\n }\n }\n\n const queue: string[] = [];\n for (const t of types) if ((remaining.get(t) ?? 0) === 0) queue.push(t);\n\n const ordered: string[] = [];\n while (queue.length) {\n const t = queue.shift() as string;\n ordered.push(t);\n for (const dependent of dependents.get(t) ?? []) {\n const r = (remaining.get(dependent) ?? 0) - 1;\n remaining.set(dependent, r);\n if (r === 0) queue.push(dependent);\n }\n }\n\n const orderedSet = new Set(ordered);\n return { ordered, unordered: [...types].filter((t) => !orderedSet.has(t)) };\n}\n\n/**\n * Applies a `diff()` plan to a store. Safe ops run; destructive ops are skipped\n * unless `allowDestructive`. Per-op `userErrors` become `failed` entries (never\n * thrown); only transport / top-level GraphQL errors propagate. [design §7, §8]\n *\n * Create ops run in dependency order (a referenced type before its referencer);\n * types in a reference cycle are `blocked`. Results are returned in plan order;\n * client calls happen in execution order. [design §7]\n */\nexport async function push(\n client: AdminGraphQLClient,\n plan: DiffOp[],\n sources: { definitions: MetaobjectDefinitionInput[]; remote: PulledRemote[] },\n options?: PushOptions,\n): Promise<PushResult> {\n const allowDestructive = options?.allowDestructive ?? false;\n const defByType = new Map(sources.definitions.map((d) => [d.type, d]));\n const idByType = new Map(sources.remote.map((r) => [r.type, r.id]));\n\n const indexed = plan.map((op, index) => ({ op, index }));\n const createOps = indexed.filter((x) => x.op.kind === \"createDefinition\");\n const otherOps = indexed.filter((x) => x.op.kind !== \"createDefinition\");\n const createTypes = new Set(createOps.map((x) => x.op.type));\n\n // Dependency edges among the types being created this run. Self-edges are\n // excluded: a self-referential definition creates normally rather than being\n // flagged a length-1 cycle (deliberate; the spec does not address it).\n const deps = new Map<string, Set<string>>();\n for (const { op } of createOps) {\n const def = defByType.get(op.type);\n const targets = def ? referenceEdges(def) : [];\n deps.set(op.type, new Set(targets.filter((t) => createTypes.has(t) && t !== op.type)));\n }\n\n const { ordered, unordered } = topoSortCreates(createTypes, deps);\n const orderedSet = new Set(ordered);\n const cyclicTypes = new Set(unordered);\n const createByType = new Map(createOps.map((x) => [x.op.type, x]));\n const execOrder = [\n ...ordered.map((t) => createByType.get(t) as { op: DiffOp; index: number }),\n ...createOps.filter((x) => !orderedSet.has(x.op.type)),\n ...otherOps,\n ];\n\n // Types whose create this run failed or was blocked — their dependents block too.\n const failedTypes = new Set<string>();\n\n async function applyOp(op: DiffOp): Promise<PushOpResult> {\n if (op.kind === \"createDefinition\") {\n if (cyclicTypes.has(op.type)) {\n failedTypes.add(op.type);\n return { op, status: \"blocked\", reason: \"reference cycle — two-pass create deferred\" };\n }\n for (const dep of deps.get(op.type) ?? []) {\n if (failedTypes.has(dep)) {\n failedTypes.add(op.type);\n return { op, status: \"blocked\", reason: `blocked: dependency \"${dep}\" was not created` };\n }\n }\n const def = defByType.get(op.type);\n if (!def) {\n failedTypes.add(op.type);\n return { op, status: \"blocked\", reason: `no definition input for \"${op.type}\"` };\n }\n const data = await execute<{ metaobjectDefinitionCreate: MutationPayload }>(client, CREATE_DEFINITION_MUTATION, { definition: def });\n const payload = data.metaobjectDefinitionCreate;\n if (payload.userErrors.length) {\n failedTypes.add(op.type);\n return { op, status: \"failed\", userErrors: payload.userErrors };\n }\n const id = payload.metaobjectDefinition?.id;\n if (id) idByType.set(op.type, id);\n return { op, status: \"applied\", id };\n }\n\n const destructive = \"destructive\" in op && op.destructive === true;\n if (destructive && !allowDestructive) return { op, status: \"skipped\", reason: \"destructive\" };\n\n if (failedTypes.has(op.type)) return { op, status: \"blocked\", reason: `blocked: definition \"${op.type}\" was not created` };\n\n const id = idByType.get(op.type);\n if (id == null) return { op, status: \"blocked\", reason: `no definition id for \"${op.type}\"` };\n\n let definition: { fieldDefinitions: FieldOpInput[] } | DefinitionUpdateInput;\n if (op.kind === \"updateDefinition\") {\n const def = defByType.get(op.type);\n if (!def) return { op, status: \"blocked\", reason: `no definition input for \"${op.type}\"` };\n definition = definitionUpdateFor(def, op.changes);\n } else {\n const fieldDefinitions = fieldOpsFor(op);\n if (!fieldDefinitions) return { op, status: \"blocked\", reason: `no field input for \"${op.type}\"` };\n definition = { fieldDefinitions };\n }\n\n const data = await execute<{ metaobjectDefinitionUpdate: MutationPayload }>(client, UPDATE_DEFINITION_MUTATION, { id, definition });\n const payload = data.metaobjectDefinitionUpdate;\n if (payload.userErrors.length) return { op, status: \"failed\", userErrors: payload.userErrors };\n return { op, status: \"applied\", id: payload.metaobjectDefinition?.id ?? id };\n }\n\n /** Builds the `fieldDefinitions` tagged-union ops for a field-level diff op. [design §7] */\n function fieldOpsFor(op: DiffOp): FieldOpInput[] | undefined {\n switch (op.kind) {\n case \"addField\": {\n const field = fieldInputFor(defByType, op.type, op.field.key);\n return field ? [{ create: field }] : undefined;\n }\n case \"updateField\": {\n const field = fieldInputFor(defByType, op.type, op.key);\n if (!field) return undefined;\n // `type` is immutable, so the update payload omits it. [design §7]\n const update: FieldUpdateInput = {\n key: field.key,\n name: field.name,\n required: field.required,\n validations: field.validations,\n };\n if (field.description != null) update.description = field.description;\n // Reconcile `adminFilterable` only when the field's filter state drifted. [design §8]\n if (\"filterable\" in op.changes) {\n update.capabilities = { adminFilterable: { enabled: op.changes.filterable ?? false } };\n }\n return [{ update }];\n }\n case \"removeField\":\n return [{ delete: { key: op.key } }];\n case \"changeFieldType\": {\n const field = fieldInputFor(defByType, op.type, op.key);\n return field ? [{ delete: { key: op.key } }, { create: field }] : undefined;\n }\n default:\n return undefined;\n }\n }\n\n // Execute in dependency order; record each result at its original plan index so\n // the returned `results` align with the caller's plan. [design §7]\n const results: PushOpResult[] = new Array(plan.length);\n for (const { op, index } of execOrder) results[index] = await applyOp(op);\n\n const counts = { applied: 0, skipped: 0, blocked: 0, failed: 0 };\n for (const r of results) counts[r.status]++;\n return { results, counts, ok: counts.failed === 0 && counts.blocked === 0 };\n}\n","import type { AdminGraphQLClient, DiffOp, MetaobjectDefinitionInput, PulledRemote, ScopeConfig } from \"../index\";\nimport { diff, normalizeDefinition, normalizeRemote, pull, resolveDefinitions } from \"../index\";\nimport type { AnySchema } from \"../index\";\n\nconst APP_PREFIX = \"$app:\";\n\nexport interface Plan {\n plan: DiffOp[];\n remote: PulledRemote[];\n /** Scope-resolved definition inputs — reused by `push` so payloads use effective types. */\n definitions: MetaobjectDefinitionInput[];\n warnings: string[];\n}\n\n/**\n * `type` is immutable, so flipping a definition's scope makes `pull` look under\n * a new type and orphan the old one. Detect the app→merchant case (the orphan is\n * app-owned, so unambiguously ours) and surface it; migration is manual. [design §13]\n */\nasync function detectScopeFlips(\n client: AdminGraphQLClient,\n definitions: MetaobjectDefinitionInput[],\n plan: DiffOp[],\n): Promise<string[]> {\n const merchant = definitions.filter((d) => !d.type.startsWith(APP_PREFIX));\n if (merchant.length === 0) return [];\n const created = new Set(plan.filter((op) => op.kind === \"createDefinition\").map((op) => op.type));\n const shadows = await pull(client, merchant.map((d) => `${APP_PREFIX}${d.type}`));\n const shadowTypes = new Set(shadows.map((s) => s.type));\n const warnings: string[] = [];\n for (const d of merchant) {\n if (created.has(d.type) && shadowTypes.has(`${APP_PREFIX}${d.type}`)) {\n warnings.push(\n `\"${d.type}\" is merchant-scoped but an app-owned \"${APP_PREFIX}${d.type}\" already exists remotely. ` +\n `Scope changes are not migrated (type is immutable): a new merchant-owned definition will be created and ` +\n `the app-owned one left orphaned. Migrate manually — see docs/SYNC.md.`,\n );\n }\n }\n return warnings;\n}\n\n/** Resolve scope, pull the effective types, normalize, and diff local↔remote. */\nexport async function planFor(\n client: AdminGraphQLClient,\n schemas: AnySchema[],\n config: ScopeConfig = {},\n): Promise<Plan> {\n const definitions = resolveDefinitions(schemas, config);\n const types = definitions.map((d) => d.type);\n const localDefs = definitions.map(normalizeDefinition);\n const remote = await pull(client, types);\n const plan = diff(localDefs, remote.map((r) => normalizeRemote(r.definition)));\n const warnings = await detectScopeFlips(client, definitions, plan);\n return { plan, remote, definitions, warnings };\n}\n","import type { DiffOp, PushOpResult } from \"../index\";\n\nexport function opTarget(op: DiffOp): string {\n if (op.kind === \"addField\") return `${op.type}.${op.field.key}`;\n if (\"key\" in op) return `${op.type}.${op.key}`;\n return op.type;\n}\n\nexport function isDestructive(op: DiffOp): boolean {\n return \"destructive\" in op && op.destructive === true;\n}\n\nexport function describeOp(op: DiffOp): string {\n return `${op.kind}: ${opTarget(op)}${isDestructive(op) ? \" · destructive\" : \"\"}`;\n}\n\nexport function describeResult(r: PushOpResult): string {\n const head = `${r.op.kind}: ${opTarget(r.op)}`;\n switch (r.status) {\n case \"applied\":\n return `✓ applied — ${head}`;\n case \"skipped\":\n return `– skipped (${r.reason}) — ${head}`;\n case \"blocked\":\n return `⚠ blocked (${r.reason}) — ${head}`;\n case \"failed\":\n return `✗ failed (${r.userErrors.map((e) => e.message).join(\"; \")}) — ${head}`;\n }\n}\n","import type { AdminGraphQLClient, DiffOp, ScopeConfig } from \"../index\";\nimport type { AnySchema } from \"../index\";\nimport { planFor } from \"./plan\";\nimport { describeOp } from \"./format\";\n\nexport async function runDiff(args: {\n client: AdminGraphQLClient;\n schemas: AnySchema[];\n config?: ScopeConfig;\n}): Promise<DiffOp[]> {\n const { plan, warnings } = await planFor(args.client, args.schemas, args.config);\n for (const w of warnings) console.warn(`Warning: ${w}`);\n if (plan.length === 0) {\n console.log(\"Everything is in sync — nothing to apply.\");\n } else {\n console.log(`${plan.length} change${plan.length === 1 ? \"\" : \"s\"} would be applied:`);\n for (const op of plan) console.log(` ${describeOp(op)}`);\n }\n return plan;\n}\n","import type { AdminGraphQLClient, PushResult, ScopeConfig } from \"../index\";\nimport type { AnySchema } from \"../index\";\nimport { push } from \"../index\";\nimport { planFor } from \"./plan\";\nimport { describeResult, isDestructive } from \"./format\";\n\nexport async function runPush(args: {\n client: AdminGraphQLClient;\n schemas: AnySchema[];\n config?: ScopeConfig;\n allowDestructive?: boolean;\n}): Promise<PushResult> {\n const { plan, remote, definitions, warnings } = await planFor(args.client, args.schemas, args.config);\n for (const w of warnings) console.warn(`Warning: ${w}`);\n const result = await push(args.client, plan, { definitions, remote }, { allowDestructive: args.allowDestructive });\n\n for (const r of result.results) console.log(` ${describeResult(r)}`);\n console.log(\n `applied ${result.counts.applied} · skipped ${result.counts.skipped} · ` +\n `blocked ${result.counts.blocked} · failed ${result.counts.failed}`,\n );\n if (!args.allowDestructive && plan.some(isDestructive)) {\n console.log(\"Some destructive changes were skipped. Re-run with --allow-destructive to apply them.\");\n }\n return result;\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { AdminGraphQLClient } from \"../index\";\nimport { generateSchemaSource, normalizeRemote, pullAll } from \"../index\";\n\n/** Format source with the user's local prettier if available; otherwise return as-is. */\nasync function maybeFormat(source: string): Promise<string> {\n try {\n const spec = \"prettier\";\n const prettier = await import(spec);\n return await prettier.format(source, { parser: \"typescript\" });\n } catch {\n return source;\n }\n}\n\nexport async function runPull(args: {\n client: AdminGraphQLClient;\n schemaPath: string;\n force?: boolean;\n}): Promise<{ written: string; count: number }> {\n const remote = await pullAll(args.client); // app-owned only\n const defs = remote.map((r) => normalizeRemote(r.definition));\n const source = await maybeFormat(generateSchemaSource(defs));\n\n const abs = resolve(process.cwd(), args.schemaPath);\n if (existsSync(abs) && !args.force) {\n console.warn(`Overwriting existing ${args.schemaPath}.`);\n }\n mkdirSync(dirname(abs), { recursive: true });\n writeFileSync(abs, source);\n console.log(`Wrote ${defs.length} definition${defs.length === 1 ? \"\" : \"s\"} to ${args.schemaPath}.`);\n return { written: abs, count: defs.length };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACcO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0B9B,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6B/B,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAOnC,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAYnC,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,SAA0B,QAAiB;AACrD,UAAM,OAAO;AADuB;AAEpC,SAAK,OAAO;AAAA,EACd;AAAA,EAHsC;AAIxC;AAOA,eAAsB,QACpB,QACA,OACA,WACY;AACZ,QAAM,SAAS,MAAM,OAAO,OAAO,YAAY,EAAE,UAAU,IAAI,MAAS;AACxE,MAAI,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,OAAO,SAAS,IAAI,OAAO,UAAU,MAAM;AACnF,UAAM,IAAI,mBAAmB,0BAA0B,OAAO,MAAM;AAAA,EACtE;AACA,SAAO,OAAO;AAChB;;;AC9GO,IAAM,sBAAsB;AAuB5B,SAAS,eAAe,KAAsB;AACnD,QAAM,IAAI;AACV,aAAW,OAAO,CAAC,QAAQ,eAAe,QAAQ,GAAY;AAC5D,QAAI,CAAC,KAAK,OAAO,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,MAAM,IAAI;AACrD,YAAM,IAAI,MAAM,qCAAqC,GAAG,IAAI;AAAA,IAC9D;AAAA,EACF;AACA,SAAO;AACT;;;ACtBO,SAAS,kBAAkB,MAIX;AACrB,QAAM,UAAU,KAAK,cAAc;AACnC,QAAM,WAAW,WAAW,KAAK,IAAI,cAAc,OAAO;AAC1D,SAAO,OAAO,OAAO,YAAY;AAC/B,QAAI;AACJ,QAAI;AACF,YAAM,MAAM,MAAM,UAAU;AAAA,QAC1B,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,oBAAoB,0BAA0B,KAAK,YAAY;AAAA,QAC1F,MAAM,KAAK,UAAU,EAAE,OAAO,WAAW,SAAS,UAAU,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI,mBAAmB,cAAc,KAAK,IAAI,WAAW,KAAK;AAAA,IACtE;AACA,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,IAAI,mBAAmB,2BAA2B,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,CAAC;AAAA,IAC1G;AACA,WAAO,IAAI,KAAK;AAAA,EAClB;AACF;;;AChCA,uBAAwB;AACxB,kBAA2B;AAD3B;AAMA,IAAM,WAAO,wBAAW,YAAY,GAAG;AAGvC,eAAsB,WAAW,aAAa,2BAA4C;AACxF,QAAM,UAAM,0BAAQ,QAAQ,IAAI,GAAG,UAAU;AAC7C,QAAM,MAAM,MAAM,KAAK,OAA8B,GAAG;AACxD,SAAO,eAAe,IAAI,OAAO;AACnC;AAGA,eAAsB,YAAY,YAA0C;AAC1E,QAAM,UAAM,0BAAQ,QAAQ,IAAI,GAAG,UAAU;AAC7C,QAAM,MAAM,MAAM,KAAK,OAA8B,GAAG;AACxD,MAAI,CAAC,MAAM,QAAQ,IAAI,OAAO,GAAG;AAC/B,UAAM,IAAI,MAAM,kBAAkB,UAAU,oCAAoC;AAAA,EAClF;AACA,SAAO,IAAI;AACb;;;ACvBA,IAAAA,oBAAwB;AAWjB,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAS;AACpD,MAAI;AACF,YAAQ,gBAAY,2BAAQ,KAAK,MAAM,CAAC;AAAA,EAC1C,SAAS,KAAK;AACZ,QAAK,IAA8B,SAAS,SAAU,OAAM;AAAA,EAC9D;AACF;;;ACjBA,qBAAqD;AACrD,IAAAC,oBAA8B;AAE9B,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASxB,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcxB,eAAsB,QAAQ,OAAyB,CAAC,GAAmC;AACzF,QAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,QAAM,UAAoB,CAAC;AAC3B,QAAM,QAAQ,CAAC,KAAa,aAAqB;AAC/C,UAAM,UAAM,wBAAK,KAAK,GAAG;AACzB,YAAI,2BAAW,GAAG,EAAG;AACrB,sCAAU,2BAAQ,GAAG,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3C,sCAAc,KAAK,QAAQ;AAC3B,YAAQ,KAAK,GAAG;AAAA,EAClB;AACA,QAAM,2BAA2B,eAAe;AAChD,QAAM,iBAAiB,eAAe;AACtC,MAAI,QAAQ,QAAQ;AAClB,YAAQ,IAAI,YAAY,QAAQ,KAAK,IAAI,CAAC,EAAE;AAC5C,YAAQ,IAAI,gHAAgH;AAAA,EAC9H,OAAO;AACL,YAAQ,IAAI,uDAAkD;AAAA,EAChE;AACA,SAAO,EAAE,QAAQ;AACnB;;;AC1CA,IAAM,aAAa;AAGnB,SAAS,WAAW,MAAuB;AACzC,SAAO,CAAC,KAAK,WAAW,UAAU;AACpC;AAGA,SAAS,gBAAgB,OAA8B;AACrD,SAAO,MAAM,aAAa,CAAC,kBAAkB,IAAI,CAAC;AACpD;AAGA,IAAM,SAAiC;AAAA,EACrC,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,gBAAgB;AAClB;AAEA,SAAS,SAAS,MAAsB;AACtC,SAAO,KAAK,WAAW,UAAU,IAAI,KAAK,MAAM,WAAW,MAAM,IAAI;AACvE;AAEA,SAAS,QAAQ,MAAsB;AACrC,SAAO,SAAS,IAAI,EACjB,MAAM,eAAe,EACrB,OAAO,OAAO,EACd,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,CAAC,EAC1C,KAAK,EAAE;AACZ;AAEA,SAAS,EAAE,aAAgC,MAAkC;AAC3E,SAAO,YAAY,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AACnD;AAGA,SAAS,UAAU,OAAwC;AACzD,QAAM,SAAS,EAAE,MAAM,aAAa,4BAA4B;AAChE,MAAI,OAAQ,QAAO;AACnB,QAAM,OAAO,EAAE,MAAM,aAAa,6BAA6B;AAC/D,MAAI,MAAM;AACR,QAAI;AACF,YAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,UAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAQ,QAAO,OAAO,IAAI,CAAC,CAAC;AAAA,IAC5D,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,YAAY,SAA2B;AAC9C,SAAO,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,OAAO;AACxD;AAGA,SAAS,cAAc,OAAoB,UAAoB,SAA2B;AACxF,QAAM,IAAc,CAAC;AACrB,MAAI,MAAM,SAAU,GAAE,KAAK,gBAAgB;AAC3C,QAAM,MAAM,CAAC,MAAc,QAAgB;AACzC,UAAM,MAAM,EAAE,MAAM,aAAa,IAAI;AACrC,QAAI,QAAQ,OAAW,GAAE,KAAK,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,EAAE;AAAA,EACxD;AACA,QAAM,MAAM,CAAC,MAAc,QAAgB;AACzC,UAAM,MAAM,EAAE,MAAM,aAAa,IAAI;AACrC,QAAI,QAAQ,OAAW,GAAE,KAAK,GAAG,GAAG,KAAK,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,EAChE;AACA,QAAM,UAAU,CAAC,MAAc,QAAgB;AAC7C,UAAM,MAAM,EAAE,MAAM,aAAa,IAAI;AACrC,QAAI,QAAQ,QAAW;AACrB,UAAI;AACF,UAAE,KAAK,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE;AAAA,MACrD,QAAQ;AACN,iBAAS,KAAK,oBAAoB,IAAI,eAAe,MAAM,GAAG,GAAG;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAGA,MAAI,YAAY,UAAU,YAAY,YAAY;AAChD,QAAI,OAAO,KAAK;AAChB,QAAI,OAAO,KAAK;AAAA,EAClB,OAAO;AACL,QAAI,OAAO,KAAK;AAChB,QAAI,OAAO,KAAK;AAAA,EAClB;AACA,MAAI,SAAS,OAAO;AACpB,UAAQ,WAAW,SAAS;AAC5B,MAAI,iBAAiB,cAAc;AACnC,UAAQ,mBAAmB,gBAAgB;AAC3C,UAAQ,qBAAqB,QAAQ;AACrC,SAAO;AACT;AAEA,SAAS,WAAW,SAAiB,OAAoB,UAAoB,QAAkB,CAAC,GAAW;AACzG,QAAM,MAAM,YAAY,CAAC,GAAG,cAAc,OAAO,UAAU,OAAO,GAAG,GAAG,KAAK,CAAC;AAC9E,SAAO,MAAM,KAAK,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO;AACpD;AAGA,SAAS,UAAU,OAAoB,aAAkC,UAA4B;AACnG,QAAM,OAAO,MAAM;AAEnB,MAAI,SAAS,UAAU;AACrB,UAAM,MAAM,EAAE,MAAM,aAAa,KAAK;AACtC,UAAM,MAAM,EAAE,MAAM,aAAa,KAAK;AACtC,UAAM,IAAI,CAAC,QAAQ,OAAO,OAAO,CAAC,CAAC,IAAI,QAAQ,OAAO,OAAO,CAAC,CAAC,EAAE;AACjE,QAAI,MAAM,SAAU,GAAE,QAAQ,gBAAgB;AAC9C,MAAE,KAAK,GAAG,gBAAgB,KAAK,CAAC;AAChC,QAAI,QAAQ,UAAa,QAAQ,OAAW,UAAS,KAAK,iBAAiB,MAAM,GAAG,mBAAmB;AACvG,WAAO,YAAY,YAAY,CAAC,CAAC;AAAA,EACnC;AAEA,MAAI,SAAS,wBAAwB;AACnC,UAAM,SAAS,UAAU,KAAK;AAC9B,UAAM,QAAQ,SAAS,YAAY,IAAI,MAAM,IAAI;AACjD,QAAI,CAAC,OAAO;AACV,eAAS,KAAK,kCAAkC,MAAM,GAAG,GAAG;AAC5D,aAAO;AAAA,IACT;AACA,UAAM,aAAuB,CAAC;AAC9B,QAAI,MAAM,SAAU,YAAW,KAAK,gBAAgB;AACpD,eAAW,KAAK,GAAG,gBAAgB,KAAK,CAAC;AACzC,UAAM,OAAO,YAAY,UAAU;AACnC,WAAO,OAAO,eAAe,KAAK,KAAK,IAAI,MAAM,eAAe,KAAK;AAAA,EACvE;AAEA,MAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,UAAM,QAAQ,KAAK,MAAM,QAAQ,MAAM;AACvC,UAAM,cAAwB,CAAC;AAC/B,QAAI,MAAM,SAAU,aAAY,KAAK,gBAAgB;AACrD,UAAM,MAAM,EAAE,MAAM,aAAa,UAAU;AAC3C,UAAM,MAAM,EAAE,MAAM,aAAa,UAAU;AAC3C,QAAI,QAAQ,OAAW,aAAY,KAAK,QAAQ,OAAO,GAAG,CAAC,EAAE;AAC7D,QAAI,QAAQ,OAAW,aAAY,KAAK,QAAQ,OAAO,GAAG,CAAC,EAAE;AAC7D,gBAAY,KAAK,GAAG,gBAAgB,KAAK,CAAC;AAC1C,UAAM,WAAW,YAAY,WAAW;AACxC,QAAI;AACJ,QAAI,UAAU,wBAAwB;AACpC,YAAM,SAAS,UAAU,KAAK;AAC9B,YAAM,QAAQ,SAAS,YAAY,IAAI,MAAM,IAAI;AACjD,UAAI,CAAC,OAAO;AACV,iBAAS,KAAK,uCAAuC,MAAM,GAAG,GAAG;AACjE,eAAO;AAAA,MACT;AACA,kBAAY,eAAe,KAAK;AAAA,IAClC,WAAW,OAAO,KAAK,GAAG;AAGxB,kBAAY,WAAW,OAAO,KAAK,GAAG,EAAE,GAAG,OAAO,UAAU,MAAM,GAAG,QAAQ;AAAA,IAC/E,OAAO;AACL,eAAS,KAAK,+BAA+B,KAAK,eAAe,MAAM,GAAG,GAAG;AAC7E,aAAO,2CAA2C,KAAK;AAAA,IACzD;AACA,WAAO,WAAW,UAAU,SAAS,KAAK,QAAQ,MAAM,UAAU,SAAS;AAAA,EAC7E;AAEA,MAAI,OAAO,IAAI,EAAG,QAAO,WAAW,OAAO,IAAI,GAAG,OAAO,UAAU,gBAAgB,KAAK,CAAC;AAEzF,WAAS,KAAK,wBAAwB,IAAI,eAAe,MAAM,GAAG,GAAG;AACrE,SAAO,mCAAmC,IAAI;AAChD;AAGA,SAAS,aAAa,QAA0C;AAC9D,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,QAAkB,CAAC;AACzB,MAAI,OAAO,UAAU,sBAAuB,OAAM,KAAK,8BAA8B;AACrF,MAAI,OAAO,eAAe,cAAe,OAAM,KAAK,2BAA2B;AAC/E,MAAI,OAAO,oBAAoB,OAAQ,OAAM,KAAK,yBAAyB;AAC3E,SAAO,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO;AACpD;AAGA,SAAS,mBAAmB,MAA8C;AACxE,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAkB,CAAC;AACzB,MAAI,KAAK,aAAa,QAAS,OAAM,KAAK,mBAAmB;AAC7D,MAAI,KAAK,cAAc,QAAS,OAAM,KAAK,oBAAoB;AAC/D,MAAI,KAAK,YAAY,SAAS;AAC5B,UAAM,IAAI,KAAK,WAAW;AAC1B,UAAM,SAAmB,CAAC;AAC1B,QAAI,GAAG,gBAAgB,KAAM,QAAO,KAAK,iBAAiB,KAAK,UAAU,EAAE,YAAY,CAAC,EAAE;AAC1F,QAAI,GAAG,sBAAsB,KAAM,QAAO,KAAK,uBAAuB,KAAK,UAAU,EAAE,kBAAkB,CAAC,EAAE;AAC5G,UAAM,KAAK,OAAO,SAAS,iBAAiB,OAAO,KAAK,IAAI,CAAC,OAAO,kBAAkB;AAAA,EACxF;AACA,MAAI,KAAK,aAAa,WAAW,KAAK,YAAY,MAAM,aAAa,MAAM;AACzE,UAAM,KAAK,6BAA6B,KAAK,UAAU,KAAK,YAAY,KAAK,SAAS,CAAC,IAAI;AAAA,EAC7F;AACA,SAAO,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO;AACpD;AAGA,SAAS,eAAe,KAA+B;AACrD,QAAM,QAAkB,CAAC;AACzB,MAAI,WAAW,IAAI,IAAI,EAAG,OAAM,KAAK,sBAAsB;AAC3D,MAAI,IAAI,KAAM,OAAM,KAAK,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG;AAC/D,MAAI,IAAI,eAAe,KAAM,OAAM,KAAK,kBAAkB,KAAK,UAAU,IAAI,WAAW,CAAC,GAAG;AAC5F,MAAI,IAAI,kBAAkB,KAAM,OAAM,KAAK,kBAAkB,KAAK,UAAU,IAAI,cAAc,CAAC,GAAG;AAClG,QAAM,SAAS,aAAa,IAAI,MAAM;AACtC,MAAI,OAAQ,OAAM,KAAK,aAAa,MAAM,GAAG;AAC7C,QAAM,OAAO,mBAAmB,IAAI,YAAY;AAChD,MAAI,KAAM,OAAM,KAAK,mBAAmB,IAAI,GAAG;AAC/C,SAAO,MAAM,SAAS;AAAA,EAAK,MAAM,KAAK,IAAI,CAAC,KAAK;AAClD;AAEA,SAAS,UAAU,KAAuB,aAAkC,UAA4B;AACtG,QAAM,QAAQ,YAAY,IAAI,IAAI,IAAI;AACtC,QAAM,SAAS,SAAS,IAAI,IAAI;AAChC,QAAM,SAAS,IAAI,OAChB,IAAI,CAAC,MAAM,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,QAAQ,CAAC,GAAG,EAClE,KAAK,IAAI;AACZ,SAAO,gBAAgB,KAAK,uBAAuB,KAAK,UAAU,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;AAAA;AAAA,EAElG,MAAM;AAAA;AAAA;AAGR;AAGA,SAAS,gBAAgB,KAAoC;AAC3D,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,KAAK,IAAI,QAAQ;AAC1B,QAAI,EAAE,SAAS,0BAA0B,EAAE,SAAS,6BAA6B;AAC/E,YAAM,IAAI,UAAU,CAAC;AACrB,UAAI,EAAG,KAAI,IAAI,CAAC;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,UAAU,MAA8C;AAC/D,QAAM,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD,QAAM,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAClE,QAAM,UAA8B,CAAC;AACrC,QAAM,SAAS,oBAAI,IAAY;AAC/B,MAAI,WAAW;AACf,SAAO,QAAQ,SAAS,KAAK,UAAU,UAAU;AAC/C,eAAW;AACX,eAAW,KAAK,MAAM;AACpB,UAAI,OAAO,IAAI,EAAE,IAAI,EAAG;AACxB,YAAM,QAAQ,CAAC,GAAI,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,CAAE,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,EAAE,IAAI;AACzG,UAAI,MAAM,WAAW,GAAG;AACtB,gBAAQ,KAAK,CAAC;AACd,eAAO,IAAI,EAAE,IAAI;AACjB,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,aAAW,KAAK,KAAM,KAAI,CAAC,OAAO,IAAI,EAAE,IAAI,EAAG,SAAQ,KAAK,CAAC;AAC7D,SAAO;AACT;AAOO,SAAS,qBAAqB,MAAkC;AACrE,QAAM,UAAU,UAAU,IAAI;AAC9B,QAAM,cAAc,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,QAAM,WAAqB,CAAC;AAC5B,QAAM,SAAS,QAAQ,IAAI,CAAC,MAAM,UAAU,GAAG,aAAa,QAAQ,CAAC;AACrE,QAAM,SAAS,QAAQ,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE,IAAI,CAAE;AAC1D,QAAM,SAAS;AACf,QAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,QAAM,SAAS,2BAA2B,OAAO,KAAK,IAAI,CAAC;AAC3D,aAAW,KAAK,SAAU,SAAQ,KAAK,4BAA4B,CAAC,EAAE;AACtE,SAAO,GAAG,MAAM;AAAA;AAAA,EAAO,IAAI;AAAA;AAAA,EAAO,MAAM;AAAA;AAC1C;;;ACrRA,SAAS,gBAAgB,GAAsB,GAA+B;AAC5E,QAAM,OAAO,CAACC,OAAyB,KAAK,UAAU,CAAC,GAAGA,EAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,CAAC;AACzG,SAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAC3B;AAEA,IAAM,WAAW,CAAC,eAAe,gBAAgB,cAAc,aAAa;AAG5E,SAAS,cAAc,OAAqB,QAA2C;AACrF,aAAW,OAAO,CAAC,SAAS,cAAc,iBAAiB,GAAY;AACrE,UAAM,KAAK,MAAM,GAAG;AACpB,QAAI,MAAM,QAAQ,SAAS,GAAG,MAAM,GAAI,QAAO;AAAA,EACjD;AACA,SAAO;AACT;AAQA,SAAS,oBAAoB,OAA2B,QAAiD;AACvG,aAAW,OAAO,UAAU;AAC1B,UAAM,KAAK,MAAM,GAAG;AACpB,QAAI,CAAC,GAAI;AACT,UAAM,KAAK,SAAS,GAAG;AACvB,SAAK,IAAI,WAAW,WAAW,GAAG,QAAS,QAAO;AAClD,UAAM,QAAS,GAAyC;AACxD,QAAI,OAAO;AACT,YAAM,QAAS,IAAuD;AACtE,iBAAW,CAAC,GAAGA,EAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,YAAIA,MAAK,QAAQ,QAAQ,CAAC,MAAMA,GAAG,QAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,oBAAoB,OAA2B,QAAiD;AACvG,SAAO,MAAM,aAAa,YAAY,SAAS,QAAQ,aAAa,YAAY;AAClF;AAGA,SAAS,kBAAkB,OAAyB,QAA8C;AAChG,QAAM,UAA8B,CAAC;AACrC,MAAI,MAAM,QAAQ,QAAQ,MAAM,SAAS,OAAO,KAAM,SAAQ,KAAK,MAAM;AACzE,MAAI,MAAM,eAAe,QAAQ,MAAM,gBAAgB,OAAO,YAAa,SAAQ,KAAK,aAAa;AACrG,MAAI,MAAM,kBAAkB,QAAQ,MAAM,mBAAmB,OAAO,eAAgB,SAAQ,KAAK,gBAAgB;AACjH,MAAI,MAAM,UAAU,cAAc,MAAM,QAAQ,OAAO,MAAM,EAAG,SAAQ,KAAK,QAAQ;AACrF,MAAI,MAAM,gBAAgB,oBAAoB,MAAM,cAAc,OAAO,YAAY,EAAG,SAAQ,KAAK,cAAc;AACnH,SAAO;AACT;AAEO,SAAS,KAAK,OAA2B,QAAsC;AACpF,QAAM,MAAgB,CAAC;AACvB,QAAM,eAAe,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,aAAW,YAAY,OAAO;AAC5B,UAAM,YAAY,aAAa,IAAI,SAAS,IAAI;AAChD,QAAI,CAAC,WAAW;AACd,UAAI,KAAK,EAAE,MAAM,oBAAoB,MAAM,SAAS,MAAM,YAAY,SAAS,CAAC;AAChF;AAAA,IACF;AACA,UAAM,eAAe,IAAI,IAAI,UAAU,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,UAAM,YAAY,IAAI,IAAI,SAAS,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAE3D,eAAW,MAAM,SAAS,QAAQ;AAChC,YAAM,KAAK,aAAa,IAAI,GAAG,GAAG;AAClC,UAAI,CAAC,IAAI;AACP,YAAI,KAAK,EAAE,MAAM,YAAY,MAAM,SAAS,MAAM,OAAO,GAAG,CAAC;AAC7D;AAAA,MACF;AACA,UAAI,GAAG,SAAS,GAAG,MAAM;AACvB,YAAI,KAAK,EAAE,MAAM,mBAAmB,MAAM,SAAS,MAAM,KAAK,GAAG,KAAK,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM,aAAa,KAAK,CAAC;AACrH;AAAA,MACF;AACA,YAAM,UAAgC,CAAC;AACvC,UAAI,GAAG,aAAa,GAAG,SAAU,SAAQ,WAAW,GAAG;AACvD,UAAI,GAAG,eAAe,GAAG,WAAY,SAAQ,aAAa,GAAG;AAC7D,UAAI,CAAC,gBAAgB,GAAG,aAAa,GAAG,WAAW,EAAG,SAAQ,cAAc,GAAG;AAC/E,UAAI,OAAO,KAAK,OAAO,EAAE,QAAQ;AAC/B,YAAI,KAAK,EAAE,MAAM,eAAe,MAAM,SAAS,MAAM,KAAK,GAAG,KAAK,QAAQ,CAAC;AAAA,MAC7E;AAAA,IACF;AAEA,eAAW,MAAM,UAAU,QAAQ;AACjC,UAAI,CAAC,UAAU,IAAI,GAAG,GAAG,GAAG;AAC1B,YAAI,KAAK,EAAE,MAAM,eAAe,MAAM,SAAS,MAAM,KAAK,GAAG,KAAK,aAAa,KAAK,CAAC;AAAA,MACvF;AAAA,IACF;AAEA,UAAM,cAAc,kBAAkB,UAAU,SAAS;AACzD,QAAI,YAAY,QAAQ;AACtB,YAAM,cAAc,SAAS,eACzB,oBAAoB,SAAS,cAAc,UAAU,YAAY,IACjE;AACJ,UAAI,KAAK;AAAA,QACP,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,QACf,SAAS;AAAA,QACT,GAAI,cAAc,EAAE,aAAa,KAAc,IAAI,CAAC;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;;;AC9EA,SAAS,kBAAkB,MAAyD;AAClF,QAAM,MAA0B,CAAC;AACjC,MAAI,MAAM,YAAa,KAAI,cAAc,EAAE,SAAS,KAAK,YAAY,QAAQ;AAC7E,MAAI,MAAM,aAAc,KAAI,eAAe,EAAE,SAAS,KAAK,aAAa,QAAQ;AAChF,MAAI,MAAM,YAAY;AACpB,QAAI,aAAa,EAAE,SAAS,KAAK,WAAW,QAAQ;AACpD,QAAI,KAAK,WAAW,KAAM,KAAI,WAAW,OAAO,EAAE,GAAG,KAAK,WAAW,KAAK;AAAA,EAC5E;AACA,MAAI,cAAc,MAAM,cACpB,EAAE,SAAS,KAAK,YAAY,SAAS,MAAM,EAAE,WAAW,KAAK,YAAY,MAAM,UAAU,EAAE,IAC3F,EAAE,SAAS,MAAM;AACrB,SAAO;AACT;AAGO,SAAS,oBAAoB,KAAkD;AACpF,QAAM,MAAwB;AAAA,IAC5B,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,cAAc,kBAAkB,IAAI,YAAY;AAAA,IAChD,QAAQ,IAAI,iBAAiB,IAAI,CAAC,OAAO;AAAA,MACvC,KAAK,EAAE;AAAA,MACP,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE,cAAc,iBAAiB,WAAW;AAAA,MACxD,aAAa,EAAE;AAAA,IACjB,EAAE;AAAA,EACJ;AACA,MAAI,IAAI,eAAe,KAAM,KAAI,cAAc,IAAI;AACnD,MAAI,IAAI,kBAAkB,KAAM,KAAI,iBAAiB,IAAI;AACzD,MAAI,IAAI,OAAQ,KAAI,SAAS,EAAE,GAAG,IAAI,OAAO;AAC7C,SAAO;AACT;AAkCA,SAAS,aAAa,QAAmE;AACvF,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,MAAoB,CAAC;AAC3B,MAAI,OAAO,SAAS,KAAM,KAAI,QAAQ,OAAO;AAC7C,MAAI,OAAO,cAAc,KAAM,KAAI,aAAa,OAAO;AACvD,MAAI,OAAO,mBAAmB,KAAM,KAAI,kBAAkB,OAAO;AACjE,SAAO;AACT;AAEA,SAAS,mBAAmB,MAAiE;AAC3F,QAAM,MAA0B,CAAC;AACjC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,YAAa,KAAI,cAAc,EAAE,SAAS,CAAC,CAAC,KAAK,YAAY,QAAQ;AAC9E,MAAI,KAAK,aAAc,KAAI,eAAe,EAAE,SAAS,CAAC,CAAC,KAAK,aAAa,QAAQ;AACjF,MAAI,KAAK,YAAY;AACnB,QAAI,aAAa,EAAE,SAAS,CAAC,CAAC,KAAK,WAAW,QAAQ;AACtD,UAAM,IAAI,KAAK,WAAW;AAC1B,QAAI,GAAG;AACL,YAAM,OAA+D,CAAC;AACtE,UAAI,EAAE,gBAAgB,KAAM,MAAK,eAAe,EAAE;AAClD,UAAI,EAAE,sBAAsB,KAAM,MAAK,qBAAqB,EAAE;AAC9D,UAAI,OAAO,KAAK,IAAI,EAAE,OAAQ,KAAI,WAAW,OAAO;AAAA,IACtD;AAAA,EACF;AACA,MAAI,KAAK,aAAa;AACpB,QAAI,cAAc,EAAE,SAAS,CAAC,CAAC,KAAK,YAAY,QAAQ;AACxD,QAAI,KAAK,YAAY,MAAM,aAAa,KAAM,KAAI,YAAY,OAAO,EAAE,WAAW,KAAK,YAAY,KAAK,UAAU;AAAA,EACpH;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,KAAyC;AACvE,QAAM,MAAwB;AAAA,IAC5B,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,cAAc,mBAAmB,IAAI,YAAY;AAAA,IACjD,QAAQ,IAAI,iBAAiB,IAAI,CAAC,OAAO;AAAA,MACvC,KAAK,EAAE;AAAA,MACP,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO,EAAE,KAAK;AAAA,MACnD,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE,cAAc,iBAAiB,WAAW;AAAA,MACxD,aAAa,EAAE,eAAe,CAAC;AAAA,IACjC,EAAE;AAAA,EACJ;AACA,MAAI,IAAI,eAAe,KAAM,KAAI,cAAc,IAAI;AACnD,MAAI,IAAI,kBAAkB,KAAM,KAAI,iBAAiB,IAAI;AACzD,QAAM,SAAS,aAAa,IAAI,MAAM;AACtC,MAAI,OAAQ,KAAI,SAAS;AACzB,SAAO;AACT;;;AClJA,IAAMC,cAAa;AAGnB,SAAS,eAAe,QAAmB,QAA4B;AACrE,SAAO,OAAO,OAAO,SAAS,OAAO,SAAS;AAChD;AAGA,SAAS,cAAc,QAAgB,OAAsB;AAC3D,SAAO,UAAU,aAAa,SAAS,GAAGA,WAAU,GAAG,MAAM;AAC/D;AAQA,SAAS,iBAAiBC,IAAoB,gBAAsD;AAClG,MAAIA,GAAE,SAAS,8BAA8B;AAC3C,UAAM,SAAS,eAAe,IAAIA,GAAE,KAAK;AACzC,WAAO,SAAS,EAAE,GAAGA,IAAG,OAAO,OAAO,IAAIA;AAAA,EAC5C;AACA,MAAIA,GAAE,SAAS,+BAA+B;AAC5C,QAAI;AACF,YAAM,SAAkB,KAAK,MAAMA,GAAE,KAAK;AAC1C,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,cAAM,YAAY,OAAO,IAAI,CAAC,MAAO,OAAO,MAAM,WAAY,eAAe,IAAI,CAAC,KAAK,IAAK,CAAE;AAC9F,eAAO,EAAE,GAAGA,IAAG,OAAO,KAAK,UAAU,SAAS,EAAE;AAAA,MAClD;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAOA;AACT;AAOA,SAAS,aAAa,KAAgC,QAAgB,OAAc,QAA2B;AAC7G,QAAM,gBAAgB,IAAI,QAAQ;AAClC,MAAI,UAAU,YAAY;AACxB,QAAI,iBAAiB,MAAM;AACzB,YAAM,IAAI;AAAA,QACR,IAAI,MAAM;AAAA,MACZ;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,iBAAiB,MAAM;AACzB,UAAM,QAAQ,OAAO,mBAAmB,wBAAwB;AAChE,QAAI,SAAS,EAAE,GAAG,IAAI,QAAQ,MAAM;AAAA,EACtC;AACF;AAQO,SAAS,mBAAmB,SAAsB,SAAsB,CAAC,GAAgC;AAE9G,QAAM,iBAAiB,oBAAI,IAAoB;AAC/C,aAAW,KAAK,SAAS;AACvB,mBAAe,IAAI,GAAGD,WAAU,GAAG,EAAE,MAAM,IAAI,cAAc,EAAE,QAAQ,eAAe,GAAG,MAAM,CAAC,CAAC;AAAA,EACnG;AAEA,SAAO,QAAQ,IAAI,CAAC,MAAM;AACxB,UAAM,QAAQ,eAAe,GAAG,MAAM;AACtC,UAAM,OAAO,EAAE,kBAAkB;AACjC,UAAM,mBAA2C,KAAK,iBAAiB,IAAI,CAAC,OAAO;AAAA,MACjF,GAAG;AAAA,MACH,aAAa,EAAE,YAAY,IAAI,CAACC,OAAM,iBAAiBA,IAAG,cAAc,CAAC;AAAA,IAC3E,EAAE;AACF,UAAM,MAAiC,EAAE,GAAG,MAAM,MAAM,cAAc,EAAE,QAAQ,KAAK,GAAG,iBAAiB;AACzG,iBAAa,KAAK,EAAE,QAAQ,OAAO,MAAM;AACzC,WAAO;AAAA,EACT,CAAC;AACH;;;ACnEA,SAAS,aAAa,MAAc,MAAkC;AACpE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,gBAAgB,KAAK;AAAA,IACrB,QAAQ,KAAK;AAAA,IACb,cAAc,KAAK;AAAA,IACnB,kBAAkB,KAAK;AAAA,EACzB;AACF;AAUA,eAAsB,KAAK,QAA4B,OAAmD;AACxG,QAAM,MAAsB,CAAC;AAC7B,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,MAAM,QAAsB,QAAQ,uBAAuB,EAAE,KAAK,CAAC;AAChF,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,EAAE,IAAI,KAAK,IAAI,MAAM,YAAY,aAAa,MAAM,IAAI,EAAE,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAUA,SAAS,gBAAgB,UAAiC;AACxD,QAAMC,KAAI,mBAAmB,KAAK,QAAQ;AAC1C,SAAOA,KAAI,QAAQA,GAAE,CAAC,CAAC,KAAK;AAC9B;AAOA,eAAsB,QACpB,QACA,OAAmC,CAAC,GACX;AACzB,QAAM,eAAe,KAAK,gBAAgB;AAC1C,QAAM,MAAsB,CAAC;AAC7B,MAAI,QAAuB;AAC3B,KAAG;AACD,UAAM,OAAqB,MAAM,QAAsB,QAAQ,wBAAwB,EAAE,MAAM,CAAC;AAChG,eAAW,QAAQ,KAAK,sBAAsB,OAAO;AACnD,YAAM,YAAY,gBAAgB,KAAK,IAAI;AAC3C,UAAI,gBAAgB,CAAC,UAAW;AAChC,YAAM,OAAO,aAAa,KAAK;AAC/B,UAAI,KAAK,EAAE,IAAI,KAAK,IAAI,MAAM,YAAY,aAAa,MAAM,IAAI,EAAE,CAAC;AAAA,IACtE;AACA,YAAQ,KAAK,sBAAsB,SAAS,cAAc,KAAK,sBAAsB,SAAS,YAAY;AAAA,EAC5G,SAAS,UAAU;AACnB,SAAO;AACT;;;ACxCA,SAAS,oBAAoB,KAAgC,SAAoD;AAC/G,QAAM,MAA6B,CAAC;AACpC,aAAW,KAAK,SAAS;AACvB,QAAI,MAAM,OAAQ,KAAI,OAAO,IAAI;AAAA,aACxB,MAAM,cAAe,KAAI,cAAc,IAAI;AAAA,aAC3C,MAAM,iBAAkB,KAAI,iBAAiB,IAAI;AAAA,aACjD,MAAM,SAAU,KAAI,SAAS,IAAI;AAAA,aACjC,MAAM,gBAAgB;AAC7B,YAAM,OAAO,IAAI;AACjB,YAAM,UAA6B,CAAC;AACpC,UAAI,MAAM,YAAa,SAAQ,cAAc,KAAK;AAClD,UAAI,MAAM,aAAc,SAAQ,eAAe,KAAK;AACpD,UAAI,MAAM,WAAY,SAAQ,aAAa,KAAK;AAChD,cAAQ,cAAc,MAAM,eAAe,EAAE,SAAS,MAAM;AAC5D,UAAI,eAAe;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,cACP,WACA,MACA,KACkC;AAClC,SAAO,UAAU,IAAI,IAAI,GAAG,iBAAiB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG;AACxE;AAOO,SAAS,eAAe,KAA0C;AACvE,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,IAAI,kBAAkB;AACxC,eAAWC,MAAK,MAAM,aAAa;AACjC,UAAIA,GAAE,SAAS,8BAA8B;AAC3C,YAAI,KAAKA,GAAE,KAAK;AAAA,MAClB,WAAWA,GAAE,SAAS,+BAA+B;AACnD,YAAI;AACF,gBAAM,SAAkB,KAAK,MAAMA,GAAE,KAAK;AAC1C,cAAI,MAAM,QAAQ,MAAM;AAAG,uBAAW,KAAK,OAAQ,KAAI,OAAO,MAAM,SAAU,KAAI,KAAK,CAAC;AAAA;AAAA,QAC1F,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMA,SAAS,gBAAgB,OAAoB,MAA4E;AACvH,QAAM,YAAY,oBAAI,IAAoB;AAC1C,QAAM,aAAa,oBAAI,IAAsB;AAC7C,aAAW,KAAK,OAAO;AACrB,UAAM,IAAI,KAAK,IAAI,CAAC,KAAK,oBAAI,IAAY;AACzC,cAAU,IAAI,GAAG,EAAE,IAAI;AACvB,eAAW,OAAO,GAAG;AACnB,YAAMC,QAAO,WAAW,IAAI,GAAG,KAAK,CAAC;AACrC,MAAAA,MAAK,KAAK,CAAC;AACX,iBAAW,IAAI,KAAKA,KAAI;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,QAAkB,CAAC;AACzB,aAAW,KAAK,MAAO,MAAK,UAAU,IAAI,CAAC,KAAK,OAAO,EAAG,OAAM,KAAK,CAAC;AAEtE,QAAM,UAAoB,CAAC;AAC3B,SAAO,MAAM,QAAQ;AACnB,UAAM,IAAI,MAAM,MAAM;AACtB,YAAQ,KAAK,CAAC;AACd,eAAW,aAAa,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG;AAC/C,YAAM,KAAK,UAAU,IAAI,SAAS,KAAK,KAAK;AAC5C,gBAAU,IAAI,WAAW,CAAC;AAC1B,UAAI,MAAM,EAAG,OAAM,KAAK,SAAS;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,SAAO,EAAE,SAAS,WAAW,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE;AAC5E;AAWA,eAAsB,KACpB,QACA,MACA,SACA,SACqB;AACrB,QAAM,mBAAmB,SAAS,oBAAoB;AACtD,QAAM,YAAY,IAAI,IAAI,QAAQ,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACrE,QAAM,WAAW,IAAI,IAAI,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAElE,QAAM,UAAU,KAAK,IAAI,CAAC,IAAI,WAAW,EAAE,IAAI,MAAM,EAAE;AACvD,QAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,kBAAkB;AACxE,QAAM,WAAW,QAAQ,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,kBAAkB;AACvE,QAAM,cAAc,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAK3D,QAAM,OAAO,oBAAI,IAAyB;AAC1C,aAAW,EAAE,GAAG,KAAK,WAAW;AAC9B,UAAM,MAAM,UAAU,IAAI,GAAG,IAAI;AACjC,UAAM,UAAU,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7C,SAAK,IAAI,GAAG,MAAM,IAAI,IAAI,QAAQ,OAAO,CAAC,MAAM,YAAY,IAAI,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;AAAA,EACvF;AAEA,QAAM,EAAE,SAAS,UAAU,IAAI,gBAAgB,aAAa,IAAI;AAChE,QAAM,aAAa,IAAI,IAAI,OAAO;AAClC,QAAM,cAAc,IAAI,IAAI,SAAS;AACrC,QAAM,eAAe,IAAI,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AACjE,QAAM,YAAY;AAAA,IAChB,GAAG,QAAQ,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC,CAAkC;AAAA,IAC1E,GAAG,UAAU,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,GAAG,IAAI,CAAC;AAAA,IACrD,GAAG;AAAA,EACL;AAGA,QAAM,cAAc,oBAAI,IAAY;AAEpC,iBAAe,QAAQ,IAAmC;AACxD,QAAI,GAAG,SAAS,oBAAoB;AAClC,UAAI,YAAY,IAAI,GAAG,IAAI,GAAG;AAC5B,oBAAY,IAAI,GAAG,IAAI;AACvB,eAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,kDAA6C;AAAA,MACvF;AACA,iBAAW,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG;AACzC,YAAI,YAAY,IAAI,GAAG,GAAG;AACxB,sBAAY,IAAI,GAAG,IAAI;AACvB,iBAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,wBAAwB,GAAG,oBAAoB;AAAA,QACzF;AAAA,MACF;AACA,YAAM,MAAM,UAAU,IAAI,GAAG,IAAI;AACjC,UAAI,CAAC,KAAK;AACR,oBAAY,IAAI,GAAG,IAAI;AACvB,eAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,4BAA4B,GAAG,IAAI,IAAI;AAAA,MACjF;AACA,YAAMC,QAAO,MAAM,QAAyD,QAAQ,4BAA4B,EAAE,YAAY,IAAI,CAAC;AACnI,YAAMC,WAAUD,MAAK;AACrB,UAAIC,SAAQ,WAAW,QAAQ;AAC7B,oBAAY,IAAI,GAAG,IAAI;AACvB,eAAO,EAAE,IAAI,QAAQ,UAAU,YAAYA,SAAQ,WAAW;AAAA,MAChE;AACA,YAAMC,MAAKD,SAAQ,sBAAsB;AACzC,UAAIC,IAAI,UAAS,IAAI,GAAG,MAAMA,GAAE;AAChC,aAAO,EAAE,IAAI,QAAQ,WAAW,IAAAA,IAAG;AAAA,IACrC;AAEA,UAAM,cAAc,iBAAiB,MAAM,GAAG,gBAAgB;AAC9D,QAAI,eAAe,CAAC,iBAAkB,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,cAAc;AAE5F,QAAI,YAAY,IAAI,GAAG,IAAI,EAAG,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,wBAAwB,GAAG,IAAI,oBAAoB;AAEzH,UAAM,KAAK,SAAS,IAAI,GAAG,IAAI;AAC/B,QAAI,MAAM,KAAM,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,yBAAyB,GAAG,IAAI,IAAI;AAE5F,QAAI;AACJ,QAAI,GAAG,SAAS,oBAAoB;AAClC,YAAM,MAAM,UAAU,IAAI,GAAG,IAAI;AACjC,UAAI,CAAC,IAAK,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,4BAA4B,GAAG,IAAI,IAAI;AACzF,mBAAa,oBAAoB,KAAK,GAAG,OAAO;AAAA,IAClD,OAAO;AACL,YAAM,mBAAmB,YAAY,EAAE;AACvC,UAAI,CAAC,iBAAkB,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,uBAAuB,GAAG,IAAI,IAAI;AACjG,mBAAa,EAAE,iBAAiB;AAAA,IAClC;AAEA,UAAM,OAAO,MAAM,QAAyD,QAAQ,4BAA4B,EAAE,IAAI,WAAW,CAAC;AAClI,UAAM,UAAU,KAAK;AACrB,QAAI,QAAQ,WAAW,OAAQ,QAAO,EAAE,IAAI,QAAQ,UAAU,YAAY,QAAQ,WAAW;AAC7F,WAAO,EAAE,IAAI,QAAQ,WAAW,IAAI,QAAQ,sBAAsB,MAAM,GAAG;AAAA,EAC7E;AAGA,WAAS,YAAY,IAAwC;AAC3D,YAAQ,GAAG,MAAM;AAAA,MACf,KAAK,YAAY;AACf,cAAM,QAAQ,cAAc,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG;AAC5D,eAAO,QAAQ,CAAC,EAAE,QAAQ,MAAM,CAAC,IAAI;AAAA,MACvC;AAAA,MACA,KAAK,eAAe;AAClB,cAAM,QAAQ,cAAc,WAAW,GAAG,MAAM,GAAG,GAAG;AACtD,YAAI,CAAC,MAAO,QAAO;AAEnB,cAAM,SAA2B;AAAA,UAC/B,KAAK,MAAM;AAAA,UACX,MAAM,MAAM;AAAA,UACZ,UAAU,MAAM;AAAA,UAChB,aAAa,MAAM;AAAA,QACrB;AACA,YAAI,MAAM,eAAe,KAAM,QAAO,cAAc,MAAM;AAE1D,YAAI,gBAAgB,GAAG,SAAS;AAC9B,iBAAO,eAAe,EAAE,iBAAiB,EAAE,SAAS,GAAG,QAAQ,cAAc,MAAM,EAAE;AAAA,QACvF;AACA,eAAO,CAAC,EAAE,OAAO,CAAC;AAAA,MACpB;AAAA,MACA,KAAK;AACH,eAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC;AAAA,MACrC,KAAK,mBAAmB;AACtB,cAAM,QAAQ,cAAc,WAAW,GAAG,MAAM,GAAG,GAAG;AACtD,eAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,MAAM,CAAC,IAAI;AAAA,MACpE;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAIA,QAAM,UAA0B,IAAI,MAAM,KAAK,MAAM;AACrD,aAAW,EAAE,IAAI,MAAM,KAAK,UAAW,SAAQ,KAAK,IAAI,MAAM,QAAQ,EAAE;AAExE,QAAM,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,EAAE;AAC/D,aAAW,KAAK,QAAS,QAAO,EAAE,MAAM;AACxC,SAAO,EAAE,SAAS,QAAQ,IAAI,OAAO,WAAW,KAAK,OAAO,YAAY,EAAE;AAC5E;;;AC1RA,IAAMC,cAAa;AAenB,eAAe,iBACb,QACA,aACA,MACmB;AACnB,QAAM,WAAW,YAAY,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,WAAWA,WAAU,CAAC;AACzE,MAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AACnC,QAAM,UAAU,IAAI,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,kBAAkB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAChG,QAAM,UAAU,MAAM,KAAK,QAAQ,SAAS,IAAI,CAAC,MAAM,GAAGA,WAAU,GAAG,EAAE,IAAI,EAAE,CAAC;AAChF,QAAM,cAAc,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACtD,QAAM,WAAqB,CAAC;AAC5B,aAAW,KAAK,UAAU;AACxB,QAAI,QAAQ,IAAI,EAAE,IAAI,KAAK,YAAY,IAAI,GAAGA,WAAU,GAAG,EAAE,IAAI,EAAE,GAAG;AACpE,eAAS;AAAA,QACP,IAAI,EAAE,IAAI,0CAA0CA,WAAU,GAAG,EAAE,IAAI;AAAA,MAGzE;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,eAAsB,QACpB,QACA,SACA,SAAsB,CAAC,GACR;AACf,QAAM,cAAc,mBAAmB,SAAS,MAAM;AACtD,QAAM,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,IAAI;AAC3C,QAAM,YAAY,YAAY,IAAI,mBAAmB;AACrD,QAAM,SAAS,MAAM,KAAK,QAAQ,KAAK;AACvC,QAAM,OAAO,KAAK,WAAW,OAAO,IAAI,CAAC,MAAM,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAC7E,QAAM,WAAW,MAAM,iBAAiB,QAAQ,aAAa,IAAI;AACjE,SAAO,EAAE,MAAM,QAAQ,aAAa,SAAS;AAC/C;;;ACrDO,SAAS,SAAS,IAAoB;AAC3C,MAAI,GAAG,SAAS,WAAY,QAAO,GAAG,GAAG,IAAI,IAAI,GAAG,MAAM,GAAG;AAC7D,MAAI,SAAS,GAAI,QAAO,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG;AAC5C,SAAO,GAAG;AACZ;AAEO,SAAS,cAAc,IAAqB;AACjD,SAAO,iBAAiB,MAAM,GAAG,gBAAgB;AACnD;AAEO,SAAS,WAAW,IAAoB;AAC7C,SAAO,GAAG,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,GAAG,cAAc,EAAE,IAAI,sBAAmB,EAAE;AAChF;AAEO,SAAS,eAAe,GAAyB;AACtD,QAAM,OAAO,GAAG,EAAE,GAAG,IAAI,KAAK,SAAS,EAAE,EAAE,CAAC;AAC5C,UAAQ,EAAE,QAAQ;AAAA,IAChB,KAAK;AACH,aAAO,yBAAe,IAAI;AAAA,IAC5B,KAAK;AACH,aAAO,mBAAc,EAAE,MAAM,YAAO,IAAI;AAAA,IAC1C,KAAK;AACH,aAAO,mBAAc,EAAE,MAAM,YAAO,IAAI;AAAA,IAC1C,KAAK;AACH,aAAO,kBAAa,EAAE,WAAW,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,YAAO,IAAI;AAAA,EAChF;AACF;;;ACvBA,eAAsB,QAAQ,MAIR;AACpB,QAAM,EAAE,MAAM,SAAS,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM;AAC/E,aAAW,KAAK,SAAU,SAAQ,KAAK,YAAY,CAAC,EAAE;AACtD,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,IAAI,gDAA2C;AAAA,EACzD,OAAO;AACL,YAAQ,IAAI,GAAG,KAAK,MAAM,UAAU,KAAK,WAAW,IAAI,KAAK,GAAG,oBAAoB;AACpF,eAAW,MAAM,KAAM,SAAQ,IAAI,KAAK,WAAW,EAAE,CAAC,EAAE;AAAA,EAC1D;AACA,SAAO;AACT;;;ACbA,eAAsB,QAAQ,MAKN;AACtB,QAAM,EAAE,MAAM,QAAQ,aAAa,SAAS,IAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM;AACpG,aAAW,KAAK,SAAU,SAAQ,KAAK,YAAY,CAAC,EAAE;AACtD,QAAM,SAAS,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE,aAAa,OAAO,GAAG,EAAE,kBAAkB,KAAK,iBAAiB,CAAC;AAEjH,aAAW,KAAK,OAAO,QAAS,SAAQ,IAAI,KAAK,eAAe,CAAC,CAAC,EAAE;AACpE,UAAQ;AAAA,IACN,WAAW,OAAO,OAAO,OAAO,iBAAc,OAAO,OAAO,OAAO,iBACtD,OAAO,OAAO,OAAO,gBAAa,OAAO,OAAO,MAAM;AAAA,EACrE;AACA,MAAI,CAAC,KAAK,oBAAoB,KAAK,KAAK,aAAa,GAAG;AACtD,YAAQ,IAAI,uFAAuF;AAAA,EACrG;AACA,SAAO;AACT;;;ACzBA,IAAAC,kBAAqD;AACrD,IAAAC,oBAAiC;AAKjC,eAAe,YAAY,QAAiC;AAC1D,MAAI;AACF,UAAM,OAAO;AACb,UAAM,WAAW,MAAM,OAAO;AAC9B,WAAO,MAAM,SAAS,OAAO,QAAQ,EAAE,QAAQ,aAAa,CAAC;AAAA,EAC/D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,QAAQ,MAIkB;AAC9C,QAAM,SAAS,MAAM,QAAQ,KAAK,MAAM;AACxC,QAAM,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,EAAE,UAAU,CAAC;AAC5D,QAAM,SAAS,MAAM,YAAY,qBAAqB,IAAI,CAAC;AAE3D,QAAM,UAAM,2BAAQ,QAAQ,IAAI,GAAG,KAAK,UAAU;AAClD,UAAI,4BAAW,GAAG,KAAK,CAAC,KAAK,OAAO;AAClC,YAAQ,KAAK,wBAAwB,KAAK,UAAU,GAAG;AAAA,EACzD;AACA,qCAAU,2BAAQ,GAAG,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3C,qCAAc,KAAK,MAAM;AACzB,UAAQ,IAAI,SAAS,KAAK,MAAM,cAAc,KAAK,WAAW,IAAI,KAAK,GAAG,OAAO,KAAK,UAAU,GAAG;AACnG,SAAO,EAAE,SAAS,KAAK,OAAO,KAAK,OAAO;AAC5C;;;AjBfO,SAAS,UAAU,MAAsB;AAC9C,QAAM,OAAa,EAAE,kBAAkB,OAAO,OAAO,OAAO,MAAM,MAAM;AACxE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QAAI,MAAM,YAAY,MAAM,KAAM,MAAK,OAAO;AAAA,aACrC,MAAM,sBAAuB,MAAK,mBAAmB;AAAA,aACrD,MAAM,UAAW,MAAK,QAAQ;AAAA,aAC9B,MAAM,WAAY,MAAK,SAAS,KAAK,EAAE,CAAC;AAAA,aACxC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,KAAK,QAAS,MAAK,UAAU;AAAA,EAC/D;AACA,SAAO;AACT;AAEA,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBb,eAAsB,KAAK,MAAiC;AAC1D,QAAM,OAAO,UAAU,IAAI;AAC3B,MAAI,KAAK,QAAQ,CAAC,KAAK,SAAS;AAC9B,YAAQ,IAAI,IAAI;AAChB,WAAO,KAAK,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,EAC5C;AACA,MAAI;AACF,QAAI,KAAK,YAAY,QAAQ;AAC3B,YAAM,QAAQ;AACd,aAAO;AAAA,IACT;AACA,eAAW;AACX,UAAM,SAAS,MAAM,WAAW,KAAK,MAAM;AAC3C,UAAM,SAAS,kBAAkB,MAAM;AACvC,QAAI,KAAK,YAAY,QAAQ;AAC3B,YAAM,QAAQ,EAAE,QAAQ,YAAY,OAAO,QAAQ,OAAO,KAAK,MAAM,CAAC;AACtE,aAAO;AAAA,IACT;AACA,UAAM,UAAU,MAAM,YAAY,OAAO,MAAM;AAC/C,QAAI,KAAK,YAAY,QAAQ;AAC3B,YAAM,QAAQ,EAAE,QAAQ,SAAS,OAAO,CAAC;AACzC,aAAO;AAAA,IACT;AACA,QAAI,KAAK,YAAY,QAAQ;AAC3B,YAAM,SAAS,MAAM,QAAQ,EAAE,QAAQ,SAAS,QAAQ,kBAAkB,KAAK,iBAAiB,CAAC;AACjG,aAAO,OAAO,KAAK,IAAI;AAAA,IACzB;AACA,YAAQ,MAAM,oBAAoB,KAAK,OAAO,EAAE;AAChD,YAAQ,IAAI,IAAI;AAChB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,QAAI,eAAe,mBAAoB,SAAQ,MAAM,0CAA0C;AAAA,QAC1F,SAAQ,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AACnE,WAAO;AAAA,EACT;AACF;AAIA,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,OAAK,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,QAAQ,KAAK,IAAI,CAAC;AAC/D;","names":["import_node_path","import_node_path","v","APP_PREFIX","v","m","v","list","data","payload","id","APP_PREFIX","import_node_fs","import_node_path"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/sync/client.ts","../../src/config.ts","../../src/node/client.ts","../../src/cli/load-config.ts","../../src/cli/load-env.ts","../../src/cli/init.ts","../../src/codegen.ts","../../src/sync/diff.ts","../../src/sync/normalize.ts","../../src/sync/resolve.ts","../../src/sync/pull.ts","../../src/sync/push.ts","../../src/cli/plan.ts","../../src/cli/format.ts","../../src/cli/diff.ts","../../src/cli/push.ts","../../src/cli/pull.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { SyncTransportError } from \"../sync/client\";\nimport { createAdminClient } from \"../node/client\";\nimport { loadConfig, loadSchemas } from \"./load-config\";\nimport { loadDotEnv } from \"./load-env\";\nimport { runInit } from \"./init\";\nimport { runDiff } from \"./diff\";\nimport { runPush } from \"./push\";\nimport { runPull } from \"./pull\";\n\nexport interface Args {\n command?: string;\n config?: string;\n allowDestructive: boolean;\n force: boolean;\n help: boolean;\n}\n\nexport function parseArgs(argv: string[]): Args {\n const args: Args = { allowDestructive: false, force: false, help: false };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--help\" || a === \"-h\") args.help = true;\n else if (a === \"--allow-destructive\") args.allowDestructive = true;\n else if (a === \"--force\") args.force = true;\n else if (a === \"--config\") args.config = argv[++i];\n else if (!a.startsWith(\"-\") && !args.command) args.command = a;\n }\n return args;\n}\n\nconst HELP = `meta-manifest — sync Shopify metaobject definitions\n\nUsage: mm <command> [options]\n\nCommands:\n init Scaffold meta-manifest.config.ts + src/schema.ts\n pull Enumerate remote definitions and write schema source\n diff Show the changes a push would apply\n push Apply local schema to the store\n\nOptions:\n --config <path> Config file (default: meta-manifest.config.ts)\n --allow-destructive Apply destructive changes on push\n --force Overwrite schema on pull without warning\n -h, --help Show this help`;\n\nexport async function main(argv: string[]): Promise<number> {\n const args = parseArgs(argv);\n if (args.help || !args.command) {\n console.log(HELP);\n return args.command ? 0 : args.help ? 0 : 1;\n }\n try {\n if (args.command === \"init\") {\n await runInit();\n return 0;\n }\n loadDotEnv();\n const config = await loadConfig(args.config);\n const client = createAdminClient(config);\n if (args.command === \"pull\") {\n await runPull({ client, schemaPath: config.schema, force: args.force });\n return 0;\n }\n const schemas = await loadSchemas(config.schema);\n if (args.command === \"diff\") {\n await runDiff({ client, schemas, config });\n return 0;\n }\n if (args.command === \"push\") {\n const result = await runPush({ client, schemas, config, allowDestructive: args.allowDestructive });\n return result.ok ? 0 : 2;\n }\n console.error(`Unknown command: ${args.command}`);\n console.log(HELP);\n return 1;\n } catch (err) {\n if (err instanceof SyncTransportError) console.error(`Sync failed: Shopify rejected a request.`);\n else console.error(err instanceof Error ? err.message : String(err));\n return 1;\n }\n}\n\n// Invoked as the bin. Guarded so importing this module in tests (which read\n// `parseArgs`) does not trigger process.exit — vitest sets process.env.VITEST.\nif (process.env.VITEST === undefined) {\n main(process.argv.slice(2)).then((code) => process.exit(code));\n}\n","/**\n * The minimal Admin GraphQL transport the sync adapter depends on. The app\n * supplies a concrete implementation at its edge (wrapping `admin.graphql`),\n * keeping `@fmaplabs/meta-manifest` free of any runtime dependency on a GraphQL\n * client. [design §5]\n */\nexport interface AdminGraphQLClient {\n (query: string, options?: { variables?: Record<string, unknown> }): Promise<{ data?: unknown; errors?: unknown }>;\n}\n\n// GraphQL operation strings, copied verbatim from the schema-validated documents\n// in the design spec §3. Re-validated against Admin API 2026-07 during planning.\n// Do not edit by hand — keep equal to the validated documents (drift guard, §12).\n\nexport const PULL_DEFINITION_QUERY = `query PullMetaobjectDefinition($type: String!) {\n metaobjectDefinitionByType(type: $type) {\n id\n name\n type\n description\n displayNameKey\n fieldDefinitions {\n key\n name\n description\n required\n type { name }\n validations { name value }\n capabilities { adminFilterable { enabled } }\n }\n access { admin storefront customerAccount }\n capabilities {\n publishable { enabled }\n translatable { enabled }\n renderable { enabled data { metaTitleKey metaDescriptionKey } }\n onlineStore { enabled data { urlHandle } }\n }\n }\n}`;\n\nexport const LIST_DEFINITIONS_QUERY = `query ListMetaobjectDefinitions($after: String) {\n metaobjectDefinitions(first: 50, after: $after) {\n nodes {\n id\n name\n type\n description\n displayNameKey\n fieldDefinitions {\n key\n name\n description\n required\n type { name }\n validations { name value }\n capabilities { adminFilterable { enabled } }\n }\n access { admin storefront customerAccount }\n capabilities {\n publishable { enabled }\n translatable { enabled }\n renderable { enabled data { metaTitleKey metaDescriptionKey } }\n onlineStore { enabled data { urlHandle } }\n }\n }\n pageInfo { hasNextPage endCursor }\n }\n}`;\n\nexport const CREATE_DEFINITION_MUTATION = `mutation CreateMetaobjectDefinition($definition: MetaobjectDefinitionCreateInput!) {\n metaobjectDefinitionCreate(definition: $definition) {\n metaobjectDefinition { id type }\n userErrors { field message code }\n }\n}`;\n\nexport const UPDATE_DEFINITION_MUTATION = `mutation UpdateMetaobjectDefinition($id: ID!, $definition: MetaobjectDefinitionUpdateInput!) {\n metaobjectDefinitionUpdate(id: $id, definition: $definition) {\n metaobjectDefinition { id type }\n userErrors { field message code }\n }\n}`;\n\n/**\n * Thrown when a request fails at the transport or top-level GraphQL layer —\n * distinct from per-op `userErrors`, which `push` reports as `failed` rather\n * than throwing. Carries the offending top-level `errors` payload. [design §5]\n */\nexport class SyncTransportError extends Error {\n constructor(message: string, readonly errors: unknown) {\n super(message);\n this.name = \"SyncTransportError\";\n }\n}\n\n/**\n * Runs an operation through the injected client and returns its `data`.\n * A non-empty top-level `errors` payload becomes a `SyncTransportError`;\n * a rejected transport promise propagates unchanged. [design §5]\n */\nexport async function execute<T>(\n client: AdminGraphQLClient,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<T> {\n const result = await client(query, variables ? { variables } : undefined);\n if (Array.isArray(result.errors) ? result.errors.length > 0 : result.errors != null) {\n throw new SyncTransportError(\"GraphQL request failed\", result.errors);\n }\n return result.data as T;\n}\n","export const DEFAULT_API_VERSION = \"2026-07\";\n\nexport interface Config {\n /** e.g. \"my-store.myshopify.com\" */\n shop: string;\n /** Admin API access token; reference via process.env in your config file. */\n accessToken: string;\n /** Admin API version. Defaults to DEFAULT_API_VERSION. */\n apiVersion?: string;\n /** Path to the schema module whose `schemas` export drives diff/push, and pull writes. */\n schema: string;\n /** Scope for all metaobjects, unless overridden per-metaobject. Defaults to \"app\". */\n scope?: \"app\" | \"merchant\";\n /** Default admin access for app-scoped metaobjects: false → merchant_read, true → merchant_read_write. Defaults to false. */\n merchantEditable?: boolean;\n}\n\n/** Identity helper for type inference in `meta-manifest.config.ts`. */\nexport function defineConfig(config: Config): Config {\n return config;\n}\n\n/** Validate a loaded config object, throwing a one-line Error naming the first missing field. */\nexport function validateConfig(raw: unknown): Config {\n const c = raw as Partial<Config> | null | undefined;\n for (const key of [\"shop\", \"accessToken\", \"schema\"] as const) {\n if (!c || typeof c[key] !== \"string\" || c[key] === \"\") {\n throw new Error(`Invalid config: missing or empty \"${key}\".`);\n }\n }\n return c as Config;\n}\n","import type { AdminGraphQLClient } from \"../sync/client\";\nimport { SyncTransportError } from \"../sync/client\";\nimport { DEFAULT_API_VERSION } from \"../config\";\n\n/**\n * Build an AdminGraphQLClient that talks directly to a store using an Admin API\n * access token — the CLI's standalone equivalent of the app's session-based\n * `admin.graphql` wrapper. [design §2]\n */\nexport function createAdminClient(opts: {\n shop: string;\n accessToken: string;\n apiVersion?: string;\n}): AdminGraphQLClient {\n const version = opts.apiVersion ?? DEFAULT_API_VERSION;\n const endpoint = `https://${opts.shop}/admin/api/${version}/graphql.json`;\n return async (query, options) => {\n let res: Response;\n try {\n res = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-Shopify-Access-Token\": opts.accessToken },\n body: JSON.stringify({ query, variables: options?.variables }),\n });\n } catch (cause) {\n throw new SyncTransportError(`Request to ${opts.shop} failed`, cause);\n }\n if (!res.ok) {\n throw new SyncTransportError(`Admin API returned HTTP ${res.status}`, await res.text().catch(() => null));\n }\n return res.json() as Promise<{ data?: unknown; errors?: unknown }>;\n };\n}\n","import { resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { validateConfig } from \"../config\";\nimport type { Config } from \"../config\";\nimport type { AnySchema } from \"../index\";\n\nconst jiti = createJiti(import.meta.url);\n\n/** Load and validate meta-manifest.config.ts (default: ./meta-manifest.config.ts). */\nexport async function loadConfig(configPath = \"meta-manifest.config.ts\"): Promise<Config> {\n const abs = resolve(process.cwd(), configPath);\n const mod = await jiti.import<{ default?: unknown }>(abs);\n return validateConfig(mod.default);\n}\n\n/** Load the `schemas` export from a schema module. */\nexport async function loadSchemas(schemaPath: string): Promise<AnySchema[]> {\n const abs = resolve(process.cwd(), schemaPath);\n const mod = await jiti.import<{ schemas?: unknown }>(abs);\n if (!Array.isArray(mod.schemas)) {\n throw new Error(`Schema module \"${schemaPath}\" must export a \\`schemas\\` array.`);\n }\n return mod.schemas as AnySchema[];\n}\n","import { resolve } from \"node:path\";\n\n/**\n * Load a `.env` file from `cwd` into `process.env`, if one exists. Node does not\n * read `.env` automatically, so the CLI does it here before evaluating the config\n * (which reads secrets like `SHOPIFY_ADMIN_TOKEN` via `process.env`).\n *\n * Variables already present in the real environment win over the file, and a\n * missing `.env` is a silent no-op. Any other error (e.g. a malformed file)\n * surfaces so it isn't hidden.\n */\nexport function loadDotEnv(cwd = process.cwd()): void {\n try {\n process.loadEnvFile(resolve(cwd, \".env\"));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") throw err;\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nconst CONFIG_TEMPLATE = `import { defineConfig } from \"@fmaplabs/meta-manifest\";\n\nexport default defineConfig({\n shop: \"my-store.myshopify.com\",\n accessToken: process.env.SHOPIFY_ADMIN_TOKEN!,\n schema: \"./src/schema.ts\",\n});\n`;\n\nconst SCHEMA_TEMPLATE = `import { defineMetaobject, m } from \"@fmaplabs/meta-manifest\";\n\nexport const Author = defineMetaobject(\"author\", {\n name: \"Author\",\n fields: {\n name: m.text({ required: true, max: 120 }),\n bio: m.multilineText(),\n },\n});\n\nexport const schemas = [Author];\n`;\n\n/** Scaffold config + schema files, never overwriting existing ones. */\nexport async function runInit(opts: { cwd?: string } = {}): Promise<{ created: string[] }> {\n const cwd = opts.cwd ?? process.cwd();\n const created: string[] = [];\n const write = (rel: string, contents: string) => {\n const abs = join(cwd, rel);\n if (existsSync(abs)) return;\n mkdirSync(dirname(abs), { recursive: true });\n writeFileSync(abs, contents);\n created.push(rel);\n };\n write(\"meta-manifest.config.ts\", CONFIG_TEMPLATE);\n write(\"src/schema.ts\", SCHEMA_TEMPLATE);\n if (created.length) {\n console.log(`Created: ${created.join(\", \")}`);\n console.log(\"Next: set SHOPIFY_ADMIN_TOKEN (export it or add it to .env), edit meta-manifest.config.ts, then run `mm diff`.\");\n } else {\n console.log(\"Nothing to do — config and schema already exist.\");\n }\n return { created };\n}\n","import type { RemoteAccess, RemoteCapabilities, RemoteDefinition, RemoteField } from \"./sync/normalize\";\nimport type { FieldValidation } from \"./fields/base\";\n\nconst APP_PREFIX = \"$app:\";\n\n/** A bare (non-`$app:`) type is merchant-scoped. [design §9] */\nfunction isMerchant(type: string): boolean {\n return !type.startsWith(APP_PREFIX);\n}\n\n/** `filterable: true` option entry when the field is used as an admin filter. */\nfunction filterableEntry(field: RemoteField): string[] {\n return field.filterable ? [\"filterable: true\"] : [];\n}\n\n/** Shopify scalar/reference type → m.* builder name (no special construction). */\nconst SIMPLE: Record<string, string> = {\n single_line_text_field: \"text\",\n multi_line_text_field: \"multilineText\",\n number_integer: \"integer\",\n number_decimal: \"decimal\",\n boolean: \"boolean\",\n date: \"date\",\n date_time: \"dateTime\",\n url: \"url\",\n color: \"color\",\n json: \"json\",\n money: \"money\",\n dimension: \"dimension\",\n weight: \"weight\",\n volume: \"volume\",\n product_reference: \"product\",\n variant_reference: \"variant\",\n collection_reference: \"collection\",\n page_reference: \"page\",\n file_reference: \"file\",\n};\n\nfunction handleOf(type: string): string {\n return type.startsWith(APP_PREFIX) ? type.slice(APP_PREFIX.length) : type;\n}\n\nfunction identOf(type: string): string {\n return handleOf(type)\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((p) => p[0].toUpperCase() + p.slice(1))\n .join(\"\");\n}\n\nfunction v(validations: FieldValidation[], name: string): string | undefined {\n return validations.find((x) => x.name === name)?.value;\n}\n\n/** Reference target ($app: type) from a metaobject_reference field's validations. */\nfunction refTarget(field: RemoteField): string | undefined {\n const single = v(field.validations, \"metaobject_definition_type\");\n if (single) return single;\n const many = v(field.validations, \"metaobject_definition_types\");\n if (many) {\n try {\n const arr = JSON.parse(many);\n if (Array.isArray(arr) && arr.length) return String(arr[0]);\n } catch {\n /* fall through */\n }\n }\n return undefined;\n}\n\n/** All reference targets from a mixed_reference field's `metaobject_definition_types` validation. */\nfunction refTargets(field: RemoteField): string[] {\n const many = v(field.validations, \"metaobject_definition_types\");\n if (many) {\n try {\n const arr = JSON.parse(many);\n if (Array.isArray(arr)) return arr.map(String);\n } catch {\n /* fall through */\n }\n }\n const single = v(field.validations, \"metaobject_definition_type\");\n return single ? [single] : [];\n}\n\n/** `[() => Author, () => Publisher]` target-list literal, or undefined if any target is unmapped. */\nfunction mixedTargetsLiteral(field: RemoteField, typeToIdent: Map<string, string>, warnings: string[]): string | undefined {\n const targets = refTargets(field);\n const idents = targets.map((t) => typeToIdent.get(t));\n if (!targets.length || idents.some((i) => !i)) {\n warnings.push(`unresolved mixed reference on field \"${field.key}\"`);\n return undefined;\n }\n return `[${idents.map((i) => `() => ${i}`).join(\", \")}]`;\n}\n\n/** Build the options-object literal source (e.g. `{ required: true, max: 120 }`), or \"\". */\nfunction optsLiteral(entries: string[]): string {\n return entries.length ? `{ ${entries.join(\", \")} }` : \"\";\n}\n\n/** Number/string/JSON-array validation → option entries for scalar builders. */\nfunction scalarEntries(field: RemoteField, warnings: string[], builder: string): string[] {\n const e: string[] = [];\n if (field.required) e.push(\"required: true\");\n const num = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) e.push(`${opt}: ${Number(val)}`);\n };\n const str = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) e.push(`${opt}: ${JSON.stringify(val)}`);\n };\n const jsonArr = (name: string, opt: string) => {\n const val = v(field.validations, name);\n if (val !== undefined) {\n try {\n e.push(`${opt}: ${JSON.stringify(JSON.parse(val))}`);\n } catch {\n warnings.push(`could not parse \"${name}\" on field \"${field.key}\"`);\n }\n }\n };\n // `date`/`date_time` store min/max as ISO date strings, not numbers — emit them as\n // quoted string literals so they round-trip (Number(\"2020-01-01\") is NaN).\n if (builder === \"date\" || builder === \"dateTime\") {\n str(\"min\", \"min\");\n str(\"max\", \"max\");\n } else {\n num(\"min\", \"min\");\n num(\"max\", \"max\");\n }\n str(\"regex\", \"regex\");\n jsonArr(\"choices\", \"choices\");\n num(\"max_precision\", \"maxPrecision\");\n jsonArr(\"allowed_domains\", \"allowedDomains\");\n jsonArr(\"file_type_options\", \"accept\");\n return e;\n}\n\nfunction scalarCall(builder: string, field: RemoteField, warnings: string[], extra: string[] = []): string {\n const lit = optsLiteral([...scalarEntries(field, warnings, builder), ...extra]);\n return lit ? `m.${builder}(${lit})` : `m.${builder}()`;\n}\n\n/** Build the m.* call source for a single field. */\nfunction fieldCall(field: RemoteField, typeToIdent: Map<string, string>, warnings: string[]): string {\n const type = field.type;\n\n if (type === \"rating\") {\n const min = v(field.validations, \"min\");\n const max = v(field.validations, \"max\");\n const e = [`min: ${Number(min ?? 1)}`, `max: ${Number(max ?? 5)}`];\n if (field.required) e.unshift(\"required: true\");\n e.push(...filterableEntry(field));\n if (min === undefined || max === undefined) warnings.push(`rating field \"${field.key}\" missing min/max`);\n return `m.rating(${optsLiteral(e)})`;\n }\n\n if (type === \"metaobject_reference\") {\n const target = refTarget(field);\n const ident = target ? typeToIdent.get(target) : undefined;\n if (!ident) {\n warnings.push(`unresolved reference on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped reference */`;\n }\n const refEntries: string[] = [];\n if (field.required) refEntries.push(\"required: true\");\n refEntries.push(...filterableEntry(field));\n const opts = optsLiteral(refEntries);\n return opts ? `m.ref(() => ${ident}, ${opts})` : `m.ref(() => ${ident})`;\n }\n\n if (type === \"mixed_reference\") {\n const arr = mixedTargetsLiteral(field, typeToIdent, warnings);\n if (!arr) return `m.json() /* TODO: unmapped mixed reference */`;\n const refEntries: string[] = [];\n if (field.required) refEntries.push(\"required: true\");\n refEntries.push(...filterableEntry(field));\n const opts = optsLiteral(refEntries);\n return opts ? `m.mixedRef(${arr}, ${opts})` : `m.mixedRef(${arr})`;\n }\n\n if (type.startsWith(\"list.\")) {\n const inner = type.slice(\"list.\".length);\n const listEntries: string[] = [];\n if (field.required) listEntries.push(\"required: true\");\n const min = v(field.validations, \"list.min\");\n const max = v(field.validations, \"list.max\");\n if (min !== undefined) listEntries.push(`min: ${Number(min)}`);\n if (max !== undefined) listEntries.push(`max: ${Number(max)}`);\n listEntries.push(...filterableEntry(field));\n const listOpts = optsLiteral(listEntries);\n let innerCall: string;\n if (inner === \"metaobject_reference\") {\n const target = refTarget(field);\n const ident = target ? typeToIdent.get(target) : undefined;\n if (!ident) {\n warnings.push(`unresolved list reference on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped list reference */`;\n }\n innerCall = `m.ref(() => ${ident})`;\n } else if (inner === \"mixed_reference\") {\n const arr = mixedTargetsLiteral(field, typeToIdent, warnings);\n if (!arr) return `m.json() /* TODO: unmapped list mixed reference */`;\n innerCall = `m.mixedRef(${arr})`;\n } else if (SIMPLE[inner]) {\n // Inner scalar validations (min/max/regex/…) live on the same field; reuse scalarEntries\n // but drop list.* names (already consumed above).\n innerCall = scalarCall(SIMPLE[inner], { ...field, required: false }, warnings);\n } else {\n warnings.push(`unmapped list element type \"${inner}\" on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped list element ${inner} */`;\n }\n return listOpts ? `m.list(${innerCall}, ${listOpts})` : `m.list(${innerCall})`;\n }\n\n if (SIMPLE[type]) return scalarCall(SIMPLE[type], field, warnings, filterableEntry(field));\n\n warnings.push(`unmapped field type \"${type}\" on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped type ${type} */`;\n}\n\n/** Non-default access options as a config-object literal, or \"\" when all default. [design §9] */\nfunction accessSource(access: RemoteAccess | undefined): string {\n if (!access) return \"\";\n const parts: string[] = [];\n if (access.admin === \"MERCHANT_READ_WRITE\") parts.push(`admin: \"merchant_read_write\"`);\n if (access.storefront === \"PUBLIC_READ\") parts.push(`storefront: \"public_read\"`);\n if (access.customerAccount === \"READ\") parts.push(`customerAccount: \"read\"`);\n return parts.length ? `{ ${parts.join(\", \")} }` : \"\";\n}\n\n/** Enabled capabilities as a config-object literal, or \"\" when none are on. [design §9] */\nfunction capabilitiesSource(caps: RemoteCapabilities | undefined): string {\n if (!caps) return \"\";\n const parts: string[] = [];\n if (caps.publishable?.enabled) parts.push(`publishable: true`);\n if (caps.translatable?.enabled) parts.push(`translatable: true`);\n if (caps.renderable?.enabled) {\n const d = caps.renderable.data;\n const dparts: string[] = [];\n if (d?.metaTitleKey != null) dparts.push(`metaTitleKey: ${JSON.stringify(d.metaTitleKey)}`);\n if (d?.metaDescriptionKey != null) dparts.push(`metaDescriptionKey: ${JSON.stringify(d.metaDescriptionKey)}`);\n parts.push(dparts.length ? `renderable: { ${dparts.join(\", \")} }` : `renderable: true`);\n }\n if (caps.onlineStore?.enabled && caps.onlineStore.data?.urlHandle != null) {\n parts.push(`onlineStore: { urlHandle: ${JSON.stringify(caps.onlineStore.data.urlHandle)} }`);\n }\n return parts.length ? `{ ${parts.join(\", \")} }` : \"\";\n}\n\n/** The definition-level config entries (scope/name/displayName/description/access/capabilities). */\nfunction defConfigLines(def: RemoteDefinition): string {\n const lines: string[] = [];\n if (isMerchant(def.type)) lines.push(` scope: \"merchant\",`);\n if (def.name) lines.push(` name: ${JSON.stringify(def.name)},`);\n if (def.description != null) lines.push(` description: ${JSON.stringify(def.description)},`);\n if (def.displayNameKey != null) lines.push(` displayName: ${JSON.stringify(def.displayNameKey)},`);\n const access = accessSource(def.access);\n if (access) lines.push(` access: ${access},`);\n const caps = capabilitiesSource(def.capabilities);\n if (caps) lines.push(` capabilities: ${caps},`);\n return lines.length ? `\\n${lines.join(\"\\n\")}` : \"\";\n}\n\nfunction defSource(def: RemoteDefinition, typeToIdent: Map<string, string>, warnings: string[]): string {\n const ident = typeToIdent.get(def.type)!;\n const handle = handleOf(def.type);\n const fields = def.fields\n .map((f) => ` ${f.key}: ${fieldCall(f, typeToIdent, warnings)},`)\n .join(\"\\n\");\n return `export const ${ident} = defineMetaobject(${JSON.stringify(handle)}, {${defConfigLines(def)}\n fields: {\n${fields}\n },\n});`;\n}\n\n/** Edges: def.type → set of $app: types it references (for topological ordering). */\nfunction referencedTypes(def: RemoteDefinition): Set<string> {\n const out = new Set<string>();\n for (const f of def.fields) {\n if (f.type === \"metaobject_reference\" || f.type === \"list.metaobject_reference\") {\n const t = refTarget(f);\n if (t) out.add(t);\n } else if (f.type === \"mixed_reference\" || f.type === \"list.mixed_reference\") {\n for (const t of refTargets(f)) out.add(t);\n }\n }\n return out;\n}\n\n/** Kahn topological sort: referenced definitions emitted before referencing ones. */\nfunction orderDefs(defs: RemoteDefinition[]): RemoteDefinition[] {\n const byType = new Map(defs.map((d) => [d.type, d]));\n const deps = new Map(defs.map((d) => [d.type, referencedTypes(d)]));\n const ordered: RemoteDefinition[] = [];\n const placed = new Set<string>();\n let progress = true;\n while (ordered.length < defs.length && progress) {\n progress = false;\n for (const d of defs) {\n if (placed.has(d.type)) continue;\n const unmet = [...(deps.get(d.type) ?? [])].filter((t) => byType.has(t) && !placed.has(t) && t !== d.type);\n if (unmet.length === 0) {\n ordered.push(d);\n placed.add(d.type);\n progress = true;\n }\n }\n }\n // Any remaining (cycles) appended in input order.\n for (const d of defs) if (!placed.has(d.type)) ordered.push(d);\n return ordered;\n}\n\n/**\n * Generate `schema.ts` source (using `defineMetaobject`/`m`) from remote definitions.\n * Definitions are emitted in dependency order so `m.ref(...)` points at a declared const.\n * Unmapped types/validations become `// TODO: unmapped …` and are logged via console.warn.\n */\nexport function generateSchemaSource(defs: RemoteDefinition[]): string {\n const ordered = orderDefs(defs);\n const typeToIdent = new Map(ordered.map((d) => [d.type, identOf(d.type)]));\n const warnings: string[] = [];\n const blocks = ordered.map((d) => defSource(d, typeToIdent, warnings));\n const idents = ordered.map((d) => typeToIdent.get(d.type)!);\n const header = `import { defineMetaobject, m } from \"@fmaplabs/meta-manifest\";`;\n const body = blocks.join(\"\\n\\n\");\n const footer = `export const schemas = [${idents.join(\", \")}];`;\n for (const w of warnings) console.warn(`[meta-manifest] codegen: ${w}`);\n return `${header}\\n\\n${body}\\n\\n${footer}\\n`;\n}\n","import type { FieldValidation } from \"../fields/base\";\nimport type { RemoteAccess, RemoteCapabilities, RemoteDefinition, RemoteField } from \"./normalize\";\n\n/** Definition-level metadata that `updateDefinition` reconciles. */\nexport type DefinitionChange = \"name\" | \"description\" | \"displayNameKey\" | \"access\" | \"capabilities\";\n\nexport type DiffOp =\n | { kind: \"createDefinition\"; type: string; definition: RemoteDefinition }\n | { kind: \"updateDefinition\"; type: string; changes: DefinitionChange[]; destructive?: true }\n | { kind: \"addField\"; type: string; field: RemoteField }\n | { kind: \"updateField\"; type: string; key: string; changes: Partial<RemoteField> }\n | { kind: \"changeFieldType\"; type: string; key: string; from: string; to: string; destructive: true }\n | { kind: \"removeField\"; type: string; key: string; destructive: true };\n\nfunction sameValidations(a: FieldValidation[], b: FieldValidation[]): boolean {\n const norm = (v: FieldValidation[]) => JSON.stringify([...v].sort((x, y) => x.name.localeCompare(y.name)));\n return norm(a) === norm(b);\n}\n\nconst CAP_KEYS = [\"publishable\", \"translatable\", \"renderable\", \"onlineStore\"] as const;\n\n/** Access changed only where the local side declares a value (undeclared = unmanaged). [design §8] */\nfunction accessChanged(local: RemoteAccess, remote: RemoteAccess | undefined): boolean {\n for (const key of [\"admin\", \"storefront\", \"customerAccount\"] as const) {\n const lv = local[key];\n if (lv != null && remote?.[key] !== lv) return true;\n }\n return false;\n}\n\n/**\n * A capability differs when its `enabled` flag differs (compared for every\n * capability present locally) or a locally-declared `data` key differs. Capabilities\n * absent locally are unmanaged and skipped; `onlineStore` is always present locally\n * (absence = disabled), so it is always compared. [design §8]\n */\nfunction capabilitiesChanged(local: RemoteCapabilities, remote: RemoteCapabilities | undefined): boolean {\n for (const key of CAP_KEYS) {\n const lc = local[key];\n if (!lc) continue;\n const rc = remote?.[key];\n if ((rc?.enabled ?? false) !== lc.enabled) return true;\n const ldata = (lc as { data?: Record<string, string> }).data;\n if (ldata) {\n const rdata = (rc as { data?: Record<string, unknown> } | undefined)?.data;\n for (const [k, v] of Object.entries(ldata)) {\n if (v != null && rdata?.[k] !== v) return true;\n }\n }\n }\n return false;\n}\n\n/** Disabling online-store rendering removes live pages, so it is gated destructive. [design §8] */\nfunction disablesOnlineStore(local: RemoteCapabilities, remote: RemoteCapabilities | undefined): boolean {\n return local.onlineStore?.enabled === false && remote?.onlineStore?.enabled === true;\n}\n\n/** The changed definition-level metadata fields (empty when nothing drifted). */\nfunction definitionChanges(local: RemoteDefinition, remote: RemoteDefinition): DefinitionChange[] {\n const changes: DefinitionChange[] = [];\n if (local.name != null && local.name !== remote.name) changes.push(\"name\");\n if (local.description != null && local.description !== remote.description) changes.push(\"description\");\n if (local.displayNameKey != null && local.displayNameKey !== remote.displayNameKey) changes.push(\"displayNameKey\");\n if (local.access && accessChanged(local.access, remote.access)) changes.push(\"access\");\n if (local.capabilities && capabilitiesChanged(local.capabilities, remote.capabilities)) changes.push(\"capabilities\");\n return changes;\n}\n\nexport function diff(local: RemoteDefinition[], remote: RemoteDefinition[]): DiffOp[] {\n const ops: DiffOp[] = [];\n const remoteByType = new Map(remote.map((d) => [d.type, d]));\n\n for (const localDef of local) {\n const remoteDef = remoteByType.get(localDef.type);\n if (!remoteDef) {\n ops.push({ kind: \"createDefinition\", type: localDef.type, definition: localDef });\n continue;\n }\n const remoteFields = new Map(remoteDef.fields.map((f) => [f.key, f]));\n const localKeys = new Set(localDef.fields.map((f) => f.key));\n\n for (const lf of localDef.fields) {\n const rf = remoteFields.get(lf.key);\n if (!rf) {\n ops.push({ kind: \"addField\", type: localDef.type, field: lf });\n continue;\n }\n if (rf.type !== lf.type) {\n ops.push({ kind: \"changeFieldType\", type: localDef.type, key: lf.key, from: rf.type, to: lf.type, destructive: true });\n continue;\n }\n const changes: Partial<RemoteField> = {};\n if (rf.required !== lf.required) changes.required = lf.required;\n if (rf.filterable !== lf.filterable) changes.filterable = lf.filterable;\n if (!sameValidations(rf.validations, lf.validations)) changes.validations = lf.validations;\n if (Object.keys(changes).length) {\n ops.push({ kind: \"updateField\", type: localDef.type, key: lf.key, changes });\n }\n }\n\n for (const rf of remoteDef.fields) {\n if (!localKeys.has(rf.key)) {\n ops.push({ kind: \"removeField\", type: localDef.type, key: rf.key, destructive: true });\n }\n }\n\n const metaChanges = definitionChanges(localDef, remoteDef);\n if (metaChanges.length) {\n const destructive = localDef.capabilities\n ? disablesOnlineStore(localDef.capabilities, remoteDef.capabilities)\n : false;\n ops.push({\n kind: \"updateDefinition\",\n type: localDef.type,\n changes: metaChanges,\n ...(destructive ? { destructive: true as const } : {}),\n });\n }\n }\n\n return ops;\n}\n","import type { MetaobjectSchema } from \"../define\";\nimport type { FieldMap } from \"../infer\";\nimport type { FieldValidation } from \"../fields/base\";\nimport type { CapabilitiesInput, MetaobjectDefinitionInput } from \"../definition-input\";\n\nexport interface RemoteAccess {\n admin?: string;\n storefront?: string;\n customerAccount?: string;\n}\n/** Normalized capability comparison shape. `enabled` is compared for every capability\n * present locally; `data` keys are compared only when locally declared. [design §8] */\nexport interface RemoteRenderable {\n enabled: boolean;\n data?: { metaTitleKey?: string; metaDescriptionKey?: string };\n}\nexport interface RemoteOnlineStore {\n enabled: boolean;\n data?: { urlHandle?: string };\n}\nexport interface RemoteCapabilities {\n publishable?: { enabled: boolean };\n translatable?: { enabled: boolean };\n renderable?: RemoteRenderable;\n onlineStore?: RemoteOnlineStore;\n}\nexport interface RemoteField {\n key: string;\n type: string;\n required: boolean;\n filterable: boolean;\n validations: FieldValidation[];\n}\nexport interface RemoteDefinition {\n type: string;\n name?: string;\n description?: string;\n displayNameKey?: string;\n access?: RemoteAccess;\n capabilities?: RemoteCapabilities;\n fields: RemoteField[];\n}\n\n/** Local capabilities: declared ones plus `onlineStore` (absence disables — decision 4). */\nfunction localCapabilities(caps: CapabilitiesInput | undefined): RemoteCapabilities {\n const out: RemoteCapabilities = {};\n if (caps?.publishable) out.publishable = { enabled: caps.publishable.enabled };\n if (caps?.translatable) out.translatable = { enabled: caps.translatable.enabled };\n if (caps?.renderable) {\n out.renderable = { enabled: caps.renderable.enabled };\n if (caps.renderable.data) out.renderable.data = { ...caps.renderable.data };\n }\n out.onlineStore = caps?.onlineStore\n ? { enabled: caps.onlineStore.enabled, data: { urlHandle: caps.onlineStore.data?.urlHandle } }\n : { enabled: false };\n return out;\n}\n\n/** Normalize a (already scope-resolved) definition input to the diff shape. */\nexport function normalizeDefinition(def: MetaobjectDefinitionInput): RemoteDefinition {\n const out: RemoteDefinition = {\n type: def.type,\n name: def.name,\n capabilities: localCapabilities(def.capabilities),\n fields: def.fieldDefinitions.map((f) => ({\n key: f.key,\n type: f.type,\n required: f.required,\n filterable: f.capabilities?.adminFilterable?.enabled ?? false,\n validations: f.validations,\n })),\n };\n if (def.description != null) out.description = def.description;\n if (def.displayNameKey != null) out.displayNameKey = def.displayNameKey;\n if (def.access) out.access = { ...def.access };\n return out;\n}\n\nexport function normalizeLocal<F extends FieldMap>(schema: MetaobjectSchema<F>): RemoteDefinition {\n return normalizeDefinition(schema.toDefinitionInput());\n}\n\nexport interface PulledFieldDefinition {\n key: string;\n type: { name: string } | string;\n required: boolean;\n validations?: FieldValidation[];\n capabilities?: { adminFilterable?: { enabled: boolean } | null } | null;\n}\nexport interface PulledAccess {\n admin?: string | null;\n storefront?: string | null;\n customerAccount?: string | null;\n}\nexport interface PulledCapabilities {\n publishable?: { enabled: boolean } | null;\n translatable?: { enabled: boolean } | null;\n renderable?: { enabled: boolean; data?: { metaTitleKey?: string | null; metaDescriptionKey?: string | null } | null } | null;\n onlineStore?: { enabled: boolean; data?: { urlHandle?: string | null } | null } | null;\n}\nexport interface PulledDefinition {\n type: string;\n name?: string;\n description?: string | null;\n displayNameKey?: string | null;\n access?: PulledAccess | null;\n capabilities?: PulledCapabilities | null;\n fieldDefinitions: PulledFieldDefinition[];\n}\n\nfunction remoteAccess(access: PulledAccess | null | undefined): RemoteAccess | undefined {\n if (!access) return undefined;\n const out: RemoteAccess = {};\n if (access.admin != null) out.admin = access.admin;\n if (access.storefront != null) out.storefront = access.storefront;\n if (access.customerAccount != null) out.customerAccount = access.customerAccount;\n return out;\n}\n\nfunction remoteCapabilities(caps: PulledCapabilities | null | undefined): RemoteCapabilities {\n const out: RemoteCapabilities = {};\n if (!caps) return out;\n if (caps.publishable) out.publishable = { enabled: !!caps.publishable.enabled };\n if (caps.translatable) out.translatable = { enabled: !!caps.translatable.enabled };\n if (caps.renderable) {\n out.renderable = { enabled: !!caps.renderable.enabled };\n const d = caps.renderable.data;\n if (d) {\n const data: { metaTitleKey?: string; metaDescriptionKey?: string } = {};\n if (d.metaTitleKey != null) data.metaTitleKey = d.metaTitleKey;\n if (d.metaDescriptionKey != null) data.metaDescriptionKey = d.metaDescriptionKey;\n if (Object.keys(data).length) out.renderable.data = data;\n }\n }\n if (caps.onlineStore) {\n out.onlineStore = { enabled: !!caps.onlineStore.enabled };\n if (caps.onlineStore.data?.urlHandle != null) out.onlineStore.data = { urlHandle: caps.onlineStore.data.urlHandle };\n }\n return out;\n}\n\nexport function normalizeRemote(def: PulledDefinition): RemoteDefinition {\n const out: RemoteDefinition = {\n type: def.type,\n name: def.name,\n capabilities: remoteCapabilities(def.capabilities),\n fields: def.fieldDefinitions.map((f) => ({\n key: f.key,\n type: typeof f.type === \"string\" ? f.type : f.type.name,\n required: f.required,\n filterable: f.capabilities?.adminFilterable?.enabled ?? false,\n validations: f.validations ?? [],\n })),\n };\n if (def.description != null) out.description = def.description;\n if (def.displayNameKey != null) out.displayNameKey = def.displayNameKey;\n const access = remoteAccess(def.access);\n if (access) out.access = access;\n return out;\n}\n","import type { Config } from \"../config\";\nimport type { MetaobjectSchema } from \"../define\";\nimport type { FieldValidation } from \"../fields/base\";\nimport type { FieldDefinitionInput, MetaobjectDefinitionInput } from \"../definition-input\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = MetaobjectSchema<any>;\n\n/** The subset of config that scope resolution reads. */\nexport type ScopeConfig = Pick<Config, \"scope\" | \"merchantEditable\">;\n\nexport type Scope = \"app\" | \"merchant\";\n\nconst APP_PREFIX = \"$app:\";\n\n/** Per-metaobject `scope` → global `config.scope` → `\"app\"`. [design §6] */\nfunction effectiveScope(schema: AnySchema, config: ScopeConfig): Scope {\n return schema.config.scope ?? config.scope ?? \"app\";\n}\n\n/** `$app:<handle>` for app scope, bare `<handle>` for merchant scope. [design §6] */\nfunction effectiveType(handle: string, scope: Scope): string {\n return scope === \"merchant\" ? handle : `${APP_PREFIX}${handle}`;\n}\n\n/**\n * Rewrite a reference-target validation from the canonical `$app:<handle>` form\n * to the referenced metaobject's effective type. Handles both the single\n * `metaobject_definition_type` value and each element of the\n * `metaobject_definition_types` JSON array. [design §6]\n */\nfunction rewriteReference(v: FieldValidation, effByCanonical: Map<string, string>): FieldValidation {\n if (v.name === \"metaobject_definition_type\") {\n const mapped = effByCanonical.get(v.value);\n return mapped ? { ...v, value: mapped } : v;\n }\n if (v.name === \"metaobject_definition_types\") {\n try {\n const parsed: unknown = JSON.parse(v.value);\n if (Array.isArray(parsed)) {\n const rewritten = parsed.map((t) => (typeof t === \"string\" ? (effByCanonical.get(t) ?? t) : t));\n return { ...v, value: JSON.stringify(rewritten) };\n }\n } catch {\n // Leave a malformed validation value untouched.\n }\n }\n return v;\n}\n\n/**\n * Resolve `access.admin` in place for a definition. App scope defaults from\n * `merchantEditable` when not set explicitly; merchant scope omits admin and\n * rejects an explicit admin (invalid on merchant-owned types). [design §6, §10]\n */\nfunction resolveAdmin(out: MetaobjectDefinitionInput, handle: string, scope: Scope, config: ScopeConfig): void {\n const explicitAdmin = out.access?.admin;\n if (scope === \"merchant\") {\n if (explicitAdmin != null) {\n throw new Error(\n `\"${handle}\" is merchant-scoped but sets access.admin; admin access is only valid on app-scoped metaobjects.`,\n );\n }\n return;\n }\n if (explicitAdmin == null) {\n const admin = config.merchantEditable ? \"MERCHANT_READ_WRITE\" : \"MERCHANT_READ\";\n out.access = { ...out.access, admin };\n }\n}\n\n/**\n * Resolve each schema's canonical (`$app:`) definition input into the effective\n * input the sync pipeline pushes: definition `type` and reference targets are\n * rewritten to each metaobject's effective scope, and `access.admin` is resolved.\n * `schema.type` / `m.ref` public values are unchanged. [design §6]\n */\nexport function resolveDefinitions(schemas: AnySchema[], config: ScopeConfig = {}): MetaobjectDefinitionInput[] {\n // Pass 1: canonical `$app:<handle>` → effective type, for reference rewriting.\n const effByCanonical = new Map<string, string>();\n for (const s of schemas) {\n effByCanonical.set(`${APP_PREFIX}${s.handle}`, effectiveType(s.handle, effectiveScope(s, config)));\n }\n\n return schemas.map((s) => {\n const scope = effectiveScope(s, config);\n const base = s.toDefinitionInput();\n const fieldDefinitions: FieldDefinitionInput[] = base.fieldDefinitions.map((f) => ({\n ...f,\n validations: f.validations.map((v) => rewriteReference(v, effByCanonical)),\n }));\n const out: MetaobjectDefinitionInput = { ...base, type: effectiveType(s.handle, scope), fieldDefinitions };\n resolveAdmin(out, s.handle, scope, config);\n return out;\n });\n}\n","import type { AdminGraphQLClient } from \"./client\";\nimport { execute, PULL_DEFINITION_QUERY, LIST_DEFINITIONS_QUERY } from \"./client\";\nimport type { PulledAccess, PulledCapabilities, PulledDefinition, PulledFieldDefinition } from \"./normalize\";\n\n/**\n * A definition read back from the store. `type` is the canonical \"$app:…\" key\n * (the REQUESTED type, re-labeled from the resolved `app--…` form Shopify\n * returns) so `diff()` matches local↔remote; `id` is the GID `push` threads into\n * update ops. [design §6]\n */\nexport interface PulledRemote {\n id: string;\n type: string;\n definition: PulledDefinition;\n}\n\ninterface PullNode {\n id: string;\n name?: string;\n type: string;\n description?: string | null;\n displayNameKey?: string | null;\n access?: PulledAccess | null;\n capabilities?: PulledCapabilities | null;\n fieldDefinitions: PulledFieldDefinition[];\n}\n\n/** Carry the pulled definition-level metadata into the normalize/diff shape. */\nfunction toDefinition(type: string, node: PullNode): PulledDefinition {\n return {\n type,\n name: node.name,\n description: node.description,\n displayNameKey: node.displayNameKey,\n access: node.access,\n capabilities: node.capabilities,\n fieldDefinitions: node.fieldDefinitions,\n };\n}\ninterface PullResponse {\n metaobjectDefinitionByType: PullNode | null;\n}\n\n/**\n * Reads the current metaobject definitions for the given `$app:` types. A type\n * absent from the store is omitted (so `diff()` emits a create). Each present\n * node is re-labeled with the requested type and its `id` is captured. [design §6]\n */\nexport async function pull(client: AdminGraphQLClient, types: readonly string[]): Promise<PulledRemote[]> {\n const out: PulledRemote[] = [];\n for (const type of types) {\n const data = await execute<PullResponse>(client, PULL_DEFINITION_QUERY, { type });\n const node = data.metaobjectDefinitionByType;\n if (!node) continue;\n out.push({ id: node.id, type, definition: toDefinition(type, node) });\n }\n return out;\n}\n\ninterface ListResponse {\n metaobjectDefinitions: {\n nodes: PullNode[];\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n };\n}\n\n/** Convert Shopify's resolved app type (\"app--<id>--<handle>\") to canonical \"$app:<handle>\". */\nfunction toCanonicalType(resolved: string): string | null {\n const m = /^app--\\d+--(.+)$/.exec(resolved);\n return m ? `$app:${m[1]}` : null;\n}\n\n/**\n * Enumerate every metaobject definition in the store. By default returns only\n * app-owned definitions, re-labeled to canonical \"$app:<handle>\" types so they\n * round-trip through `defineMetaobject`. [design §3]\n */\nexport async function pullAll(\n client: AdminGraphQLClient,\n opts: { appOwnedOnly?: boolean } = {},\n): Promise<PulledRemote[]> {\n const appOwnedOnly = opts.appOwnedOnly ?? true;\n const out: PulledRemote[] = [];\n let after: string | null = null;\n do {\n const data: ListResponse = await execute<ListResponse>(client, LIST_DEFINITIONS_QUERY, { after });\n for (const node of data.metaobjectDefinitions.nodes) {\n const canonical = toCanonicalType(node.type);\n if (appOwnedOnly && !canonical) continue;\n const type = canonical ?? node.type;\n out.push({ id: node.id, type, definition: toDefinition(type, node) });\n }\n after = data.metaobjectDefinitions.pageInfo.hasNextPage ? data.metaobjectDefinitions.pageInfo.endCursor : null;\n } while (after !== null);\n return out;\n}\n","import type { FieldValidation } from \"../fields/base\";\nimport type {\n AccessInput,\n CapabilitiesInput,\n FieldCapabilitiesInput,\n FieldDefinitionInput,\n MetaobjectDefinitionInput,\n} from \"../definition-input\";\nimport { CREATE_DEFINITION_MUTATION, execute, UPDATE_DEFINITION_MUTATION, type AdminGraphQLClient } from \"./client\";\nimport type { DefinitionChange, DiffOp } from \"./diff\";\nimport type { PulledRemote } from \"./pull\";\n\nexport interface PushOptions {\n /** Apply destructive ops (`removeField`, `changeFieldType`). Default false. */\n allowDestructive?: boolean;\n}\n\nexport type PushOpResult =\n | { op: DiffOp; status: \"applied\"; id?: string }\n | { op: DiffOp; status: \"skipped\"; reason: \"destructive\" }\n | { op: DiffOp; status: \"blocked\"; reason: string }\n | { op: DiffOp; status: \"failed\"; userErrors: UserError[] };\n\nexport interface PushResult {\n results: PushOpResult[];\n counts: { applied: number; skipped: number; blocked: number; failed: number };\n ok: boolean;\n}\n\ntype UserError = { field?: string[]; message: string; code?: string };\ntype MutationPayload = { metaobjectDefinition?: { id?: string } | null; userErrors: UserError[] };\ntype FieldUpdateInput = {\n key: string;\n name: string;\n description?: string;\n required: boolean;\n validations: FieldValidation[];\n capabilities?: FieldCapabilitiesInput;\n};\ntype FieldOpInput = { create: FieldDefinitionInput } | { update: FieldUpdateInput } | { delete: { key: string } };\n\n/** The `MetaobjectDefinitionUpdateInput` metadata carried by an `updateDefinition` op. */\ninterface DefinitionUpdateInput {\n name?: string;\n description?: string;\n displayNameKey?: string;\n access?: AccessInput;\n capabilities?: CapabilitiesInput;\n}\n\n/**\n * Build the definition-level update payload for the changed fields. `capabilities`\n * always sends an explicit `onlineStore` (absence means disabled — decision 4) so a\n * removed `onlineStore` config reconciles the live capability off. [design §8]\n */\nfunction definitionUpdateFor(def: MetaobjectDefinitionInput, changes: DefinitionChange[]): DefinitionUpdateInput {\n const out: DefinitionUpdateInput = {};\n for (const c of changes) {\n if (c === \"name\") out.name = def.name;\n else if (c === \"description\") out.description = def.description;\n else if (c === \"displayNameKey\") out.displayNameKey = def.displayNameKey;\n else if (c === \"access\") out.access = def.access;\n else if (c === \"capabilities\") {\n const caps = def.capabilities;\n const payload: CapabilitiesInput = {};\n if (caps?.publishable) payload.publishable = caps.publishable;\n if (caps?.translatable) payload.translatable = caps.translatable;\n if (caps?.renderable) payload.renderable = caps.renderable;\n payload.onlineStore = caps?.onlineStore ?? { enabled: false };\n out.capabilities = payload;\n }\n }\n return out;\n}\n\n/** The full local field input for a field, used to build create/update payloads. [design §7] */\nfunction fieldInputFor(\n defByType: Map<string, MetaobjectDefinitionInput>,\n type: string,\n key: string,\n): FieldDefinitionInput | undefined {\n return defByType.get(type)?.fieldDefinitions.find((f) => f.key === key);\n}\n\n/**\n * The `$app:` types a single field references, from its `metaobject_definition_type`\n * (single) and `metaobject_definition_types` (JSON array) validations.\n */\nfunction fieldRefTargets(field: FieldDefinitionInput): string[] {\n const out: string[] = [];\n for (const v of field.validations) {\n if (v.name === \"metaobject_definition_type\") {\n out.push(v.value);\n } else if (v.name === \"metaobject_definition_types\") {\n try {\n const parsed: unknown = JSON.parse(v.value);\n if (Array.isArray(parsed)) for (const t of parsed) if (typeof t === \"string\") out.push(t);\n } catch {\n // Ignore a malformed validation value rather than failing the push.\n }\n }\n }\n return out;\n}\n\n/**\n * The `$app:` types a definition references across all its fields. These are the\n * dependency edges for create ordering. [design §7]\n */\nexport function referenceEdges(def: MetaobjectDefinitionInput): string[] {\n return def.fieldDefinitions.flatMap(fieldRefTargets);\n}\n\n/**\n * Split a cyclic definition's fields for two-pass creation: `deferred` fields\n * reference another type *in the cycle* (whose target doesn't exist yet at create\n * time) and are added by a follow-up update; `pass1` fields — scalars, refs to\n * already-created types, and self-references — create with the definition. [design §7]\n */\nfunction splitCyclicFields(\n def: MetaobjectDefinitionInput,\n cyclicTypes: Set<string>,\n): { pass1: FieldDefinitionInput[]; deferred: FieldDefinitionInput[] } {\n const pass1: FieldDefinitionInput[] = [];\n const deferred: FieldDefinitionInput[] = [];\n for (const f of def.fieldDefinitions) {\n const breaksCycle = fieldRefTargets(f).some((t) => cyclicTypes.has(t) && t !== def.type);\n (breaksCycle ? deferred : pass1).push(f);\n }\n return { pass1, deferred };\n}\n\n/**\n * Kahn's topological sort: returns create `types` in dependency-first order.\n * Types left unordered are entangled in a reference cycle. [design §7]\n */\nfunction topoSortCreates(types: Set<string>, deps: Map<string, Set<string>>): { ordered: string[]; unordered: string[] } {\n const remaining = new Map<string, number>();\n const dependents = new Map<string, string[]>();\n for (const t of types) {\n const d = deps.get(t) ?? new Set<string>();\n remaining.set(t, d.size);\n for (const dep of d) {\n const list = dependents.get(dep) ?? [];\n list.push(t);\n dependents.set(dep, list);\n }\n }\n\n const queue: string[] = [];\n for (const t of types) if ((remaining.get(t) ?? 0) === 0) queue.push(t);\n\n const ordered: string[] = [];\n while (queue.length) {\n const t = queue.shift() as string;\n ordered.push(t);\n for (const dependent of dependents.get(t) ?? []) {\n const r = (remaining.get(dependent) ?? 0) - 1;\n remaining.set(dependent, r);\n if (r === 0) queue.push(dependent);\n }\n }\n\n const orderedSet = new Set(ordered);\n return { ordered, unordered: [...types].filter((t) => !orderedSet.has(t)) };\n}\n\n/**\n * Applies a `diff()` plan to a store. Safe ops run; destructive ops are skipped\n * unless `allowDestructive`. Per-op `userErrors` become `failed` entries (never\n * thrown); only transport / top-level GraphQL errors propagate. [design §7, §8]\n *\n * Create ops run in dependency order (a referenced type before its referencer);\n * types entangled in a reference cycle are created two-pass — created with the\n * cycle-breaking ref fields stripped, then updated to add them once every member\n * exists. Results are returned in plan order; client calls happen in execution\n * order. [design §7]\n */\nexport async function push(\n client: AdminGraphQLClient,\n plan: DiffOp[],\n sources: { definitions: MetaobjectDefinitionInput[]; remote: PulledRemote[] },\n options?: PushOptions,\n): Promise<PushResult> {\n const allowDestructive = options?.allowDestructive ?? false;\n const defByType = new Map(sources.definitions.map((d) => [d.type, d]));\n const idByType = new Map(sources.remote.map((r) => [r.type, r.id]));\n\n const indexed = plan.map((op, index) => ({ op, index }));\n const createOps = indexed.filter((x) => x.op.kind === \"createDefinition\");\n const otherOps = indexed.filter((x) => x.op.kind !== \"createDefinition\");\n const createTypes = new Set(createOps.map((x) => x.op.type));\n\n // Dependency edges among the types being created this run. Self-edges are\n // excluded: a self-referential definition creates normally rather than being\n // flagged a length-1 cycle (deliberate; the spec does not address it).\n const deps = new Map<string, Set<string>>();\n for (const { op } of createOps) {\n const def = defByType.get(op.type);\n const targets = def ? referenceEdges(def) : [];\n deps.set(op.type, new Set(targets.filter((t) => createTypes.has(t) && t !== op.type)));\n }\n\n const { ordered, unordered } = topoSortCreates(createTypes, deps);\n const cyclicTypes = new Set(unordered);\n const createByType = new Map(createOps.map((x) => [x.op.type, x]));\n\n // Types whose create this run failed or was blocked — their dependents block too.\n const failedTypes = new Set<string>();\n\n /** Run a `metaobjectDefinitionCreate` for `definition`, recording the new id or failure. */\n async function createDefinition(op: DiffOp, definition: MetaobjectDefinitionInput): Promise<PushOpResult> {\n const data = await execute<{ metaobjectDefinitionCreate: MutationPayload }>(client, CREATE_DEFINITION_MUTATION, { definition });\n const payload = data.metaobjectDefinitionCreate;\n if (payload.userErrors.length) {\n failedTypes.add(op.type);\n return { op, status: \"failed\", userErrors: payload.userErrors };\n }\n const id = payload.metaobjectDefinition?.id;\n if (id) idByType.set(op.type, id);\n return { op, status: \"applied\", id };\n }\n\n /** Create an acyclic definition (full field set), blocking on a failed dependency. */\n async function applyAcyclicCreate(op: DiffOp): Promise<PushOpResult> {\n for (const dep of deps.get(op.type) ?? []) {\n if (failedTypes.has(dep)) {\n failedTypes.add(op.type);\n return { op, status: \"blocked\", reason: `blocked: dependency \"${dep}\" was not created` };\n }\n }\n const def = defByType.get(op.type);\n if (!def) {\n failedTypes.add(op.type);\n return { op, status: \"blocked\", reason: `no definition input for \"${op.type}\"` };\n }\n return createDefinition(op, def);\n }\n\n /** Apply a non-create op (field add/update/remove, definition update). [design §7, §8] */\n async function applyFieldOp(op: DiffOp): Promise<PushOpResult> {\n const destructive = \"destructive\" in op && op.destructive === true;\n if (destructive && !allowDestructive) return { op, status: \"skipped\", reason: \"destructive\" };\n\n if (failedTypes.has(op.type)) return { op, status: \"blocked\", reason: `blocked: definition \"${op.type}\" was not created` };\n\n const id = idByType.get(op.type);\n if (id == null) return { op, status: \"blocked\", reason: `no definition id for \"${op.type}\"` };\n\n let definition: { fieldDefinitions: FieldOpInput[] } | DefinitionUpdateInput;\n if (op.kind === \"updateDefinition\") {\n const def = defByType.get(op.type);\n if (!def) return { op, status: \"blocked\", reason: `no definition input for \"${op.type}\"` };\n definition = definitionUpdateFor(def, op.changes);\n } else {\n const fieldDefinitions = fieldOpsFor(op);\n if (!fieldDefinitions) return { op, status: \"blocked\", reason: `no field input for \"${op.type}\"` };\n definition = { fieldDefinitions };\n }\n\n const data = await execute<{ metaobjectDefinitionUpdate: MutationPayload }>(client, UPDATE_DEFINITION_MUTATION, { id, definition });\n const payload = data.metaobjectDefinitionUpdate;\n if (payload.userErrors.length) return { op, status: \"failed\", userErrors: payload.userErrors };\n return { op, status: \"applied\", id: payload.metaobjectDefinition?.id ?? id };\n }\n\n /** Builds the `fieldDefinitions` tagged-union ops for a field-level diff op. [design §7] */\n function fieldOpsFor(op: DiffOp): FieldOpInput[] | undefined {\n switch (op.kind) {\n case \"addField\": {\n const field = fieldInputFor(defByType, op.type, op.field.key);\n return field ? [{ create: field }] : undefined;\n }\n case \"updateField\": {\n const field = fieldInputFor(defByType, op.type, op.key);\n if (!field) return undefined;\n // `type` is immutable, so the update payload omits it. [design §7]\n const update: FieldUpdateInput = {\n key: field.key,\n name: field.name,\n required: field.required,\n validations: field.validations,\n };\n if (field.description != null) update.description = field.description;\n // Reconcile `adminFilterable` only when the field's filter state drifted. [design §8]\n if (\"filterable\" in op.changes) {\n update.capabilities = { adminFilterable: { enabled: op.changes.filterable ?? false } };\n }\n return [{ update }];\n }\n case \"removeField\":\n return [{ delete: { key: op.key } }];\n case \"changeFieldType\": {\n const field = fieldInputFor(defByType, op.type, op.key);\n return field ? [{ delete: { key: op.key } }, { create: field }] : undefined;\n }\n default:\n return undefined;\n }\n }\n\n // Record each result at its original plan index so `results` aligns with the caller's plan.\n const results: PushOpResult[] = new Array(plan.length);\n\n // Phase A: acyclic creates, dependency-first (a referenced type before its referencer).\n for (const type of ordered) {\n const entry = createByType.get(type) as { op: DiffOp; index: number };\n results[entry.index] = await applyAcyclicCreate(entry.op);\n }\n\n // Cyclic definitions can't be ordered: create each with the cycle-breaking ref fields\n // stripped (pass 1), then add those fields once every member exists (pass 2). [design §7]\n const cyclicCreates = createOps.filter((x) => cyclicTypes.has(x.op.type));\n const deferredByType = new Map<string, FieldDefinitionInput[]>();\n\n // Phase B: pass-1 reduced creates.\n for (const { op, index } of cyclicCreates) {\n const def = defByType.get(op.type);\n if (!def) {\n failedTypes.add(op.type);\n results[index] = { op, status: \"blocked\", reason: `no definition input for \"${op.type}\"` };\n continue;\n }\n // A non-cyclic dependency lives in the pass-1 field set, so its failure blocks the create.\n const failedDep = [...(deps.get(op.type) ?? [])].find((d) => !cyclicTypes.has(d) && failedTypes.has(d));\n if (failedDep) {\n failedTypes.add(op.type);\n results[index] = { op, status: \"blocked\", reason: `blocked: dependency \"${failedDep}\" was not created` };\n continue;\n }\n const { pass1, deferred } = splitCyclicFields(def, cyclicTypes);\n deferredByType.set(op.type, deferred);\n results[index] = await createDefinition(op, { ...def, fieldDefinitions: pass1 });\n }\n\n // Phase C: pass-2 — add the deferred ref fields now that every cyclic member exists.\n for (const { op, index } of cyclicCreates) {\n if (results[index]?.status !== \"applied\") continue;\n const deferred = deferredByType.get(op.type) ?? [];\n if (!deferred.length) continue;\n const failedTarget = deferred.flatMap(fieldRefTargets).find((t) => failedTypes.has(t));\n if (failedTarget) {\n failedTypes.add(op.type);\n results[index] = { op, status: \"blocked\", reason: `blocked: dependency \"${failedTarget}\" was not created` };\n continue;\n }\n const id = idByType.get(op.type);\n if (id == null) {\n results[index] = { op, status: \"blocked\", reason: `no definition id for \"${op.type}\"` };\n continue;\n }\n const definition: { fieldDefinitions: FieldOpInput[] } = { fieldDefinitions: deferred.map((f) => ({ create: f })) };\n const data = await execute<{ metaobjectDefinitionUpdate: MutationPayload }>(client, UPDATE_DEFINITION_MUTATION, { id, definition });\n const payload = data.metaobjectDefinitionUpdate;\n if (payload.userErrors.length) {\n failedTypes.add(op.type);\n results[index] = { op, status: \"failed\", userErrors: payload.userErrors };\n }\n }\n\n // Phase D: all other ops last — they may add fields/refs targeting a type created above.\n for (const { op, index } of otherOps) results[index] = await applyFieldOp(op);\n\n const counts = { applied: 0, skipped: 0, blocked: 0, failed: 0 };\n for (const r of results) counts[r.status]++;\n return { results, counts, ok: counts.failed === 0 && counts.blocked === 0 };\n}\n","import type { AdminGraphQLClient, DiffOp, MetaobjectDefinitionInput, PulledRemote, ScopeConfig } from \"../index\";\nimport { diff, normalizeDefinition, normalizeRemote, pull, resolveDefinitions } from \"../index\";\nimport type { AnySchema } from \"../index\";\n\nconst APP_PREFIX = \"$app:\";\n\nexport interface Plan {\n plan: DiffOp[];\n remote: PulledRemote[];\n /** Scope-resolved definition inputs — reused by `push` so payloads use effective types. */\n definitions: MetaobjectDefinitionInput[];\n warnings: string[];\n}\n\n/**\n * `type` is immutable, so flipping a definition's scope makes `pull` look under\n * a new type and orphan the old one. Detect the app→merchant case (the orphan is\n * app-owned, so unambiguously ours) and surface it; migration is manual. [design §13]\n */\nasync function detectScopeFlips(\n client: AdminGraphQLClient,\n definitions: MetaobjectDefinitionInput[],\n plan: DiffOp[],\n): Promise<string[]> {\n const merchant = definitions.filter((d) => !d.type.startsWith(APP_PREFIX));\n if (merchant.length === 0) return [];\n const created = new Set(plan.filter((op) => op.kind === \"createDefinition\").map((op) => op.type));\n const shadows = await pull(client, merchant.map((d) => `${APP_PREFIX}${d.type}`));\n const shadowTypes = new Set(shadows.map((s) => s.type));\n const warnings: string[] = [];\n for (const d of merchant) {\n if (created.has(d.type) && shadowTypes.has(`${APP_PREFIX}${d.type}`)) {\n warnings.push(\n `\"${d.type}\" is merchant-scoped but an app-owned \"${APP_PREFIX}${d.type}\" already exists remotely. ` +\n `Scope changes are not migrated (type is immutable): a new merchant-owned definition will be created and ` +\n `the app-owned one left orphaned. Migrate manually — see docs/SYNC.md.`,\n );\n }\n }\n return warnings;\n}\n\n/** Resolve scope, pull the effective types, normalize, and diff local↔remote. */\nexport async function planFor(\n client: AdminGraphQLClient,\n schemas: AnySchema[],\n config: ScopeConfig = {},\n): Promise<Plan> {\n const definitions = resolveDefinitions(schemas, config);\n const types = definitions.map((d) => d.type);\n const localDefs = definitions.map(normalizeDefinition);\n const remote = await pull(client, types);\n const plan = diff(localDefs, remote.map((r) => normalizeRemote(r.definition)));\n const warnings = await detectScopeFlips(client, definitions, plan);\n return { plan, remote, definitions, warnings };\n}\n","import type { DiffOp, PushOpResult } from \"../index\";\n\nexport function opTarget(op: DiffOp): string {\n if (op.kind === \"addField\") return `${op.type}.${op.field.key}`;\n if (\"key\" in op) return `${op.type}.${op.key}`;\n return op.type;\n}\n\nexport function isDestructive(op: DiffOp): boolean {\n return \"destructive\" in op && op.destructive === true;\n}\n\nexport function describeOp(op: DiffOp): string {\n return `${op.kind}: ${opTarget(op)}${isDestructive(op) ? \" · destructive\" : \"\"}`;\n}\n\nexport function describeResult(r: PushOpResult): string {\n const head = `${r.op.kind}: ${opTarget(r.op)}`;\n switch (r.status) {\n case \"applied\":\n return `✓ applied — ${head}`;\n case \"skipped\":\n return `– skipped (${r.reason}) — ${head}`;\n case \"blocked\":\n return `⚠ blocked (${r.reason}) — ${head}`;\n case \"failed\":\n return `✗ failed (${r.userErrors.map((e) => e.message).join(\"; \")}) — ${head}`;\n }\n}\n","import type { AdminGraphQLClient, DiffOp, ScopeConfig } from \"../index\";\nimport type { AnySchema } from \"../index\";\nimport { planFor } from \"./plan\";\nimport { describeOp } from \"./format\";\n\nexport async function runDiff(args: {\n client: AdminGraphQLClient;\n schemas: AnySchema[];\n config?: ScopeConfig;\n}): Promise<DiffOp[]> {\n const { plan, warnings } = await planFor(args.client, args.schemas, args.config);\n for (const w of warnings) console.warn(`Warning: ${w}`);\n if (plan.length === 0) {\n console.log(\"Everything is in sync — nothing to apply.\");\n } else {\n console.log(`${plan.length} change${plan.length === 1 ? \"\" : \"s\"} would be applied:`);\n for (const op of plan) console.log(` ${describeOp(op)}`);\n }\n return plan;\n}\n","import type { AdminGraphQLClient, PushResult, ScopeConfig } from \"../index\";\nimport type { AnySchema } from \"../index\";\nimport { push } from \"../index\";\nimport { planFor } from \"./plan\";\nimport { describeResult, isDestructive } from \"./format\";\n\nexport async function runPush(args: {\n client: AdminGraphQLClient;\n schemas: AnySchema[];\n config?: ScopeConfig;\n allowDestructive?: boolean;\n}): Promise<PushResult> {\n const { plan, remote, definitions, warnings } = await planFor(args.client, args.schemas, args.config);\n for (const w of warnings) console.warn(`Warning: ${w}`);\n const result = await push(args.client, plan, { definitions, remote }, { allowDestructive: args.allowDestructive });\n\n for (const r of result.results) console.log(` ${describeResult(r)}`);\n console.log(\n `applied ${result.counts.applied} · skipped ${result.counts.skipped} · ` +\n `blocked ${result.counts.blocked} · failed ${result.counts.failed}`,\n );\n if (!args.allowDestructive && plan.some(isDestructive)) {\n console.log(\"Some destructive changes were skipped. Re-run with --allow-destructive to apply them.\");\n }\n return result;\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { AdminGraphQLClient } from \"../index\";\nimport { generateSchemaSource, normalizeRemote, pullAll } from \"../index\";\n\n/** Format source with the user's local prettier if available; otherwise return as-is. */\nasync function maybeFormat(source: string): Promise<string> {\n try {\n const spec = \"prettier\";\n const prettier = await import(spec);\n return await prettier.format(source, { parser: \"typescript\" });\n } catch {\n return source;\n }\n}\n\nexport async function runPull(args: {\n client: AdminGraphQLClient;\n schemaPath: string;\n force?: boolean;\n}): Promise<{ written: string; count: number }> {\n const remote = await pullAll(args.client); // app-owned only\n const defs = remote.map((r) => normalizeRemote(r.definition));\n const source = await maybeFormat(generateSchemaSource(defs));\n\n const abs = resolve(process.cwd(), args.schemaPath);\n if (existsSync(abs) && !args.force) {\n console.warn(`Overwriting existing ${args.schemaPath}.`);\n }\n mkdirSync(dirname(abs), { recursive: true });\n writeFileSync(abs, source);\n console.log(`Wrote ${defs.length} definition${defs.length === 1 ? \"\" : \"s\"} to ${args.schemaPath}.`);\n return { written: abs, count: defs.length };\n}\n"],"mappings":"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","names":["import_node_path","import_node_path","v","APP_PREFIX","v","m","v","list","APP_PREFIX","import_node_fs","import_node_path"]}
|