@stratal/inertia 0.0.1 → 0.0.19
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/dist/index.d.mts +265 -52
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +551 -177
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +83 -0
- package/dist/react.d.mts.map +1 -0
- package/dist/react.mjs +158 -0
- package/dist/react.mjs.map +1 -0
- package/dist/testing.d.mts +36 -0
- package/dist/testing.d.mts.map +1 -0
- package/dist/testing.mjs +78 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/type-generator-C5JljyzK.mjs +391 -0
- package/dist/type-generator-C5JljyzK.mjs.map +1 -0
- package/dist/vite.d.mts +8 -1
- package/dist/vite.d.mts.map +1 -1
- package/dist/vite.mjs +152 -4
- package/dist/vite.mjs.map +1 -0
- package/package.json +47 -19
- package/dist/inertia-dev-css-plugin-BYromyO_.mjs +0 -70
- package/dist/inertia-dev-css-plugin-BYromyO_.mjs.map +0 -1
- package/dist/inertia-types-plugin-NO_uxhxQ.mjs +0 -39
- package/dist/inertia-types-plugin-NO_uxhxQ.mjs.map +0 -1
- package/dist/rolldown-runtime-wcPFST8Q.mjs +0 -13
- package/dist/type-generator-DlXIc6e2.mjs +0 -193
- package/dist/type-generator-DlXIc6e2.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type-generator-DlXIc6e2.mjs","names":[],"sources":["../src/generator/type-generator.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative } from 'node:path'\n\nexport interface PageTypeInfo {\n componentName: string\n propsType: string\n}\n\nexport interface SharedDataTypeInfo {\n propsType: string\n}\n\nasync function loadTsMorph() {\n return import('ts-morph')\n}\n\ntype TsMorphModule = Awaited<ReturnType<typeof loadTsMorph>>\ntype TsObj = TsMorphModule['ts']\ntype SourceFile = InstanceType<TsMorphModule['Project']> extends { getSourceFiles(): (infer S)[] } ? S : never\ntype FunctionDeclaration = ReturnType<SourceFile['getFunctions']>[number]\ntype Node = ReturnType<SourceFile['getDescendants']>[number]\ntype Type = ReturnType<Node['getType']>\n\nexport async function extractPageTypes(pagesDir: string, tsConfigPath?: string): Promise<PageTypeInfo[]> {\n if (!existsSync(pagesDir)) return []\n\n const { Project, SyntaxKind, ts } = await loadTsMorph()\n\n const project = new Project({\n tsConfigFilePath: tsConfigPath,\n skipAddingFilesFromTsConfig: true,\n compilerOptions: tsConfigPath ? undefined : {\n jsx: ts.JsxEmit.ReactJSX,\n esModuleInterop: true,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.ESNext,\n },\n })\n\n project.addSourceFilesAtPaths(join(pagesDir, '**/*.{tsx,ts}'))\n\n const pages: PageTypeInfo[] = []\n\n for (const sourceFile of project.getSourceFiles()) {\n const filePath = sourceFile.getFilePath()\n const relPath = relative(pagesDir, filePath)\n\n if (relPath.includes('__tests__') || relPath.includes('.spec.') || relPath.includes('.test.')) continue\n\n const fileName = relPath.split('/').pop()!\n if (fileName.startsWith(\"_\") || /^Layout\\.(tsx|ts)$/.test(fileName)) continue\n\n const componentName = relPath\n .replace(/\\.(tsx|ts)$/, '')\n .replace(/\\\\/g, '/')\n\n const propsType = extractDefaultExportPropsType(sourceFile, SyntaxKind, ts)\n if (propsType !== null) {\n pages.push({ componentName, propsType })\n }\n }\n\n return pages.sort((a, b) => a.componentName.localeCompare(b.componentName))\n}\n\nfunction extractDefaultExportPropsType(sourceFile: SourceFile, SK: TsMorphModule['SyntaxKind'], tsObj: TsObj): string | null {\n const defaultExportSymbol = sourceFile.getDefaultExportSymbol()\n if (!defaultExportSymbol) return null\n\n const declarations = defaultExportSymbol.getDeclarations()\n for (const decl of declarations) {\n if (decl.isKind(SK.FunctionDeclaration)) {\n return extractPropsFromFunction(decl, tsObj)\n }\n\n if (decl.isKind(SK.ExportAssignment)) {\n const expr = decl.getExpression()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!expr) continue\n\n if (expr.isKind(SK.FunctionExpression)) {\n return extractPropsFromParams(expr.getParameters(), tsObj)\n }\n\n if (expr.isKind(SK.Identifier)) {\n return resolveIdentifierPropsType(expr, SK, tsObj)\n }\n\n if (expr.isKind(SK.ArrowFunction)) {\n return extractPropsFromParams(expr.getParameters(), tsObj)\n }\n }\n }\n\n return null\n}\n\nfunction extractPropsFromFunction(fn: FunctionDeclaration, tsObj: TsObj): string {\n return extractPropsFromParams(fn.getParameters(), tsObj)\n}\n\nfunction extractPropsFromParams(params: ReturnType<FunctionDeclaration['getParameters']>, tsObj: TsObj): string {\n if (params.length === 0) return 'Record<string, never>'\n\n const firstParam = params[0]\n const paramType = firstParam.getType()\n\n return typeToString(paramType, tsObj)\n}\n\nfunction resolveIdentifierPropsType(identifier: Node, SK: TsMorphModule['SyntaxKind'], tsObj: TsObj): string | null {\n const symbol = identifier.getSymbol()\n if (!symbol) return null\n\n for (const decl of symbol.getDeclarations()) {\n if (decl.isKind(SK.FunctionDeclaration)) {\n return extractPropsFromFunction(decl, tsObj)\n }\n\n if (decl.isKind(SK.VariableDeclaration)) {\n const init = decl.getInitializer()\n if (init?.isKind(SK.ArrowFunction) || init?.isKind(SK.FunctionExpression)) {\n const fn = init as { getParameters(): ReturnType<FunctionDeclaration['getParameters']> }\n return extractPropsFromParams(fn.getParameters(), tsObj)\n }\n }\n }\n\n return null\n}\n\nfunction typeToString(type: Type, tsObj: TsObj): string {\n const text = type.getText(undefined, tsObj.TypeFormatFlags.NoTruncation | tsObj.TypeFormatFlags.UseFullyQualifiedType)\n\n if (text.includes('import(')) {\n return expandTypeToInline(type, tsObj)\n }\n\n return text\n}\n\nfunction expandTypeToInline(type: Type, tsObj: TsObj, visited = new Set<Type>()): string {\n if (visited.has(type)) return 'Record<string, unknown>'\n visited.add(type)\n\n if (type.isObject() && !type.isArray()) {\n const properties = type.getProperties()\n if (properties.length === 0) return 'Record<string, never>'\n\n const members = properties.map((prop) => {\n const decl = prop.getDeclarations()[0] ?? prop.getValueDeclaration()\n const isOptional = prop.isOptional()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive: ambient/synthetic symbols may lack declarations at runtime\n if (!decl) return `${prop.getName()}${isOptional ? '?' : ''}: unknown`\n const propType = prop.getTypeAtLocation(decl)\n const propTypeStr = expandTypeToInline(propType, tsObj, visited)\n return `${prop.getName()}${isOptional ? '?' : ''}: ${propTypeStr}`\n })\n\n return `{ ${members.join('; ')} }`\n }\n\n if (type.isArray()) {\n const elementType = type.getArrayElementType()\n if (elementType) {\n return `Array<${expandTypeToInline(elementType, tsObj, visited)}>`\n }\n }\n\n if (type.isUnion()) {\n return type.getUnionTypes().map((t) => expandTypeToInline(t, tsObj, visited)).join(' | ')\n }\n\n if (type.isIntersection()) {\n return type.getIntersectionTypes().map((t) => expandTypeToInline(t, tsObj, visited)).join(' & ')\n }\n\n const text = type.getText(undefined, tsObj.TypeFormatFlags.NoTruncation)\n if (text.includes('import(')) {\n return 'Record<string, unknown>'\n }\n return text\n}\n\nexport async function extractSharedDataType(moduleFilePath: string, tsConfigPath?: string): Promise<SharedDataTypeInfo | null> {\n if (!existsSync(moduleFilePath)) return null\n\n const { Project, SyntaxKind, ts } = await loadTsMorph()\n\n const project = new Project({\n tsConfigFilePath: tsConfigPath,\n skipAddingFilesFromTsConfig: true,\n compilerOptions: tsConfigPath ? undefined : {\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.ESNext,\n },\n })\n\n const sourceFile = project.addSourceFileAtPath(moduleFilePath)\n\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n\n for (const call of callExpressions) {\n const expr = call.getExpression()\n if (!expr.isKind(SyntaxKind.PropertyAccessExpression)) continue\n\n const propName = expr.getName()\n if (propName !== 'forRoot' && propName !== 'forRootAsync') continue\n\n const objExpr = expr.getExpression()\n if (!objExpr.isKind(SyntaxKind.Identifier) || objExpr.getText() !== 'InertiaModule') continue\n\n const args = call.getArguments()\n if (args.length === 0) continue\n\n const optionsArg = args[0]\n if (!optionsArg.isKind(SyntaxKind.ObjectLiteralExpression)) continue\n\n const sharedDataProp = optionsArg.getProperty('sharedData')\n if (!sharedDataProp) continue\n\n if (!sharedDataProp.isKind(SyntaxKind.PropertyAssignment)) continue\n\n const initializer = sharedDataProp.getInitializer()\n if (!initializer?.isKind(SyntaxKind.ObjectLiteralExpression)) continue\n\n const members: string[] = []\n for (const prop of initializer.getProperties()) {\n if (!prop.isKind(SyntaxKind.PropertyAssignment)) continue\n\n const name = prop.getName()\n const value = prop.getInitializer()\n if (!value) continue\n\n let valueType: string\n\n if (value.isKind(SyntaxKind.ArrowFunction) || value.isKind(SyntaxKind.FunctionExpression)) {\n const returnType = value.getReturnType()\n valueType = typeToString(returnType, ts)\n } else {\n valueType = typeToString(value.getType(), ts)\n }\n\n members.push(`${name}: ${valueType}`)\n }\n\n if (members.length > 0) {\n return { propsType: `{ ${members.join('; ')} }` }\n }\n }\n\n return null\n}\n\nexport function generateInertiaTypes(pages: PageTypeInfo[], sharedData?: SharedDataTypeInfo | null): string {\n const lines: string[] = [\n '// Auto-generated by @stratal/inertia. Do not edit.',\n \"declare module '@stratal/inertia' {\",\n ]\n\n lines.push(' interface InertiaPageRegistry {')\n for (const page of pages) {\n lines.push(` '${page.componentName}': ${page.propsType}`)\n }\n lines.push(' }')\n\n lines.push('}')\n\n if (sharedData) {\n lines.push('')\n lines.push(\"declare module '@inertiajs/core' {\")\n lines.push(' interface InertiaConfig {')\n lines.push(` sharedPageProps: ${sharedData.propsType}`)\n lines.push(' }')\n lines.push('}')\n }\n\n lines.push('', 'export {}', '')\n\n return lines.join('\\n')\n}\n\nexport function writeInertiaTypes(outputPath: string, content: string): void {\n mkdirSync(dirname(outputPath), { recursive: true })\n writeFileSync(outputPath, content, 'utf-8')\n}\n\nexport function findAppModulePath(cwd: string): string | undefined {\n const candidates = [\n join(cwd, 'src', 'app.module.ts'),\n join(cwd, 'src', 'app.module.tsx'),\n ]\n\n return candidates.find(existsSync)\n}\n\nexport function findPagesDir(cwd: string): string {\n return join(cwd, 'src', 'inertia', 'pages')\n}\n\nexport function findOutputPath(cwd: string): string {\n return join(cwd, 'src', 'inertia', 'inertia.d.ts')\n}\n\nexport function findTsConfigPath(cwd: string): string | undefined {\n const candidate = join(cwd, 'tsconfig.json')\n return existsSync(candidate) ? candidate : undefined\n}\n\nexport async function runTypeGeneration(cwd: string): Promise<{ outputPath: string; pageCount: number }> {\n const pagesDir = findPagesDir(cwd)\n const outputPath = findOutputPath(cwd)\n const moduleFilePath = findAppModulePath(cwd)\n const tsConfigPath = findTsConfigPath(cwd)\n\n const pages = await extractPageTypes(pagesDir, tsConfigPath)\n const sharedData = moduleFilePath\n ? await extractSharedDataType(moduleFilePath, tsConfigPath)\n : null\n\n const content = generateInertiaTypes(pages, sharedData)\n writeInertiaTypes(outputPath, content)\n\n return { outputPath, pageCount: pages.length }\n}\n"],"mappings":";;;AAYA,eAAe,cAAc;AAC3B,QAAO,OAAO;;AAUhB,eAAsB,iBAAiB,UAAkB,cAAgD;AACvG,KAAI,CAAC,WAAW,SAAS,CAAE,QAAO,EAAE;CAEpC,MAAM,EAAE,SAAS,YAAY,OAAO,MAAM,aAAa;CAEvD,MAAM,UAAU,IAAI,QAAQ;EAC1B,kBAAkB;EAClB,6BAA6B;EAC7B,iBAAiB,eAAe,KAAA,IAAY;GAC1C,KAAK,GAAG,QAAQ;GAChB,iBAAiB;GACjB,kBAAkB,GAAG,qBAAqB;GAC1C,QAAQ,GAAG,WAAW;GACtB,QAAQ,GAAG,aAAa;GACzB;EACF,CAAC;AAEF,SAAQ,sBAAsB,KAAK,UAAU,gBAAgB,CAAC;CAE9D,MAAM,QAAwB,EAAE;AAEhC,MAAK,MAAM,cAAc,QAAQ,gBAAgB,EAAE;EAEjD,MAAM,UAAU,SAAS,UADR,WAAW,aAAa,CACG;AAE5C,MAAI,QAAQ,SAAS,YAAY,IAAI,QAAQ,SAAS,SAAS,IAAI,QAAQ,SAAS,SAAS,CAAE;EAE/F,MAAM,WAAW,QAAQ,MAAM,IAAI,CAAC,KAAK;AACzC,MAAI,SAAS,WAAW,IAAI,IAAI,qBAAqB,KAAK,SAAS,CAAE;EAErE,MAAM,gBAAgB,QACnB,QAAQ,eAAe,GAAG,CAC1B,QAAQ,OAAO,IAAI;EAEtB,MAAM,YAAY,8BAA8B,YAAY,YAAY,GAAG;AAC3E,MAAI,cAAc,KAChB,OAAM,KAAK;GAAE;GAAe;GAAW,CAAC;;AAI5C,QAAO,MAAM,MAAM,GAAG,MAAM,EAAE,cAAc,cAAc,EAAE,cAAc,CAAC;;AAG7E,SAAS,8BAA8B,YAAwB,IAAiC,OAA6B;CAC3H,MAAM,sBAAsB,WAAW,wBAAwB;AAC/D,KAAI,CAAC,oBAAqB,QAAO;CAEjC,MAAM,eAAe,oBAAoB,iBAAiB;AAC1D,MAAK,MAAM,QAAQ,cAAc;AAC/B,MAAI,KAAK,OAAO,GAAG,oBAAoB,CACrC,QAAO,yBAAyB,MAAM,MAAM;AAG9C,MAAI,KAAK,OAAO,GAAG,iBAAiB,EAAE;GACpC,MAAM,OAAO,KAAK,eAAe;AAEjC,OAAI,CAAC,KAAM;AAEX,OAAI,KAAK,OAAO,GAAG,mBAAmB,CACpC,QAAO,uBAAuB,KAAK,eAAe,EAAE,MAAM;AAG5D,OAAI,KAAK,OAAO,GAAG,WAAW,CAC5B,QAAO,2BAA2B,MAAM,IAAI,MAAM;AAGpD,OAAI,KAAK,OAAO,GAAG,cAAc,CAC/B,QAAO,uBAAuB,KAAK,eAAe,EAAE,MAAM;;;AAKhE,QAAO;;AAGT,SAAS,yBAAyB,IAAyB,OAAsB;AAC/E,QAAO,uBAAuB,GAAG,eAAe,EAAE,MAAM;;AAG1D,SAAS,uBAAuB,QAA0D,OAAsB;AAC9G,KAAI,OAAO,WAAW,EAAG,QAAO;AAKhC,QAAO,aAHY,OAAO,GACG,SAAS,EAEP,MAAM;;AAGvC,SAAS,2BAA2B,YAAkB,IAAiC,OAA6B;CAClH,MAAM,SAAS,WAAW,WAAW;AACrC,KAAI,CAAC,OAAQ,QAAO;AAEpB,MAAK,MAAM,QAAQ,OAAO,iBAAiB,EAAE;AAC3C,MAAI,KAAK,OAAO,GAAG,oBAAoB,CACrC,QAAO,yBAAyB,MAAM,MAAM;AAG9C,MAAI,KAAK,OAAO,GAAG,oBAAoB,EAAE;GACvC,MAAM,OAAO,KAAK,gBAAgB;AAClC,OAAI,MAAM,OAAO,GAAG,cAAc,IAAI,MAAM,OAAO,GAAG,mBAAmB,CAEvE,QAAO,uBADI,KACsB,eAAe,EAAE,MAAM;;;AAK9D,QAAO;;AAGT,SAAS,aAAa,MAAY,OAAsB;CACtD,MAAM,OAAO,KAAK,QAAQ,KAAA,GAAW,MAAM,gBAAgB,eAAe,MAAM,gBAAgB,sBAAsB;AAEtH,KAAI,KAAK,SAAS,UAAU,CAC1B,QAAO,mBAAmB,MAAM,MAAM;AAGxC,QAAO;;AAGT,SAAS,mBAAmB,MAAY,OAAc,0BAAU,IAAI,KAAW,EAAU;AACvF,KAAI,QAAQ,IAAI,KAAK,CAAE,QAAO;AAC9B,SAAQ,IAAI,KAAK;AAEjB,KAAI,KAAK,UAAU,IAAI,CAAC,KAAK,SAAS,EAAE;EACtC,MAAM,aAAa,KAAK,eAAe;AACvC,MAAI,WAAW,WAAW,EAAG,QAAO;AAYpC,SAAO,KAVS,WAAW,KAAK,SAAS;GACvC,MAAM,OAAO,KAAK,iBAAiB,CAAC,MAAM,KAAK,qBAAqB;GACpE,MAAM,aAAa,KAAK,YAAY;AAEpC,OAAI,CAAC,KAAM,QAAO,GAAG,KAAK,SAAS,GAAG,aAAa,MAAM,GAAG;GAE5D,MAAM,cAAc,mBADH,KAAK,kBAAkB,KAAK,EACI,OAAO,QAAQ;AAChE,UAAO,GAAG,KAAK,SAAS,GAAG,aAAa,MAAM,GAAG,IAAI;IACrD,CAEkB,KAAK,KAAK,CAAC;;AAGjC,KAAI,KAAK,SAAS,EAAE;EAClB,MAAM,cAAc,KAAK,qBAAqB;AAC9C,MAAI,YACF,QAAO,SAAS,mBAAmB,aAAa,OAAO,QAAQ,CAAC;;AAIpE,KAAI,KAAK,SAAS,CAChB,QAAO,KAAK,eAAe,CAAC,KAAK,MAAM,mBAAmB,GAAG,OAAO,QAAQ,CAAC,CAAC,KAAK,MAAM;AAG3F,KAAI,KAAK,gBAAgB,CACvB,QAAO,KAAK,sBAAsB,CAAC,KAAK,MAAM,mBAAmB,GAAG,OAAO,QAAQ,CAAC,CAAC,KAAK,MAAM;CAGlG,MAAM,OAAO,KAAK,QAAQ,KAAA,GAAW,MAAM,gBAAgB,aAAa;AACxE,KAAI,KAAK,SAAS,UAAU,CAC1B,QAAO;AAET,QAAO;;AAGT,eAAsB,sBAAsB,gBAAwB,cAA2D;AAC7H,KAAI,CAAC,WAAW,eAAe,CAAE,QAAO;CAExC,MAAM,EAAE,SAAS,YAAY,OAAO,MAAM,aAAa;CAcvD,MAAM,kBAZU,IAAI,QAAQ;EAC1B,kBAAkB;EAClB,6BAA6B;EAC7B,iBAAiB,eAAe,KAAA,IAAY;GAC1C,kBAAkB,GAAG,qBAAqB;GAC1C,QAAQ,GAAG,WAAW;GACtB,QAAQ,GAAG,aAAa;GACzB;EACF,CAAC,CAEyB,oBAAoB,eAAe,CAE3B,qBAAqB,WAAW,eAAe;AAElF,MAAK,MAAM,QAAQ,iBAAiB;EAClC,MAAM,OAAO,KAAK,eAAe;AACjC,MAAI,CAAC,KAAK,OAAO,WAAW,yBAAyB,CAAE;EAEvD,MAAM,WAAW,KAAK,SAAS;AAC/B,MAAI,aAAa,aAAa,aAAa,eAAgB;EAE3D,MAAM,UAAU,KAAK,eAAe;AACpC,MAAI,CAAC,QAAQ,OAAO,WAAW,WAAW,IAAI,QAAQ,SAAS,KAAK,gBAAiB;EAErF,MAAM,OAAO,KAAK,cAAc;AAChC,MAAI,KAAK,WAAW,EAAG;EAEvB,MAAM,aAAa,KAAK;AACxB,MAAI,CAAC,WAAW,OAAO,WAAW,wBAAwB,CAAE;EAE5D,MAAM,iBAAiB,WAAW,YAAY,aAAa;AAC3D,MAAI,CAAC,eAAgB;AAErB,MAAI,CAAC,eAAe,OAAO,WAAW,mBAAmB,CAAE;EAE3D,MAAM,cAAc,eAAe,gBAAgB;AACnD,MAAI,CAAC,aAAa,OAAO,WAAW,wBAAwB,CAAE;EAE9D,MAAM,UAAoB,EAAE;AAC5B,OAAK,MAAM,QAAQ,YAAY,eAAe,EAAE;AAC9C,OAAI,CAAC,KAAK,OAAO,WAAW,mBAAmB,CAAE;GAEjD,MAAM,OAAO,KAAK,SAAS;GAC3B,MAAM,QAAQ,KAAK,gBAAgB;AACnC,OAAI,CAAC,MAAO;GAEZ,IAAI;AAEJ,OAAI,MAAM,OAAO,WAAW,cAAc,IAAI,MAAM,OAAO,WAAW,mBAAmB,CAEvF,aAAY,aADO,MAAM,eAAe,EACH,GAAG;OAExC,aAAY,aAAa,MAAM,SAAS,EAAE,GAAG;AAG/C,WAAQ,KAAK,GAAG,KAAK,IAAI,YAAY;;AAGvC,MAAI,QAAQ,SAAS,EACnB,QAAO,EAAE,WAAW,KAAK,QAAQ,KAAK,KAAK,CAAC,KAAK;;AAIrD,QAAO;;AAGT,SAAgB,qBAAqB,OAAuB,YAAgD;CAC1G,MAAM,QAAkB,CACtB,uDACA,sCACD;AAED,OAAM,KAAK,oCAAoC;AAC/C,MAAK,MAAM,QAAQ,MACjB,OAAM,KAAK,QAAQ,KAAK,cAAc,KAAK,KAAK,YAAY;AAE9D,OAAM,KAAK,MAAM;AAEjB,OAAM,KAAK,IAAI;AAEf,KAAI,YAAY;AACd,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,qCAAqC;AAChD,QAAM,KAAK,8BAA8B;AACzC,QAAM,KAAK,wBAAwB,WAAW,YAAY;AAC1D,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,IAAI;;AAGjB,OAAM,KAAK,IAAI,aAAa,GAAG;AAE/B,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAgB,kBAAkB,YAAoB,SAAuB;AAC3E,WAAU,QAAQ,WAAW,EAAE,EAAE,WAAW,MAAM,CAAC;AACnD,eAAc,YAAY,SAAS,QAAQ;;AAG7C,SAAgB,kBAAkB,KAAiC;AAMjE,QALmB,CACjB,KAAK,KAAK,OAAO,gBAAgB,EACjC,KAAK,KAAK,OAAO,iBAAiB,CACnC,CAEiB,KAAK,WAAW;;AAGpC,SAAgB,aAAa,KAAqB;AAChD,QAAO,KAAK,KAAK,OAAO,WAAW,QAAQ;;AAG7C,SAAgB,eAAe,KAAqB;AAClD,QAAO,KAAK,KAAK,OAAO,WAAW,eAAe;;AAGpD,SAAgB,iBAAiB,KAAiC;CAChE,MAAM,YAAY,KAAK,KAAK,gBAAgB;AAC5C,QAAO,WAAW,UAAU,GAAG,YAAY,KAAA;;AAG7C,eAAsB,kBAAkB,KAAiE;CACvG,MAAM,WAAW,aAAa,IAAI;CAClC,MAAM,aAAa,eAAe,IAAI;CACtC,MAAM,iBAAiB,kBAAkB,IAAI;CAC7C,MAAM,eAAe,iBAAiB,IAAI;CAE1C,MAAM,QAAQ,MAAM,iBAAiB,UAAU,aAAa;AAM5D,mBAAkB,YADF,qBAAqB,OAJlB,iBACf,MAAM,sBAAsB,gBAAgB,aAAa,GACzD,KAEmD,CACjB;AAEtC,QAAO;EAAE;EAAY,WAAW,MAAM;EAAQ"}
|