content-type-to-typescript
Version:
Compile Contentful Models to TypeScript type definitions
1 lines • 17.6 kB
Source Map (JSON)
{"version":3,"file":"content-type-to-typescript","sources":["../../src/built-in-definitions.ts","../../src/parser.ts","../../src/generator.ts","../../src/log.ts","../../src/compile-from-space.ts","../../src/cli.ts"],"sourcesContent":["import { fromPairs, map } from 'lodash';\nimport { JSONSchema } from './types/json-schema';\n\nexport const Location: JSONSchema = {\n title: 'Location',\n properties: {\n lon: {\n type: 'number',\n description: '',\n additionalProperties: false,\n required: [],\n },\n lat: {\n type: 'number',\n description: '',\n additionalProperties: false,\n required: [],\n },\n },\n required: ['lat', 'lon'],\n additionalProperties: false,\n};\n\nexport const AssetLink: JSONSchema = {\n title: 'AssetLink',\n properties: {\n type: {\n type: 'string',\n description: '',\n additionalProperties: false,\n required: [],\n },\n linkType: {\n type: 'string',\n description: '',\n additionalProperties: false,\n required: [],\n },\n id: {\n type: 'string',\n additionalProperties: false,\n required: [],\n },\n },\n required: ['type', 'linkType', 'id'],\n additionalProperties: false,\n};\n\nexport const EntryLink: JSONSchema = {\n title: 'EntryLink',\n properties: {\n type: {\n type: 'string',\n description: '',\n additionalProperties: false,\n required: [],\n },\n linkType: {\n type: 'string',\n description: '',\n additionalProperties: false,\n required: [],\n },\n id: {\n type: 'string',\n additionalProperties: false,\n required: [],\n },\n },\n required: ['type', 'linkType', 'id'],\n additionalProperties: false,\n};\n\nexport const buildRef = (schema: JSONSchema) => {\n return `#/definitions/${schema.title}`;\n};\n\nexport const getByRef = (ref: string): JSONSchema => {\n const lookup = fromPairs(map([Location, EntryLink, AssetLink], (def) => [buildRef(def), def]));\n\n return lookup[ref];\n};\n","import { compile } from 'json-schema-to-typescript';\nimport { chain, fromPairs } from 'lodash';\nimport { AssetLink, buildRef, EntryLink, Location } from './built-in-definitions';\nimport { ContentType, Field } from './types/contentful';\nimport { JSONSchema } from './types/json-schema';\n\nfunction transformTitle(schema: JSONSchema, contentTypeInfo: ContentType) {\n return {\n ...schema,\n title: contentTypeInfo.name,\n };\n}\n\nfunction fieldToJsonSchema(fieldInfo: Field): any {\n let result: any;\n switch (fieldInfo.type) {\n case 'Symbol':\n case 'Text':\n case 'Date':\n result = {\n type: 'string',\n };\n break;\n case 'Number':\n case 'Integer':\n result = {\n type: 'number',\n };\n break;\n case 'Boolean':\n result = {\n type: 'boolean',\n };\n break;\n case 'Location':\n result = {\n $ref: buildRef(Location),\n };\n break;\n case 'Object':\n result = {\n type: 'object',\n };\n break;\n case 'Array':\n if (!fieldInfo.items) {\n throw new Error('Unexpected Content Type structure.');\n }\n result = {\n items: fieldToJsonSchema(fieldInfo.items),\n type: 'array',\n };\n break;\n case 'Link':\n if (fieldInfo.linkType === 'Asset') {\n result = {\n $ref: buildRef(AssetLink),\n };\n } else if (fieldInfo.linkType === 'Entry') {\n result = {\n $ref: buildRef(EntryLink),\n };\n } else {\n throw new Error('Unexpected Content Type structure.');\n }\n break;\n default:\n throw new Error(`Type ${fieldInfo.type} is not yet supported`);\n }\n\n return result;\n}\n\nfunction transformFields(contentTypeInfo: Partial<ContentType>): JSONSchema {\n const properties = chain(contentTypeInfo.fields)\n .filter((fieldInfo) => !fieldInfo.omitted)\n .map((fieldInfo) => [fieldInfo.id, fieldToJsonSchema(fieldInfo)])\n .fromPairs()\n .value();\n\n const required = chain(contentTypeInfo.fields)\n .filter((fieldInfo) => fieldInfo.required)\n .map((fieldInfo) => fieldInfo.id)\n .value();\n\n return {\n properties,\n required,\n additionalProperties: false,\n };\n}\n\nexport function convertToJSONSchema(contentTypeInfo: Partial<ContentType>): JSONSchema {\n const resultSchema: JSONSchema = {\n title: contentTypeInfo.name,\n description: contentTypeInfo.description,\n ...transformFields(contentTypeInfo),\n };\n\n return resultSchema;\n}\n","import { ContentType, Field } from 'contentful/index';\nimport { JSONSchema4 } from 'json-schema';\nimport { compile, Options } from 'json-schema-to-typescript';\nimport { chain, defaults, fromPairs, get, orderBy } from 'lodash';\nimport { buildRef, getByRef } from './built-in-definitions';\nimport { convertToJSONSchema } from './parser';\nimport { JSONSchema } from './types/json-schema';\n\nconst BANNER_COMMENT = `/**\n* This file was automatically generated.\n* DO NOT MODIFY IT BY HAND.\n*/`;\n\nexport async function compileFromContentTypes(\n contentTypes: Array<Partial<ContentType>>,\n options: Partial<Options> = {},\n): Promise<string> {\n const settings = defaults(\n {\n bannerComment: BANNER_COMMENT,\n },\n options,\n );\n\n const allDefinitions = includeRequiredDefinitions(\n contentTypes.map((ct) => convertToJSONSchema(ct)),\n );\n\n const resultSchema = {\n title: 'EphemeralContentfulSchemaRoot1',\n type: 'object',\n properties: chain(allDefinitions)\n .map((def) => [def.title, { $ref: buildRef(def) }])\n .fromPairs()\n .value(),\n definitions: chain(allDefinitions)\n .map((def) => [def.title, def])\n .fromPairs()\n .value(),\n };\n\n const res = await compile(resultSchema as JSONSchema4, EPHEMERAL_ROOT, settings);\n\n return cleanupEphemeralRoot(res);\n}\n\nconst EPHEMERAL_ROOT = 'EphemeralContentfulSchemaRoot1';\n\nfunction cleanupEphemeralRoot(input: string): string {\n return input.replace(new RegExp(`.+${EPHEMERAL_ROOT}.+[^{\\}]+(?=}).+\\n+`, 'gm'), '');\n}\n\nfunction getRefs(definition: JSONSchema): JSONSchema[] {\n return chain(definition.properties)\n .map((propSchema) => get(propSchema, '$ref'))\n .compact()\n .map((s) => getByRef(s))\n .compact()\n .value();\n}\n\nfunction includeRequiredDefinitions(definitions: JSONSchema[]): JSONSchema[] {\n const requiredBuiltInDefinitions: JSONSchema[] = chain(definitions)\n .map((def) => getRefs(def))\n .flatten()\n .value();\n\n const alphabetizedDefinitions = orderBy(definitions, ['title'], ['asc']);\n\n return alphabetizedDefinitions.concat(requiredBuiltInDefinitions);\n}\n","import chalk from 'chalk';\n\n// tslint:disable:no-console\nexport const log = (message: string) => console.log(message);\nexport const logError = (message: string) => console.error(chalk.redBright(message));\nexport const logSuccess = (message: string) => console.log(chalk.greenBright(message));\n","import { ContentType, createClient } from 'contentful';\nimport fs from 'fs';\nimport { compileFromContentTypes } from './content-type-to-typescript';\nimport { logError, logSuccess } from './log';\n\nasync function fetchContentTypes({\n accessToken,\n space,\n}: {\n accessToken: string;\n space: string;\n}): Promise<ContentType[]> {\n try {\n const client = createClient({\n accessToken,\n space,\n });\n const { items: contentTypes } = await client.getContentTypes();\n return contentTypes;\n } catch (err) {\n logError(err.response.data.message);\n\n throw err;\n }\n}\n\nasync function compile(contentTypes: ContentType[]): Promise<string> {\n try {\n const ts = await compileFromContentTypes(contentTypes);\n return ts;\n } catch (err) {\n logError(err.message);\n throw err;\n }\n}\n\nfunction writeFile(output: string, ts: string): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(output, ts, (err) => {\n if (err) {\n logError(err.message);\n reject(err);\n } else {\n logSuccess('TypeScript Definitions were successfully created!');\n resolve();\n }\n });\n });\n}\n\nexport default async function({\n accessToken,\n space,\n output,\n}: {\n accessToken: string;\n space: string;\n output: string;\n}) {\n const contentTypes = await fetchContentTypes({ accessToken, space });\n\n const ts = await compile(contentTypes);\n\n await writeFile(output, ts);\n}\n","import program from 'commander';\nimport compileFromSpace from './compile-from-space';\nimport { logError } from './log';\n// tslint:disable:no-console\n\nconst ensureArgNotEmpty = (value: string, message: string): void => {\n if (!value) {\n logError(message);\n process.exit(1);\n }\n};\n\nprogram\n .option(\n '--access-token <accessToken>',\n // tslint:disable-next-line:max-line-length\n 'This is the access token for this space. You can generate the token in the Contentful web app. Learn more at https://www.contentful.com/developers/docs/references/authentication/',\n )\n .option('--space <space>', 'This is the space ID')\n .option('--output <output>', 'Output filename: e.g. -o ./types.ts');\n\nprogram.on('--help', () => {\n console.log(' Examples:');\n console.log('');\n console.log(\n ' $ content-type-to-typescript --access-token <token> --space <space> --output <filename>',\n );\n console.log(\n ' $ content-type-to-typescript --access-token=<token> --space=<space> --output=<filename>',\n );\n console.log('');\n});\n\nprogram.parse(process.argv);\n\n// tslint:disable:no-console\n\nensureArgNotEmpty(program.accessToken, 'Access token is missing.');\nensureArgNotEmpty(program.space, 'Space is missing.');\nensureArgNotEmpty(program.output, 'Output file path is missing.');\n\ncompileFromSpace({\n accessToken: program.accessToken,\n space: program.space,\n output: program.output,\n})\n .then(() => process.exit())\n .catch(() => process.exit(1));\n"],"names":["fromPairs","map","chain","defaults","compile","get","orderBy","createClient"],"mappings":";;;;;;;;;;;;AAGO,IAAM,QAAQ,GAAe;IAClC,KAAK,EAAE,UAAU;IACjB,UAAU,EAAE;QACV,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;KACF;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACxB,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,AAAO,IAAM,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;QACD,EAAE,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC;IACpC,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,AAAO,IAAM,SAAS,GAAe;IACnC,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE;YACf,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;QACD,EAAE,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;SACb;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC;IACpC,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AAEF,AAAO,IAAM,QAAQ,GAAG,UAAC,MAAkB;IACzC,OAAO,mBAAiB,MAAM,CAAC,KAAO,CAAC;CACxC,CAAC;AAEF,AAAO,IAAM,QAAQ,GAAG,UAAC,GAAW;IAClC,IAAM,MAAM,GAAGA,gBAAS,CAACC,UAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,UAAC,GAAG,IAAK,OAAA,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAA,CAAC,CAAC,CAAC;IAE/F,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;CACpB;;;;;;;;;;AChFD,AAYA,2BAA2B,SAAgB;IACzC,IAAI,MAAW,CAAC;IAChB,QAAQ,SAAS,CAAC,IAAI;QACpB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,MAAM,GAAG;gBACP,IAAI,EAAE,QAAQ;aACf,CAAC;YACF,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,MAAM,GAAG;gBACP,IAAI,EAAE,QAAQ;aACf,CAAC;YACF,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,GAAG;gBACP,IAAI,EAAE,SAAS;aAChB,CAAC;YACF,MAAM;QACR,KAAK,UAAU;YACb,MAAM,GAAG;gBACP,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;aACzB,CAAC;YACF,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG;gBACP,IAAI,EAAE,QAAQ;aACf,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACvD;YACD,MAAM,GAAG;gBACP,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC;gBACzC,IAAI,EAAE,OAAO;aACd,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,EAAE;gBAClC,MAAM,GAAG;oBACP,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;iBAC1B,CAAC;aACH;iBAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,EAAE;gBACzC,MAAM,GAAG;oBACP,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;iBAC1B,CAAC;aACH;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACvD;YACD,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,UAAQ,SAAS,CAAC,IAAI,0BAAuB,CAAC,CAAC;KAClE;IAED,OAAO,MAAM,CAAC;CACf;AAED,yBAAyB,eAAqC;IAC5D,IAAM,UAAU,GAAGC,YAAK,CAAC,eAAe,CAAC,MAAM,CAAC;SAC7C,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,CAAC,SAAS,CAAC,OAAO,GAAA,CAAC;SACzC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,CAAC,SAAS,CAAC,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,GAAA,CAAC;SAChE,SAAS,EAAE;SACX,KAAK,EAAE,CAAC;IAEX,IAAM,QAAQ,GAAGA,YAAK,CAAC,eAAe,CAAC,MAAM,CAAC;SAC3C,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,QAAQ,GAAA,CAAC;SACzC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,EAAE,GAAA,CAAC;SAChC,KAAK,EAAE,CAAC;IAEX,OAAO;QACL,UAAU,YAAA;QACV,QAAQ,UAAA;QACR,oBAAoB,EAAE,KAAK;KAC5B,CAAC;CACH;AAED,6BAAoC,eAAqC;IACvE,IAAM,YAAY,cAChB,KAAK,EAAE,eAAe,CAAC,IAAI,EAC3B,WAAW,EAAE,eAAe,CAAC,WAAW,IACrC,eAAe,CAAC,eAAe,CAAC,CACpC,CAAC;IAEF,OAAO,YAAY,CAAC;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClGD,AAMA,IAAM,cAAc,GAAG,gFAGpB,CAAC;AAEJ,iCACE,YAAyC,EACzC,OAA8B;IAA9B,wBAAA,EAAA,YAA8B;;;;;;oBAExB,QAAQ,GAAGC,eAAQ,CACvB;wBACE,aAAa,EAAE,cAAc;qBAC9B,EACD,OAAO,CACR,CAAC;oBAEI,cAAc,GAAG,0BAA0B,CAC/C,YAAY,CAAC,GAAG,CAAC,UAAC,EAAE,IAAK,OAAA,mBAAmB,CAAC,EAAE,CAAC,GAAA,CAAC,CAClD,CAAC;oBAEI,YAAY,GAAG;wBACnB,KAAK,EAAE,gCAAgC;wBACvC,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAED,YAAK,CAAC,cAAc,CAAC;6BAC9B,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAA,CAAC;6BAClD,SAAS,EAAE;6BACX,KAAK,EAAE;wBACV,WAAW,EAAEA,YAAK,CAAC,cAAc,CAAC;6BAC/B,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAA,CAAC;6BAC9B,SAAS,EAAE;6BACX,KAAK,EAAE;qBACX,CAAC;oBAEU,qBAAME,8BAAO,CAAC,YAA2B,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAA;;oBAA1E,GAAG,GAAG,SAAoE;oBAEhF,sBAAO,oBAAoB,CAAC,GAAG,CAAC,EAAC;;;;CAClC;AAED,IAAM,cAAc,GAAG,gCAAgC,CAAC;AAExD,8BAA8B,KAAa;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAK,cAAc,uBAAqB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;CACtF;AAED,iBAAiB,UAAsB;IACrC,OAAOF,YAAK,CAAC,UAAU,CAAC,UAAU,CAAC;SAChC,GAAG,CAAC,UAAC,UAAU,IAAK,OAAAG,UAAG,CAAC,UAAU,EAAE,MAAM,CAAC,GAAA,CAAC;SAC5C,OAAO,EAAE;SACT,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAC;SACvB,OAAO,EAAE;SACT,KAAK,EAAE,CAAC;CACZ;AAED,oCAAoC,WAAyB;IAC3D,IAAM,0BAA0B,GAAiBH,YAAK,CAAC,WAAW,CAAC;SAChE,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAA,CAAC;SAC1B,OAAO,EAAE;SACT,KAAK,EAAE,CAAC;IAEX,IAAM,uBAAuB,GAAGI,cAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzE,OAAO,uBAAuB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;CACnE;;ACpED;AACA,AAA6D;AAC7D,AAAO,IAAM,QAAQ,GAAG,UAAC,OAAe,IAAK,OAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAA,CAAC;AACrF,AAAO,IAAM,UAAU,GAAG,UAAC,OAAe,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLtF,AAKA,2BAAiC,EAMhC;QALC,4BAAW,EACX,gBAAK;;;;;;;oBAMG,MAAM,GAAGC,uBAAY,CAAC;wBAC1B,WAAW,aAAA;wBACX,KAAK,OAAA;qBACN,CAAC,CAAC;oBAC6B,qBAAM,MAAM,CAAC,eAAe,EAAE,EAAA;;oBAA/C,YAAY,GAAK,CAAA,SAA8B,OAAnC;oBAC3B,sBAAO,YAAY,EAAC;;;oBAEpB,QAAQ,CAAC,KAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEpC,MAAM,KAAG,CAAC;;;;;CAEb;AAED,mBAAuB,YAA2B;;;;;;;oBAEnC,qBAAM,uBAAuB,CAAC,YAAY,CAAC,EAAA;;oBAAhD,EAAE,GAAG,SAA2C;oBACtD,sBAAO,EAAE,EAAC;;;oBAEV,QAAQ,CAAC,KAAG,CAAC,OAAO,CAAC,CAAC;oBACtB,MAAM,KAAG,CAAC;;;;;CAEb;AAED,mBAAmB,MAAc,EAAE,EAAU;IAC3C,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,UAAC,GAAG;YAC3B,IAAI,GAAG,EAAE;gBACP,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACL,UAAU,CAAC,mDAAmD,CAAC,CAAC;gBAChE,OAAO,EAAE,CAAC;aACX;SACF,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED,2BAA8B,EAQ7B;QAPC,4BAAW,EACX,gBAAK,EACL,kBAAM;;;;;wBAMe,qBAAM,iBAAiB,CAAC,EAAE,WAAW,aAAA,EAAE,KAAK,OAAA,EAAE,CAAC,EAAA;;oBAA9D,YAAY,GAAG,SAA+C;oBAEzD,qBAAMH,SAAO,CAAC,YAAY,CAAC,EAAA;;oBAAhC,EAAE,GAAG,SAA2B;oBAEtC,qBAAM,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAA;;oBAA3B,SAA2B,CAAC;;;;;CAC7B;;AC7DD;AAEA,IAAM,iBAAiB,GAAG,UAAC,KAAa,EAAE,OAAe;IACvD,IAAI,CAAC,KAAK,EAAE;QACV,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;CACF,CAAC;AAEF,OAAO;KACJ,MAAM,CACL,8BAA8B;;AAE9B,oLAAoL,CACrL;KACA,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC;AAEtE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;IACnB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,6FAA6F,CAC9F,CAAC;IACF,OAAO,CAAC,GAAG,CACT,6FAA6F,CAC9F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CACjB,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAI5B,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AACnE,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtD,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;AAElE,gBAAgB,CAAC;IACf,WAAW,EAAE,OAAO,CAAC,WAAW;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC;KACC,IAAI,CAAC,cAAM,OAAA,OAAO,CAAC,IAAI,EAAE,GAAA,CAAC;KAC1B,KAAK,CAAC,cAAM,OAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC"}