locter 0.8.0 → 0.8.2
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.cjs +47 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +46 -21
- package/dist/index.mjs.map +1 -1
- package/dist/loader/built-in/script/utils.d.ts +2 -2
- package/dist/loader/utils.d.ts +2 -0
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -191,6 +191,38 @@ function buildLoaderFilePath(info, withExtension) {
|
|
|
191
191
|
}
|
|
192
192
|
return path.join(info.path, info.name);
|
|
193
193
|
}
|
|
194
|
+
function getExportItem(data, filterFn) {
|
|
195
|
+
if (filterFn) {
|
|
196
|
+
const keys = Object.keys(data);
|
|
197
|
+
for(let i = 0; i < keys.length; i++){
|
|
198
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
199
|
+
return {
|
|
200
|
+
key: keys[i],
|
|
201
|
+
value: data[keys[i]]
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
throw new ebec.BaseError('Cannot find specific module export.');
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
key: 'default',
|
|
209
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
* Copyright (c) 2022.
|
|
215
|
+
* Author Peter Placzek (tada5hi)
|
|
216
|
+
* For the full copyright and license information,
|
|
217
|
+
* view the LICENSE file that was distributed with this source code.
|
|
218
|
+
*/ function isJestRuntimeEnvironment() {
|
|
219
|
+
return process.env && process.env.JEST_WORKER_ID !== undefined;
|
|
220
|
+
}
|
|
221
|
+
function isTsNodeRuntimeEnvironment() {
|
|
222
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
223
|
+
// @ts-ignore
|
|
224
|
+
return !!process[Symbol.for('ts-node.register.instance')];
|
|
225
|
+
}
|
|
194
226
|
|
|
195
227
|
class ScriptLoader {
|
|
196
228
|
async execute(info) {
|
|
@@ -199,7 +231,13 @@ class ScriptLoader {
|
|
|
199
231
|
try {
|
|
200
232
|
output = await this.load(info);
|
|
201
233
|
} catch (e) {
|
|
202
|
-
|
|
234
|
+
// jiti + ts-node
|
|
235
|
+
// issue: https://github.com/nuxt/bridge/issues/228
|
|
236
|
+
if (isTsNodeRuntimeEnvironment()) {
|
|
237
|
+
output = this.loadSync(info);
|
|
238
|
+
} else {
|
|
239
|
+
output = this.jiti(filePath);
|
|
240
|
+
}
|
|
203
241
|
}
|
|
204
242
|
return output;
|
|
205
243
|
}
|
|
@@ -227,6 +265,12 @@ class ScriptLoader {
|
|
|
227
265
|
filePath = node_url.pathToFileURL(filePath).href;
|
|
228
266
|
}
|
|
229
267
|
try {
|
|
268
|
+
// segmentation fault
|
|
269
|
+
// issue: https://github.com/nodejs/node/issues/35889
|
|
270
|
+
if (isJestRuntimeEnvironment()) {
|
|
271
|
+
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
272
|
+
return require(filePath);
|
|
273
|
+
}
|
|
230
274
|
return await import(filePath);
|
|
231
275
|
} catch (e) {
|
|
232
276
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
@@ -297,25 +341,6 @@ class ScriptLoader {
|
|
|
297
341
|
}
|
|
298
342
|
}
|
|
299
343
|
|
|
300
|
-
function getExportItem(data, filterFn) {
|
|
301
|
-
if (filterFn) {
|
|
302
|
-
const keys = Object.keys(data);
|
|
303
|
-
for(let i = 0; i < keys.length; i++){
|
|
304
|
-
if (filterFn(keys[i], data[keys[i]])) {
|
|
305
|
-
return {
|
|
306
|
-
key: keys[i],
|
|
307
|
-
value: data[keys[i]]
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
throw new ebec.BaseError('Cannot find specific module export.');
|
|
312
|
-
}
|
|
313
|
-
return {
|
|
314
|
-
key: 'default',
|
|
315
|
-
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
|
|
319
344
|
class JSONLoader {
|
|
320
345
|
async execute(input) {
|
|
321
346
|
const filePath = buildLoaderFilePath(input, true);
|
|
@@ -459,7 +484,9 @@ exports.getExportItem = getExportItem;
|
|
|
459
484
|
exports.handleFileLoadError = handleFileLoadError;
|
|
460
485
|
exports.hasOwnProperty = hasOwnProperty;
|
|
461
486
|
exports.hasStringProperty = hasStringProperty;
|
|
487
|
+
exports.isJestRuntimeEnvironment = isJestRuntimeEnvironment;
|
|
462
488
|
exports.isObject = isObject;
|
|
489
|
+
exports.isTsNodeRuntimeEnvironment = isTsNodeRuntimeEnvironment;
|
|
463
490
|
exports.loadFile = loadFile;
|
|
464
491
|
exports.loadFileSync = loadFileSync;
|
|
465
492
|
exports.locateFile = locateFile;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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/module.ts","../src/loader/built-in/script/utils.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 path from 'node:path';\nimport { LocatorInfo } from '../locator';\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","/*\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';\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 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.\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 { hasOwnProperty } from '../../../utils';\nimport { LoaderFilterFn, ScriptFileExportItem } from './type';\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-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","ScriptLoader","execute","filePath","output","load","jiti","executeSync","loadSync","data","locatorInfo","withFilePrefix","pathToFileURL","href","code","BaseError","message","stack","require","constructor","createJITI","esmResolve","getExportItem","filterFn","keys","key","value","default","JSONLoader","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderManager","register","rule","rules","findRule","loader","test","id","loaders","instance","useLoaderManager","loadFile","manager","loadFileSync"],"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;;;;;AAKC,IAAA,IAeGqB,QACAA,EAAAA,SAAAA,CAAAA;AAVG,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,IAARN,KAAAA,QAAAA,CAAQM,OAAS,IAAI,CAAA,CAAA;AACrBN,IAAAA,CAAAA,SAAAA,GAAAA,OAAAA,EAAQO,MAARP,KAAAA,SAAAA,CAAQO,SAAW,EAAE,CAAA,CAAA;IAErB,OAAOP,OAAAA,CAAAA;AACX,CAAC;AAEM,SAASQ,iBAAAA,CACZ7B,KAAa,EACb8B,WAAqB,EACT;AACZ,IAAA,IAAI,CAACA,WAAe,IAAA,CAACP,IAAKQ,CAAAA,UAAU,CAAC/B,KAAQ,CAAA,EAAA;AACzCA,QAAAA,KAAAA,GAAQuB,IAAKS,CAAAA,OAAO,CAACP,OAAAA,CAAQC,GAAG,EAAI1B,EAAAA,KAAAA,CAAAA,CAAAA;KACvC;IAED,MAAMiC,IAAAA,GAAOV,IAAKW,CAAAA,KAAK,CAAClC,KAAAA,CAAAA,CAAAA;IAExB,OAAO;QACHuB,IAAMU,EAAAA,IAAAA,CAAKE,GAAG,CAACC,KAAK,CAAC,GAAKC,CAAAA,CAAAA,IAAI,CAACd,IAAAA,CAAKe,GAAG,CAAA;AACvCC,QAAAA,IAAAA,EAAMN,KAAKM,IAAI;AACflC,QAAAA,SAAAA,EAAW4B,KAAKO,GAAG;AACvB,KAAA,CAAA;AACJ;;AC7BA,MAAMC,YAAYC,mBAAUC,CAAAA,IAAAA,CAAAA,CAAAA;AAErB,eAAeC,WAAAA,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;AACXxB,gBAAAA,MAAAA,EAAQP,QAAQO,MAAM;AAC1B,aAAA,CAAA,CAAA;AAEA,YAAA,IAAK,IAAIyB,CAAI,GAAA,CAAA,EAAGA,IAAIH,KAAM3C,CAAAA,MAAM,EAAE8C,CAAK,EAAA,CAAA;AACnCN,gBAAAA,KAAAA,CAAMvB,IAAI,CAACK,iBAAAA,CAAkBqB,KAAK,CAACG,CAAAA,CAAE,EAAY,IAAI,CAAA,CAAA,CAAA;AACzD,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAON,KAAAA,CAAAA;AACX,CAAC;AAUM,eAAeO,UAAAA,CAClBT,OAA0B,EAC1BxB,OAAiC,EACpB;AACbA,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;AACXxB,gBAAAA,MAAAA,EAAQP,QAAQO,MAAM;AAC1B,aAAA,CAAA,CAAA;YAEA,MAAM2B,OAAAA,GAAUL,MAAMM,KAAK,EAAA,CAAA;AAC3B,YAAA,IAAID,OAAS,EAAA;gBACT,OAAO1B,iBAAAA,CAAkB0B,SAAS,IAAI,CAAA,CAAA;aACzC;AACL,SAAA;AACJ,KAAA;IAEA,IAAI,CAAClC,OAAQM,CAAAA,IAAI,EAAE;QACf,MAAM,IAAI7B,MAAM,gCAAkC,CAAA,CAAA;KACrD;IAED,OAAO2D,SAAAA,CAAAA;AACX;;ACxEO,SAASC,eAAAA,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;AACXxB,gBAAAA,MAAAA,EAAQP,QAAQO,MAAM;AAC1B,aAAA,CAAA,CAAA;AAEA,YAAA,IAAK,IAAIyB,CAAI,GAAA,CAAA,EAAGA,IAAIH,KAAM3C,CAAAA,MAAM,EAAE8C,CAAK,EAAA,CAAA;AACnCN,gBAAAA,KAAAA,CAAMvB,IAAI,CAACK,iBAAAA,CAAkBqB,KAAK,CAACG,CAAAA,CAAE,EAAY,IAAI,CAAA,CAAA,CAAA;AACzD,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAON,KAAAA,CAAAA;AACX,CAAC;AAEM,SAASa,cAAAA,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;AACXxB,gBAAAA,MAAAA,EAAQP,QAAQO,MAAM;AAC1B,aAAA,CAAA,CAAA;YAEA,MAAM2B,OAAAA,GAAUL,MAAMM,KAAK,EAAA,CAAA;AAC3B,YAAA,IAAID,OAAS,EAAA;gBACT,OAAO1B,iBAAAA,CAAkB0B,SAAS,IAAI,CAAA,CAAA;aACzC;AACL,SAAA;AACJ,KAAA;IAEA,OAAOE,SAAAA,CAAAA;AACX;;AC1DO,SAASI,mBAAAA,CAAoB5B,IAAiB,EAAE6B,aAAuB,EAAE;AAC5E,IAAA,IAAIA,aAAe,EAAA;QACf,OAAOvC,IAAAA,CAAKc,IAAI,CAACJ,IAAKV,CAAAA,IAAI,EAAEU,IAAKM,CAAAA,IAAI,CAAIN,GAAAA,IAAAA,CAAK5B,SAAS,CAAA;KAC1D;AAED,IAAA,OAAOkB,KAAKc,IAAI,CAACJ,KAAKV,IAAI,EAAEU,KAAKM,IAAI,CAAA,CAAA;AACzC;;ACCO,MAAMwB,YAAAA,CAAAA;IAuCT,MAAMC,OAAAA,CAAQ/B,IAAiB,EAAE;AAC7B,QAAA,MAAMgC,WAAWJ,mBAAoB5B,CAAAA,IAAAA,CAAAA,CAAAA;QAErC,IAAIiC,MAAAA,CAAAA;QAEJ,IAAI;AACAA,YAAAA,MAAAA,GAAS,MAAM,IAAI,CAACC,IAAI,CAAClC,IAAAA,CAAAA,CAAAA;AAC7B,SAAA,CAAE,OAAOpC,CAAG,EAAA;YACRqE,MAAS,GAAA,IAAI,CAACE,IAAI,CAACH,QAAAA,CAAAA,CAAAA;AACvB,SAAA;QAEA,OAAOC,MAAAA,CAAAA;AACX,KAAA;AAEAG,IAAAA,WAAAA,CAAYpC,IAAiB,EAAE;AAC3B,QAAA,MAAMgC,WAAWJ,mBAAoB5B,CAAAA,IAAAA,CAAAA,CAAAA;QAErC,IAAIiC,MAAAA,CAAAA;QAEJ,IAAI;YACAA,MAAS,GAAA,IAAI,CAACI,QAAQ,CAACrC,IAAAA,CAAAA,CAAAA;AAC3B,SAAA,CAAE,OAAOpC,CAAG,EAAA;YACRqE,MAAS,GAAA,IAAI,CAACE,IAAI,CAACH,QAAAA,CAAAA,CAAAA;AACvB,SAAA;QAEA,OAAOC,MAAAA,CAAAA;AACX,KAAA;;AAIA,IAAA,MAAMC,IACFI,CAAAA,IAA0B,EAC1BlD,OAA+B,EACd;QACjB,IAAImD,WAAAA,CAAAA;QAEJ,IAAI,OAAOD,SAAS,QAAU,EAAA;AAC1BC,YAAAA,WAAAA,GAAc3C,iBAAkB0C,CAAAA,IAAAA,CAAAA,CAAAA;SAC7B,MAAA;YACHC,WAAcD,GAAAA,IAAAA,CAAAA;SACjB;AAEDlD,QAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtB,QAAA,IAAI4C,QAAWJ,GAAAA,mBAAAA,CAAoBW,WAAanD,EAAAA,OAAAA,CAAQyC,aAAa,CAAA,CAAA;QACrE,IAAIzC,OAAAA,CAAQoD,cAAc,EAAE;YACxBR,QAAWS,GAAAA,sBAAAA,CAAcT,UAAUU,IAAI,CAAA;SAC1C;QAED,IAAI;YACA,OAAO,MAAM,OAAOV,QAAAA,CAAAA,CAAAA;AACxB,SAAA,CAAE,OAAOpE,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,CAAE+E,IAAI,KAAK,sBACX/E,IAAAA,CAAAA,CAAE+E,IAAI,KAAK,kBAAiB,CAElC,EAAA;AACE,oBAAA,OAAO,IAAI,CAACT,IAAI,CAACK,WAAa,EAAA;AAC1B,wBAAA,GAAGnD,OAAO;AACVyC,wBAAAA,aAAAA,EAAe,IAAI;AACvB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,IACI,CAACzC,OAAAA,CAAQoD,cAAc,KAEnB5E,CAAAA,CAAE+E,IAAI,KAAK,gCACX/E,IAAAA,CAAAA,CAAE+E,IAAI,KAAK,4BAA2B,CAE5C,EAAA;AACE,oBAAA,OAAO,IAAI,CAACT,IAAI,CAACK,WAAa,EAAA;AAC1B,wBAAA,GAAGnD,OAAO;AACVoD,wBAAAA,cAAAA,EAAgB,IAAI;AACxB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,MAAM,IAAII,cAAU,CAAA;AAChBD,oBAAAA,IAAAA,EAAM/E,EAAE+E,IAAI;AACZE,oBAAAA,OAAAA,EAAS/D,kBAAkBlB,CAAG,EAAA,SAAA,CAAA,GAAaA,CAAEiF,CAAAA,OAAO,GAAGrB,SAAS;AAChEsB,oBAAAA,KAAAA,EAAOhE,kBAAkBlB,CAAG,EAAA,OAAA,CAAA,GAAWA,CAAEkF,CAAAA,KAAK,GAAGtB,SAAS;iBAC3D,CAAA,CAAA;aACN;uCAGD,OAAO7D,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;IAEAyE,QACIC,CAAAA,IAA0B,EAC1BlD,OAA+B,EACvB;QACR,IAAImD,WAAAA,CAAAA;QAEJ,IAAI,OAAOD,SAAS,QAAU,EAAA;AAC1BC,YAAAA,WAAAA,GAAc3C,iBAAkB0C,CAAAA,IAAAA,CAAAA,CAAAA;SAC7B,MAAA;YACHC,WAAcD,GAAAA,IAAAA,CAAAA;SACjB;AAEDlD,QAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtB,QAAA,MAAM4C,QAAWJ,GAAAA,mBAAAA,CAAoBW,WAAanD,EAAAA,OAAAA,CAAQyC,aAAa,CAAA,CAAA;QAEvE,IAAI;;AAEA,YAAA,OAAOkB,OAAQf,CAAAA,QAAAA,CAAAA,CAAAA;AACnB,SAAA,CAAE,OAAOpE,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,CAAE+E,IAAI,KAAK,sBACX/E,IAAAA,CAAAA,CAAE+E,IAAI,KAAK,kBAAiB,CAElC,EAAA;AACE,oBAAA,OAAO,IAAI,CAACN,QAAQ,CAACE,WAAa,EAAA;AAC9B,wBAAA,GAAGnD,OAAO;AACVyC,wBAAAA,aAAAA,EAAe,IAAI;AACvB,qBAAA,CAAA,CAAA;iBACH;AAED,gBAAA,MAAM,IAAIe,cAAU,CAAA;AAChBD,oBAAAA,IAAAA,EAAM/E,EAAE+E,IAAI;AACZE,oBAAAA,OAAAA,EAAS/D,kBAAkBlB,CAAG,EAAA,SAAA,CAAA,GAAaA,CAAEiF,CAAAA,OAAO,GAAGrB,SAAS;AAChEsB,oBAAAA,KAAAA,EAAOhE,kBAAkBlB,CAAG,EAAA,OAAA,CAAA,GAAWA,CAAEkF,CAAAA,KAAK,GAAGtB,SAAS;iBAC3D,CAAA,CAAA;aACN;AAED,YAAA,OAAO7D,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;IAlLAoF,WAAc,EAAA;AACV;;;;;;;;AAQA;;AAGA,QAAA,IAAI,CAACb,IAAI,GAAGc,UAAAA,CAAWzB,SAAW,EAAA;AAC9B0B,YAAAA,UAAAA,EAAY,IAAI;AAoBpB,SAAA,CAAA,CAAA;AACJ,KAAA;AAiJJ;;AC5LO,SAASC,aAAAA,CACZb,IAAyB,EACzBc,QAAyB,EACJ;AACrB,IAAA,IAAIA,QAAU,EAAA;QACV,MAAMC,IAAAA,GAAO1E,MAAO0E,CAAAA,IAAI,CAACf,IAAAA,CAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIvB,CAAI,GAAA,CAAA,EAAGA,IAAIsC,IAAK/E,CAAAA,MAAM,EAAEyC,CAAK,EAAA,CAAA;YAClC,IAAIqC,QAAAA,CAASC,IAAI,CAACtC,CAAE,CAAA,EAAYuB,IAAI,CAACe,IAAI,CAACtC,CAAE,CAAA,CAAW,CAAG,EAAA;gBACtD,OAAO;oBACHuC,GAAKD,EAAAA,IAAI,CAACtC,CAAE,CAAA;AACZwC,oBAAAA,KAAAA,EAAOjB,IAAI,CAACe,IAAI,CAACtC,EAAE,CAAW;AAClC,iBAAA,CAAA;aACH;AACL,SAAA;QAEA,MAAM,IAAI6B,eAAU,qCAAuC,CAAA,CAAA;KAC9D;IAED,OAAO;QACHU,GAAK,EAAA,SAAA;AACLC,QAAAA,KAAAA,EAAO/E,eAAe8D,IAAM,EAAA,SAAA,CAAA,GAAaA,IAAKkB,CAAAA,OAAO,GAAGlB,IAAI;AAChE,KAAA,CAAA;AACJ;;ACpBO,MAAMmB,UAAAA,CAAAA;IACT,MAAM1B,OAAAA,CAAQhE,KAAkB,EAAE;QAC9B,MAAMiE,QAAAA,GAAWJ,mBAAoB7D,CAAAA,KAAAA,EAAO,IAAI,CAAA,CAAA;QAEhD,IAAI;AACA,YAAA,MAAM2F,OAAO,MAAMC,EAAAA,CAAGC,QAAQ,CAACC,QAAQ,CAAC7B,QAAAA,CAAAA,CAAAA;AACxC,YAAA,OAAO8B,IAAK7D,CAAAA,KAAK,CAACyD,IAAAA,CAAKK,QAAQ,CAAC,OAAA,CAAA,CAAA,CAAA;AACpC,SAAA,CAAE,OAAOnG,CAAG,EAAA;AACR,YAAA,OAAOD,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;AAEAwE,IAAAA,WAAAA,CAAYrE,KAAkB,EAAE;QAC5B,MAAMiE,QAAAA,GAAWJ,mBAAoB7D,CAAAA,KAAAA,EAAO,IAAI,CAAA,CAAA;QAEhD,IAAI;YACA,MAAM2F,IAAAA,GAAOC,EAAGK,CAAAA,YAAY,CAAChC,QAAAA,CAAAA,CAAAA;AAC7B,YAAA,OAAO8B,IAAK7D,CAAAA,KAAK,CAACyD,IAAAA,CAAKK,QAAQ,CAAC,OAAA,CAAA,CAAA,CAAA;AACpC,SAAA,CAAE,OAAOnG,CAAG,EAAA;AACR,YAAA,OAAOD,mBAAoBC,CAAAA,CAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACJ,KAAA;AACJ;;ACvBO,MAAMqG,aAAAA,CAAAA;AAaTC,IAAAA,QAAAA,CAASC,IAAU,EAAE;AACjB,QAAA,IAAI,CAACC,KAAK,CAAC7E,IAAI,CAAC4E,IAAAA,CAAAA,CAAAA;AACpB,KAAA;IAEA,MAAMpC,OAAAA,CAAQ/B,IAAiB,EAAiB;AAC5C,QAAA,MAAMmE,IAAO,GAAA,IAAI,CAACE,QAAQ,CAACrE,IAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAI,CAACmE,IAAM,EAAA;YACP,MAAM,IAAItG,KAAM,CAAA,CAAC,qCAAqC,EAAEmC,KAAK5B,SAAS,CAAC,CAAC,CAAC,CAAE,CAAA;SAC9E;AAED,QAAA,MAAMkG,SAAS,IAAI,CAACvE,OAAO,CAACoE,KAAKG,MAAM,CAAA,CAAA;QACvC,OAAOA,MAAAA,CAAOvC,OAAO,CAAC/B,IAAAA,CAAAA,CAAAA;AAC1B,KAAA;AAEAoC,IAAAA,WAAAA,CAAYpC,IAAiB,EAAQ;AACjC,QAAA,MAAMmE,IAAO,GAAA,IAAI,CAACE,QAAQ,CAACrE,IAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAI,CAACmE,IAAM,EAAA;YACP,MAAM,IAAItG,KAAM,CAAA,CAAC,oCAAoC,EAAEmC,KAAK5B,SAAS,IAAI,SAAU,CAAA,CAAC,CAAE,CAAA;SACzF;AAED,QAAA,MAAMkG,SAAS,IAAI,CAACvE,OAAO,CAACoE,KAAKG,MAAM,CAAA,CAAA;QACvC,OAAOA,MAAAA,CAAOlC,WAAW,CAACpC,IAAAA,CAAAA,CAAAA;AAC9B,KAAA;AAEAqE,IAAAA,QAAAA,CAASrE,IAAiB,EAAqB;QAC3C,IAAK,IAAIe,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACqD,KAAK,CAAC9F,MAAM,EAAEyC,CAAK,EAAA,CAAA;YACxC,MAAM,EAAEwD,OAAM,GAAG,IAAI,CAACH,KAAK,CAACrD,CAAE,CAAA,CAAA;YAC9B,IAAI9B,KAAAA,CAAMC,OAAO,CAACqF,IAAO,CAAA,EAAA;AACrB,gBAAA,IAAIA,KAAKhG,OAAO,CAACyB,KAAK5B,SAAS,CAAA,KAAM,CAAC,CAAG,EAAA;AACrC,oBAAA,OAAO,IAAI,CAACgG,KAAK,CAACrD,CAAE,CAAA,CAAA;iBACvB;AACL,aAAA,MAAO,IAAIwD,IAAAA,CAAKA,IAAI,CAAC3C,oBAAoB5B,IAAQ,CAAA,CAAA,EAAA;AAC7C,gBAAA,OAAO,IAAI,CAACoE,KAAK,CAACrD,CAAE,CAAA,CAAA;aACvB;AACL,SAAA;QAEA,OAAOS,SAAAA,CAAAA;AACX,KAAA;AAEA;;;;QAKAzB,OAAAA,CAAQyE,EAAmB,EAAW;QAClC,IAAI,OAAOA,OAAO,QAAU,EAAA;YACxB,OAAOA,EAAAA,CAAAA;SACV;AAED,QAAA,IAAI,IAAI,CAACC,OAAO,CAACD,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI,CAACC,OAAO,CAACD,EAAG,CAAA,CAAA;SAC1B;QAED,IAAIF,MAAAA,CAAAA;QAEJ,OAAQE,EAAAA;YACJ,KAAK,QAAA;AAAU,gBAAA;AACXF,oBAAAA,MAAAA,GAAS,IAAIxC,YAAAA,EAAAA,CAAAA;oBACb,MAAM;AACV,iBAAA;YACA,KAAK,MAAA;AAAQ,gBAAA;AACTwC,oBAAAA,MAAAA,GAAS,IAAIb,UAAAA,EAAAA,CAAAA;oBACb,MAAM;AACV,iBAAA;AACJ,SAAA;QAEA,IAAI,OAAOa,WAAW,WAAa,EAAA;YAC/B,OAAOA,MAAAA,CAAAA;SACV;QAED,MAAM,IAAIzG,MAAM,CAAC,WAAW,EAAE2G,EAAG,CAAA,uBAAuB,CAAC,CAAE,CAAA;AAC/D,KAAA;IA/EAxB,WAAc,EAAA;QACV,IAAI,CAACyB,OAAO,GAAG,EAAC,CAAA;QAChB,IAAI,CAACL,KAAK,GAAG;AACT,YAAA;gBAAEG,IAAM,EAAA;AAAC,oBAAA,KAAA;AAAO,oBAAA,MAAA;AAAQ,oBAAA,MAAA;AAAQ,oBAAA,KAAA;AAAM,iBAAA;gBAAED,MAAQ,EAAA,QAAA;AAAS,aAAA;AACzD,YAAA;gBAAEC,IAAM,EAAA;AAAC,oBAAA,OAAA;AAAQ,iBAAA;gBAAED,MAAQ,EAAA,MAAA;AAAO,aAAA;AACrC,SAAA,CAAA;AACL,KAAA;AA0EJ;;ACxFA,IAAII,QAAAA,CAAAA;AACG,SAASC,gBAAmB,GAAA;IAC/B,IAAI,OAAOD,aAAa,WAAa,EAAA;QACjC,OAAOA,QAAAA,CAAAA;KACV;AAEDA,IAAAA,QAAAA,GAAW,IAAIT,aAAAA,EAAAA,CAAAA;IAEf,OAAOS,QAAAA,CAAAA;AACX;;ACRO,eAAeE,QAAS7G,CAAAA,KAA2B,EAAqB;IAC3E,IAAIiC,IAAAA,CAAAA;IACJ,IAAI,OAAOjC,UAAU,QAAU,EAAA;AAC3BiC,QAAAA,IAAAA,GAAOJ,iBAAkB7B,CAAAA,KAAAA,CAAAA,CAAAA;KACtB,MAAA;QACHiC,IAAOjC,GAAAA,KAAAA,CAAAA;KACV;AAED,IAAA,MAAM8G,OAAUF,GAAAA,gBAAAA,EAAAA,CAAAA;IAEhB,OAAOE,OAAAA,CAAQ9C,OAAO,CAAC/B,IAAAA,CAAAA,CAAAA;AAC3B,CAAC;AAEM,SAAS8E,YAAa/G,CAAAA,KAA2B,EAAY;IAChE,IAAIiC,IAAAA,CAAAA;IACJ,IAAI,OAAOjC,UAAU,QAAU,EAAA;AAC3BiC,QAAAA,IAAAA,GAAOJ,iBAAkB7B,CAAAA,KAAAA,CAAAA,CAAAA;KACtB,MAAA;QACHiC,IAAOjC,GAAAA,KAAAA,CAAAA;KACV;AAED,IAAA,MAAM8G,OAAUF,GAAAA,gBAAAA,EAAAA,CAAAA;IAEhB,OAAOE,OAAAA,CAAQzC,WAAW,CAACpC,IAAAA,CAAAA,CAAAA;AAC/B;;;;;;;;;;;;;;;;;;;;;"}
|
|
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 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 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 // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(info);\n } else {\n output = this.jiti(filePath);\n }\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 (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 { 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","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","ScriptLoader","execute","filePath","output","load","loadSync","jiti","executeSync","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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"}
|
package/dist/index.mjs
CHANGED
|
@@ -196,6 +196,38 @@ function buildLoaderFilePath(info, withExtension) {
|
|
|
196
196
|
}
|
|
197
197
|
return path.join(info.path, info.name);
|
|
198
198
|
}
|
|
199
|
+
function getExportItem(data, filterFn) {
|
|
200
|
+
if (filterFn) {
|
|
201
|
+
const keys = Object.keys(data);
|
|
202
|
+
for(let i = 0; i < keys.length; i++){
|
|
203
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
204
|
+
return {
|
|
205
|
+
key: keys[i],
|
|
206
|
+
value: data[keys[i]]
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
throw new BaseError('Cannot find specific module export.');
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
key: 'default',
|
|
214
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/*
|
|
219
|
+
* Copyright (c) 2022.
|
|
220
|
+
* Author Peter Placzek (tada5hi)
|
|
221
|
+
* For the full copyright and license information,
|
|
222
|
+
* view the LICENSE file that was distributed with this source code.
|
|
223
|
+
*/ function isJestRuntimeEnvironment() {
|
|
224
|
+
return process.env && process.env.JEST_WORKER_ID !== undefined;
|
|
225
|
+
}
|
|
226
|
+
function isTsNodeRuntimeEnvironment() {
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
228
|
+
// @ts-ignore
|
|
229
|
+
return !!process[Symbol.for('ts-node.register.instance')];
|
|
230
|
+
}
|
|
199
231
|
|
|
200
232
|
class ScriptLoader {
|
|
201
233
|
async execute(info) {
|
|
@@ -204,7 +236,13 @@ class ScriptLoader {
|
|
|
204
236
|
try {
|
|
205
237
|
output = await this.load(info);
|
|
206
238
|
} catch (e) {
|
|
207
|
-
|
|
239
|
+
// jiti + ts-node
|
|
240
|
+
// issue: https://github.com/nuxt/bridge/issues/228
|
|
241
|
+
if (isTsNodeRuntimeEnvironment()) {
|
|
242
|
+
output = this.loadSync(info);
|
|
243
|
+
} else {
|
|
244
|
+
output = this.jiti(filePath);
|
|
245
|
+
}
|
|
208
246
|
}
|
|
209
247
|
return output;
|
|
210
248
|
}
|
|
@@ -232,6 +270,12 @@ class ScriptLoader {
|
|
|
232
270
|
filePath = pathToFileURL(filePath).href;
|
|
233
271
|
}
|
|
234
272
|
try {
|
|
273
|
+
// segmentation fault
|
|
274
|
+
// issue: https://github.com/nodejs/node/issues/35889
|
|
275
|
+
if (isJestRuntimeEnvironment()) {
|
|
276
|
+
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
277
|
+
return require(filePath);
|
|
278
|
+
}
|
|
235
279
|
return await import(filePath);
|
|
236
280
|
} catch (e) {
|
|
237
281
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
@@ -302,25 +346,6 @@ class ScriptLoader {
|
|
|
302
346
|
}
|
|
303
347
|
}
|
|
304
348
|
|
|
305
|
-
function getExportItem(data, filterFn) {
|
|
306
|
-
if (filterFn) {
|
|
307
|
-
const keys = Object.keys(data);
|
|
308
|
-
for(let i = 0; i < keys.length; i++){
|
|
309
|
-
if (filterFn(keys[i], data[keys[i]])) {
|
|
310
|
-
return {
|
|
311
|
-
key: keys[i],
|
|
312
|
-
value: data[keys[i]]
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
throw new BaseError('Cannot find specific module export.');
|
|
317
|
-
}
|
|
318
|
-
return {
|
|
319
|
-
key: 'default',
|
|
320
|
-
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
|
|
324
349
|
class JSONLoader {
|
|
325
350
|
async execute(input) {
|
|
326
351
|
const filePath = buildLoaderFilePath(input, true);
|
|
@@ -456,5 +481,5 @@ function loadFileSync(input) {
|
|
|
456
481
|
return manager.executeSync(info);
|
|
457
482
|
}
|
|
458
483
|
|
|
459
|
-
export { JSONLoader, ScriptLoader, buildLoaderFilePath, buildLocatorOptions, getExportItem, handleFileLoadError, hasOwnProperty, hasStringProperty, isObject, loadFile, loadFileSync, locateFile, locateFileSync, locateFiles, locateFilesSync, pathToLocatorInfo, removeFileNameExtension, toArray };
|
|
484
|
+
export { JSONLoader, ScriptLoader, buildLoaderFilePath, buildLocatorOptions, getExportItem, handleFileLoadError, hasOwnProperty, hasStringProperty, isJestRuntimeEnvironment, isObject, isTsNodeRuntimeEnvironment, loadFile, loadFileSync, locateFile, locateFileSync, locateFiles, locateFilesSync, pathToLocatorInfo, removeFileNameExtension, toArray };
|
|
460
485
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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/module.ts","../src/loader/built-in/script/utils.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 path from 'node:path';\nimport { LocatorInfo } from '../locator';\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","/*\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';\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 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.\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 { hasOwnProperty } from '../../../utils';\nimport { LoaderFilterFn, ScriptFileExportItem } from './type';\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-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":["input","options","name","extension","pattern","absolute","cwd","nodir","ignore","items","output","executeSync","locatorInfo","withExtension","withFilePrefix","code","message","stack","esmResolve","value","register","findRule","loader","instance","info"],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;AAKC;AAIG;AACI;;;;;;AAQR;;AClBA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACbA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACTA;;;;;AAKC;AAMM;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;AACAA;;AAGJ;AAEO;AAIH;AACID;;;;;AAOAE;AACAC;AACJ;AACJ;;AC7BA;AAEO;AAIHF;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAUO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;;;;AAOJ;;ACxEO;AAIHP;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;AC1DO;AACH;;;AAIA;AACJ;;ACCO;;AAwCC;;;AAKIE;AACJ;;AAEA;;AAGJ;AAEAC;AACI;;;;AAMA;;AAEA;;AAGJ;;AAIA;;;AAOQC;;;;AAKJX;AAEA;;;;;;AAOA;AACI;AAKI;AAOI;AACI;AACAY;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;AAGJ;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;;;AASQL;;;;AAKJX;AAEA;;;AAII;AACJ;AACI;AAKI;AAOI;AACI;AACAY;AACJ;;AAGJ;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;AAjLI;;;;;;;;AAQA;;AAGA;AACIC;AAoBJ;AACJ;AAiJJ;;AC5LO;AAIH;;AAEI;;;;AAIYC;AACJ;;AAER;;;;;AAOAA;AACJ;AACJ;;ACpBO;;;;AAKK;AACA;AACJ;AACI;AACJ;AACJ;AAEAR;;;;AAKQ;AACJ;AACI;AACJ;AACJ;AACJ;;ACvBO;AAaHS;AACI;AACJ;;AAGI;AACA;;;AAIA;;AAEJ;AAEAT;AACI;AACA;;;AAIA;;AAEJ;AAEAU;;;;AAIY;AACI;;AAER;AACI;;AAER;;AAGJ;AAEA;;;;;;;;AAUI;AACI;;;;;AAMe;AACXC;;AAEJ;;AACa;AACTA;;AAEJ;AACJ;;;;;AAOJ;;;;AA5EQ;;AAAS;AAAO;AAAQ;AAAQ;AAAM;;AAAmB;AACzD;;AAAS;AAAQ;;AAAiB;AACrC;AACL;AA0EJ;;ACxFA;AACO;;;;AAKHC;;AAGJ;;ACRO;;;AAGCC;;;;AAKJ;;AAGJ;AAEO;;;AAGCA;;;;AAKJ;;AAGJ;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","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 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 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 // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(info);\n } else {\n output = this.jiti(filePath);\n }\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 (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 { 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":["input","options","name","extension","pattern","absolute","cwd","nodir","ignore","items","value","output","executeSync","locatorInfo","withExtension","withFilePrefix","code","message","stack","esmResolve","register","findRule","loader","instance","info"],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;AAKC;AAIG;AACI;;;;;;AAQR;;AClBA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACbA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACTA;;;;;AAKC;AAMM;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;AACAA;;AAGJ;AAEO;AAIH;AACID;;;;;AAOAE;AACAC;AACJ;AACJ;;AC7BA;AAEO;AAIHF;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAUO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;;;;AAOJ;;ACxEO;AAIHP;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACvDO;AACH;;;AAIA;AACJ;AAEO;AAIH;;AAEI;;;;AAIYE;AACJ;;AAER;;;;;AAOAA;AACJ;AACJ;;AC3CA;;;;;;AAQI;AAEJ;AAEO;;;AAGH;AACJ;;ACEO;;AAwCC;;;AAKIC;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;AACI;;;;AAMA;;AAEA;;AAGJ;;AAIA;;;AAOQC;;;;AAKJZ;AAEA;;;;;;;AAQI;;AAEI;;;AAIR;AACI;AAKI;AAOI;AACI;AACAa;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;AAGJ;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;;;AASQL;;;;AAKJZ;AAEA;;;AAII;AACJ;AACI;AAKI;AAOI;AACI;AACAa;AACJ;;AAGJ;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;AA9LI;;;;;;;;AAQA;;AAGA;AACIC;AAoBJ;AACJ;AA8JJ;;ACxMO;;;;AAKK;AACA;AACJ;AACI;AACJ;AACJ;AAEAP;;;;AAKQ;AACJ;AACI;AACJ;AACJ;AACJ;;ACvBO;AAaHQ;AACI;AACJ;;AAGI;AACA;;;AAIA;;AAEJ;AAEAR;AACI;AACA;;;AAIA;;AAEJ;AAEAS;;;;AAIY;AACI;;AAER;AACI;;AAER;;AAGJ;AAEA;;;;;;;;AAUI;AACI;;;;;AAMe;AACXC;;AAEJ;;AACa;AACTA;;AAEJ;AACJ;;;;;AAOJ;;;;AA5EQ;;AAAS;AAAO;AAAQ;AAAQ;AAAM;;AAAmB;AACzD;;AAAS;AAAQ;;AAAiB;AACrC;AACL;AA0EJ;;ACxFA;AACO;;;;AAKHC;;AAGJ;;ACRO;;;AAGCC;;;;AAKJ;;AAGJ;AAEO;;;AAGCA;;;;AAKJ;;AAGJ;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function
|
|
1
|
+
export declare function isJestRuntimeEnvironment(): boolean;
|
|
2
|
+
export declare function isTsNodeRuntimeEnvironment(): boolean;
|
package/dist/loader/utils.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { LocatorInfo } from '../locator';
|
|
2
|
+
import { LoaderFilterFn, ScriptFileExportItem } from './built-in';
|
|
2
3
|
export declare function buildLoaderFilePath(info: LocatorInfo, withExtension?: boolean): string;
|
|
4
|
+
export declare function getExportItem(data: Record<string, any>, filterFn?: LoaderFilterFn): ScriptFileExportItem;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locter",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "A library to locate a file by criteria and load it",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Peter Placzek",
|
|
@@ -59,14 +59,14 @@
|
|
|
59
59
|
"@semantic-release/github": "^8.0.7",
|
|
60
60
|
"@semantic-release/npm": "^9.0.1",
|
|
61
61
|
"@semantic-release/release-notes-generator": "^10.0.3",
|
|
62
|
-
"@swc/core": "^1.3.
|
|
62
|
+
"@swc/core": "^1.3.31",
|
|
63
63
|
"@swc/jest": "^0.2.24",
|
|
64
64
|
"@tada5hi/eslint-config-typescript": "^1.1.1",
|
|
65
65
|
"@tada5hi/tsconfig": "^0.4.0",
|
|
66
66
|
"@types/glob": "^8.0.1",
|
|
67
67
|
"@types/jest": "^27.5.2",
|
|
68
68
|
"@types/node": "^18.11.18",
|
|
69
|
-
"@types/yargs": "^17.0.
|
|
69
|
+
"@types/yargs": "^17.0.21",
|
|
70
70
|
"coveralls": "^3.1.0",
|
|
71
71
|
"cross-env": "^7.0.3",
|
|
72
72
|
"eslint": "^8.32.0",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"rollup": "^3.12.0",
|
|
79
79
|
"semantic-release": "^19.0.5",
|
|
80
80
|
"sourcemap-codec": "^1.4.8",
|
|
81
|
-
"typescript": "^4.9.
|
|
81
|
+
"typescript": "^4.9.5"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
84
|
"ebec": "^0.2.1",
|