@fmaplabs/meta-manifest 0.3.0 → 0.4.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/index.d.cts
CHANGED
|
@@ -269,12 +269,19 @@ declare class MetaobjectRefField<R extends boolean> extends GidField<R> {
|
|
|
269
269
|
constructor(target: TypeRef, opts: RefOptions<R>);
|
|
270
270
|
validations(): FieldValidation[];
|
|
271
271
|
}
|
|
272
|
+
declare class MixedRefField<R extends boolean> extends GidField<R> {
|
|
273
|
+
private readonly targets;
|
|
274
|
+
readonly shopifyType = "mixed_reference";
|
|
275
|
+
constructor(targets: readonly TypeRef[], opts: RefOptions<R>);
|
|
276
|
+
validations(): FieldValidation[];
|
|
277
|
+
}
|
|
272
278
|
declare function product<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
273
279
|
declare function variant<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
274
280
|
declare function collection<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
275
281
|
declare function page<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
276
282
|
declare function file<R extends boolean = false>(opts?: FileOptions<R>): FileField<R>;
|
|
277
283
|
declare function ref<R extends boolean = false>(target: TypeRef, opts?: RefOptions<R>): MetaobjectRefField<R>;
|
|
284
|
+
declare function mixedRef<R extends boolean = false>(targets: readonly TypeRef[], opts?: RefOptions<R>): MixedRefField<R>;
|
|
278
285
|
|
|
279
286
|
interface BaseOptions<R extends boolean = false> extends CommonFieldOptions {
|
|
280
287
|
required?: R;
|
|
@@ -364,6 +371,7 @@ declare const m: {
|
|
|
364
371
|
readonly page: typeof page;
|
|
365
372
|
readonly file: typeof file;
|
|
366
373
|
readonly ref: typeof ref;
|
|
374
|
+
readonly mixedRef: typeof mixedRef;
|
|
367
375
|
readonly list: typeof list;
|
|
368
376
|
};
|
|
369
377
|
|
|
@@ -721,8 +729,10 @@ type UserError = {
|
|
|
721
729
|
* thrown); only transport / top-level GraphQL errors propagate. [design §7, §8]
|
|
722
730
|
*
|
|
723
731
|
* Create ops run in dependency order (a referenced type before its referencer);
|
|
724
|
-
* types in a reference cycle are
|
|
725
|
-
*
|
|
732
|
+
* types entangled in a reference cycle are created two-pass — created with the
|
|
733
|
+
* cycle-breaking ref fields stripped, then updated to add them once every member
|
|
734
|
+
* exists. Results are returned in plan order; client calls happen in execution
|
|
735
|
+
* order. [design §7]
|
|
726
736
|
*/
|
|
727
737
|
declare function push(client: AdminGraphQLClient, plan: DiffOp[], sources: {
|
|
728
738
|
definitions: MetaobjectDefinitionInput[];
|
package/dist/index.d.ts
CHANGED
|
@@ -269,12 +269,19 @@ declare class MetaobjectRefField<R extends boolean> extends GidField<R> {
|
|
|
269
269
|
constructor(target: TypeRef, opts: RefOptions<R>);
|
|
270
270
|
validations(): FieldValidation[];
|
|
271
271
|
}
|
|
272
|
+
declare class MixedRefField<R extends boolean> extends GidField<R> {
|
|
273
|
+
private readonly targets;
|
|
274
|
+
readonly shopifyType = "mixed_reference";
|
|
275
|
+
constructor(targets: readonly TypeRef[], opts: RefOptions<R>);
|
|
276
|
+
validations(): FieldValidation[];
|
|
277
|
+
}
|
|
272
278
|
declare function product<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
273
279
|
declare function variant<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
274
280
|
declare function collection<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
275
281
|
declare function page<R extends boolean = false>(opts?: RefOptions<R>): SimpleRefField<R>;
|
|
276
282
|
declare function file<R extends boolean = false>(opts?: FileOptions<R>): FileField<R>;
|
|
277
283
|
declare function ref<R extends boolean = false>(target: TypeRef, opts?: RefOptions<R>): MetaobjectRefField<R>;
|
|
284
|
+
declare function mixedRef<R extends boolean = false>(targets: readonly TypeRef[], opts?: RefOptions<R>): MixedRefField<R>;
|
|
278
285
|
|
|
279
286
|
interface BaseOptions<R extends boolean = false> extends CommonFieldOptions {
|
|
280
287
|
required?: R;
|
|
@@ -364,6 +371,7 @@ declare const m: {
|
|
|
364
371
|
readonly page: typeof page;
|
|
365
372
|
readonly file: typeof file;
|
|
366
373
|
readonly ref: typeof ref;
|
|
374
|
+
readonly mixedRef: typeof mixedRef;
|
|
367
375
|
readonly list: typeof list;
|
|
368
376
|
};
|
|
369
377
|
|
|
@@ -721,8 +729,10 @@ type UserError = {
|
|
|
721
729
|
* thrown); only transport / top-level GraphQL errors propagate. [design §7, §8]
|
|
722
730
|
*
|
|
723
731
|
* Create ops run in dependency order (a referenced type before its referencer);
|
|
724
|
-
* types in a reference cycle are
|
|
725
|
-
*
|
|
732
|
+
* types entangled in a reference cycle are created two-pass — created with the
|
|
733
|
+
* cycle-breaking ref fields stripped, then updated to add them once every member
|
|
734
|
+
* exists. Results are returned in plan order; client calls happen in execution
|
|
735
|
+
* order. [design §7]
|
|
726
736
|
*/
|
|
727
737
|
declare function push(client: AdminGraphQLClient, plan: DiffOp[], sources: {
|
|
728
738
|
definitions: MetaobjectDefinitionInput[];
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fmaplabs/meta-manifest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Zero-dependency, zod-style builder for Shopify metaobject definitions, plus a CLI (mm) that syncs them to a store via pull → diff → push.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -1 +0,0 @@
|
|
|
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/resolve.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\n/** Options every field builder accepts, regardless of type. */\nexport interface CommonFieldOptions {\n name?: string;\n description?: string;\n required?: boolean;\n /** Expose this field as a filter in the admin (→ `capabilities.adminFilterable`). */\n filterable?: boolean;\n}\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 filterable = false;\n\n /** Apply the shared field options; call from each concrete constructor. */\n protected applyCommon(opts: CommonFieldOptions): void {\n this.required = opts.required ?? false;\n this.name = opts.name;\n this.description = opts.description;\n this.filterable = opts.filterable ?? false;\n }\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 CommonFieldOptions, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface BooleanOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 CommonFieldOptions, 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> extends CommonFieldOptions {\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.applyCommon(o);\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 CommonFieldOptions, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface Measure {\n value: number;\n unit: string;\n}\ninterface MeasureOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 CommonFieldOptions, type DecodeResult, type FieldValidation } from \"./base\";\n\nexport interface Money {\n amount: string;\n currencyCode: string;\n}\ninterface MoneyOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 CommonFieldOptions, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\nexport interface NumberOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 CommonFieldOptions, 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> extends CommonFieldOptions {\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.applyCommon(o);\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 CommonFieldOptions, type DecodeResult, type FieldValidation } from \"./base\";\n\ninterface RefOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 CommonFieldOptions, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\ninterface BaseOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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.applyCommon(opts);\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 CommonFieldOptions, type DecodeResult, type FieldValidation, type Issue } from \"./base\";\n\nexport interface TextOptions<R extends boolean = false> extends CommonFieldOptions {\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.applyCommon(opts);\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 FieldCapabilitiesInput {\n adminFilterable?: { enabled: boolean };\n}\nexport interface FieldDefinitionInput {\n key: string;\n name: string;\n description?: string;\n required: boolean;\n type: string;\n validations: FieldValidation[];\n capabilities?: FieldCapabilitiesInput;\n}\n\nexport interface AccessInput {\n admin?: string;\n storefront?: string;\n customerAccount?: string;\n}\nexport interface RenderableData {\n metaTitleKey?: string;\n metaDescriptionKey?: string;\n}\nexport interface OnlineStoreData {\n urlHandle: string;\n createRedirects?: boolean;\n}\nexport interface CapabilitiesInput {\n publishable?: { enabled: boolean };\n translatable?: { enabled: boolean };\n renderable?: { enabled: boolean; data?: RenderableData };\n onlineStore?: { enabled: boolean; data?: OnlineStoreData };\n}\nexport interface MetaobjectDefinitionInput {\n type: string;\n name: string;\n description?: string;\n displayNameKey?: string;\n access?: AccessInput;\n capabilities?: CapabilitiesInput;\n fieldDefinitions: FieldDefinitionInput[];\n}\n\nfunction mapAccess(access?: AccessConfig): AccessInput | undefined {\n if (!access) return undefined;\n const out: AccessInput = {};\n if (access.admin) out.admin = access.admin.toUpperCase();\n if (access.storefront) out.storefront = access.storefront.toUpperCase();\n if (access.customerAccount) out.customerAccount = access.customerAccount.toUpperCase();\n return out;\n}\n\nfunction mapCapabilities(caps?: CapabilitiesConfig): CapabilitiesInput | undefined {\n if (!caps) return undefined;\n const out: CapabilitiesInput = {};\n if (caps.publishable != null) out.publishable = { enabled: caps.publishable };\n if (caps.translatable != null) out.translatable = { enabled: caps.translatable };\n if (caps.renderable != null) {\n if (typeof caps.renderable === \"boolean\") {\n out.renderable = { enabled: caps.renderable };\n } else {\n const data: RenderableData = {};\n if (caps.renderable.metaTitleKey != null) data.metaTitleKey = caps.renderable.metaTitleKey;\n if (caps.renderable.metaDescriptionKey != null) data.metaDescriptionKey = caps.renderable.metaDescriptionKey;\n out.renderable = Object.keys(data).length ? { enabled: true, data } : { enabled: true };\n }\n }\n if (caps.onlineStore != null) {\n const data: OnlineStoreData = { urlHandle: caps.onlineStore.urlHandle };\n if (caps.onlineStore.createRedirects != null) data.createRedirects = caps.onlineStore.createRedirects;\n out.onlineStore = { enabled: true, data };\n }\n return Object.keys(out).length ? out : undefined;\n}\n\n/** Throws if a `renderable` SEO key doesn't name a declared field. [design §10] */\nfunction validateSeoKeys(caps: CapabilitiesConfig | undefined, fieldKeys: Set<string>, name: string): void {\n const r = caps?.renderable;\n if (!r || typeof r === \"boolean\") return;\n for (const prop of [\"metaTitleKey\", \"metaDescriptionKey\"] as const) {\n const key = r[prop];\n if (key != null && !fieldKeys.has(key)) {\n throw new Error(`renderable.${prop} \"${key}\" is not a declared field key on \"${name}\".`);\n }\n }\n}\n\nexport function toDefinitionInput<F extends FieldMap>(schema: MetaobjectSchema<F>): MetaobjectDefinitionInput {\n const { config } = schema;\n validateSeoKeys(config.capabilities, new Set(Object.keys(schema.fields)), config.name);\n\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 if (field.filterable) def.capabilities = { adminFilterable: { enabled: true } };\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 customerAccount?: \"none\" | \"read\";\n}\n/** SEO metadata: `true` enables with auto keys; an object maps field keys as title/description. */\nexport type RenderableConfig = boolean | { metaTitleKey?: string; metaDescriptionKey?: string };\n/** Publish entries as Online Store web pages. `urlHandle` is required by Shopify. */\nexport interface OnlineStoreConfig {\n urlHandle: string;\n createRedirects?: boolean;\n}\nexport interface CapabilitiesConfig {\n publishable?: boolean;\n translatable?: boolean;\n renderable?: RenderableConfig;\n onlineStore?: OnlineStoreConfig;\n}\nexport interface MetaobjectConfig<F> {\n name: string;\n description?: string;\n displayName?: keyof F & string;\n /** Override the global config scope for this metaobject. */\n scope?: \"app\" | \"merchant\";\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 { 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"],"mappings":";;;;;;;;;AAiBO,IAAe,QAAf,MAAoE;AAAA;AAAA,EAGtD,aAAsB;AAAA,EACzC,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,aAAa;AAAA;AAAA,EAGH,YAAY,MAAgC;AACpD,SAAK,WAAW,KAAK,YAAY;AACjC,SAAK,OAAO,KAAK;AACjB,SAAK,cAAc,KAAK;AACxB,SAAK,aAAa,KAAK,cAAc;AAAA,EACvC;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;;;AChGA,IAAM,eAAN,cAA8C,MAA2B;AAAA,EAC9D,cAAc;AAAA,EACvB,YAAY,MAAyB;AACnC,UAAM;AACN,SAAK,YAAY,IAAI;AAAA,EACvB;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;;;ACjBA,IAAM,YAAN,cAA2E,MAAsC;AAAA,EAG/G,YAA6B,OAA2B,GAAmB;AACzE,UAAM;AADqB;AAA2B;AAEtD,SAAK,cAAc,QAAQ,MAAM,WAAW;AAC5C,SAAK,YAAY,CAAC;AAAA,EACpB;AAAA,EAJ6B;AAAA,EAA2B;AAAA,EAF/C;AAAA,EACmB,aAAa;AAAA,EAMzC,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;;;ACpCA,IAAM,mBAAN,cAAkD,MAA2B;AAAA,EAE3E,YAAY,MAAkC,aAAgD;AAC5F,UAAM;AADsC;AAE5C,SAAK,YAAY,IAAI;AAAA,EACvB;AAAA,EAH8C;AAAA,EADlB,aAAa;AAAA,EAKzC,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;;;AC/BA,IAAM,aAAN,cAA4C,MAAuB;AAAA,EACxD,cAAc;AAAA,EACK,aAAa;AAAA,EACzC,YAAY,MAAuB;AACjC,UAAM;AACN,SAAK,YAAY,IAAI;AAAA,EACvB;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;;;ACxBA,IAAe,eAAf,cAAuD,MAAyB;AAAA,EAC9E,YAA+B,MAAwB;AACrD,UAAM;AADuB;AAE7B,SAAK,YAAY,IAAI;AAAA,EACvB;AAAA,EAH+B;AAAA,EAIrB,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;;;ACvDA,IAAM,cAAN,cAA6C,MAA8B;AAAA,EAGzE,YAA6B,GAAqB;AAChD,UAAM;AADqB;AAE3B,SAAK,YAAY,CAAC;AAAA,EACpB;AAAA,EAH6B;AAAA,EAFpB,cAAc;AAAA,EACK,aAAa;AAAA,EAKzC,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;;;ACrEA,IAAe,WAAf,cAAmD,MAAyB;AAAA,EAC1E,YAAY,MAAqB;AAC/B,UAAM;AACN,SAAK,YAAY,IAAI;AAAA,EACvB;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;;;ACpEA,IAAe,oBAAf,cAA4D,MAAyB;AAAA,EACnF,YAAY,MAAsB;AAChC,UAAM;AACN,SAAK,YAAY,IAAI;AAAA,EACvB;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,YAAY,IAAI;AAAA,EACvB;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;;;AClFA,IAAM,YAAN,cAA2C,MAAyB;AAAA,EAElE,YAA6B,MAAsB,WAAoB;AACrE,UAAM;AADqB;AAE3B,SAAK,cAAc,YAAY,0BAA0B;AACzD,SAAK,YAAY,IAAI;AAAA,EACvB;AAAA,EAJ6B;AAAA,EADpB;AAAA,EAMT,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;;;ACvCO,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;;;ACaA,SAAS,UAAU,QAAgD;AACjE,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,MAAmB,CAAC;AAC1B,MAAI,OAAO,MAAO,KAAI,QAAQ,OAAO,MAAM,YAAY;AACvD,MAAI,OAAO,WAAY,KAAI,aAAa,OAAO,WAAW,YAAY;AACtE,MAAI,OAAO,gBAAiB,KAAI,kBAAkB,OAAO,gBAAgB,YAAY;AACrF,SAAO;AACT;AAEA,SAAS,gBAAgB,MAA0D;AACjF,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,MAAyB,CAAC;AAChC,MAAI,KAAK,eAAe,KAAM,KAAI,cAAc,EAAE,SAAS,KAAK,YAAY;AAC5E,MAAI,KAAK,gBAAgB,KAAM,KAAI,eAAe,EAAE,SAAS,KAAK,aAAa;AAC/E,MAAI,KAAK,cAAc,MAAM;AAC3B,QAAI,OAAO,KAAK,eAAe,WAAW;AACxC,UAAI,aAAa,EAAE,SAAS,KAAK,WAAW;AAAA,IAC9C,OAAO;AACL,YAAM,OAAuB,CAAC;AAC9B,UAAI,KAAK,WAAW,gBAAgB,KAAM,MAAK,eAAe,KAAK,WAAW;AAC9E,UAAI,KAAK,WAAW,sBAAsB,KAAM,MAAK,qBAAqB,KAAK,WAAW;AAC1F,UAAI,aAAa,OAAO,KAAK,IAAI,EAAE,SAAS,EAAE,SAAS,MAAM,KAAK,IAAI,EAAE,SAAS,KAAK;AAAA,IACxF;AAAA,EACF;AACA,MAAI,KAAK,eAAe,MAAM;AAC5B,UAAM,OAAwB,EAAE,WAAW,KAAK,YAAY,UAAU;AACtE,QAAI,KAAK,YAAY,mBAAmB,KAAM,MAAK,kBAAkB,KAAK,YAAY;AACtF,QAAI,cAAc,EAAE,SAAS,MAAM,KAAK;AAAA,EAC1C;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,SAAS,MAAM;AACzC;AAGA,SAAS,gBAAgB,MAAsC,WAAwB,MAAoB;AACzG,QAAM,IAAI,MAAM;AAChB,MAAI,CAAC,KAAK,OAAO,MAAM,UAAW;AAClC,aAAW,QAAQ,CAAC,gBAAgB,oBAAoB,GAAY;AAClE,UAAM,MAAM,EAAE,IAAI;AAClB,QAAI,OAAO,QAAQ,CAAC,UAAU,IAAI,GAAG,GAAG;AACtC,YAAM,IAAI,MAAM,cAAc,IAAI,KAAK,GAAG,qCAAqC,IAAI,IAAI;AAAA,IACzF;AAAA,EACF;AACF;AAEO,SAAS,kBAAsC,QAAwD;AAC5G,QAAM,EAAE,OAAO,IAAI;AACnB,kBAAgB,OAAO,cAAc,IAAI,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC,GAAG,OAAO,IAAI;AAErF,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,QAAI,MAAM,WAAY,KAAI,eAAe,EAAE,iBAAiB,EAAE,SAAS,KAAK,EAAE;AAC9E,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;;;ACpEA,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;;;AChHA,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;AAEO,SAAS,eAAmC,QAA+C;AAChG,SAAO,oBAAoB,OAAO,kBAAkB,CAAC;AACvD;AA8BA,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;","names":["json","json","v","json","json","json","json","v","json","json","json","v","v","json","v","v","APP_PREFIX","v","m","v","list","data","payload","id"]}
|