locter 0.8.1 → 1.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/to-array.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/utils.ts","../src/loader/built-in/script/utils.ts","../src/loader/built-in/script/module.ts","../src/loader/built-in/json/module.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/* istanbul ignore next */\nexport function handleFileLoadError(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n if (typeof e === 'string') {\n throw new Error(e);\n }\n\n throw new Error('Cannot determine file loading error.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n if (input.includes('.')) {\n const position = input.lastIndexOf('.');\n const extension = input.substring(\n position,\n input.length,\n );\n\n if (\n typeof extensions === 'undefined' ||\n extensions.indexOf(extension) !== -1\n ) {\n input = input.substring(0, position);\n }\n }\n\n return input;\n}\n","export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.soft ??= true;\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (!skipResolve && !path.isAbsolute(input)) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport glob from 'glob';\nimport { promisify } from 'node:util';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nconst globAsync = promisify(glob);\n\nexport async function locateFiles(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await globAsync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locateFile(\n pattern: string | string[],\n options: Partial<LocatorOptions> & { soft: false }\n) : Promise<LocatorInfo>;\nexport async function locateFile(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined>;\nexport async function locateFile(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<any> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await globAsync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n if (!options.soft) {\n throw new Error('The file could not be located.');\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport glob from 'glob';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateFilesSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = glob.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateFileSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = glob.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport path from 'node:path';\nimport { LocatorInfo } from '../locator';\nimport { hasOwnProperty } from '../utils';\nimport { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function buildLoaderFilePath(info: LocatorInfo, withExtension?: boolean) {\n if (withExtension) {\n return path.join(info.path, info.name) + info.extension;\n }\n\n return path.join(info.path, info.name);\n}\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestEnvironment() {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport { LocatorInfo, pathToLocatorInfo } from '../../../locator';\nimport { handleFileLoadError, hasStringProperty, isObject } from '../../../utils';\nimport { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\nimport { ScriptFileLoadOptions } from './type';\nimport { isJestEnvironment } from './utils';\n\nexport class ScriptLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n /*\n const loaderMap : Record<string, ESLoader> = {\n '.mjs': 'js',\n '.js': 'js',\n '.jsx': 'jsx',\n '.ts': 'ts',\n '.tsx': 'tsx',\n };\n */\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n esmResolve: true,\n /*\n transform: (options) => {\n let loader : ESLoader = 'ts';\n if (options.filename) {\n const info = pathToLocatorInfo(options.filename, true);\n if (loaderMap[info.extension]) {\n loader = loaderMap[info.extension] as ESLoader;\n }\n }\n\n return transformSync(options.source, {\n target: 'ES2020',\n jsx: 'transform',\n format: 'cjs',\n loader,\n });\n },\n\n */\n });\n }\n\n async execute(info: LocatorInfo) {\n const filePath = buildLoaderFilePath(info);\n\n let output : any;\n\n try {\n output = await this.load(info);\n } catch (e) {\n output = this.jiti(filePath);\n }\n\n return output;\n }\n\n executeSync(info: LocatorInfo) {\n const filePath = buildLoaderFilePath(info);\n\n let output : any;\n\n try {\n output = this.loadSync(info);\n } catch (e) {\n output = this.jiti(filePath);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleFileLoadError(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { LocatorInfo } from '../../../locator';\nimport { handleFileLoadError } from '../../../utils';\nimport { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\n\nexport class JSONLoader implements Loader {\n async execute(input: LocatorInfo) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n\n executeSync(input: LocatorInfo) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LocatorInfo } from '../locator';\nimport { JSONLoader, ScriptLoader } from './built-in';\nimport { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport class LoaderManager {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n { test: ['.js', '.mjs', '.cjs', '.ts'], loader: 'script' },\n { test: ['.json'], loader: 'json' },\n ];\n }\n\n register(rule: Rule) {\n this.rules.push(rule);\n }\n\n async execute(info: LocatorInfo) : Promise<any> {\n const rule = this.findRule(info);\n if (!rule) {\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(rule.loader);\n return loader.execute(info);\n }\n\n executeSync(info: LocatorInfo) : any {\n const rule = this.findRule(info);\n if (!rule) {\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(rule.loader);\n return loader.executeSync(info);\n }\n\n findRule(info: LocatorInfo) : Rule | undefined {\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i];\n }\n } else if (test.test(buildLoaderFilePath(info))) {\n return this.rules[i];\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (this.loaders[id]) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n switch (id) {\n case 'script': {\n loader = new ScriptLoader();\n break;\n }\n case 'json': {\n loader = new JSONLoader();\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoaderManager() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LocatorInfo, pathToLocatorInfo } from '../locator';\nimport { useLoaderManager } from './singleton';\n\nexport async function loadFile(input: LocatorInfo | string) : Promise<unknown> {\n let info : LocatorInfo;\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n const manager = useLoaderManager();\n\n return manager.execute(info);\n}\n\nexport function loadFileSync(input: LocatorInfo | string) : unknown {\n let info : LocatorInfo;\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n const manager = useLoaderManager();\n\n return manager.executeSync(info);\n}\n"],"names":["handleFileLoadError","e","Error","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","toArray","options","buildLocatorOptions","path","push","process","cwd","soft","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","globAsync","promisify","glob","locateFiles","pattern","patterns","items","i","j","files","absolute","nodir","k","locateFile","element","shift","undefined","locateFilesSync","sync","locateFileSync","buildLoaderFilePath","withExtension","getExportItem","data","filterFn","keys","key","value","BaseError","default","isJestEnvironment","env","JEST_WORKER_ID","ScriptLoader","execute","filePath","output","load","jiti","executeSync","loadSync","locatorInfo","withFilePrefix","pathToFileURL","href","require","code","message","stack","constructor","createJITI","esmResolve","JSONLoader","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderManager","register","rule","rules","findRule","loader","test","id","loaders","instance","useLoaderManager","loadFile","manager","loadFileSync"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/to-array.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/utils.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/* istanbul ignore next */\nexport function handleFileLoadError(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n if (typeof e === 'string') {\n throw new Error(e);\n }\n\n throw new Error('Cannot determine file loading error.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n if (input.includes('.')) {\n const position = input.lastIndexOf('.');\n const extension = input.substring(\n position,\n input.length,\n );\n\n if (\n typeof extensions === 'undefined' ||\n extensions.indexOf(extension) !== -1\n ) {\n input = input.substring(0, position);\n }\n }\n\n return input;\n}\n","export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function isFilePath(input: string) {\n const info = path.parse(input);\n return info.ext !== '';\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport glob from 'glob';\nimport { promisify } from 'node:util';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nconst globAsync = promisify(glob);\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await globAsync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await globAsync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport glob from 'glob';\nimport { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = glob.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = glob.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport path from 'node:path';\nimport { LocatorInfo, pathToLocatorInfo } from '../locator';\nimport { hasOwnProperty } from '../utils';\nimport { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function buildLoaderFilePath(input: LocatorInfo | string, withExtension?: boolean) {\n let info: LocatorInfo;\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n if (withExtension) {\n return path.join(info.path, info.name) + info.extension;\n }\n\n return path.join(info.path, info.name);\n}\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport { LocatorInfo, pathToLocatorInfo } from '../../../locator';\nimport { handleFileLoadError, hasStringProperty, isObject } from '../../../utils';\nimport { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\nimport { ScriptFileLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n esmResolve: true,\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleFileLoadError(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { handleFileLoadError } from '../../../utils';\nimport { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isFilePath, pathToLocatorInfo } from '../locator';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildLoaderFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<unknown> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildLoaderFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : unknown {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildLoaderFilePath(input));\n}\n"],"names":["handleFileLoadError","e","Error","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","toArray","options","buildLocatorOptions","path","push","process","cwd","ignore","isFilePath","info","parse","ext","pathToLocatorInfo","skipResolve","isAbsolute","resolve","dir","split","join","sep","name","globAsync","promisify","glob","locateMany","pattern","patterns","items","i","j","files","absolute","nodir","k","locate","element","shift","undefined","locateManySync","sync","locateSync","buildLoaderFilePath","withExtension","getExportItem","data","filterFn","keys","key","value","BaseError","default","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","ModuleLoader","execute","output","load","loadSync","jiti","executeSync","locatorInfo","filePath","withFilePrefix","pathToFileURL","href","require","code","message","stack","constructor","createJITI","esmResolve","JSONLoader","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager"],"mappings":";;;;;;;;;;AAAA;;;;;AAKC,+BAGM,SAASA,mBAAAA,CAAoBC,CAAU,EAAS;AACnD,IAAA,IAAIA,aAAaC,KAAO,EAAA;AACpB,QAAA,MAAMD,CAAE,CAAA;KACX;IAED,IAAI,OAAOA,MAAM,QAAU,EAAA;QACvB,MAAM,IAAIC,MAAMD,CAAG,CAAA,CAAA;KACtB;IAED,MAAM,IAAIC,MAAM,sCAAwC,CAAA,CAAA;AAC5D;;AClBA;;;;;AAKC,IAEM,SAASC,uBAAAA,CACZC,KAAa,EACbC,UAAqB,EACvB;IACE,IAAID,KAAAA,CAAME,QAAQ,CAAC,GAAM,CAAA,EAAA;QACrB,MAAMC,QAAAA,GAAWH,KAAMI,CAAAA,WAAW,CAAC,GAAA,CAAA,CAAA;AACnC,QAAA,MAAMC,YAAYL,KAAMM,CAAAA,SAAS,CAC7BH,QAAAA,EACAH,MAAMO,MAAM,CAAA,CAAA;QAGhB,IACI,OAAON,eAAe,WACtBA,IAAAA,UAAAA,CAAWO,OAAO,CAACH,SAAAA,CAAAA,KAAe,CAAC,CACrC,EAAA;YACEL,KAAQA,GAAAA,KAAAA,CAAMM,SAAS,CAAC,CAAGH,EAAAA,QAAAA,CAAAA,CAAAA;SAC9B;KACJ;IAED,OAAOH,KAAAA,CAAAA;AACX;;AC3BO,SAASS,cAAAA,CAAqEC,GAAM,EAAEC,IAAO,EAAiC;AACjI,IAAA,OAAOC,OAAOC,SAAS,CAACJ,cAAc,CAACK,IAAI,CAACJ,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;AACrD,CAAC;AAEM,SAASI,iBAAAA,CAAwEL,GAAM,EAAEC,IAAO,EAAgC;AACnI,IAAA,OAAOF,eAAeC,GAAKC,EAAAA,IAAAA,CAAAA,IAAS,OAAOD,GAAG,CAACC,KAAK,KAAK,QAAA,CAAA;AAC7D;;ACNA;;;;;AAKC,IAEM,SAASK,QAASC,CAAAA,IAAa,EAAgC;IAClE,OACI,CAAC,CAACA,IACF,IAAA,OAAOA,SAAS,QAChB,IAAA,CAACC,KAAMC,CAAAA,OAAO,CAACF,IAAAA,CAAAA,CAAAA;AAEvB;;ACbA;;;;;AAKC,IAEM,SAASG,OAAQpB,CAAAA,KAAwB,EAAa;AACzD,IAAA,OAAOkB,KAAMC,CAAAA,OAAO,CAACnB,KAAAA,CAAAA,GAASA,KAAQ,GAAA;AAACA,QAAAA,KAAAA;AAAM,KAAA,CAAA;AACjD;;ACTA;;;;;IAoBIqB,IAAAA,QAAAA,CAAAA;AATG,SAASC,mBAAoBD,CAAAA,OAAiC,EAAmB;AACpFA,IAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtBA,IAAAA,OAAAA,CAAQE,IAAI,GAAGF,OAAQE,CAAAA,IAAI,IAAI,EAAE,CAAA;AACjCF,IAAAA,OAAAA,CAAQE,IAAI,GAAGH,OAAQC,CAAAA,OAAAA,CAAQE,IAAI,CAAA,CAAA;AACnC,IAAA,IAAIF,OAAQE,CAAAA,IAAI,CAAChB,MAAM,KAAK,CAAG,EAAA;AAC3Bc,QAAAA,OAAAA,CAAQE,IAAI,CAACC,IAAI,CAACC,QAAQC,GAAG,EAAA,CAAA,CAAA;KAChC;AAEDL,IAAAA,CAAAA,QAAAA,GAAAA,OAAAA,EAAQM,MAARN,KAAAA,QAAAA,CAAQM,SAAW,EAAE,CAAA,CAAA;IAErB,OAAON,OAAAA,CAAAA;AACX,CAAC;AAEM,SAASO,UAAW5B,CAAAA,KAAa,EAAE;IACtC,MAAM6B,IAAAA,GAAON,IAAKO,CAAAA,KAAK,CAAC9B,KAAAA,CAAAA,CAAAA;IACxB,OAAO6B,IAAAA,CAAKE,GAAG,KAAK,EAAA,CAAA;AACxB,CAAC;AAEM,SAASC,iBAAAA,CACZhC,KAAa,EACbiC,WAAqB,EACT;AACZ,IAAA,IACI,CAACA,WACD,IAAA,CAACV,IAAKW,CAAAA,UAAU,CAAClC,KACnB,CAAA,EAAA;AACEA,QAAAA,KAAAA,GAAQuB,IAAKY,CAAAA,OAAO,CAACV,OAAAA,CAAQC,GAAG,EAAI1B,EAAAA,KAAAA,CAAAA,CAAAA;KACvC;IAED,MAAM6B,IAAAA,GAAON,IAAKO,CAAAA,KAAK,CAAC9B,KAAAA,CAAAA,CAAAA;IAExB,OAAO;QACHuB,IAAMM,EAAAA,IAAAA,CAAKO,GAAG,CAACC,KAAK,CAAC,GAAKC,CAAAA,CAAAA,IAAI,CAACf,IAAAA,CAAKgB,GAAG,CAAA;AACvCC,QAAAA,IAAAA,EAAMX,KAAKW,IAAI;AACfnC,QAAAA,SAAAA,EAAWwB,KAAKE,GAAG;AACvB,KAAA,CAAA;AACJ;;ACpCA,MAAMU,YAAYC,mBAAUC,CAAAA,IAAAA,CAAAA,CAAAA;AAErB,eAAeC,UAAAA,CAClBC,OAA0B,EAC1BxB,OAAiC,EACV;AACvBA,IAAAA,OAAAA,GAAUC,mBAAoBD,CAAAA,OAAAA,CAAAA,CAAAA;AAE9B,IAAA,MAAMyB,QAAW5B,GAAAA,KAAAA,CAAMC,OAAO,CAAC0B,WAC3BA,OACA,GAAA;AAACA,QAAAA,OAAAA;AAAQ,KAAA,CAAA;AAEb,IAAA,MAAME,QAAwB,EAAE,CAAA;AAEhC,IAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIF,QAASvC,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;QACtC,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAC5B,QAA2BE,IAAI,CAAChB,MAAM,EAAE0C,CAAK,EAAA,CAAA;AAC9D,YAAA,MAAMC,QAAQ,MAAMT,SAAAA,CAAUK,QAAQ,CAACE,EAAE,EAAY;AACjDG,gBAAAA,QAAAA,EAAU,IAAI;AACdzB,gBAAAA,GAAAA,EAAK,OAACL,CAA2BE,IAAI,CAAC0B,CAAE,CAAA;AACxCG,gBAAAA,KAAAA,EAAO,IAAI;AACXzB,gBAAAA,MAAAA,EAAQN,QAAQM,MAAM;AAC1B,aAAA,CAAA,CAAA;AAEA,YAAA,IAAK,IAAI0B,CAAI,GAAA,CAAA,EAAGA,IAAIH,KAAM3C,CAAAA,MAAM,EAAE8C,CAAK,EAAA,CAAA;AACnCN,gBAAAA,KAAAA,CAAMvB,IAAI,CAACQ,iBAAAA,CAAkBkB,KAAK,CAACG,CAAAA,CAAE,EAAY,IAAI,CAAA,CAAA,CAAA;AACzD,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAON,KAAAA,CAAAA;AACX,CAAC;AAEM,eAAeO,MAAAA,CAClBT,OAA0B,EAC1BxB,OAAiC,EACA;AACjCA,IAAAA,OAAAA,GAAUC,mBAAoBD,CAAAA,OAAAA,CAAAA,CAAAA;AAE9B,IAAA,MAAMyB,QAAW5B,GAAAA,KAAAA,CAAMC,OAAO,CAAC0B,WAC3BA,OACA,GAAA;AAACA,QAAAA,OAAAA;AAAQ,KAAA,CAAA;AAEb,IAAA,IAAK,IAAIG,CAAI,GAAA,CAAA,EAAGA,IAAIF,QAASvC,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;QACtC,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAC5B,QAA2BE,IAAI,CAAChB,MAAM,EAAE0C,CAAK,EAAA,CAAA;AAC9D,YAAA,MAAMC,QAAQ,MAAMT,SAAAA,CAAUK,QAAQ,CAACE,EAAE,EAAY;AACjDG,gBAAAA,QAAAA,EAAU,IAAI;AACdzB,gBAAAA,GAAAA,EAAK,OAACL,CAA2BE,IAAI,CAAC0B,CAAE,CAAA;AACxCG,gBAAAA,KAAAA,EAAO,IAAI;AACXzB,gBAAAA,MAAAA,EAAQN,QAAQM,MAAM;AAC1B,aAAA,CAAA,CAAA;YAEA,MAAM4B,OAAAA,GAAUL,MAAMM,KAAK,EAAA,CAAA;AAC3B,YAAA,IAAID,OAAS,EAAA;gBACT,OAAOvB,iBAAAA,CAAkBuB,SAAS,IAAI,CAAA,CAAA;aACzC;AACL,SAAA;AACJ,KAAA;IAEA,OAAOE,SAAAA,CAAAA;AACX;;AC5DO,SAASC,cAAAA,CACZb,OAA0B,EAC1BxB,OAAiC,EACnB;AACdA,IAAAA,OAAAA,GAAUC,mBAAoBD,CAAAA,OAAAA,CAAAA,CAAAA;AAE9B,IAAA,MAAMyB,QAAW5B,GAAAA,KAAAA,CAAMC,OAAO,CAAC0B,WAC3BA,OACA,GAAA;AAACA,QAAAA,OAAAA;AAAQ,KAAA,CAAA;AAEb,IAAA,MAAME,QAAwB,EAAE,CAAA;AAEhC,IAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIF,QAASvC,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;QACtC,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAC5B,QAA2BE,IAAI,CAAChB,MAAM,EAAE0C,CAAK,EAAA,CAAA;AAC9D,YAAA,MAAMC,QAAQP,IAAKgB,CAAAA,IAAI,CAACb,QAAQ,CAACE,EAAE,EAAY;AAC3CG,gBAAAA,QAAAA,EAAU,IAAI;AACdzB,gBAAAA,GAAAA,EAAK,OAACL,CAA2BE,IAAI,CAAC0B,CAAE,CAAA;AACxCG,gBAAAA,KAAAA,EAAO,IAAI;AACXzB,gBAAAA,MAAAA,EAAQN,QAAQM,MAAM;AAC1B,aAAA,CAAA,CAAA;AAEA,YAAA,IAAK,IAAI0B,CAAI,GAAA,CAAA,EAAGA,IAAIH,KAAM3C,CAAAA,MAAM,EAAE8C,CAAK,EAAA,CAAA;AACnCN,gBAAAA,KAAAA,CAAMvB,IAAI,CAACQ,iBAAAA,CAAkBkB,KAAK,CAACG,CAAAA,CAAE,EAAY,IAAI,CAAA,CAAA,CAAA;AACzD,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAON,KAAAA,CAAAA;AACX,CAAC;AAEM,SAASa,UAAAA,CACZf,OAA0B,EAC1BxB,OAAiC,EACT;AACxBA,IAAAA,OAAAA,GAAUC,mBAAoBD,CAAAA,OAAAA,CAAAA,CAAAA;AAE9B,IAAA,MAAMyB,QAAW5B,GAAAA,KAAAA,CAAMC,OAAO,CAAC0B,WAC3BA,OACA,GAAA;AAACA,QAAAA,OAAAA;AAAQ,KAAA,CAAA;AAEb,IAAA,IAAK,IAAIG,CAAI,GAAA,CAAA,EAAGA,IAAIF,QAASvC,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;QACtC,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAC5B,QAA2BE,IAAI,CAAChB,MAAM,EAAE0C,CAAK,EAAA,CAAA;AAC9D,YAAA,MAAMC,QAAQP,IAAKgB,CAAAA,IAAI,CAACb,QAAQ,CAACE,EAAE,EAAY;AAC3CG,gBAAAA,QAAAA,EAAU,IAAI;AACdzB,gBAAAA,GAAAA,EAAK,OAACL,CAA2BE,IAAI,CAAC0B,CAAE,CAAA;AACxCG,gBAAAA,KAAAA,EAAO,IAAI;AACXzB,gBAAAA,MAAAA,EAAQN,QAAQM,MAAM;AAC1B,aAAA,CAAA,CAAA;YAEA,MAAM4B,OAAAA,GAAUL,MAAMM,KAAK,EAAA,CAAA;AAC3B,YAAA,IAAID,OAAS,EAAA;gBACT,OAAOvB,iBAAAA,CAAkBuB,SAAS,IAAI,CAAA,CAAA;aACzC;AACL,SAAA;AACJ,KAAA;IAEA,OAAOE,SAAAA,CAAAA;AACX;;ACvDO,SAASI,mBAAAA,CAAoB7D,KAA2B,EAAE8D,aAAuB,EAAE;IACtF,IAAIjC,IAAAA,CAAAA;IACJ,IAAI,OAAO7B,UAAU,QAAU,EAAA;AAC3B6B,QAAAA,IAAAA,GAAOG,iBAAkBhC,CAAAA,KAAAA,CAAAA,CAAAA;KACtB,MAAA;QACH6B,IAAO7B,GAAAA,KAAAA,CAAAA;KACV;AAED,IAAA,IAAI8D,aAAe,EAAA;QACf,OAAOvC,IAAAA,CAAKe,IAAI,CAACT,IAAKN,CAAAA,IAAI,EAAEM,IAAKW,CAAAA,IAAI,CAAIX,GAAAA,IAAAA,CAAKxB,SAAS,CAAA;KAC1D;AAED,IAAA,OAAOkB,KAAKe,IAAI,CAACT,KAAKN,IAAI,EAAEM,KAAKW,IAAI,CAAA,CAAA;AACzC,CAAC;AAEM,SAASuB,aAAAA,CACZC,IAAyB,EACzBC,QAAyB,EACL;AACpB,IAAA,IAAIA,QAAU,EAAA;QACV,MAAMC,IAAAA,GAAOtD,MAAOsD,CAAAA,IAAI,CAACF,IAAAA,CAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIhB,CAAI,GAAA,CAAA,EAAGA,IAAIkB,IAAK3D,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;YAClC,IAAIiB,QAAAA,CAASC,IAAI,CAAClB,CAAE,CAAA,EAAYgB,IAAI,CAACE,IAAI,CAAClB,CAAE,CAAA,CAAW,CAAG,EAAA;gBACtD,OAAO;oBACHmB,GAAKD,EAAAA,IAAI,CAAClB,CAAE,CAAA;AACZoB,oBAAAA,KAAAA,EAAOJ,IAAI,CAACE,IAAI,CAAClB,EAAE,CAAW;AAClC,iBAAA,CAAA;aACH;AACL,SAAA;QAEA,MAAM,IAAIqB,eAAU,qCAAuC,CAAA,CAAA;KAC9D;IAED,OAAO;QACHF,GAAK,EAAA,SAAA;AACLC,QAAAA,KAAAA,EAAO3D,eAAeuD,IAAM,EAAA,SAAA,CAAA,GAAaA,IAAKM,CAAAA,OAAO,GAAGN,IAAI;AAChE,KAAA,CAAA;AACJ;;AClDA;;;;;IAOO,SAASO,wBAAqC,GAAA;AACjD,IAAA,OAAO9C,QAAQ+C,GAAG,IACd/C,QAAQ+C,GAAG,CAACC,cAAc,KAAKhB,SAAAA,CAAAA;AACvC,CAAC;AAEM,SAASiB,0BAAuC,GAAA;;;AAGnD,IAAA,OAAO,CAAC,CAACjD,OAAO,CAACkD,MAAOC,CAAAA,GAAG,CAAC,2BAA6B,CAAA,CAAA,CAAA;AAC7D;;ACEO,MAAMC,YAAAA,CAAAA;IAYT,MAAMC,OAAAA,CAAQ9E,KAAa,EAAE;QACzB,IAAI+E,MAAAA,CAAAA;QAEJ,IAAI;AACAA,YAAAA,MAAAA,GAAS,MAAM,IAAI,CAACC,IAAI,CAAChF,KAAAA,CAAAA,CAAAA;AAC7B,SAAA,CAAE,OAAOH,CAAG,EAAA;;;AAGR,YAAA,IAAI6E,0BAA8B,EAAA,EAAA;gBAC9BK,MAAS,GAAA,IAAI,CAACE,QAAQ,CAACjF,KAAAA,CAAAA,CAAAA;aACpB,MAAA;gBACH+E,MAAS,GAAA,IAAI,CAACG,IAAI,CAAClF,KAAAA,CAAAA,CAAAA;aACtB;AACL,SAAA;QAEA,OAAO+E,MAAAA,CAAAA;AACX,KAAA;AAEAI,IAAAA,WAAAA,CAAYnF,KAAa,EAAE;QACvB,IAAI+E,MAAAA,CAAAA;QAEJ,IAAI;YACAA,MAAS,GAAA,IAAI,CAACE,QAAQ,CAACjF,KAAAA,CAAAA,CAAAA;AAC3B,SAAA,CAAE,OAAOH,CAAG,EAAA;YACRkF,MAAS,GAAA,IAAI,CAACG,IAAI,CAAClF,KAAAA,CAAAA,CAAAA;AACvB,SAAA;QAEA,OAAO+E,MAAAA,CAAAA;AACX,KAAA;;AAIA,IAAA,MAAMC,IACFhB,CAAAA,IAA0B,EAC1B3C,OAA+B,EACd;QACjB,IAAI+D,WAAAA,CAAAA;QAEJ,IAAI,OAAOpB,SAAS,QAAU,EAAA;AAC1BoB,YAAAA,WAAAA,GAAcpD,iBAAkBgC,CAAAA,IAAAA,CAAAA,CAAAA;SAC7B,MAAA;YACHoB,WAAcpB,GAAAA,IAAAA,CAAAA;SACjB;AAED3C,QAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtB,QAAA,IAAIgE,QAAWxB,GAAAA,mBAAAA,CAAoBuB,WAAa/D,EAAAA,OAAAA,CAAQyC,aAAa,CAAA,CAAA;QACrE,IAAIzC,OAAAA,CAAQiE,cAAc,EAAE;YACxBD,QAAWE,GAAAA,sBAAAA,CAAcF,UAAUG,IAAI,CAAA;SAC1C;QAED,IAAI;;;AAGA,YAAA,IAAIjB,wBAA4B,EAAA,EAAA;;AAE5B,gBAAA,OAAOkB,OAAQJ,CAAAA,QAAAA,CAAAA,CAAAA;aAClB;YAED,OAAO,MAAM,OAAOA,QAAAA,CAAAA,CAAAA;AACxB,SAAA,CAAE,OAAOxF,CAAG,EAAA;AACR,uCACA,IACImB,QAAAA,CAASnB,CACTkB,CAAAA,IAAAA,iBAAAA,CAAkBlB,GAAG,MACvB,CAAA,EAAA;AACE,gBAAA,IACI,CAACwB,OAAAA,CAAQyC,aAAa,KAElBjE,CAAAA,CAAE6F,IAAI,KAAK,sBACX7F,IAAAA,CAAAA,CAAE6F,IAAI,KAAK,kBAAiB,CAElC,EAAA;AACE,oBAAA,OAAO,IAAI,CAACV,IAAI,CAACI,WAAa,EAAA;AAC1B,wBAAA,GAAG/D,OAAO;AACVyC,wBAAAA,aAAAA,EAAe,IAAI;AACvB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,IACI,CAACzC,OAAAA,CAAQiE,cAAc,KAEnBzF,CAAAA,CAAE6F,IAAI,KAAK,gCACX7F,IAAAA,CAAAA,CAAE6F,IAAI,KAAK,4BAA2B,CAE5C,EAAA;AACE,oBAAA,OAAO,IAAI,CAACV,IAAI,CAACI,WAAa,EAAA;AAC1B,wBAAA,GAAG/D,OAAO;AACViE,wBAAAA,cAAAA,EAAgB,IAAI;AACxB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,MAAM,IAAIjB,cAAU,CAAA;AAChBqB,oBAAAA,IAAAA,EAAM7F,EAAE6F,IAAI;AACZC,oBAAAA,OAAAA,EAAS5E,kBAAkBlB,CAAG,EAAA,SAAA,CAAA,GAAaA,CAAE8F,CAAAA,OAAO,GAAGlC,SAAS;AAChEmC,oBAAAA,KAAAA,EAAO7E,kBAAkBlB,CAAG,EAAA,OAAA,CAAA,GAAWA,CAAE+F,CAAAA,KAAK,GAAGnC,SAAS;iBAC3D,CAAA,CAAA;aACN;uCAGD,OAAO7D,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;IAEAoF,QACIjB,CAAAA,IAA0B,EAC1B3C,OAA+B,EACvB;QACR,IAAI+D,WAAAA,CAAAA;QAEJ,IAAI,OAAOpB,SAAS,QAAU,EAAA;AAC1BoB,YAAAA,WAAAA,GAAcpD,iBAAkBgC,CAAAA,IAAAA,CAAAA,CAAAA;SAC7B,MAAA;YACHoB,WAAcpB,GAAAA,IAAAA,CAAAA;SACjB;AAED3C,QAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtB,QAAA,MAAMgE,QAAWxB,GAAAA,mBAAAA,CAAoBuB,WAAa/D,EAAAA,OAAAA,CAAQyC,aAAa,CAAA,CAAA;QAEvE,IAAI;;AAEA,YAAA,OAAO2B,OAAQJ,CAAAA,QAAAA,CAAAA,CAAAA;AACnB,SAAA,CAAE,OAAOxF,CAAG,EAAA;AACR,uCACA,IACImB,QAAAA,CAASnB,CACTkB,CAAAA,IAAAA,iBAAAA,CAAkBlB,GAAG,MACvB,CAAA,EAAA;AACE,gBAAA,IACI,CAACwB,OAAAA,CAAQyC,aAAa,KAElBjE,CAAAA,CAAE6F,IAAI,KAAK,sBACX7F,IAAAA,CAAAA,CAAE6F,IAAI,KAAK,kBAAiB,CAElC,EAAA;AACE,oBAAA,OAAO,IAAI,CAACT,QAAQ,CAACG,WAAa,EAAA;AAC9B,wBAAA,GAAG/D,OAAO;AACVyC,wBAAAA,aAAAA,EAAe,IAAI;AACvB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,MAAM,IAAIO,cAAU,CAAA;AAChBqB,oBAAAA,IAAAA,EAAM7F,EAAE6F,IAAI;AACZC,oBAAAA,OAAAA,EAAS5E,kBAAkBlB,CAAG,EAAA,SAAA,CAAA,GAAaA,CAAE8F,CAAAA,OAAO,GAAGlC,SAAS;AAChEmC,oBAAAA,KAAAA,EAAO7E,kBAAkBlB,CAAG,EAAA,OAAA,CAAA,GAAWA,CAAE+F,CAAAA,KAAK,GAAGnC,SAAS;iBAC3D,CAAA,CAAA;aACN;AAED,YAAA,OAAO7D,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;IAhKAgG,WAAc,EAAA;;;AAGV,QAAA,IAAI,CAACX,IAAI,GAAGY,UAAAA,CAAWrC,SAAW,EAAA;YAC9BxD,UAAY,EAAA;AAAC,gBAAA,KAAA;AAAO,gBAAA,MAAA;AAAQ,gBAAA,MAAA;AAAQ,gBAAA,MAAA;AAAQ,gBAAA,MAAA;AAAQ,gBAAA,KAAA;AAAM,aAAA;AAC1D8F,YAAAA,UAAAA,EAAY,IAAI;AACpB,SAAA,CAAA,CAAA;AACJ,KAAA;AA0JJ;;AC1KO,MAAMC,UAAAA,CAAAA;IACT,MAAMlB,OAAAA,CAAQ9E,KAAa,EAAE;QACzB,MAAMqF,QAAAA,GAAWxB,mBAAoB7D,CAAAA,KAAAA,EAAO,IAAI,CAAA,CAAA;QAEhD,IAAI;AACA,YAAA,MAAMiG,OAAO,MAAMC,EAAAA,CAAGC,QAAQ,CAACC,QAAQ,CAACf,QAAAA,CAAAA,CAAAA;AACxC,YAAA,OAAOgB,IAAKvE,CAAAA,KAAK,CAACmE,IAAAA,CAAKK,QAAQ,CAAC,OAAA,CAAA,CAAA,CAAA;AACpC,SAAA,CAAE,OAAOzG,CAAG,EAAA;AACR,YAAA,OAAOD,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;AAEAsF,IAAAA,WAAAA,CAAYnF,KAAa,EAAE;QACvB,MAAMqF,QAAAA,GAAWxB,mBAAoB7D,CAAAA,KAAAA,EAAO,IAAI,CAAA,CAAA;QAEhD,IAAI;YACA,MAAMiG,IAAAA,GAAOC,EAAGK,CAAAA,YAAY,CAAClB,QAAAA,CAAAA,CAAAA;AAC7B,YAAA,OAAOgB,IAAKvE,CAAAA,KAAK,CAACmE,IAAAA,CAAKK,QAAQ,CAAC,OAAA,CAAA,CAAA,CAAA;AACpC,SAAA,CAAE,OAAOzG,CAAG,EAAA;AACR,YAAA,OAAOD,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;AACJ;;AClCA;;;;;IAOO,IAAA,QAAA,CAAA;UAAK2G,QAAQ,EAAA;AAARA,IAAAA,QAAAA,CACRC,QAAS,CAAA,GAAA,QAAA,CAAA;AADDD,IAAAA,QAAAA,CAERH,MAAO,CAAA,GAAA,MAAA,CAAA;GAFCG,QAAAA,KAAAA,QAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;ACOL,MAAME,aAAAA,CAAAA;IAsBTC,QAASC,CAAAA,IAAS,EAAEC,MAAe,EAAS;QACxC,IAAI,OAAOA,WAAW,WAAa,EAAA;AAC/B,YAAA,IAAI,CAACC,KAAK,CAACtF,IAAI,CAAC;AAAEoF,gBAAAA,IAAAA;AAAMC,gBAAAA,MAAAA;AAAO,aAAA,CAAA,CAAA;AAC/B,YAAA,OAAA;SACH;AAED,QAAA,IAAI,CAACC,KAAK,CAACtF,IAAI,CAACoF,IAAAA,CAAAA,CAAAA;AACpB,KAAA;IAEA,MAAM9B,OAAAA,CAAQ9E,KAAa,EAAiB;AACxC,QAAA,MAAM+G,EAAK,GAAA,IAAI,CAACC,UAAU,CAAChH,KAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAI,CAAC+G,EAAI,EAAA;AACL,YAAA,MAAMlF,OAAOG,iBAAkBhC,CAAAA,KAAAA,CAAAA,CAAAA;YAC/B,MAAM,IAAIF,KAAM,CAAA,CAAC,qCAAqC,EAAE+B,KAAKxB,SAAS,CAAC,CAAC,CAAC,CAAE,CAAA;SAC9E;AAED,QAAA,MAAMwG,MAAS,GAAA,IAAI,CAAC1E,OAAO,CAAC4E,EAAAA,CAAAA,CAAAA;QAC5B,OAAOF,MAAAA,CAAO/B,OAAO,CAAC9E,KAAAA,CAAAA,CAAAA;AAC1B,KAAA;AAEAmF,IAAAA,WAAAA,CAAYnF,KAAa,EAAQ;AAC7B,QAAA,MAAM+G,EAAK,GAAA,IAAI,CAACC,UAAU,CAAChH,KAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAI,CAAC+G,EAAI,EAAA;AACL,YAAA,MAAMlF,OAAOG,iBAAkBhC,CAAAA,KAAAA,CAAAA,CAAAA;YAC/B,MAAM,IAAIF,KAAM,CAAA,CAAC,oCAAoC,EAAE+B,KAAKxB,SAAS,IAAI,SAAU,CAAA,CAAC,CAAE,CAAA;SACzF;AAED,QAAA,MAAMwG,MAAS,GAAA,IAAI,CAAC1E,OAAO,CAAC4E,EAAAA,CAAAA,CAAAA;QAC5B,OAAOF,MAAAA,CAAO1B,WAAW,CAACnF,KAAAA,CAAAA,CAAAA;AAC9B,KAAA;AAEAgH,IAAAA,UAAAA,CAAWhH,KAAa,EAAgC;QACpD,IAAI,CAAC4B,WAAW5B,KAAQ,CAAA,EAAA;AACpB,YAAA,OAAOwG,SAASC,MAAM,CAAA;SACzB;AAED,QAAA,MAAM5E,OAAOG,iBAAkBhC,CAAAA,KAAAA,CAAAA,CAAAA;QAC/B,IAAK,IAAIgD,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC8D,KAAK,CAACvG,MAAM,EAAEyC,CAAK,EAAA,CAAA;YACxC,MAAM,EAAE4D,OAAM,GAAG,IAAI,CAACE,KAAK,CAAC9D,CAAE,CAAA,CAAA;YAC9B,IAAI9B,KAAAA,CAAMC,OAAO,CAACyF,IAAO,CAAA,EAAA;AACrB,gBAAA,IAAIA,KAAKpG,OAAO,CAACqB,KAAKxB,SAAS,CAAA,KAAM,CAAC,CAAG,EAAA;AACrC,oBAAA,OAAO,IAAI,CAACyG,KAAK,CAAC9D,CAAAA,CAAE,CAAC6D,MAAM,CAAA;iBAC9B;AACL,aAAA,MAAO,IAAID,IAAAA,CAAKA,IAAI,CAAC/C,oBAAoBhC,IAAQ,CAAA,CAAA,EAAA;AAC7C,gBAAA,OAAO,IAAI,CAACiF,KAAK,CAAC9D,CAAAA,CAAE,CAAC6D,MAAM,CAAA;aAC9B;AACL,SAAA;QAEA,OAAOpD,SAAAA,CAAAA;AACX,KAAA;AAEA;;;;QAKAtB,OAAAA,CAAQ4E,EAAmB,EAAW;QAClC,IAAI,OAAOA,OAAO,QAAU,EAAA;YACxB,OAAOA,EAAAA,CAAAA;SACV;QAED,IAAInG,MAAAA,CAAOC,SAAS,CAACJ,cAAc,CAACK,IAAI,CAAC,IAAI,CAACmG,OAAO,EAAEF,EAAK,CAAA,EAAA;AACxD,YAAA,OAAO,IAAI,CAACE,OAAO,CAACF,EAAG,CAAA,CAAA;SAC1B;QAED,IAAIF,MAAAA,CAAAA;;QAGJ,OAAQE,EAAAA;AACJ,YAAA,KAAKP,SAASC,MAAM;AAAE,gBAAA;AAClBI,oBAAAA,MAAAA,GAAS,IAAIhC,YAAAA,EAAAA,CAAAA;oBACb,MAAM;AACV,iBAAA;AACA,YAAA,KAAK2B,SAASH,IAAI;AAAE,gBAAA;AAChBQ,oBAAAA,MAAAA,GAAS,IAAIb,UAAAA,EAAAA,CAAAA;oBACb,MAAM;AACV,iBAAA;AACA,YAAA;AAAS,gBAAA;AACL,oBAAA,MAAMkB,UAAa,GAAA,IAAI,CAACC,aAAa,CAACJ,EAAAA,CAAAA,CAAAA;AACtC,oBAAA,MAAMK,eAAe,IAAI,CAACjF,OAAO,CAACqE,SAASC,MAAM,CAAA,CAAA;oBACjDI,MAASO,GAAAA,YAAAA,CAAajC,WAAW,CAAC+B,UAAAA,CAAAA,CAAAA;oBAElC,MAAM;AACV,iBAAA;AACJ,SAAA;QAEA,IAAI,OAAOL,WAAW,WAAa,EAAA;AAC/B,YAAA,IAAI,CAACI,OAAO,CAACF,EAAAA,CAAG,GAAGF,MAAAA,CAAAA;YAEnB,OAAOA,MAAAA,CAAAA;SACV;QAED,MAAM,IAAI/G,MAAM,CAAC,WAAW,EAAEiH,EAAG,CAAA,uBAAuB,CAAC,CAAE,CAAA;AAC/D,KAAA;AAEAI,IAAAA,aAAAA,CAAcnH,KAAa,EAAE;AACzB,QAAA,IAAIuB,KAAKW,UAAU,CAAClC,UAAUA,KAAMqH,CAAAA,UAAU,CAAC,IAAO,CAAA,EAAA;YAClD,OAAOrH,KAAAA,CAAAA;SACV;QAED,IAAIA,KAAAA,CAAMqH,UAAU,CAAC,SAAY,CAAA,EAAA;AAC7B,YAAA,OAAOrH,KAAMM,CAAAA,SAAS,CAAC,CAAA,EAAG,UAAUC,MAAM,CAAA,CAAA;SAC7C;AAED,QAAA,IAAI,CAACP,KAAAA,CAAMqH,UAAU,CAAC,GAAM,CAAA,EAAA;AACxB,YAAA,OAAO,CAAC,QAAQ,EAAErH,KAAAA,CAAM,CAAC,CAAA;SAC5B;QAED,OAAOA,KAAAA,CAAAA;AACX,KAAA;IA9HA6F,WAAc,EAAA;QACV,IAAI,CAACoB,OAAO,GAAG,EAAC,CAAA;QAChB,IAAI,CAACH,KAAK,GAAG;AACT,YAAA;gBACIF,IAAM,EAAA;AAAC,oBAAA,KAAA;AAAO,oBAAA,MAAA;AAAQ,oBAAA,MAAA;AAAQ,oBAAA,MAAA;AAAQ,oBAAA,MAAA;AAAQ,oBAAA,KAAA;AAAM,iBAAA;AACpDC,gBAAAA,MAAAA,EAAQL,SAASC,MAAM;AAC3B,aAAA;AACA,YAAA;gBACIG,IAAM,EAAA;AAAC,oBAAA,OAAA;AAAQ,iBAAA;AAAEC,gBAAAA,MAAAA,EAAQL,SAASH,IAAI;AAC1C,aAAA;AACH,SAAA,CAAA;AACL,KAAA;AAoHJ;;ACzIA,IAAIiB,QAAAA,CAAAA;AACG,SAASC,SAAY,GAAA;IACxB,IAAI,OAAOD,aAAa,WAAa,EAAA;QACjC,OAAOA,QAAAA,CAAAA;KACV;AAEDA,IAAAA,QAAAA,GAAW,IAAIZ,aAAAA,EAAAA,CAAAA;IAEf,OAAOY,QAAAA,CAAAA;AACX;;ACJO,SAASE,cAAAA,CAAeZ,IAAS,EAAEC,MAAe,EAAS;AAC9D,IAAA,MAAMY,OAAUF,GAAAA,SAAAA,EAAAA,CAAAA;IAChB,IAAI,OAAOV,WAAW,WAAa,EAAA;QAC/BY,OAAQd,CAAAA,QAAQ,CAACC,IAAMC,EAAAA,MAAAA,CAAAA,CAAAA;AAEvB,QAAA,OAAA;KACH;AAEDY,IAAAA,OAAAA,CAAQd,QAAQ,CAACC,IAAAA,CAAAA,CAAAA;AACrB,CAAC;AAEM,eAAe5B,IAAKhF,CAAAA,KAA2B,EAAqB;AACvE,IAAA,MAAMyH,OAAUF,GAAAA,SAAAA,EAAAA,CAAAA;IAChB,IAAI,OAAOvH,UAAU,QAAU,EAAA;QAC3B,OAAOyH,OAAAA,CAAQ3C,OAAO,CAAC9E,KAAAA,CAAAA,CAAAA;KAC1B;IAED,OAAOyH,OAAAA,CAAQ3C,OAAO,CAACjB,mBAAoB7D,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AAC/C,CAAC;AAEM,SAASiF,QAASjF,CAAAA,KAA2B,EAAY;AAC5D,IAAA,MAAMyH,OAAUF,GAAAA,SAAAA,EAAAA,CAAAA;IAChB,IAAI,OAAOvH,UAAU,QAAU,EAAA;QAC3B,OAAOyH,OAAAA,CAAQtC,WAAW,CAACnF,KAAAA,CAAAA,CAAAA;KAC9B;IAED,OAAOyH,OAAAA,CAAQtC,WAAW,CAACtB,mBAAoB7D,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AACnD;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -76,7 +76,7 @@ function hasStringProperty(obj, prop) {
76
76
  * Author Peter Placzek (tada5hi)
77
77
  * For the full copyright and license information,
78
78
  * view the LICENSE file that was distributed with this source code.
79
- */ var _options, _options1;
79
+ */ var _options;
80
80
  function buildLocatorOptions(options) {
81
81
  options = options || {};
82
82
  options.path = options.path || [];
@@ -84,10 +84,13 @@ function buildLocatorOptions(options) {
84
84
  if (options.path.length === 0) {
85
85
  options.path.push(process.cwd());
86
86
  }
87
- (_options = options).soft ?? (_options.soft = true);
88
- (_options1 = options).ignore ?? (_options1.ignore = []);
87
+ (_options = options).ignore ?? (_options.ignore = []);
89
88
  return options;
90
89
  }
90
+ function isFilePath(input) {
91
+ const info = path.parse(input);
92
+ return info.ext !== '';
93
+ }
91
94
  function pathToLocatorInfo(input, skipResolve) {
92
95
  if (!skipResolve && !path.isAbsolute(input)) {
93
96
  input = path.resolve(process.cwd(), input);
@@ -101,7 +104,7 @@ function pathToLocatorInfo(input, skipResolve) {
101
104
  }
102
105
 
103
106
  const globAsync = promisify(glob);
104
- async function locateFiles(pattern, options) {
107
+ async function locateMany(pattern, options) {
105
108
  options = buildLocatorOptions(options);
106
109
  const patterns = Array.isArray(pattern) ? pattern : [
107
110
  pattern
@@ -122,7 +125,7 @@ async function locateFiles(pattern, options) {
122
125
  }
123
126
  return items;
124
127
  }
125
- async function locateFile(pattern, options) {
128
+ async function locate(pattern, options) {
126
129
  options = buildLocatorOptions(options);
127
130
  const patterns = Array.isArray(pattern) ? pattern : [
128
131
  pattern
@@ -141,13 +144,10 @@ async function locateFile(pattern, options) {
141
144
  }
142
145
  }
143
146
  }
144
- if (!options.soft) {
145
- throw new Error('The file could not be located.');
146
- }
147
147
  return undefined;
148
148
  }
149
149
 
150
- function locateFilesSync(pattern, options) {
150
+ function locateManySync(pattern, options) {
151
151
  options = buildLocatorOptions(options);
152
152
  const patterns = Array.isArray(pattern) ? pattern : [
153
153
  pattern
@@ -168,7 +168,7 @@ function locateFilesSync(pattern, options) {
168
168
  }
169
169
  return items;
170
170
  }
171
- function locateFileSync(pattern, options) {
171
+ function locateSync(pattern, options) {
172
172
  options = buildLocatorOptions(options);
173
173
  const patterns = Array.isArray(pattern) ? pattern : [
174
174
  pattern
@@ -190,7 +190,13 @@ function locateFileSync(pattern, options) {
190
190
  return undefined;
191
191
  }
192
192
 
193
- function buildLoaderFilePath(info, withExtension) {
193
+ function buildLoaderFilePath(input, withExtension) {
194
+ let info;
195
+ if (typeof input === 'string') {
196
+ info = pathToLocatorInfo(input);
197
+ } else {
198
+ info = input;
199
+ }
194
200
  if (withExtension) {
195
201
  return path.join(info.path, info.name) + info.extension;
196
202
  }
@@ -220,28 +226,37 @@ function getExportItem(data, filterFn) {
220
226
  * Author Peter Placzek (tada5hi)
221
227
  * For the full copyright and license information,
222
228
  * view the LICENSE file that was distributed with this source code.
223
- */ function isJestEnvironment() {
229
+ */ function isJestRuntimeEnvironment() {
224
230
  return process.env && process.env.JEST_WORKER_ID !== undefined;
225
231
  }
232
+ function isTsNodeRuntimeEnvironment() {
233
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
234
+ // @ts-ignore
235
+ return !!process[Symbol.for('ts-node.register.instance')];
236
+ }
226
237
 
227
- class ScriptLoader {
228
- async execute(info) {
229
- const filePath = buildLoaderFilePath(info);
238
+ class ModuleLoader {
239
+ async execute(input) {
230
240
  let output;
231
241
  try {
232
- output = await this.load(info);
242
+ output = await this.load(input);
233
243
  } catch (e) {
234
- output = this.jiti(filePath);
244
+ // jiti + ts-node
245
+ // issue: https://github.com/nuxt/bridge/issues/228
246
+ if (isTsNodeRuntimeEnvironment()) {
247
+ output = this.loadSync(input);
248
+ } else {
249
+ output = this.jiti(input);
250
+ }
235
251
  }
236
252
  return output;
237
253
  }
238
- executeSync(info) {
239
- const filePath = buildLoaderFilePath(info);
254
+ executeSync(input) {
240
255
  let output;
241
256
  try {
242
- output = this.loadSync(info);
257
+ output = this.loadSync(input);
243
258
  } catch (e) {
244
- output = this.jiti(filePath);
259
+ output = this.jiti(input);
245
260
  }
246
261
  return output;
247
262
  }
@@ -261,7 +276,7 @@ class ScriptLoader {
261
276
  try {
262
277
  // segmentation fault
263
278
  // issue: https://github.com/nodejs/node/issues/35889
264
- if (isJestEnvironment()) {
279
+ if (isJestRuntimeEnvironment()) {
265
280
  // eslint-disable-next-line global-require,import/no-dynamic-require
266
281
  return require(filePath);
267
282
  }
@@ -319,17 +334,17 @@ class ScriptLoader {
319
334
  }
320
335
  }
321
336
  constructor(){
322
- /*
323
- const loaderMap : Record<string, ESLoader> = {
324
- '.mjs': 'js',
325
- '.js': 'js',
326
- '.jsx': 'jsx',
327
- '.ts': 'ts',
328
- '.tsx': 'tsx',
329
- };
330
- */ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
337
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
331
338
  // @ts-ignore
332
339
  this.jiti = createJITI(undefined, {
340
+ extensions: [
341
+ '.js',
342
+ '.mjs',
343
+ '.mts',
344
+ '.cjs',
345
+ '.cts',
346
+ '.ts'
347
+ ],
333
348
  esmResolve: true
334
349
  });
335
350
  }
@@ -356,35 +371,59 @@ class JSONLoader {
356
371
  }
357
372
  }
358
373
 
374
+ /*
375
+ * Copyright (c) 2023.
376
+ * Author Peter Placzek (tada5hi)
377
+ * For the full copyright and license information,
378
+ * view the LICENSE file that was distributed with this source code.
379
+ */ var LoaderId;
380
+ (function(LoaderId) {
381
+ LoaderId["MODULE"] = 'module';
382
+ LoaderId["JSON"] = 'json';
383
+ })(LoaderId || (LoaderId = {}));
384
+
359
385
  class LoaderManager {
360
- register(rule) {
361
- this.rules.push(rule);
386
+ register(test, loader) {
387
+ if (typeof loader !== 'undefined') {
388
+ this.rules.push({
389
+ test,
390
+ loader
391
+ });
392
+ return;
393
+ }
394
+ this.rules.push(test);
362
395
  }
363
- async execute(info) {
364
- const rule = this.findRule(info);
365
- if (!rule) {
396
+ async execute(input) {
397
+ const id = this.findLoader(input);
398
+ if (!id) {
399
+ const info = pathToLocatorInfo(input);
366
400
  throw new Error(`No loader registered for extension: "${info.extension}"`);
367
401
  }
368
- const loader = this.resolve(rule.loader);
369
- return loader.execute(info);
402
+ const loader = this.resolve(id);
403
+ return loader.execute(input);
370
404
  }
371
- executeSync(info) {
372
- const rule = this.findRule(info);
373
- if (!rule) {
405
+ executeSync(input) {
406
+ const id = this.findLoader(input);
407
+ if (!id) {
408
+ const info = pathToLocatorInfo(input);
374
409
  throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);
375
410
  }
376
- const loader = this.resolve(rule.loader);
377
- return loader.executeSync(info);
411
+ const loader = this.resolve(id);
412
+ return loader.executeSync(input);
378
413
  }
379
- findRule(info) {
414
+ findLoader(input) {
415
+ if (!isFilePath(input)) {
416
+ return LoaderId.MODULE;
417
+ }
418
+ const info = pathToLocatorInfo(input);
380
419
  for(let i = 0; i < this.rules.length; i++){
381
420
  const { test } = this.rules[i];
382
421
  if (Array.isArray(test)) {
383
422
  if (test.indexOf(info.extension) !== -1) {
384
- return this.rules[i];
423
+ return this.rules[i].loader;
385
424
  }
386
425
  } else if (test.test(buildLoaderFilePath(info))) {
387
- return this.rules[i];
426
+ return this.rules[i].loader;
388
427
  }
389
428
  }
390
429
  return undefined;
@@ -397,27 +436,48 @@ class LoaderManager {
397
436
  if (typeof id !== 'string') {
398
437
  return id;
399
438
  }
400
- if (this.loaders[id]) {
439
+ if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {
401
440
  return this.loaders[id];
402
441
  }
403
442
  let loader;
443
+ // built-in
404
444
  switch(id){
405
- case 'script':
445
+ case LoaderId.MODULE:
406
446
  {
407
- loader = new ScriptLoader();
447
+ loader = new ModuleLoader();
408
448
  break;
409
449
  }
410
- case 'json':
450
+ case LoaderId.JSON:
411
451
  {
412
452
  loader = new JSONLoader();
413
453
  break;
414
454
  }
455
+ default:
456
+ {
457
+ const pluginPath = this.normalizePath(id);
458
+ const moduleLoader = this.resolve(LoaderId.MODULE);
459
+ loader = moduleLoader.executeSync(pluginPath);
460
+ break;
461
+ }
415
462
  }
416
463
  if (typeof loader !== 'undefined') {
464
+ this.loaders[id] = loader;
417
465
  return loader;
418
466
  }
419
467
  throw new Error(`The loader ${id} could not be resolved.`);
420
468
  }
469
+ normalizePath(input) {
470
+ if (path.isAbsolute(input) || input.startsWith('./')) {
471
+ return input;
472
+ }
473
+ if (input.startsWith('module:')) {
474
+ return input.substring(0, 'module:'.length);
475
+ }
476
+ if (!input.startsWith('@')) {
477
+ return `@locter/${input}`;
478
+ }
479
+ return input;
480
+ }
421
481
  constructor(){
422
482
  this.loaders = {};
423
483
  this.rules = [
@@ -425,23 +485,25 @@ class LoaderManager {
425
485
  test: [
426
486
  '.js',
427
487
  '.mjs',
488
+ '.mts',
428
489
  '.cjs',
490
+ '.cts',
429
491
  '.ts'
430
492
  ],
431
- loader: 'script'
493
+ loader: LoaderId.MODULE
432
494
  },
433
495
  {
434
496
  test: [
435
497
  '.json'
436
498
  ],
437
- loader: 'json'
499
+ loader: LoaderId.JSON
438
500
  }
439
501
  ];
440
502
  }
441
503
  }
442
504
 
443
505
  let instance;
444
- function useLoaderManager() {
506
+ function useLoader() {
445
507
  if (typeof instance !== 'undefined') {
446
508
  return instance;
447
509
  }
@@ -449,26 +511,28 @@ function useLoaderManager() {
449
511
  return instance;
450
512
  }
451
513
 
452
- async function loadFile(input) {
453
- let info;
514
+ function registerLoader(test, loader) {
515
+ const manager = useLoader();
516
+ if (typeof loader !== 'undefined') {
517
+ manager.register(test, loader);
518
+ return;
519
+ }
520
+ manager.register(test);
521
+ }
522
+ async function load(input) {
523
+ const manager = useLoader();
454
524
  if (typeof input === 'string') {
455
- info = pathToLocatorInfo(input);
456
- } else {
457
- info = input;
525
+ return manager.execute(input);
458
526
  }
459
- const manager = useLoaderManager();
460
- return manager.execute(info);
527
+ return manager.execute(buildLoaderFilePath(input));
461
528
  }
462
- function loadFileSync(input) {
463
- let info;
529
+ function loadSync(input) {
530
+ const manager = useLoader();
464
531
  if (typeof input === 'string') {
465
- info = pathToLocatorInfo(input);
466
- } else {
467
- info = input;
532
+ return manager.executeSync(input);
468
533
  }
469
- const manager = useLoaderManager();
470
- return manager.executeSync(info);
534
+ return manager.executeSync(buildLoaderFilePath(input));
471
535
  }
472
536
 
473
- export { JSONLoader, ScriptLoader, buildLoaderFilePath, buildLocatorOptions, getExportItem, handleFileLoadError, hasOwnProperty, hasStringProperty, isJestEnvironment, isObject, loadFile, loadFileSync, locateFile, locateFileSync, locateFiles, locateFilesSync, pathToLocatorInfo, removeFileNameExtension, toArray };
537
+ export { JSONLoader, LoaderManager, ModuleLoader, buildLoaderFilePath, buildLocatorOptions, getExportItem, handleFileLoadError, hasOwnProperty, hasStringProperty, isFilePath, isJestRuntimeEnvironment, isObject, isTsNodeRuntimeEnvironment, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray };
474
538
  //# sourceMappingURL=index.mjs.map