{"version":3,"file":"index.cjs","sources":["../../src/importer.ts"],"sourcesContent":["import path from \"crosspath\";\nimport type {Stats} from \"fs\";\nimport fs from \"fs\";\nimport {minimatch} from \"minimatch\";\nimport resolveModule from \"resolve\";\nimport type {FileSystem} from \"./lib/file-system.js\";\n\ninterface ResolveResult {\n\tfile: string;\n\tcontents: string;\n}\n\nconst SCRIPT_EXTENSIONS = [\".js\", \".mjs\", \".cjs\"];\n\ntype Importer = (url: string, prev: string) => ResolveResult | null;\n\ninterface ResolveInternalOptions extends ResolveOptions {\n\t/**\n\t * The directory from which to resolve import specifiers.\n\t * May change with path mapping\n\t */\n\tbaseDir: string;\n}\n\ninterface MaybeAliasedPathResult {\n\tpaths: string[];\n\tbaseDir: string;\n}\n\nexport interface ResolveOptions extends ExtendedImporterOptions {\n\t/**\n\t * The directory of the parent file from which the path is imported\n\t */\n\tparentDir: string | undefined;\n}\n\nexport interface ExtendedImporterOptions {\n\t/**\n\t * The file system implementation to use\n\t */\n\tfileSystem: FileSystem;\n\n\t/**\n\t * The working directory to use as root. Defaults to process.cwd()\n\t */\n\tcwd: string;\n\n\t/**\n\t * The character to use as the prefix to resolve modules with Node Module Resolution. Defaults to `~`\n\t */\n\tnodeModuleResolutionPrefix: string;\n\n\t/**\n\t * The extensions to support resolving. Defaults to .scss, .sass, and .css\n\t */\n\textensions: string[];\n\n\t/**\n\t * Path mapping globs. Can be used to map virtual paths to other paths on disk\n\t */\n\tpaths: Record<string, string[] | string>;\n}\n\n/**\n * Creates a Custom Importer for sass/scss with support for Node Module Resolution and path mapping/aliasing\n */\nexport function createImporter(options?: Partial<ExtendedImporterOptions>): Importer {\n\treturn (p, parent) => resolve(p, {...options, parentDir: path.dirname(parent)});\n}\n\n/**\n * Resolves sass/scss files with support for Node Module Resolution and path mapping/aliasing\n */\nexport function resolve(p: string, options?: Partial<ResolveOptions>): ResolveResult | null {\n\tconst sanitizedOptions = sanitizeOptions(options);\n\n\tconst useNodeModuleResolution = p.startsWith(sanitizedOptions.nodeModuleResolutionPrefix);\n\tconst {baseDir, paths} = resolveMaybeAliasedPath(path.normalize(useNodeModuleResolution ? p.slice(sanitizedOptions.nodeModuleResolutionPrefix.length) : p), sanitizedOptions);\n\tconst internalOptions = {...sanitizedOptions, baseDir};\n\n\tfor (const sanitizedPath of paths) {\n\t\tconst resolved = useNodeModuleResolution ? nodeModuleResolutionStrategy(sanitizedPath, internalOptions) : sassStrategy(sanitizedPath, internalOptions);\n\t\tif (resolved != null) return resolved;\n\t}\n\n\treturn null;\n}\n\nfunction sanitizeOptions(options?: Partial<ResolveOptions>): ResolveOptions {\n\tconst {fileSystem = fs, nodeModuleResolutionPrefix = \"~\", extensions = [\".scss\", \".sass\", \".css\"], paths = {}, cwd = process.cwd(), parentDir} = options ?? {};\n\treturn {fileSystem, nodeModuleResolutionPrefix, extensions, paths, cwd, parentDir};\n}\n\nfunction resolveMaybeAliasedPath(p: string, options: ResolveOptions): MaybeAliasedPathResult {\n\tfor (const key of Object.keys(options.paths)) {\n\t\t// Replace single asterisks with multiple ones\n\t\tconst normalizedKey = key.replace(/(?<!\\*)\\*(?!\\*)/, \"**\");\n\n\t\tif (!minimatch(p, normalizedKey)) continue;\n\t\tconst lastIndexOfAsterisk = key.lastIndexOf(\"*\");\n\t\tconst pFromAsterisk = lastIndexOfAsterisk < 0 ? \"\" : p.slice(lastIndexOfAsterisk);\n\t\tconst paths = ensureArray(options.paths[key]).map(value => path.join(value.replace(/(\\\\|\\/)+\\*$/gi, \"\"), pFromAsterisk));\n\n\t\treturn {\n\t\t\tpaths,\n\t\t\t// Resolve mapped paths from the cwd\n\t\t\tbaseDir: options.cwd\n\t\t};\n\t}\n\treturn {\n\t\tpaths: [p],\n\t\tbaseDir: options.parentDir == null ? options.cwd : options.parentDir\n\t};\n}\n\nfunction nodeModuleResolutionStrategy(p: string, options: ResolveInternalOptions): ResolveResult | undefined {\n\ttry {\n\t\tconst resolvedFile = resolveModule.sync(p, {\n\t\t\tbasedir: options.cwd,\n\t\t\textensions: [...options.extensions, ...SCRIPT_EXTENSIONS],\n\t\t\treadFileSync: file => options.fileSystem.readFileSync(file).toString(),\n\t\t\tisFile: file => isFileSync(file, options.fileSystem),\n\t\t\tisDirectory: file => isDirectorySync(file, options.fileSystem),\n\n\t\t\t// We can use the main property as a pointer to where in the package to look for a .scss/.sass/.css file with an equivalent name\n\t\t\tpathFilter: (_, currentPath) => {\n\t\t\t\tconst mainExtname = path.extname(currentPath);\n\n\t\t\t\t// If the main property already has a supported extension, leave it be\n\t\t\t\tif (options.extensions.some(extension => mainExtname === extension)) {\n\t\t\t\t\treturn currentPath;\n\t\t\t\t}\n\n\t\t\t\t// Remove the extension from the path and see if a related .scss, .sass, or .css file can be resolved\n\t\t\t\treturn sassStrategy(replaceScriptExtension(currentPath, \"\"), options)?.file ?? currentPath;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: path.native.normalize(resolvedFile),\n\t\t\tcontents: options.fileSystem.readFileSync(path.native.normalize(resolvedFile), \"utf-8\")\n\t\t};\n\t} catch (ex) {\n\t\treturn undefined;\n\t}\n}\n\nfunction sassStrategy(p: string, options: ResolveInternalOptions): ResolveResult | undefined {\n\tlet resolvedFile: string | undefined;\n\n\t// If the path has a specific extension, we might skip a lot of work and just be able to resolve that file directly.\n\t// Note that it may still not be able to resolve a file, for example if p is 'foo.bar', then '.bar' is technically an extension,\n\t// but no such file may exist, and we might still be able to resolve a file such as 'foo.bar.scss'\n\tif (path.extname(p) !== \"\") {\n\t\tresolvedFile = exactlyOne(tryPathSync(p, options));\n\t}\n\n\tif (resolvedFile == null) {\n\t\tresolvedFile = exactlyOne(tryPathWithExtensionsSync(p, options));\n\t}\n\n\tif (resolvedFile == null) return undefined;\n\n\treturn {\n\t\tfile: path.native.normalize(resolvedFile),\n\t\tcontents: options.fileSystem.readFileSync(path.native.normalize(resolvedFile), \"utf-8\")\n\t};\n}\n\n/**\n * Like tryPath, but checks for all possible extensions\n */\nfunction tryPathWithExtensionsSync(p: string, options: ResolveInternalOptions): string[] {\n\treturn options.extensions.map(extension => [tryPathSync(`${p}${extension}`, options), tryPathSync(path.join(p, `index${extension}`), options)]).flat(2);\n}\n\n/**\n * Returns the path and/or the partial with the same name, if either or both exists\n */\nfunction tryPathSync(p: string, options: ResolveInternalOptions): string[] {\n\tconst absolutePath = path.isAbsolute(p) ? p : path.join(options.baseDir, p);\n\tconst absolutePartial = path.join(path.dirname(absolutePath), `_${path.basename(absolutePath)}`);\n\n\treturn [...(isFileSync(absolutePartial, options.fileSystem) ? [absolutePartial] : []), ...(isFileSync(absolutePath, options.fileSystem) ? [absolutePath] : [])];\n}\n\nfunction isFileSync(p: string, fileSystem: FileSystem): boolean {\n\treturn safeStatSync(p, fileSystem)?.isFile() ?? false;\n}\n\nfunction isDirectorySync(p: string, fileSystem: FileSystem): boolean {\n\treturn safeStatSync(p, fileSystem)?.isDirectory() ?? false;\n}\n\nfunction safeStatSync(p: string, fileSystem: FileSystem): Stats | undefined {\n\ttry {\n\t\treturn fileSystem.statSync(path.native.normalize(p));\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * If paths contains exactly one path, return that path.\n * If it contains no paths, return undefined. If it contains more than one,\n * throw an exception\n */\nfunction exactlyOne(paths: string[]): string | undefined {\n\tconst [head, ...tail] = paths;\n\tif (head == null) return undefined;\n\tif (tail.length > 0) {\n\t\tthrow new ReferenceError(\"It's not clear which file to import. Found:\\n\" + paths.map(p => `  ${p}`).join(\"\\n\"));\n\t}\n\treturn head;\n}\n\nfunction ensureArray<T>(item: T[] | T): T[] {\n\treturn Array.isArray(item) ? item : [item];\n}\n\n/**\n * Sets the given extension for the given file\n */\nfunction replaceScriptExtension(file: string, extension: string): string {\n\treturn path.normalize(`${removeScriptExtension(file)}${extension}`);\n}\n\n/**\n * Strips the extension from a file\n */\nfunction removeScriptExtension(file: string): string {\n\tlet currentExtname: string | undefined;\n\n\tfor (const extName of SCRIPT_EXTENSIONS) {\n\t\tif (file.endsWith(extName)) {\n\t\t\tcurrentExtname = extName;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (currentExtname == null) return file;\n\n\treturn file.slice(0, file.lastIndexOf(currentExtname));\n}\n"],"names":["minimatch"],"mappings":";;;;;;;;;AAYA,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAmDlD;;AAEG;AACG,SAAU,cAAc,CAAC,OAA0C,EAAA;IACxE,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,EAAC,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;AACjF,CAAC;AAED;;AAEG;AACa,SAAA,OAAO,CAAC,CAAS,EAAE,OAAiC,EAAA;AACnE,IAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAElD,MAAM,uBAAuB,GAAG,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;AAC1F,IAAA,MAAM,EAAC,OAAO,EAAE,KAAK,EAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9K,MAAM,eAAe,GAAG,EAAC,GAAG,gBAAgB,EAAE,OAAO,EAAC,CAAC;AAEvD,IAAA,KAAK,MAAM,aAAa,IAAI,KAAK,EAAE;QAClC,MAAM,QAAQ,GAAG,uBAAuB,GAAG,4BAA4B,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QACvJ,IAAI,QAAQ,IAAI,IAAI;AAAE,YAAA,OAAO,QAAQ,CAAC;AACtC,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,OAAiC,EAAA;AACzD,IAAA,MAAM,EAAC,UAAU,GAAG,EAAE,EAAE,0BAA0B,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAC,GAAG,OAAO,KAAP,IAAA,IAAA,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;AAC/J,IAAA,OAAO,EAAC,UAAU,EAAE,0BAA0B,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAC,CAAC;AACpF,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAS,EAAE,OAAuB,EAAA;IAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;QAE7C,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AAE3D,QAAA,IAAI,CAACA,mBAAS,CAAC,CAAC,EAAE,aAAa,CAAC;YAAE,SAAS;QAC3C,MAAM,mBAAmB,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,MAAM,aAAa,GAAG,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAClF,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;QAEzH,OAAO;YACN,KAAK;;YAEL,OAAO,EAAE,OAAO,CAAC,GAAG;SACpB,CAAC;AACF,KAAA;IACD,OAAO;QACN,KAAK,EAAE,CAAC,CAAC,CAAC;AACV,QAAA,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS;KACpE,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,CAAS,EAAE,OAA+B,EAAA;IAC/E,IAAI;AACH,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;YAC1C,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,iBAAiB,CAAC;AACzD,YAAA,YAAY,EAAE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AACtE,YAAA,MAAM,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;AACpD,YAAA,WAAW,EAAE,IAAI,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;;AAG9D,YAAA,UAAU,EAAE,CAAC,CAAC,EAAE,WAAW,KAAI;;gBAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;;AAG9C,gBAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC,EAAE;AACpE,oBAAA,OAAO,WAAW,CAAC;AACnB,iBAAA;;AAGD,gBAAA,OAAO,MAAA,CAAA,EAAA,GAAA,YAAY,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,0CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,WAAW,CAAC;aAC3F;AACD,SAAA,CAAC,CAAC;QAEH,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AACzC,YAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;SACvF,CAAC;AACF,KAAA;AAAC,IAAA,OAAO,EAAE,EAAE;AACZ,QAAA,OAAO,SAAS,CAAC;AACjB,KAAA;AACF,CAAC;AAED,SAAS,YAAY,CAAC,CAAS,EAAE,OAA+B,EAAA;AAC/D,IAAA,IAAI,YAAgC,CAAC;;;;IAKrC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACnD,KAAA;IAED,IAAI,YAAY,IAAI,IAAI,EAAE;QACzB,YAAY,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE,KAAA;IAED,IAAI,YAAY,IAAI,IAAI;AAAE,QAAA,OAAO,SAAS,CAAC;IAE3C,OAAO;QACN,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AACzC,QAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;KACvF,CAAC;AACH,CAAC;AAED;;AAEG;AACH,SAAS,yBAAyB,CAAC,CAAS,EAAE,OAA+B,EAAA;IAC5E,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,SAAS,CAAE,CAAA,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,KAAA,EAAQ,SAAS,CAAE,CAAA,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzJ,CAAC;AAED;;AAEG;AACH,SAAS,WAAW,CAAC,CAAS,EAAE,OAA+B,EAAA;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAE,CAAA,CAAC,CAAC;IAEjG,OAAO,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACjK,CAAC;AAED,SAAS,UAAU,CAAC,CAAS,EAAE,UAAsB,EAAA;;AACpD,IAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,UAAsB,EAAA;;AACzD,IAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,CAAS,EAAE,UAAsB,EAAA;IACtD,IAAI;AACH,QAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,KAAA;IAAC,MAAM;AACP,QAAA,OAAO,SAAS,CAAC;AACjB,KAAA;AACF,CAAC;AAED;;;;AAIG;AACH,SAAS,UAAU,CAAC,KAAe,EAAA;IAClC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,IAAI,IAAI,IAAI,IAAI;AAAE,QAAA,OAAO,SAAS,CAAC;AACnC,IAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,IAAI,cAAc,CAAC,+CAA+C,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChH,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAI,IAAa,EAAA;AACpC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;AAEG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAE,SAAiB,EAAA;AAC9D,IAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAG,EAAA,qBAAqB,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC,CAAC;AACrE,CAAC;AAED;;AAEG;AACH,SAAS,qBAAqB,CAAC,IAAY,EAAA;AAC1C,IAAA,IAAI,cAAkC,CAAC;AAEvC,IAAA,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3B,cAAc,GAAG,OAAO,CAAC;YACzB,MAAM;AACN,SAAA;AACD,KAAA;IAED,IAAI,cAAc,IAAI,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC;AAExC,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;AACxD;;;;;"}