@fmaplabs/meta-manifest 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fields/base.ts","../src/fields/boolean.ts","../src/fields/list.ts","../src/fields/measurement.ts","../src/fields/money.ts","../src/fields/number.ts","../src/fields/rating.ts","../src/fields/reference.ts","../src/fields/scalar.ts","../src/fields/text.ts","../src/fields/index.ts","../src/definition-input.ts","../src/define.ts","../src/codegen.ts","../src/sync/diff.ts","../src/sync/normalize.ts","../src/sync/pull.ts","../src/sync/push.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"../standard-schema\";\n\nexport type FieldValidation = { name: string; value: string };\nexport type Issue = { message: string; path?: PropertyKey[] };\nexport type DecodeResult<T> =\n | { value: T; issues?: undefined }\n | { value?: undefined; issues: Issue[] };\n\nexport abstract class Field<TOut, TIn = TOut, Req extends boolean = false> {\n abstract readonly shopifyType: string;\n /** True when Shopify stores this type as a JSON string (objects, lists). */\n protected readonly wireIsJson: boolean = false;\n required = false;\n name?: string;\n description?: string;\n\n // Phantom type carriers (no runtime value).\n declare readonly _out: TOut;\n declare readonly _in: TIn;\n declare readonly _req: Req;\n\n /** Shopify definition validations, e.g. [{ name: \"max\", value: \"120\" }]. */\n abstract validations(): FieldValidation[];\n\n /** Typed value -> JSON representation (number/string/object). */\n protected abstract toJson(value: TIn): unknown;\n\n /** JSON representation -> typed value (no constraint checking). */\n protected abstract fromJson(json: unknown): DecodeResult<TOut>;\n\n /** Constraint validation on an already-typed value. */\n protected check(_value: TOut): Issue[] {\n return [];\n }\n\n /** Shopify wire (string or jsonValue) -> typed value (no constraint checking). */\n coerce(wire: unknown): DecodeResult<TOut> {\n let json = wire;\n if (this.wireIsJson && typeof wire === \"string\") {\n try {\n json = JSON.parse(wire);\n } catch {\n return { issues: [{ message: \"Invalid JSON in field value\" }] };\n }\n }\n return this.fromJson(json);\n }\n\n /** Shopify wire -> typed value, validated. */\n decode(wire: unknown): DecodeResult<TOut> {\n const coerced = this.coerce(wire);\n if (coerced.issues) return coerced;\n const issues = this.check(coerced.value);\n return issues.length ? { issues } : { value: coerced.value };\n }\n\n /** Typed value -> Shopify wire string. */\n encode(value: TIn): string {\n const json = this.toJson(value);\n return this.wireIsJson ? JSON.stringify(json) : String(json);\n }\n\n /** Element-level JSON form (for embedding inside list values). */\n elementToJson(value: TIn): unknown {\n return this.toJson(value);\n }\n /** Element-level decode from a JSON form (coerce + check), for list elements. */\n elementFromJson(json: unknown): DecodeResult<TOut> {\n const coerced = this.fromJson(json);\n if (coerced.issues) return coerced;\n const issues = this.check(coerced.value);\n return issues.length ? { issues } : { value: coerced.value };\n }\n\n get [\"~standard\"](): StandardSchemaV1.Props<TIn, TOut> {\n return {\n version: 1,\n vendor: \"@fmaplabs/meta-manifest\",\n validate: (value: unknown) => {\n const issues = this.check(value as TOut);\n return issues.length ? { issues } : { value: value as TOut };\n },\n };\n }\n}\n","import { Field, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface BooleanOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n}\n\nclass BooleanField<R extends boolean> extends Field<boolean, boolean, R> {\n readonly shopifyType = \"boolean\";\n constructor(opts: BooleanOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n validations(): FieldValidation[] {\n return [];\n }\n protected toJson(value: boolean): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<boolean> {\n if (typeof json === \"boolean\") return { value: json };\n if (json === \"true\") return { value: true };\n if (json === \"false\") return { value: false };\n return { issues: [{ message: `Expected a boolean, got ${json}` }] };\n }\n}\n\nexport function boolean<R extends boolean = false>(opts: BooleanOptions<R> = {}): BooleanField<R> {\n return new BooleanField<R>(opts);\n}\n","import { Field, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\ntype InnerOut<E> = E extends Field<infer O, any, any> ? O : never;\ntype InnerIn<E> = E extends Field<any, infer I, any> ? I : never;\n\nexport interface ListOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n min?: number;\n max?: number;\n}\n\nclass ListField<E extends Field<any, any, any>, R extends boolean> extends Field<InnerOut<E>[], InnerIn<E>[], R> {\n readonly shopifyType: string;\n protected override readonly wireIsJson = true;\n constructor(private readonly inner: E, private readonly o: ListOptions<R>) {\n super();\n this.shopifyType = `list.${inner.shopifyType}`;\n this.required = o.required ?? false;\n this.name = o.name;\n this.description = o.description;\n }\n validations(): FieldValidation[] {\n const v = [...this.inner.validations()];\n if (this.o.min != null) v.push({ name: \"list.min\", value: String(this.o.min) });\n if (this.o.max != null) v.push({ name: \"list.max\", value: String(this.o.max) });\n return v;\n }\n protected toJson(value: InnerIn<E>[]): unknown {\n return value.map((el) => this.inner.elementToJson(el));\n }\n protected fromJson(json: unknown): DecodeResult<InnerOut<E>[]> {\n if (!Array.isArray(json)) return { issues: [{ message: \"Expected an array\" }] };\n const out: InnerOut<E>[] = [];\n const issues: Issue[] = [];\n json.forEach((el, index) => {\n const r = this.inner.elementFromJson(el);\n if (r.issues) issues.push(...r.issues.map((i) => ({ ...i, path: [index, ...(i.path ?? [])] })));\n else out.push(r.value);\n });\n return issues.length ? { issues } : { value: out };\n }\n}\n\nexport function list<E extends Field<any, any, any>, R extends boolean = false>(\n inner: E,\n opts: ListOptions<R> = {},\n): ListField<E, R> {\n return new ListField<E, R>(inner, opts);\n}\n","import { Field, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface Measure {\n value: number;\n unit: string;\n}\ninterface MeasureOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n}\n\nclass MeasurementField<R extends boolean> extends Field<Measure, Measure, R> {\n protected override readonly wireIsJson = true;\n constructor(opts: MeasureOptions<R>, readonly shopifyType: \"dimension\" | \"weight\" | \"volume\") {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n validations(): FieldValidation[] {\n return [];\n }\n protected toJson(value: Measure): unknown {\n return { value: value.value, unit: value.unit };\n }\n protected fromJson(json: unknown): DecodeResult<Measure> {\n if (typeof json !== \"object\" || json === null) return { issues: [{ message: \"Expected a measurement object\" }] };\n const o = json as Record<string, unknown>;\n const value = typeof o.value === \"string\" ? Number(o.value) : o.value;\n if (typeof value !== \"number\" || Number.isNaN(value) || typeof o.unit !== \"string\") {\n return { issues: [{ message: \"measurement requires numeric value and string unit\" }] };\n }\n return { value: { value, unit: o.unit } };\n }\n}\n\nexport function dimension<R extends boolean = false>(opts: MeasureOptions<R> = {}): MeasurementField<R> {\n return new MeasurementField<R>(opts, \"dimension\");\n}\nexport function weight<R extends boolean = false>(opts: MeasureOptions<R> = {}): MeasurementField<R> {\n return new MeasurementField<R>(opts, \"weight\");\n}\nexport function volume<R extends boolean = false>(opts: MeasureOptions<R> = {}): MeasurementField<R> {\n return new MeasurementField<R>(opts, \"volume\");\n}\n","import { Field, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface Money {\n amount: string;\n currencyCode: string;\n}\ninterface MoneyOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n}\n\nclass MoneyField<R extends boolean> extends Field<Money, Money, R> {\n readonly shopifyType = \"money\";\n protected override readonly wireIsJson = true;\n constructor(opts: MoneyOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n validations(): FieldValidation[] {\n return [];\n }\n protected toJson(value: Money): unknown {\n return { amount: value.amount, currency_code: value.currencyCode };\n }\n protected fromJson(json: unknown): DecodeResult<Money> {\n if (typeof json !== \"object\" || json === null) return { issues: [{ message: \"Expected a money object\" }] };\n const o = json as Record<string, unknown>;\n if (typeof o.amount !== \"string\" || typeof o.currency_code !== \"string\") {\n return { issues: [{ message: \"money requires string amount and currency_code\" }] };\n }\n return { value: { amount: o.amount, currencyCode: o.currency_code } };\n }\n}\n\nexport function money<R extends boolean = false>(opts: MoneyOptions<R> = {}): MoneyField<R> {\n return new MoneyField<R>(opts);\n}\n","import { Field, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\nexport interface NumberOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n min?: number;\n max?: number;\n}\nexport interface DecimalOptions<R extends boolean = false> extends NumberOptions<R> {\n maxPrecision?: number;\n}\n\nabstract class NumericField<R extends boolean> extends Field<number, number, R> {\n constructor(protected readonly opts: NumberOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n protected toJson(value: number): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<number> {\n const n = typeof json === \"string\" ? Number(json) : json;\n if (typeof n !== \"number\" || Number.isNaN(n)) return { issues: [{ message: `Expected a number, got ${json}` }] };\n return { value: n };\n }\n protected rangeIssues(value: number): Issue[] {\n const i: Issue[] = [];\n if (this.opts.min != null && value < this.opts.min) i.push({ message: `Must be at least ${this.opts.min}` });\n if (this.opts.max != null && value > this.opts.max) i.push({ message: `Must be at most ${this.opts.max}` });\n return i;\n }\n protected baseValidations(): FieldValidation[] {\n const v: FieldValidation[] = [];\n if (this.opts.min != null) v.push({ name: \"min\", value: String(this.opts.min) });\n if (this.opts.max != null) v.push({ name: \"max\", value: String(this.opts.max) });\n return v;\n }\n}\n\nclass IntegerField<R extends boolean> extends NumericField<R> {\n readonly shopifyType = \"number_integer\";\n validations(): FieldValidation[] {\n return this.baseValidations();\n }\n protected override check(value: number): Issue[] {\n const i = this.rangeIssues(value);\n if (!Number.isInteger(value)) i.unshift({ message: \"Must be an integer\" });\n return i;\n }\n}\n\nclass DecimalField<R extends boolean> extends NumericField<R> {\n readonly shopifyType = \"number_decimal\";\n constructor(private readonly decimalOpts: DecimalOptions<R>) {\n super(decimalOpts);\n }\n validations(): FieldValidation[] {\n const v = this.baseValidations();\n if (this.decimalOpts.maxPrecision != null) {\n v.push({ name: \"max_precision\", value: String(this.decimalOpts.maxPrecision) });\n }\n return v;\n }\n protected override check(value: number): Issue[] {\n return this.rangeIssues(value);\n }\n}\n\nexport function integer<R extends boolean = false>(opts: NumberOptions<R> = {}): IntegerField<R> {\n return new IntegerField<R>(opts);\n}\nexport function decimal<R extends boolean = false>(opts: DecimalOptions<R> = {}): DecimalField<R> {\n return new DecimalField<R>(opts);\n}\n","import { Field, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\nimport type { StandardSchemaV1 } from \"../standard-schema\";\n\nexport interface Rating {\n value: number;\n scaleMin: number;\n scaleMax: number;\n}\nexport interface RatingInput {\n value: number;\n}\nexport interface RatingOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n min: number;\n max: number;\n}\n\nclass RatingField<R extends boolean> extends Field<Rating, RatingInput, R> {\n readonly shopifyType = \"rating\";\n protected override readonly wireIsJson = true;\n constructor(private readonly o: RatingOptions<R>) {\n super();\n this.required = o.required ?? false;\n this.name = o.name;\n this.description = o.description;\n }\n validations(): FieldValidation[] {\n return [\n { name: \"min\", value: String(this.o.min) },\n { name: \"max\", value: String(this.o.max) },\n ];\n }\n protected toJson(value: RatingInput): unknown {\n return { value: String(value.value), scale_min: String(this.o.min), scale_max: String(this.o.max) };\n }\n protected fromJson(json: unknown): DecodeResult<Rating> {\n if (typeof json !== \"object\" || json === null) return { issues: [{ message: \"Expected a rating object\" }] };\n const o = json as Record<string, unknown>;\n const value = Number(o.value);\n const scaleMin = Number(o.scale_min);\n const scaleMax = Number(o.scale_max);\n if ([value, scaleMin, scaleMax].some(Number.isNaN)) {\n return { issues: [{ message: \"rating requires numeric value, scale_min, scale_max\" }] };\n }\n return { value: { value, scaleMin, scaleMax } };\n }\n protected override check(value: Rating): Issue[] {\n return value.value < value.scaleMin || value.value > value.scaleMax\n ? [{ message: `Rating must be between ${value.scaleMin} and ${value.scaleMax}` }]\n : [];\n }\n override get [\"~standard\"](): StandardSchemaV1.Props<RatingInput, Rating> {\n return {\n version: 1,\n vendor: \"@fmaplabs/meta-manifest\",\n validate: (input: unknown) => {\n if (\n typeof input !== \"object\" ||\n input === null ||\n typeof (input as { value?: unknown }).value !== \"number\"\n ) {\n return { issues: [{ message: \"Expected a rating input { value: number }\" }] };\n }\n const candidate: Rating = {\n value: (input as RatingInput).value,\n scaleMin: this.o.min,\n scaleMax: this.o.max,\n };\n const issues = this.check(candidate);\n return issues.length ? { issues } : { value: candidate };\n },\n };\n }\n}\n\nexport function rating<R extends boolean = false>(opts: RatingOptions<R>): RatingField<R> {\n return new RatingField<R>(opts);\n}\n","import { Field, type DecodeResult, type FieldValidation } from \"./base\";\n\ninterface RefOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n}\n\nabstract class GidField<R extends boolean> extends Field<string, string, R> {\n constructor(opts: RefOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n protected toJson(value: string): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<string> {\n if (typeof json !== \"string\") return { issues: [{ message: `Expected a GID string, got ${typeof json}` }] };\n return { value: json };\n }\n}\n\nclass SimpleRefField<R extends boolean> extends GidField<R> {\n constructor(opts: RefOptions<R>, readonly shopifyType: string) {\n super(opts);\n }\n validations(): FieldValidation[] {\n return [];\n }\n}\n\nexport type FileType = \"Image\" | \"Video\";\ninterface FileOptions<R extends boolean = false> extends RefOptions<R> {\n accept?: readonly FileType[];\n}\nclass FileField<R extends boolean> extends GidField<R> {\n readonly shopifyType = \"file_reference\";\n constructor(private readonly o: FileOptions<R>) {\n super(o);\n }\n validations(): FieldValidation[] {\n return this.o.accept != null ? [{ name: \"file_type_options\", value: JSON.stringify(this.o.accept) }] : [];\n }\n}\n\nexport type TypeRef = { type: string } | (() => { type: string });\nfunction resolveType(target: TypeRef): string {\n return typeof target === \"function\" ? target().type : target.type;\n}\nclass MetaobjectRefField<R extends boolean> extends GidField<R> {\n readonly shopifyType = \"metaobject_reference\";\n constructor(private readonly target: TypeRef, opts: RefOptions<R>) {\n super(opts);\n }\n validations(): FieldValidation[] {\n return [{ name: \"metaobject_definition_type\", value: resolveType(this.target) }];\n }\n}\n\nexport function product<R extends boolean = false>(opts: RefOptions<R> = {}) {\n return new SimpleRefField<R>(opts, \"product_reference\");\n}\nexport function variant<R extends boolean = false>(opts: RefOptions<R> = {}) {\n return new SimpleRefField<R>(opts, \"variant_reference\");\n}\nexport function collection<R extends boolean = false>(opts: RefOptions<R> = {}) {\n return new SimpleRefField<R>(opts, \"collection_reference\");\n}\nexport function page<R extends boolean = false>(opts: RefOptions<R> = {}) {\n return new SimpleRefField<R>(opts, \"page_reference\");\n}\nexport function file<R extends boolean = false>(opts: FileOptions<R> = {}) {\n return new FileField<R>(opts);\n}\nexport function ref<R extends boolean = false>(target: TypeRef, opts: RefOptions<R> = {}) {\n return new MetaobjectRefField<R>(target, opts);\n}\n","import { Field, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\ninterface BaseOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n}\n\nabstract class StringScalarField<R extends boolean> extends Field<string, string, R> {\n constructor(opts: BaseOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n protected toJson(value: string): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<string> {\n if (typeof json !== \"string\") return { issues: [{ message: `Expected string, got ${typeof json}` }] };\n return { value: json };\n }\n}\n\ninterface DateOptions<R extends boolean = false> extends BaseOptions<R> {\n min?: string;\n max?: string;\n}\nclass DateField<R extends boolean> extends StringScalarField<R> {\n constructor(private readonly o: DateOptions<R>, readonly shopifyType: \"date\" | \"date_time\") {\n super(o);\n }\n validations(): FieldValidation[] {\n const v: FieldValidation[] = [];\n if (this.o.min != null) v.push({ name: \"min\", value: this.o.min });\n if (this.o.max != null) v.push({ name: \"max\", value: this.o.max });\n return v;\n }\n}\n\ninterface UrlOptions<R extends boolean = false> extends BaseOptions<R> {\n allowedDomains?: readonly string[];\n}\nclass UrlField<R extends boolean> extends StringScalarField<R> {\n readonly shopifyType = \"url\";\n constructor(private readonly o: UrlOptions<R>) {\n super(o);\n }\n validations(): FieldValidation[] {\n return this.o.allowedDomains != null\n ? [{ name: \"allowed_domains\", value: JSON.stringify(this.o.allowedDomains) }]\n : [];\n }\n}\n\nclass ColorField<R extends boolean> extends StringScalarField<R> {\n readonly shopifyType = \"color\";\n validations(): FieldValidation[] {\n return [];\n }\n protected override check(value: string): Issue[] {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value) ? [] : [{ message: \"Must be a hex color like #ff0000\" }];\n }\n}\n\nclass JsonField<R extends boolean> extends Field<unknown, unknown, R> {\n readonly shopifyType = \"json\";\n protected override readonly wireIsJson = true;\n constructor(opts: BaseOptions<R>) {\n super();\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n validations(): FieldValidation[] {\n return [];\n }\n protected toJson(value: unknown): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<unknown> {\n return { value: json };\n }\n}\n\nexport function date<R extends boolean = false>(opts: DateOptions<R> = {}): DateField<R> {\n return new DateField<R>(opts, \"date\");\n}\nexport function dateTime<R extends boolean = false>(opts: DateOptions<R> = {}): DateField<R> {\n return new DateField<R>(opts, \"date_time\");\n}\nexport function url<R extends boolean = false>(opts: UrlOptions<R> = {}): UrlField<R> {\n return new UrlField<R>(opts);\n}\nexport function color<R extends boolean = false>(opts: BaseOptions<R> = {}): ColorField<R> {\n return new ColorField<R>(opts);\n}\nexport function json<R extends boolean = false>(opts: BaseOptions<R> = {}): JsonField<R> {\n return new JsonField<R>(opts);\n}\n","import { Field, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\nexport interface TextOptions<R extends boolean = false> {\n name?: string;\n description?: string;\n required?: R;\n min?: number;\n max?: number;\n regex?: string;\n choices?: readonly string[];\n}\nexport type MultilineOptions<R extends boolean = false> = Omit<TextOptions<R>, \"choices\">;\n\nclass TextField<R extends boolean> extends Field<string, string, R> {\n readonly shopifyType: string;\n constructor(private readonly opts: TextOptions<R>, multiline: boolean) {\n super();\n this.shopifyType = multiline ? \"multi_line_text_field\" : \"single_line_text_field\";\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n }\n validations(): FieldValidation[] {\n const v: FieldValidation[] = [];\n if (this.opts.min != null) v.push({ name: \"min\", value: String(this.opts.min) });\n if (this.opts.max != null) v.push({ name: \"max\", value: String(this.opts.max) });\n if (this.opts.regex != null) v.push({ name: \"regex\", value: this.opts.regex });\n if (this.opts.choices != null) v.push({ name: \"choices\", value: JSON.stringify(this.opts.choices) });\n return v;\n }\n protected toJson(value: string): unknown {\n return value;\n }\n protected fromJson(json: unknown): DecodeResult<string> {\n if (typeof json !== \"string\") return { issues: [{ message: `Expected string, got ${typeof json}` }] };\n return { value: json };\n }\n protected override check(value: string): Issue[] {\n const i: Issue[] = [];\n const { min, max, regex, choices } = this.opts;\n if (min != null && value.length < min) i.push({ message: `Must be at least ${min} characters` });\n if (max != null && value.length > max) i.push({ message: `Must be at most ${max} characters` });\n if (regex != null && !new RegExp(regex).test(value)) i.push({ message: `Must match ${regex}` });\n if (choices != null && !choices.includes(value)) i.push({ message: `Must be one of: ${choices.join(\", \")}` });\n return i;\n }\n}\n\nexport function text<R extends boolean = false>(opts: TextOptions<R> = {}): TextField<R> {\n return new TextField<R>(opts, false);\n}\nexport function multilineText<R extends boolean = false>(opts: MultilineOptions<R> = {}): TextField<R> {\n return new TextField<R>(opts, true);\n}\n","import { boolean } from \"./boolean\";\nimport { list } from \"./list\";\nimport { dimension, volume, weight } from \"./measurement\";\nimport { money } from \"./money\";\nimport { decimal, integer } from \"./number\";\nimport { rating } from \"./rating\";\nimport { collection, file, page, product, ref, variant } from \"./reference\";\nimport { color, date, dateTime, json, url } from \"./scalar\";\nimport { multilineText, text } from \"./text\";\n\nexport const m = {\n text,\n multilineText,\n integer,\n decimal,\n boolean,\n date,\n dateTime,\n url,\n color,\n json,\n money,\n dimension,\n weight,\n volume,\n rating,\n product,\n variant,\n collection,\n page,\n file,\n ref,\n list,\n} as const;\n\nexport { Field } from \"./base\";\nexport type { DecodeResult, FieldValidation, Issue } from \"./base\";\nexport type { Money } from \"./money\";\nexport type { Measure } from \"./measurement\";\nexport type { Rating, RatingInput } from \"./rating\";\nexport type { FileType, TypeRef } from \"./reference\";\n","import type { AccessConfig, CapabilitiesConfig, MetaobjectSchema } from \"./define\";\nimport type { FieldMap } from \"./infer\";\nimport type { FieldValidation } from \"./fields/base\";\n\nexport interface FieldDefinitionInput {\n key: string;\n name: string;\n description?: string;\n required: boolean;\n type: string;\n validations: FieldValidation[];\n}\nexport interface MetaobjectDefinitionInput {\n type: string;\n name: string;\n description?: string;\n displayNameKey?: string;\n access?: { admin?: string; storefront?: string };\n capabilities?: Record<string, { enabled: boolean }>;\n fieldDefinitions: FieldDefinitionInput[];\n}\n\nfunction mapAccess(access?: AccessConfig): MetaobjectDefinitionInput[\"access\"] {\n if (!access) return undefined;\n const out: { admin?: string; storefront?: string } = {};\n if (access.admin) out.admin = access.admin.toUpperCase();\n if (access.storefront) out.storefront = access.storefront.toUpperCase();\n return out;\n}\n\nfunction mapCapabilities(caps?: CapabilitiesConfig): MetaobjectDefinitionInput[\"capabilities\"] {\n if (!caps) return undefined;\n const out: Record<string, { enabled: boolean }> = {};\n for (const [k, v] of Object.entries(caps)) if (v != null) out[k] = { enabled: v };\n return Object.keys(out).length ? out : undefined;\n}\n\nexport function toDefinitionInput<F extends FieldMap>(schema: MetaobjectSchema<F>): MetaobjectDefinitionInput {\n const { config } = schema;\n const fieldDefinitions: FieldDefinitionInput[] = Object.entries(schema.fields).map(([key, field]) => {\n const def: FieldDefinitionInput = {\n key,\n name: field.name ?? key,\n required: field.required,\n type: field.shopifyType,\n validations: field.validations(),\n };\n if (field.description != null) def.description = field.description;\n return def;\n });\n\n const out: MetaobjectDefinitionInput = {\n type: schema.type,\n name: config.name,\n fieldDefinitions,\n };\n if (config.description != null) out.description = config.description;\n if (config.displayName != null) out.displayNameKey = config.displayName;\n const access = mapAccess(config.access);\n if (access) out.access = access;\n const capabilities = mapCapabilities(config.capabilities);\n if (capabilities) out.capabilities = capabilities;\n return out;\n}\n","import type { Field, Issue } from \"./fields/base\";\nimport { type FieldMap, type Infer, type InferInput } from \"./infer\";\nimport type { StandardSchemaV1 } from \"./standard-schema\";\nimport { toDefinitionInput, type MetaobjectDefinitionInput } from \"./definition-input\";\n\nexport type { Infer, InferInput } from \"./infer\";\n\nexport interface AccessConfig {\n admin?: \"merchant_read\" | \"merchant_read_write\";\n storefront?: \"public_read\" | \"none\";\n}\nexport interface CapabilitiesConfig {\n publishable?: boolean;\n translatable?: boolean;\n renderable?: boolean;\n}\nexport interface MetaobjectConfig<F> {\n name: string;\n description?: string;\n displayName?: keyof F & string;\n access?: AccessConfig;\n capabilities?: CapabilitiesConfig;\n fields: F;\n}\n\nexport type ParseInput =\n | ReadonlyArray<{ key: string; jsonValue?: unknown; value?: unknown }>\n | Record<string, unknown>;\n\nexport interface MetaobjectSchema<F extends FieldMap> {\n readonly handle: string;\n readonly type: string;\n readonly config: MetaobjectConfig<F>;\n readonly fields: F;\n parse(input: ParseInput): { value: Infer<F>; issues?: undefined } | { value?: undefined; issues: Issue[] };\n encode(value: InferInput<F>): Array<{ key: string; value: string }>;\n toDefinitionInput(): MetaobjectDefinitionInput;\n readonly [\"~standard\"]: StandardSchemaV1.Props<InferInput<F>, Infer<F>>;\n}\n\nfunction toValueMap(input: ParseInput): Map<string, unknown> {\n const map = new Map<string, unknown>();\n if (Array.isArray(input)) {\n for (const f of input) map.set(f.key, \"jsonValue\" in f && f.jsonValue !== undefined ? f.jsonValue : f.value);\n } else {\n for (const [k, v] of Object.entries(input as Record<string, unknown>)) map.set(k, v);\n }\n return map;\n}\n\n// F is constrained only to `Record<string, unknown>` rather than `FieldMap`. A\n// `Field<...>` constraint would supply a contextual type whose `Req` slot is\n// `any`, which pollutes the `R` inference of inline builder calls\n// (`m.text({ required: true })`) at the call site and breaks required-vs-optional\n// key detection. The loose constraint avoids that; field-map-ness is enforced via\n// the conditional return type instead (`never` when `fields` isn't a field map).\nexport function defineMetaobject<F extends Record<string, unknown>>(\n handle: string,\n config: MetaobjectConfig<F>,\n): F extends FieldMap ? MetaobjectSchema<F> : never {\n const type = `$app:${handle}`;\n const entries = Object.entries(config.fields as FieldMap) as Array<[string, Field<any, any, any>]>;\n\n function parse(input: ParseInput) {\n const values = toValueMap(input);\n const out: Record<string, unknown> = {};\n const issues: Issue[] = [];\n for (const [key, field] of entries) {\n if (!values.has(key) || values.get(key) === undefined || values.get(key) === null) {\n if (field.required) issues.push({ message: `Missing required field \"${key}\"`, path: [key] });\n continue;\n }\n const r = field.decode(values.get(key));\n if (r.issues) issues.push(...r.issues.map((i) => ({ ...i, path: [key, ...(i.path ?? [])] })));\n else out[key] = r.value;\n }\n return issues.length ? { issues } : { value: out };\n }\n\n function encode(value: Record<string, unknown>) {\n const result: Array<{ key: string; value: string }> = [];\n for (const [key, field] of entries) {\n const v = value[key];\n if (v === undefined) continue;\n result.push({ key, value: field.encode(v) });\n }\n return result;\n }\n\n const schemaRef = {\n handle,\n type,\n config,\n fields: config.fields,\n parse,\n encode,\n toDefinitionInput: () => toDefinitionInput(schemaRef as unknown as MetaobjectSchema<FieldMap>),\n [\"~standard\"]: {\n version: 1 as const,\n vendor: \"@fmaplabs/meta-manifest\",\n validate: (input: unknown) => parse(input as ParseInput),\n },\n };\n return schemaRef as unknown as F extends FieldMap ? MetaobjectSchema<F> : never;\n}\n","import type { RemoteDefinition, RemoteField } from \"./sync/normalize\";\nimport type { FieldValidation } from \"./fields/base\";\n\nconst APP_PREFIX = \"$app:\";\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[]): string {\n const lit = optsLiteral(scalarEntries(field, warnings, builder));\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 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 return field.required ? `m.ref(() => ${ident}, { required: true })` : `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 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);\n\n warnings.push(`unmapped field type \"${type}\" on field \"${field.key}\"`);\n return `m.json() /* TODO: unmapped type ${type} */`;\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 const name = def.name ? `\\n name: ${JSON.stringify(def.name)},` : \"\";\n return `export const ${ident} = defineMetaobject(${JSON.stringify(handle)}, {${name}\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 { RemoteDefinition, RemoteField } from \"./normalize\";\n\nexport type DiffOp =\n | { kind: \"createDefinition\"; type: string; definition: RemoteDefinition }\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\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 (!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\n return ops;\n}\n","import type { MetaobjectSchema } from \"../define\";\nimport type { FieldMap } from \"../infer\";\nimport type { FieldValidation } from \"../fields/base\";\n\nexport interface RemoteField {\n key: string;\n type: string;\n required: boolean;\n validations: FieldValidation[];\n}\nexport interface RemoteDefinition {\n type: string;\n name?: string;\n fields: RemoteField[];\n}\n\nexport function normalizeLocal<F extends FieldMap>(schema: MetaobjectSchema<F>): RemoteDefinition {\n const def = schema.toDefinitionInput();\n return {\n type: def.type,\n name: def.name,\n fields: def.fieldDefinitions.map((f) => ({\n key: f.key,\n type: f.type,\n required: f.required,\n validations: f.validations,\n })),\n };\n}\n\nexport interface PulledFieldDefinition {\n key: string;\n type: { name: string } | string;\n required: boolean;\n validations?: FieldValidation[];\n}\nexport interface PulledDefinition {\n type: string;\n name?: string;\n fieldDefinitions: PulledFieldDefinition[];\n}\n\nexport function normalizeRemote(def: PulledDefinition): RemoteDefinition {\n return {\n type: def.type,\n name: def.name,\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 validations: f.validations ?? [],\n })),\n };\n}\n","import type { AdminGraphQLClient } from \"./client\";\nimport { execute, PULL_DEFINITION_QUERY, LIST_DEFINITIONS_QUERY } from \"./client\";\nimport type { 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 fieldDefinitions: PulledFieldDefinition[];\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({\n id: node.id,\n type,\n definition: { type, name: node.name, fieldDefinitions: node.fieldDefinitions },\n });\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: { type, name: node.name, fieldDefinitions: node.fieldDefinitions } });\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 { FieldDefinitionInput, MetaobjectDefinitionInput } from \"../definition-input\";\nimport { CREATE_DEFINITION_MUTATION, execute, UPDATE_DEFINITION_MUTATION, type AdminGraphQLClient } from \"./client\";\nimport type { 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 FieldOpInput =\n | { create: FieldDefinitionInput }\n | { update: { key: string; name: string; description?: string; required: boolean; validations: FieldValidation[] } }\n | { delete: { key: string } };\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 = op.kind === \"removeField\" || op.kind === \"changeFieldType\";\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 const fieldDefinitions = fieldOpsFor(op);\n if (!fieldDefinitions) return { op, status: \"blocked\", reason: `no field input for \"${op.type}\"` };\n\n const data = await execute<{ metaobjectDefinitionUpdate: MutationPayload }>(client, UPDATE_DEFINITION_MUTATION, { id, definition: { fieldDefinitions } });\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: { key: string; name: string; description?: string; required: boolean; validations: FieldValidation[] } = {\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 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"],"mappings":";;;;;;;;;AAQO,IAAe,QAAf,MAAoE;AAAA;AAAA,EAGtD,aAAsB;AAAA,EACzC,WAAW;AAAA,EACX;AAAA,EACA;AAAA;AAAA,EAiBU,MAAM,QAAuB;AACrC,WAAO,CAAC;AAAA,EACV;AAAA;AAAA,EAGA,OAAO,MAAmC;AACxC,QAAIA,QAAO;AACX,QAAI,KAAK,cAAc,OAAO,SAAS,UAAU;AAC/C,UAAI;AACF,QAAAA,QAAO,KAAK,MAAM,IAAI;AAAA,MACxB,QAAQ;AACN,eAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,8BAA8B,CAAC,EAAE;AAAA,MAChE;AAAA,IACF;AACA,WAAO,KAAK,SAASA,KAAI;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,MAAmC;AACxC,UAAM,UAAU,KAAK,OAAO,IAAI;AAChC,QAAI,QAAQ,OAAQ,QAAO;AAC3B,UAAM,SAAS,KAAK,MAAM,QAAQ,KAAK;AACvC,WAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,EAC7D;AAAA;AAAA,EAGA,OAAO,OAAoB;AACzB,UAAMA,QAAO,KAAK,OAAO,KAAK;AAC9B,WAAO,KAAK,aAAa,KAAK,UAAUA,KAAI,IAAI,OAAOA,KAAI;AAAA,EAC7D;AAAA;AAAA,EAGA,cAAc,OAAqB;AACjC,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA;AAAA,EAEA,gBAAgBA,OAAmC;AACjD,UAAM,UAAU,KAAK,SAASA,KAAI;AAClC,QAAI,QAAQ,OAAQ,QAAO;AAC3B,UAAM,SAAS,KAAK,MAAM,QAAQ,KAAK;AACvC,WAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,EAC7D;AAAA,EAEA,KAAK,WAAW,IAAuC;AACrD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC,UAAmB;AAC5B,cAAM,SAAS,KAAK,MAAM,KAAa;AACvC,eAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,MAAqB;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;;;AC5EA,IAAM,eAAN,cAA8C,MAA2B;AAAA,EAC9D,cAAc;AAAA,EACvB,YAAY,MAAyB;AACnC,UAAM;AACN,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EACA,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AAAA,EACU,OAAO,OAAyB;AACxC,WAAO;AAAA,EACT;AAAA,EACU,SAASC,OAAsC;AACvD,QAAI,OAAOA,UAAS,UAAW,QAAO,EAAE,OAAOA,MAAK;AACpD,QAAIA,UAAS,OAAQ,QAAO,EAAE,OAAO,KAAK;AAC1C,QAAIA,UAAS,QAAS,QAAO,EAAE,OAAO,MAAM;AAC5C,WAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,2BAA2BA,KAAI,GAAG,CAAC,EAAE;AAAA,EACpE;AACF;AAEO,SAAS,QAAmC,OAA0B,CAAC,GAAoB;AAChG,SAAO,IAAI,aAAgB,IAAI;AACjC;;;ACnBA,IAAM,YAAN,cAA2E,MAAsC;AAAA,EAG/G,YAA6B,OAA2B,GAAmB;AACzE,UAAM;AADqB;AAA2B;AAEtD,SAAK,cAAc,QAAQ,MAAM,WAAW;AAC5C,SAAK,WAAW,EAAE,YAAY;AAC9B,SAAK,OAAO,EAAE;AACd,SAAK,cAAc,EAAE;AAAA,EACvB;AAAA,EAN6B;AAAA,EAA2B;AAAA,EAF/C;AAAA,EACmB,aAAa;AAAA,EAQzC,cAAiC;AAC/B,UAAMC,KAAI,CAAC,GAAG,KAAK,MAAM,YAAY,CAAC;AACtC,QAAI,KAAK,EAAE,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,YAAY,OAAO,OAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9E,QAAI,KAAK,EAAE,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,YAAY,OAAO,OAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9E,WAAOA;AAAA,EACT;AAAA,EACU,OAAO,OAA8B;AAC7C,WAAO,MAAM,IAAI,CAAC,OAAO,KAAK,MAAM,cAAc,EAAE,CAAC;AAAA,EACvD;AAAA,EACU,SAASC,OAA4C;AAC7D,QAAI,CAAC,MAAM,QAAQA,KAAI,EAAG,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,oBAAoB,CAAC,EAAE;AAC9E,UAAM,MAAqB,CAAC;AAC5B,UAAM,SAAkB,CAAC;AACzB,IAAAA,MAAK,QAAQ,CAAC,IAAI,UAAU;AAC1B,YAAM,IAAI,KAAK,MAAM,gBAAgB,EAAE;AACvC,UAAI,EAAE,OAAQ,QAAO,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,OAAO,GAAI,EAAE,QAAQ,CAAC,CAAE,EAAE,EAAE,CAAC;AAAA,UACzF,KAAI,KAAK,EAAE,KAAK;AAAA,IACvB,CAAC;AACD,WAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,IAAI;AAAA,EACnD;AACF;AAEO,SAAS,KACd,OACA,OAAuB,CAAC,GACP;AACjB,SAAO,IAAI,UAAgB,OAAO,IAAI;AACxC;;;ACtCA,IAAM,mBAAN,cAAkD,MAA2B;AAAA,EAE3E,YAAY,MAAkC,aAAgD;AAC5F,UAAM;AADsC;AAE5C,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EAL8C;AAAA,EADlB,aAAa;AAAA,EAOzC,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AAAA,EACU,OAAO,OAAyB;AACxC,WAAO,EAAE,OAAO,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,EAChD;AAAA,EACU,SAASC,OAAsC;AACvD,QAAI,OAAOA,UAAS,YAAYA,UAAS,KAAM,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,gCAAgC,CAAC,EAAE;AAC/G,UAAM,IAAIA;AACV,UAAM,QAAQ,OAAO,EAAE,UAAU,WAAW,OAAO,EAAE,KAAK,IAAI,EAAE;AAChE,QAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,OAAO,EAAE,SAAS,UAAU;AAClF,aAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,qDAAqD,CAAC,EAAE;AAAA,IACvF;AACA,WAAO,EAAE,OAAO,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE;AAAA,EAC1C;AACF;AAEO,SAAS,UAAqC,OAA0B,CAAC,GAAwB;AACtG,SAAO,IAAI,iBAAoB,MAAM,WAAW;AAClD;AACO,SAAS,OAAkC,OAA0B,CAAC,GAAwB;AACnG,SAAO,IAAI,iBAAoB,MAAM,QAAQ;AAC/C;AACO,SAAS,OAAkC,OAA0B,CAAC,GAAwB;AACnG,SAAO,IAAI,iBAAoB,MAAM,QAAQ;AAC/C;;;ACjCA,IAAM,aAAN,cAA4C,MAAuB;AAAA,EACxD,cAAc;AAAA,EACK,aAAa;AAAA,EACzC,YAAY,MAAuB;AACjC,UAAM;AACN,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EACA,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AAAA,EACU,OAAO,OAAuB;AACtC,WAAO,EAAE,QAAQ,MAAM,QAAQ,eAAe,MAAM,aAAa;AAAA,EACnE;AAAA,EACU,SAASC,OAAoC;AACrD,QAAI,OAAOA,UAAS,YAAYA,UAAS,KAAM,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,0BAA0B,CAAC,EAAE;AACzG,UAAM,IAAIA;AACV,QAAI,OAAO,EAAE,WAAW,YAAY,OAAO,EAAE,kBAAkB,UAAU;AACvE,aAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,iDAAiD,CAAC,EAAE;AAAA,IACnF;AACA,WAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,cAAc,EAAE,cAAc,EAAE;AAAA,EACtE;AACF;AAEO,SAAS,MAAiC,OAAwB,CAAC,GAAkB;AAC1F,SAAO,IAAI,WAAc,IAAI;AAC/B;;;AC1BA,IAAe,eAAf,cAAuD,MAAyB;AAAA,EAC9E,YAA+B,MAAwB;AACrD,UAAM;AADuB;AAE7B,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EAL+B;AAAA,EAMrB,OAAO,OAAwB;AACvC,WAAO;AAAA,EACT;AAAA,EACU,SAASC,OAAqC;AACtD,UAAM,IAAI,OAAOA,UAAS,WAAW,OAAOA,KAAI,IAAIA;AACpD,QAAI,OAAO,MAAM,YAAY,OAAO,MAAM,CAAC,EAAG,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,0BAA0BA,KAAI,GAAG,CAAC,EAAE;AAC/G,WAAO,EAAE,OAAO,EAAE;AAAA,EACpB;AAAA,EACU,YAAY,OAAwB;AAC5C,UAAM,IAAa,CAAC;AACpB,QAAI,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,KAAK,IAAK,GAAE,KAAK,EAAE,SAAS,oBAAoB,KAAK,KAAK,GAAG,GAAG,CAAC;AAC3G,QAAI,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,KAAK,IAAK,GAAE,KAAK,EAAE,SAAS,mBAAmB,KAAK,KAAK,GAAG,GAAG,CAAC;AAC1G,WAAO;AAAA,EACT;AAAA,EACU,kBAAqC;AAC7C,UAAMC,KAAuB,CAAC;AAC9B,QAAI,KAAK,KAAK,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAC/E,QAAI,KAAK,KAAK,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAC/E,WAAOA;AAAA,EACT;AACF;AAEA,IAAM,eAAN,cAA8C,aAAgB;AAAA,EACnD,cAAc;AAAA,EACvB,cAAiC;AAC/B,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EACmB,MAAM,OAAwB;AAC/C,UAAM,IAAI,KAAK,YAAY,KAAK;AAChC,QAAI,CAAC,OAAO,UAAU,KAAK,EAAG,GAAE,QAAQ,EAAE,SAAS,qBAAqB,CAAC;AACzE,WAAO;AAAA,EACT;AACF;AAEA,IAAM,eAAN,cAA8C,aAAgB;AAAA,EAE5D,YAA6B,aAAgC;AAC3D,UAAM,WAAW;AADU;AAAA,EAE7B;AAAA,EAF6B;AAAA,EADpB,cAAc;AAAA,EAIvB,cAAiC;AAC/B,UAAMA,KAAI,KAAK,gBAAgB;AAC/B,QAAI,KAAK,YAAY,gBAAgB,MAAM;AACzC,MAAAA,GAAE,KAAK,EAAE,MAAM,iBAAiB,OAAO,OAAO,KAAK,YAAY,YAAY,EAAE,CAAC;AAAA,IAChF;AACA,WAAOA;AAAA,EACT;AAAA,EACmB,MAAM,OAAwB;AAC/C,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AACF;AAEO,SAAS,QAAmC,OAAyB,CAAC,GAAoB;AAC/F,SAAO,IAAI,aAAgB,IAAI;AACjC;AACO,SAAS,QAAmC,OAA0B,CAAC,GAAoB;AAChG,SAAO,IAAI,aAAgB,IAAI;AACjC;;;ACzDA,IAAM,cAAN,cAA6C,MAA8B;AAAA,EAGzE,YAA6B,GAAqB;AAChD,UAAM;AADqB;AAE3B,SAAK,WAAW,EAAE,YAAY;AAC9B,SAAK,OAAO,EAAE;AACd,SAAK,cAAc,EAAE;AAAA,EACvB;AAAA,EAL6B;AAAA,EAFpB,cAAc;AAAA,EACK,aAAa;AAAA,EAOzC,cAAiC;AAC/B,WAAO;AAAA,MACL,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,EAAE,GAAG,EAAE;AAAA,MACzC,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,EAAE,GAAG,EAAE;AAAA,IAC3C;AAAA,EACF;AAAA,EACU,OAAO,OAA6B;AAC5C,WAAO,EAAE,OAAO,OAAO,MAAM,KAAK,GAAG,WAAW,OAAO,KAAK,EAAE,GAAG,GAAG,WAAW,OAAO,KAAK,EAAE,GAAG,EAAE;AAAA,EACpG;AAAA,EACU,SAASC,OAAqC;AACtD,QAAI,OAAOA,UAAS,YAAYA,UAAS,KAAM,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,2BAA2B,CAAC,EAAE;AAC1G,UAAM,IAAIA;AACV,UAAM,QAAQ,OAAO,EAAE,KAAK;AAC5B,UAAM,WAAW,OAAO,EAAE,SAAS;AACnC,UAAM,WAAW,OAAO,EAAE,SAAS;AACnC,QAAI,CAAC,OAAO,UAAU,QAAQ,EAAE,KAAK,OAAO,KAAK,GAAG;AAClD,aAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,sDAAsD,CAAC,EAAE;AAAA,IACxF;AACA,WAAO,EAAE,OAAO,EAAE,OAAO,UAAU,SAAS,EAAE;AAAA,EAChD;AAAA,EACmB,MAAM,OAAwB;AAC/C,WAAO,MAAM,QAAQ,MAAM,YAAY,MAAM,QAAQ,MAAM,WACvD,CAAC,EAAE,SAAS,0BAA0B,MAAM,QAAQ,QAAQ,MAAM,QAAQ,GAAG,CAAC,IAC9E,CAAC;AAAA,EACP;AAAA,EACA,KAAc,WAAW,IAAiD;AACxE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC,UAAmB;AAC5B,YACE,OAAO,UAAU,YACjB,UAAU,QACV,OAAQ,MAA8B,UAAU,UAChD;AACA,iBAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,4CAA4C,CAAC,EAAE;AAAA,QAC9E;AACA,cAAM,YAAoB;AAAA,UACxB,OAAQ,MAAsB;AAAA,UAC9B,UAAU,KAAK,EAAE;AAAA,UACjB,UAAU,KAAK,EAAE;AAAA,QACnB;AACA,cAAM,SAAS,KAAK,MAAM,SAAS;AACnC,eAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,UAAU;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,OAAkC,MAAwC;AACxF,SAAO,IAAI,YAAe,IAAI;AAChC;;;ACvEA,IAAe,WAAf,cAAmD,MAAyB;AAAA,EAC1E,YAAY,MAAqB;AAC/B,UAAM;AACN,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EACU,OAAO,OAAwB;AACvC,WAAO;AAAA,EACT;AAAA,EACU,SAASC,OAAqC;AACtD,QAAI,OAAOA,UAAS,SAAU,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,8BAA8B,OAAOA,KAAI,GAAG,CAAC,EAAE;AAC1G,WAAO,EAAE,OAAOA,MAAK;AAAA,EACvB;AACF;AAEA,IAAM,iBAAN,cAAgD,SAAY;AAAA,EAC1D,YAAY,MAA8B,aAAqB;AAC7D,UAAM,IAAI;AAD8B;AAAA,EAE1C;AAAA,EAF0C;AAAA,EAG1C,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AACF;AAMA,IAAM,YAAN,cAA2C,SAAY;AAAA,EAErD,YAA6B,GAAmB;AAC9C,UAAM,CAAC;AADoB;AAAA,EAE7B;AAAA,EAF6B;AAAA,EADpB,cAAc;AAAA,EAIvB,cAAiC;AAC/B,WAAO,KAAK,EAAE,UAAU,OAAO,CAAC,EAAE,MAAM,qBAAqB,OAAO,KAAK,UAAU,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC;AAAA,EAC1G;AACF;AAGA,SAAS,YAAY,QAAyB;AAC5C,SAAO,OAAO,WAAW,aAAa,OAAO,EAAE,OAAO,OAAO;AAC/D;AACA,IAAM,qBAAN,cAAoD,SAAY;AAAA,EAE9D,YAA6B,QAAiB,MAAqB;AACjE,UAAM,IAAI;AADiB;AAAA,EAE7B;AAAA,EAF6B;AAAA,EADpB,cAAc;AAAA,EAIvB,cAAiC;AAC/B,WAAO,CAAC,EAAE,MAAM,8BAA8B,OAAO,YAAY,KAAK,MAAM,EAAE,CAAC;AAAA,EACjF;AACF;AAEO,SAAS,QAAmC,OAAsB,CAAC,GAAG;AAC3E,SAAO,IAAI,eAAkB,MAAM,mBAAmB;AACxD;AACO,SAAS,QAAmC,OAAsB,CAAC,GAAG;AAC3E,SAAO,IAAI,eAAkB,MAAM,mBAAmB;AACxD;AACO,SAAS,WAAsC,OAAsB,CAAC,GAAG;AAC9E,SAAO,IAAI,eAAkB,MAAM,sBAAsB;AAC3D;AACO,SAAS,KAAgC,OAAsB,CAAC,GAAG;AACxE,SAAO,IAAI,eAAkB,MAAM,gBAAgB;AACrD;AACO,SAAS,KAAgC,OAAuB,CAAC,GAAG;AACzE,SAAO,IAAI,UAAa,IAAI;AAC9B;AACO,SAAS,IAA+B,QAAiB,OAAsB,CAAC,GAAG;AACxF,SAAO,IAAI,mBAAsB,QAAQ,IAAI;AAC/C;;;ACtEA,IAAe,oBAAf,cAA4D,MAAyB;AAAA,EACnF,YAAY,MAAsB;AAChC,UAAM;AACN,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EACU,OAAO,OAAwB;AACvC,WAAO;AAAA,EACT;AAAA,EACU,SAASC,OAAqC;AACtD,QAAI,OAAOA,UAAS,SAAU,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,wBAAwB,OAAOA,KAAI,GAAG,CAAC,EAAE;AACpG,WAAO,EAAE,OAAOA,MAAK;AAAA,EACvB;AACF;AAMA,IAAM,YAAN,cAA2C,kBAAqB;AAAA,EAC9D,YAA6B,GAA4B,aAAmC;AAC1F,UAAM,CAAC;AADoB;AAA4B;AAAA,EAEzD;AAAA,EAF6B;AAAA,EAA4B;AAAA,EAGzD,cAAiC;AAC/B,UAAMC,KAAuB,CAAC;AAC9B,QAAI,KAAK,EAAE,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE,IAAI,CAAC;AACjE,QAAI,KAAK,EAAE,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,KAAK,EAAE,IAAI,CAAC;AACjE,WAAOA;AAAA,EACT;AACF;AAKA,IAAM,WAAN,cAA0C,kBAAqB;AAAA,EAE7D,YAA6B,GAAkB;AAC7C,UAAM,CAAC;AADoB;AAAA,EAE7B;AAAA,EAF6B;AAAA,EADpB,cAAc;AAAA,EAIvB,cAAiC;AAC/B,WAAO,KAAK,EAAE,kBAAkB,OAC5B,CAAC,EAAE,MAAM,mBAAmB,OAAO,KAAK,UAAU,KAAK,EAAE,cAAc,EAAE,CAAC,IAC1E,CAAC;AAAA,EACP;AACF;AAEA,IAAM,aAAN,cAA4C,kBAAqB;AAAA,EACtD,cAAc;AAAA,EACvB,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AAAA,EACmB,MAAM,OAAwB;AAC/C,WAAO,qCAAqC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,mCAAmC,CAAC;AAAA,EACjH;AACF;AAEA,IAAM,YAAN,cAA2C,MAA2B;AAAA,EAC3D,cAAc;AAAA,EACK,aAAa;AAAA,EACzC,YAAY,MAAsB;AAChC,UAAM;AACN,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EACA,cAAiC;AAC/B,WAAO,CAAC;AAAA,EACV;AAAA,EACU,OAAO,OAAyB;AACxC,WAAO;AAAA,EACT;AAAA,EACU,SAASD,OAAsC;AACvD,WAAO,EAAE,OAAOA,MAAK;AAAA,EACvB;AACF;AAEO,SAAS,KAAgC,OAAuB,CAAC,GAAiB;AACvF,SAAO,IAAI,UAAa,MAAM,MAAM;AACtC;AACO,SAAS,SAAoC,OAAuB,CAAC,GAAiB;AAC3F,SAAO,IAAI,UAAa,MAAM,WAAW;AAC3C;AACO,SAAS,IAA+B,OAAsB,CAAC,GAAgB;AACpF,SAAO,IAAI,SAAY,IAAI;AAC7B;AACO,SAAS,MAAiC,OAAuB,CAAC,GAAkB;AACzF,SAAO,IAAI,WAAc,IAAI;AAC/B;AACO,SAAS,KAAgC,OAAuB,CAAC,GAAiB;AACvF,SAAO,IAAI,UAAa,IAAI;AAC9B;;;ACtFA,IAAM,YAAN,cAA2C,MAAyB;AAAA,EAElE,YAA6B,MAAsB,WAAoB;AACrE,UAAM;AADqB;AAE3B,SAAK,cAAc,YAAY,0BAA0B;AACzD,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AAAA,EAC1B;AAAA,EAN6B;AAAA,EADpB;AAAA,EAQT,cAAiC;AAC/B,UAAME,KAAuB,CAAC;AAC9B,QAAI,KAAK,KAAK,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAC/E,QAAI,KAAK,KAAK,OAAO,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK,GAAG,EAAE,CAAC;AAC/E,QAAI,KAAK,KAAK,SAAS,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,KAAK,MAAM,CAAC;AAC7E,QAAI,KAAK,KAAK,WAAW,KAAM,CAAAA,GAAE,KAAK,EAAE,MAAM,WAAW,OAAO,KAAK,UAAU,KAAK,KAAK,OAAO,EAAE,CAAC;AACnG,WAAOA;AAAA,EACT;AAAA,EACU,OAAO,OAAwB;AACvC,WAAO;AAAA,EACT;AAAA,EACU,SAASC,OAAqC;AACtD,QAAI,OAAOA,UAAS,SAAU,QAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,wBAAwB,OAAOA,KAAI,GAAG,CAAC,EAAE;AACpG,WAAO,EAAE,OAAOA,MAAK;AAAA,EACvB;AAAA,EACmB,MAAM,OAAwB;AAC/C,UAAM,IAAa,CAAC;AACpB,UAAM,EAAE,KAAK,KAAK,OAAO,QAAQ,IAAI,KAAK;AAC1C,QAAI,OAAO,QAAQ,MAAM,SAAS,IAAK,GAAE,KAAK,EAAE,SAAS,oBAAoB,GAAG,cAAc,CAAC;AAC/F,QAAI,OAAO,QAAQ,MAAM,SAAS,IAAK,GAAE,KAAK,EAAE,SAAS,mBAAmB,GAAG,cAAc,CAAC;AAC9F,QAAI,SAAS,QAAQ,CAAC,IAAI,OAAO,KAAK,EAAE,KAAK,KAAK,EAAG,GAAE,KAAK,EAAE,SAAS,cAAc,KAAK,GAAG,CAAC;AAC9F,QAAI,WAAW,QAAQ,CAAC,QAAQ,SAAS,KAAK,EAAG,GAAE,KAAK,EAAE,SAAS,mBAAmB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC;AAC5G,WAAO;AAAA,EACT;AACF;AAEO,SAAS,KAAgC,OAAuB,CAAC,GAAiB;AACvF,SAAO,IAAI,UAAa,MAAM,KAAK;AACrC;AACO,SAAS,cAAyC,OAA4B,CAAC,GAAiB;AACrG,SAAO,IAAI,UAAa,MAAM,IAAI;AACpC;;;AC3CO,IAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACXA,SAAS,UAAU,QAA4D;AAC7E,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,MAA+C,CAAC;AACtD,MAAI,OAAO,MAAO,KAAI,QAAQ,OAAO,MAAM,YAAY;AACvD,MAAI,OAAO,WAAY,KAAI,aAAa,OAAO,WAAW,YAAY;AACtE,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAsE;AAC7F,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,MAA4C,CAAC;AACnD,aAAW,CAAC,GAAGC,EAAC,KAAK,OAAO,QAAQ,IAAI,EAAG,KAAIA,MAAK,KAAM,KAAI,CAAC,IAAI,EAAE,SAASA,GAAE;AAChF,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAEO,SAAS,kBAAsC,QAAwD;AAC5G,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,mBAA2C,OAAO,QAAQ,OAAO,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnG,UAAM,MAA4B;AAAA,MAChC;AAAA,MACA,MAAM,MAAM,QAAQ;AAAA,MACpB,UAAU,MAAM;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM,YAAY;AAAA,IACjC;AACA,QAAI,MAAM,eAAe,KAAM,KAAI,cAAc,MAAM;AACvD,WAAO;AAAA,EACT,CAAC;AAED,QAAM,MAAiC;AAAA,IACrC,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb;AAAA,EACF;AACA,MAAI,OAAO,eAAe,KAAM,KAAI,cAAc,OAAO;AACzD,MAAI,OAAO,eAAe,KAAM,KAAI,iBAAiB,OAAO;AAC5D,QAAM,SAAS,UAAU,OAAO,MAAM;AACtC,MAAI,OAAQ,KAAI,SAAS;AACzB,QAAM,eAAe,gBAAgB,OAAO,YAAY;AACxD,MAAI,aAAc,KAAI,eAAe;AACrC,SAAO;AACT;;;ACvBA,SAAS,WAAW,OAAyC;AAC3D,QAAM,MAAM,oBAAI,IAAqB;AACrC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,KAAK,MAAO,KAAI,IAAI,EAAE,KAAK,eAAe,KAAK,EAAE,cAAc,SAAY,EAAE,YAAY,EAAE,KAAK;AAAA,EAC7G,OAAO;AACL,eAAW,CAAC,GAAGC,EAAC,KAAK,OAAO,QAAQ,KAAgC,EAAG,KAAI,IAAI,GAAGA,EAAC;AAAA,EACrF;AACA,SAAO;AACT;AAQO,SAAS,iBACd,QACA,QACkD;AAClD,QAAM,OAAO,QAAQ,MAAM;AAC3B,QAAM,UAAU,OAAO,QAAQ,OAAO,MAAkB;AAExD,WAAS,MAAM,OAAmB;AAChC,UAAM,SAAS,WAAW,KAAK;AAC/B,UAAM,MAA+B,CAAC;AACtC,UAAM,SAAkB,CAAC;AACzB,eAAW,CAAC,KAAK,KAAK,KAAK,SAAS;AAClC,UAAI,CAAC,OAAO,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,UAAa,OAAO,IAAI,GAAG,MAAM,MAAM;AACjF,YAAI,MAAM,SAAU,QAAO,KAAK,EAAE,SAAS,2BAA2B,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;AAC3F;AAAA,MACF;AACA,YAAM,IAAI,MAAM,OAAO,OAAO,IAAI,GAAG,CAAC;AACtC,UAAI,EAAE,OAAQ,QAAO,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,GAAI,EAAE,QAAQ,CAAC,CAAE,EAAE,EAAE,CAAC;AAAA,UACvF,KAAI,GAAG,IAAI,EAAE;AAAA,IACpB;AACA,WAAO,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,OAAO,IAAI;AAAA,EACnD;AAEA,WAAS,OAAO,OAAgC;AAC9C,UAAM,SAAgD,CAAC;AACvD,eAAW,CAAC,KAAK,KAAK,KAAK,SAAS;AAClC,YAAMA,KAAI,MAAM,GAAG;AACnB,UAAIA,OAAM,OAAW;AACrB,aAAO,KAAK,EAAE,KAAK,OAAO,MAAM,OAAOA,EAAC,EAAE,CAAC;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,OAAO;AAAA,IACf;AAAA,IACA;AAAA,IACA,mBAAmB,MAAM,kBAAkB,SAAkD;AAAA,IAC7F,CAAC,WAAW,GAAG;AAAA,MACb,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU,CAAC,UAAmB,MAAM,KAAmB;AAAA,IACzD;AAAA,EACF;AACA,SAAO;AACT;;;ACrGA,IAAM,aAAa;AAGnB,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,UAA4B;AACnF,QAAM,MAAM,YAAY,cAAc,OAAO,UAAU,OAAO,CAAC;AAC/D,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,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,WAAO,MAAM,WAAW,eAAe,KAAK,0BAA0B,eAAe,KAAK;AAAA,EAC5F;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,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,QAAQ;AAEjE,WAAS,KAAK,wBAAwB,IAAI,eAAe,MAAM,GAAG,GAAG;AACrE,SAAO,mCAAmC,IAAI;AAChD;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,QAAM,OAAO,IAAI,OAAO;AAAA,UAAa,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM;AACnE,SAAO,gBAAgB,KAAK,uBAAuB,KAAK,UAAU,MAAM,CAAC,MAAM,IAAI;AAAA;AAAA,EAEnF,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;;;AC/NA,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;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,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;AAAA,EACF;AAEA,SAAO;AACT;;;ACtCO,SAAS,eAAmC,QAA+C;AAChG,QAAM,MAAM,OAAO,kBAAkB;AACrC,SAAO;AAAA,IACL,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI,iBAAiB,IAAI,CAAC,OAAO;AAAA,MACvC,KAAK,EAAE;AAAA,MACP,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,aAAa,EAAE;AAAA,IACjB,EAAE;AAAA,EACJ;AACF;AAcO,SAAS,gBAAgB,KAAyC;AACvE,SAAO;AAAA,IACL,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,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,aAAa,EAAE,eAAe,CAAC;AAAA,IACjC,EAAE;AAAA,EACJ;AACF;;;ACtBA,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;AAAA,MACP,IAAI,KAAK;AAAA,MACT;AAAA,MACA,YAAY,EAAE,MAAM,MAAM,KAAK,MAAM,kBAAkB,KAAK,iBAAiB;AAAA,IAC/E,CAAC;AAAA,EACH;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,EAAE,MAAM,MAAM,KAAK,MAAM,kBAAkB,KAAK,iBAAiB,EAAE,CAAC;AAAA,IAChH;AACA,YAAQ,KAAK,sBAAsB,SAAS,cAAc,KAAK,sBAAsB,SAAS,YAAY;AAAA,EAC5G,SAAS,UAAU;AACnB,SAAO;AACT;;;ACnDA,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,GAAG,SAAS,iBAAiB,GAAG,SAAS;AAC7D,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,UAAM,mBAAmB,YAAY,EAAE;AACvC,QAAI,CAAC,iBAAkB,QAAO,EAAE,IAAI,QAAQ,WAAW,QAAQ,uBAAuB,GAAG,IAAI,IAAI;AAEjG,UAAM,OAAO,MAAM,QAAyD,QAAQ,4BAA4B,EAAE,IAAI,YAAY,EAAE,iBAAiB,EAAE,CAAC;AACxJ,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,SAAiH;AAAA,UACrH,KAAK,MAAM;AAAA,UACX,MAAM,MAAM;AAAA,UACZ,UAAU,MAAM;AAAA,UAChB,aAAa,MAAM;AAAA,QACrB;AACA,YAAI,MAAM,eAAe,KAAM,QAAO,cAAc,MAAM;AAC1D,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;","names":["json","json","v","json","json","json","json","v","json","json","json","v","v","json","v","v","v","m","v","list","data","payload","id"]}
@@ -0,0 +1,31 @@
1
+ import {
2
+ DEFAULT_API_VERSION,
3
+ SyncTransportError
4
+ } from "./chunk-3R6VQ3Z3.js";
5
+
6
+ // src/node/client.ts
7
+ function createAdminClient(opts) {
8
+ const version = opts.apiVersion ?? DEFAULT_API_VERSION;
9
+ const endpoint = `https://${opts.shop}/admin/api/${version}/graphql.json`;
10
+ return async (query, options) => {
11
+ let res;
12
+ try {
13
+ res = await fetch(endpoint, {
14
+ method: "POST",
15
+ headers: { "Content-Type": "application/json", "X-Shopify-Access-Token": opts.accessToken },
16
+ body: JSON.stringify({ query, variables: options?.variables })
17
+ });
18
+ } catch (cause) {
19
+ throw new SyncTransportError(`Request to ${opts.shop} failed`, cause);
20
+ }
21
+ if (!res.ok) {
22
+ throw new SyncTransportError(`Admin API returned HTTP ${res.status}`, await res.text().catch(() => null));
23
+ }
24
+ return res.json();
25
+ };
26
+ }
27
+
28
+ export {
29
+ createAdminClient
30
+ };
31
+ //# sourceMappingURL=chunk-PFU5VAO7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node/client.ts"],"sourcesContent":["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"],"mappings":";;;;;;AASO,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;","names":[]}