locter 1.0.8 → 1.0.9

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 CHANGED
@@ -206,12 +206,7 @@ function locateSync(pattern, options) {
206
206
  return undefined;
207
207
  }
208
208
 
209
- /*
210
- * Copyright (c) 2022.
211
- * Author Peter Placzek (tada5hi)
212
- * For the full copyright and license information,
213
- * view the LICENSE file that was distributed with this source code.
214
- */ function isJestRuntimeEnvironment() {
209
+ function isJestRuntimeEnvironment() {
215
210
  return process.env && process.env.JEST_WORKER_ID !== undefined;
216
211
  }
217
212
  function isTsNodeRuntimeEnvironment() {
@@ -219,6 +214,34 @@ function isTsNodeRuntimeEnvironment() {
219
214
  // @ts-ignore
220
215
  return !!process[Symbol.for('ts-node.register.instance')];
221
216
  }
217
+ function getModuleExport(data, filterFn) {
218
+ if (filterFn) {
219
+ const keys = Object.keys(data);
220
+ for(let i = 0; i < keys.length; i++){
221
+ if (filterFn(keys[i], data[keys[i]])) {
222
+ return {
223
+ key: keys[i],
224
+ value: data[keys[i]]
225
+ };
226
+ }
227
+ }
228
+ throw new ebec.BaseError('Cannot find specific module export.');
229
+ }
230
+ let value;
231
+ if (hasOwnProperty(data, '__esModule') && // eslint-disable-next-line no-underscore-dangle
232
+ !!data.__esModule && hasOwnProperty(data, 'default')) {
233
+ value = data.default;
234
+ } else {
235
+ value = data;
236
+ }
237
+ if (isObject(value) && hasOwnProperty(value, 'default')) {
238
+ value = value.default;
239
+ }
240
+ return {
241
+ key: 'default',
242
+ value
243
+ };
244
+ }
222
245
 
223
246
  class ModuleLoader {
224
247
  async execute(input) {
@@ -533,32 +556,13 @@ function loadSync(input) {
533
556
  return manager.executeSync(buildFilePath(input));
534
557
  }
535
558
 
536
- function getExportItem(data, filterFn) {
537
- if (filterFn) {
538
- const keys = Object.keys(data);
539
- for(let i = 0; i < keys.length; i++){
540
- if (filterFn(keys[i], data[keys[i]])) {
541
- return {
542
- key: keys[i],
543
- value: data[keys[i]]
544
- };
545
- }
546
- }
547
- throw new ebec.BaseError('Cannot find specific module export.');
548
- }
549
- return {
550
- key: 'default',
551
- value: hasOwnProperty(data, 'default') ? data.default : data
552
- };
553
- }
554
-
555
559
  exports.JSONLoader = JSONLoader;
556
560
  exports.LoaderManager = LoaderManager;
557
561
  exports.ModuleLoader = ModuleLoader;
558
562
  exports.buildFilePath = buildFilePath;
559
563
  exports.buildFilePathWithoutExtension = buildFilePathWithoutExtension;
560
564
  exports.buildLocatorOptions = buildLocatorOptions;
561
- exports.getExportItem = getExportItem;
565
+ exports.getModuleExport = getModuleExport;
562
566
  exports.handleException = handleException;
563
567
  exports.hasOwnProperty = hasOwnProperty;
564
568
  exports.hasStringProperty = hasStringProperty;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts","../src/loader/utils.ts"],"sourcesContent":["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\nimport { hasOwnProperty } from './has-property';\nimport { isObject } from './object';\n\nexport function handleException(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n const error = new Error('Can not process thrown exception.');\n\n if (isObject(e)) {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n error.message = e.message;\n }\n\n if (\n hasOwnProperty(e, 'stack') &&\n typeof e.stack === 'string'\n ) {\n error.stack = e.stack;\n }\n }\n\n throw 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","/*\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) 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 */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\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 { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\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 type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(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 { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(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\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 type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ScriptFileLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\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(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ScriptFileLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\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 { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(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 { BaseError } from 'ebec';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\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"],"names":["hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","handleException","e","Error","error","message","stack","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","toArray","isFilePath","path","extname","options","buildLocatorOptions","push","process","cwd","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","pattern","patterns","items","i","j","files","glob","absolute","nodir","k","locate","element","shift","undefined","locateManySync","globSync","locateSync","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","ModuleLoader","execute","output","load","loadSync","jiti","executeSync","data","locatorInfo","build","require","withExtension","code","withFilePrefix","BaseError","pathToFileURL","href","constructor","createJITI","JSONLoader","filePath","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager","getExportItem","filterFn","keys","key","value","default"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["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\nimport { hasOwnProperty } from './has-property';\nimport { isObject } from './object';\n\nexport function handleException(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n const error = new Error('Can not process thrown exception.');\n\n if (isObject(e)) {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n error.message = e.message;\n }\n\n if (\n hasOwnProperty(e, 'stack') &&\n typeof e.stack === 'string'\n ) {\n error.stack = e.stack;\n }\n }\n\n throw 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","/*\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) 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 */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\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 { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\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 type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(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 { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\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\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\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 let value: any;\n\n if (\n hasOwnProperty(data, '__esModule') &&\n // eslint-disable-next-line no-underscore-dangle\n !!data.__esModule &&\n hasOwnProperty(data, 'default')\n ) {\n value = data.default;\n } else {\n value = data;\n }\n\n if (\n isObject(value) &&\n hasOwnProperty(value, 'default')\n ) {\n value = value.default;\n }\n\n return {\n key: 'default',\n value,\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 { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\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(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\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 { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","handleException","e","Error","error","message","stack","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","toArray","isFilePath","path","extname","options","buildLocatorOptions","push","process","cwd","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","pattern","patterns","items","i","j","files","glob","absolute","nodir","k","locate","element","shift","undefined","locateManySync","globSync","locateSync","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","getModuleExport","data","filterFn","keys","key","value","BaseError","__esModule","default","ModuleLoader","execute","output","load","loadSync","jiti","executeSync","locatorInfo","build","require","withExtension","code","withFilePrefix","pathToFileURL","href","constructor","createJITI","JSONLoader","filePath","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -211,12 +211,7 @@ function locateSync(pattern, options) {
211
211
  return undefined;
212
212
  }
213
213
 
214
- /*
215
- * Copyright (c) 2022.
216
- * Author Peter Placzek (tada5hi)
217
- * For the full copyright and license information,
218
- * view the LICENSE file that was distributed with this source code.
219
- */ function isJestRuntimeEnvironment() {
214
+ function isJestRuntimeEnvironment() {
220
215
  return process.env && process.env.JEST_WORKER_ID !== undefined;
221
216
  }
222
217
  function isTsNodeRuntimeEnvironment() {
@@ -224,6 +219,34 @@ function isTsNodeRuntimeEnvironment() {
224
219
  // @ts-ignore
225
220
  return !!process[Symbol.for('ts-node.register.instance')];
226
221
  }
222
+ function getModuleExport(data, filterFn) {
223
+ if (filterFn) {
224
+ const keys = Object.keys(data);
225
+ for(let i = 0; i < keys.length; i++){
226
+ if (filterFn(keys[i], data[keys[i]])) {
227
+ return {
228
+ key: keys[i],
229
+ value: data[keys[i]]
230
+ };
231
+ }
232
+ }
233
+ throw new BaseError('Cannot find specific module export.');
234
+ }
235
+ let value;
236
+ if (hasOwnProperty(data, '__esModule') && // eslint-disable-next-line no-underscore-dangle
237
+ !!data.__esModule && hasOwnProperty(data, 'default')) {
238
+ value = data.default;
239
+ } else {
240
+ value = data;
241
+ }
242
+ if (isObject(value) && hasOwnProperty(value, 'default')) {
243
+ value = value.default;
244
+ }
245
+ return {
246
+ key: 'default',
247
+ value
248
+ };
249
+ }
227
250
 
228
251
  class ModuleLoader {
229
252
  async execute(input) {
@@ -538,24 +561,5 @@ function loadSync(input) {
538
561
  return manager.executeSync(buildFilePath(input));
539
562
  }
540
563
 
541
- function getExportItem(data, filterFn) {
542
- if (filterFn) {
543
- const keys = Object.keys(data);
544
- for(let i = 0; i < keys.length; i++){
545
- if (filterFn(keys[i], data[keys[i]])) {
546
- return {
547
- key: keys[i],
548
- value: data[keys[i]]
549
- };
550
- }
551
- }
552
- throw new BaseError('Cannot find specific module export.');
553
- }
554
- return {
555
- key: 'default',
556
- value: hasOwnProperty(data, 'default') ? data.default : data
557
- };
558
- }
559
-
560
- export { JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, getExportItem, handleException, hasOwnProperty, hasStringProperty, isFilePath, isJestRuntimeEnvironment, isLocatorInfo, isObject, isTsNodeRuntimeEnvironment, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray };
564
+ export { JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, getModuleExport, handleException, hasOwnProperty, hasStringProperty, isFilePath, isJestRuntimeEnvironment, isLocatorInfo, isObject, isTsNodeRuntimeEnvironment, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray };
561
565
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts","../src/loader/utils.ts"],"sourcesContent":["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\nimport { hasOwnProperty } from './has-property';\nimport { isObject } from './object';\n\nexport function handleException(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n const error = new Error('Can not process thrown exception.');\n\n if (isObject(e)) {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n error.message = e.message;\n }\n\n if (\n hasOwnProperty(e, 'stack') &&\n typeof e.stack === 'string'\n ) {\n error.stack = e.stack;\n }\n }\n\n throw 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","/*\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) 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 */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\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 { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\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 type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(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 { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(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\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 type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ScriptFileLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\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(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ScriptFileLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\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 { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(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 { BaseError } from 'ebec';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\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"],"names":["input","options","name","extension","info","pattern","absolute","cwd","nodir","ignore","items","output","executeSync","withExtension","withFilePrefix","code","message","stack","locatorInfo","LoaderId","test","loader","findLoader","instance","manager","value"],"mappings":";;;;;;;;;;;;;;AAAO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACHO;AACH;AACI;;;AAKJ;AACI;;;AAOA;;;;AAQJ;AACJ;;AClCA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACDO;;AAEH;AACJ;;ACXA;;;;;;AAWO;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;;AAGJ;AAEO;AAIH;AAIID;;;;;AAOAE;AACAC;AACJ;AACJ;AAEO;AAGH;AAIJ;AAEO;;;;;;;AASH;AACJ;AAEO;;;AAICC;;;;AAKJ;AACJ;;ACjEO;AAIHH;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AAIHR;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACpEA;;;;;;AAQI;AAEJ;AAEO;;;AAGH;AACJ;;ACWO;;;;AAeKE;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;;;;AAKI;;AAEA;;AAGJ;;AAIA;AAIIX;;;;;AAMI;;AAEI;;;AAIR;AACI;AAKI;AACI;AAOI;AACI;AACAY;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;;AAIR;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;AAMIhB;;;;AAKI;AACJ;AACI;AAKI;AACI;AAOI;AACI;AACAY;AACJ;;;AAIR;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;;;AASIhB;;;AAIQiB;;;;;AAMAhB;;AAEAA;;;;;;;;;AAUAA;AAAMgB;AAAY;AAC9B;;;;AA3KI;;AACiB;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AAC9D;AACJ;AAyKJ;;ACjMO;;AAEC;;AAGI;AACA;AACJ;AACI;AACJ;AACJ;AAEAN;AACI;;;AAII;AACJ;AACI;AACJ;AACJ;AACJ;;AClCA;;;;;;;AAOYO;AAAAA;;;ACOL;;;AAwBK;AAAkBC;AAAMC;AAAO;AAC/B;;AAGJ;AACJ;;AAGI;AACA;AACI;;;AAIJ;;AAEJ;AAEAT;AACI;AACA;AACI;;;AAIJ;;AAEJ;AAEAU;;AAEQ;;AAGJ;;;;AAIQ;AACI;;AAER;AACI;;AAER;;AAGJ;AAEA;;;;;;;;;AAWQ;;;;;AAOA;AAAsB;AAClBD;;AAEJ;AACA;AAAoB;AAChBA;;AAEJ;AACA;AACS;AACL;AACA;;;AAIJ;AACJ;;AAGI;;;;AAMR;;AAII;;;;AAKI;;AAGJ;AACI;;;AAIR;;;;AA7HQ;;AACW;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AACpDA;AACJ;AACA;;AACW;AAAQ;AAAEA;AACrB;AACH;AACL;AAsHJ;;AC3IA;AACO;;;;AAKHE;;AAGJ;;ACJO;AACH;;;AAII;;AAGJC;AACJ;AAEO;AACH;;;;;AAMJ;AAEO;AACH;;;;;AAMJ;;AC9BO;AAIH;;AAEI;;;;AAIYC;AACJ;;AAER;;;;;AAOAA;AACJ;AACJ;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["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\nimport { hasOwnProperty } from './has-property';\nimport { isObject } from './object';\n\nexport function handleException(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n const error = new Error('Can not process thrown exception.');\n\n if (isObject(e)) {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n error.message = e.message;\n }\n\n if (\n hasOwnProperty(e, 'stack') &&\n typeof e.stack === 'string'\n ) {\n error.stack = e.stack;\n }\n }\n\n throw 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","/*\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) 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 */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\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 { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\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 type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(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 { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\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\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\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 let value: any;\n\n if (\n hasOwnProperty(data, '__esModule') &&\n // eslint-disable-next-line no-underscore-dangle\n !!data.__esModule &&\n hasOwnProperty(data, 'default')\n ) {\n value = data.default;\n } else {\n value = data;\n }\n\n if (\n isObject(value) &&\n hasOwnProperty(value, 'default')\n ) {\n value = value.default;\n }\n\n return {\n key: 'default',\n value,\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 { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\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(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\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\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 handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\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 { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["input","options","name","extension","info","pattern","absolute","cwd","nodir","ignore","items","value","output","executeSync","withExtension","withFilePrefix","code","message","stack","locatorInfo","LoaderId","test","loader","findLoader","instance","manager"],"mappings":";;;;;;;;;;;;;;AAAO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACHO;AACH;AACI;;;AAKJ;AACI;;;AAOA;;;;AAQJ;AACJ;;AClCA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACDO;;AAEH;AACJ;;ACXA;;;;;;AAWO;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;;AAGJ;AAEO;AAIH;AAIID;;;;;AAOAE;AACAC;AACJ;AACJ;AAEO;AAGH;AAIJ;AAEO;;;;;;;AASH;AACJ;AAEO;;;AAICC;;;;AAKJ;AACJ;;ACjEO;AAIHH;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AAIHR;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AACH;AAEJ;AAEO;;;AAGH;AACJ;AAEO;AAIH;;AAEI;;;;AAIYE;AACJ;;AAER;;;;;AAUA;AAGAA;;;;AAKJ;AAIIA;;;;AAKAA;AACJ;AACJ;;ACrCO;;;;AAeKC;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;;;;AAKI;;AAEA;;AAGJ;;AAIA;AAIIZ;;;;;AAMI;;AAEI;;;AAIR;AACI;AAKI;AACI;AAOI;AACI;AACAa;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;;AAIR;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;AAMIjB;;;;AAKI;AACJ;AACI;AAKI;AACI;AAOI;AACI;AACAa;AACJ;;;AAIR;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;;;AASIjB;;;AAIQkB;;;;;AAMAjB;;AAEAA;;;;;;;;;AAUAA;AAAMiB;AAAY;AAC9B;;;;AA3KI;;AACiB;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AAC9D;AACJ;AAyKJ;;ACjMO;;AAEC;;AAGI;AACA;AACJ;AACI;AACJ;AACJ;AAEAN;AACI;;;AAII;AACJ;AACI;AACJ;AACJ;AACJ;;AClCA;;;;;;;AAOYO;AAAAA;;;ACOL;;;AAwBK;AAAkBC;AAAMC;AAAO;AAC/B;;AAGJ;AACJ;;AAGI;AACA;AACI;;;AAIJ;;AAEJ;AAEAT;AACI;AACA;AACI;;;AAIJ;;AAEJ;AAEAU;;AAEQ;;AAGJ;;;;AAIQ;AACI;;AAER;AACI;;AAER;;AAGJ;AAEA;;;;;;;;;AAWQ;;;;;AAOA;AAAsB;AAClBD;;AAEJ;AACA;AAAoB;AAChBA;;AAEJ;AACA;AACS;AACL;AACA;;;AAIJ;AACJ;;AAGI;;;;AAMR;;AAII;;;;AAKI;;AAGJ;AACI;;;AAIR;;;;AA7HQ;;AACW;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AACpDA;AACJ;AACA;;AACW;AAAQ;AAAEA;AACrB;AACH;AACL;AAsHJ;;AC3IA;AACO;;;;AAKHE;;AAGJ;;ACJO;AACH;;;AAII;;AAGJC;AACJ;AAEO;AACH;;;;;AAMJ;AAEO;AACH;;;;;AAMJ;;"}
@@ -1,13 +1,13 @@
1
1
  import type { JITI } from 'jiti';
2
2
  import type { LocatorInfo } from '../../../locator';
3
3
  import type { Loader } from '../../type';
4
- import type { ScriptFileLoadOptions } from './type';
4
+ import type { ModuleLoadOptions } from './type';
5
5
  export declare class ModuleLoader implements Loader {
6
6
  protected jiti: JITI;
7
7
  constructor();
8
8
  execute(input: string): Promise<any>;
9
9
  executeSync(input: string): any;
10
- load(data: LocatorInfo | string, options?: ScriptFileLoadOptions): Promise<unknown>;
11
- loadSync(data: LocatorInfo | string, options?: ScriptFileLoadOptions): unknown;
10
+ load(data: LocatorInfo | string, options?: ModuleLoadOptions): Promise<unknown>;
11
+ loadSync(data: LocatorInfo | string, options?: ModuleLoadOptions): unknown;
12
12
  private build;
13
13
  }
@@ -1,9 +1,9 @@
1
1
  export type LoaderFilterFn = (key: string, value: unknown) => boolean;
2
- export type ScriptFileExportItem = {
2
+ export type ModuleExport = {
3
3
  key: string;
4
- value: unknown;
4
+ value: any;
5
5
  };
6
- export type ScriptFileLoadOptions = {
6
+ export type ModuleLoadOptions = {
7
7
  withExtension?: boolean;
8
8
  withFilePrefix?: boolean;
9
9
  };
@@ -1,2 +1,4 @@
1
+ import type { LoaderFilterFn, ModuleExport } from './type';
1
2
  export declare function isJestRuntimeEnvironment(): boolean;
2
3
  export declare function isTsNodeRuntimeEnvironment(): boolean;
4
+ export declare function getModuleExport(data: Record<string, any>, filterFn?: LoaderFilterFn): ModuleExport;
@@ -1,4 +1,3 @@
1
1
  export * from './built-in';
2
2
  export * from './helpers';
3
3
  export * from './module';
4
- export * from './utils';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "locter",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "A library to locate a file/module by criteria and load it!",
5
5
  "author": {
6
6
  "name": "Peter Placzek",
@@ -1,2 +0,0 @@
1
- import type { LoaderFilterFn, ScriptFileExportItem } from './built-in';
2
- export declare function getExportItem(data: Record<string, any>, filterFn?: LoaderFilterFn): ScriptFileExportItem;