locter 1.0.6 → 1.0.7
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 +89 -74
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +87 -73
- package/dist/index.mjs.map +1 -1
- package/dist/loader/built-in/module/module.d.ts +1 -0
- package/dist/loader/utils.d.ts +0 -2
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/file-path.d.ts +3 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -7,19 +7,36 @@ var glob = require('glob');
|
|
|
7
7
|
var path = require('node:path');
|
|
8
8
|
var fs = require('node:fs');
|
|
9
9
|
|
|
10
|
+
function hasOwnProperty(obj, prop) {
|
|
11
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
12
|
+
}
|
|
13
|
+
function hasStringProperty(obj, prop) {
|
|
14
|
+
return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';
|
|
15
|
+
}
|
|
16
|
+
|
|
10
17
|
/*
|
|
11
18
|
* Copyright (c) 2022.
|
|
12
19
|
* Author Peter Placzek (tada5hi)
|
|
13
20
|
* For the full copyright and license information,
|
|
14
21
|
* view the LICENSE file that was distributed with this source code.
|
|
15
|
-
*/
|
|
22
|
+
*/ function isObject(item) {
|
|
23
|
+
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function handleException(e) {
|
|
16
27
|
if (e instanceof Error) {
|
|
17
28
|
throw e;
|
|
18
29
|
}
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
const error = new Error('Can not process thrown exception.');
|
|
31
|
+
if (isObject(e)) {
|
|
32
|
+
if (hasOwnProperty(e, 'message') && typeof e.message === 'string') {
|
|
33
|
+
error.message = e.message;
|
|
34
|
+
}
|
|
35
|
+
if (hasOwnProperty(e, 'stack') && typeof e.stack === 'string') {
|
|
36
|
+
error.stack = e.stack;
|
|
37
|
+
}
|
|
21
38
|
}
|
|
22
|
-
throw
|
|
39
|
+
throw error;
|
|
23
40
|
}
|
|
24
41
|
|
|
25
42
|
/*
|
|
@@ -38,22 +55,6 @@ var fs = require('node:fs');
|
|
|
38
55
|
return input;
|
|
39
56
|
}
|
|
40
57
|
|
|
41
|
-
function hasOwnProperty(obj, prop) {
|
|
42
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
43
|
-
}
|
|
44
|
-
function hasStringProperty(obj, prop) {
|
|
45
|
-
return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/*
|
|
49
|
-
* Copyright (c) 2022.
|
|
50
|
-
* Author Peter Placzek (tada5hi)
|
|
51
|
-
* For the full copyright and license information,
|
|
52
|
-
* view the LICENSE file that was distributed with this source code.
|
|
53
|
-
*/ function isObject(item) {
|
|
54
|
-
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
58
|
/*
|
|
58
59
|
* Copyright (c) 2022.
|
|
59
60
|
* Author Peter Placzek (tada5hi)
|
|
@@ -65,6 +66,25 @@ function hasStringProperty(obj, prop) {
|
|
|
65
66
|
];
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
function buildFilePath(input) {
|
|
70
|
+
if (typeof input === 'string') {
|
|
71
|
+
return input;
|
|
72
|
+
}
|
|
73
|
+
if (input.extension) {
|
|
74
|
+
return path.join(input.path, input.name) + input.extension;
|
|
75
|
+
}
|
|
76
|
+
return path.join(input.path, input.name);
|
|
77
|
+
}
|
|
78
|
+
function buildFilePathWithoutExtension(input) {
|
|
79
|
+
let info;
|
|
80
|
+
if (typeof input === 'string') {
|
|
81
|
+
info = pathToLocatorInfo(input);
|
|
82
|
+
} else {
|
|
83
|
+
info = input;
|
|
84
|
+
}
|
|
85
|
+
return path.join(info.path, info.name);
|
|
86
|
+
}
|
|
87
|
+
|
|
68
88
|
/*
|
|
69
89
|
* Copyright (c) 2022.
|
|
70
90
|
* Author Peter Placzek (tada5hi)
|
|
@@ -183,37 +203,6 @@ function locateSync(pattern, options) {
|
|
|
183
203
|
return undefined;
|
|
184
204
|
}
|
|
185
205
|
|
|
186
|
-
function buildLoaderFilePath(input, withExtension) {
|
|
187
|
-
let info;
|
|
188
|
-
if (typeof input === 'string') {
|
|
189
|
-
info = pathToLocatorInfo(input);
|
|
190
|
-
} else {
|
|
191
|
-
info = input;
|
|
192
|
-
}
|
|
193
|
-
if (withExtension && info.extension) {
|
|
194
|
-
return path.join(info.path, info.name) + info.extension;
|
|
195
|
-
}
|
|
196
|
-
return path.join(info.path, info.name);
|
|
197
|
-
}
|
|
198
|
-
function getExportItem(data, filterFn) {
|
|
199
|
-
if (filterFn) {
|
|
200
|
-
const keys = Object.keys(data);
|
|
201
|
-
for(let i = 0; i < keys.length; i++){
|
|
202
|
-
if (filterFn(keys[i], data[keys[i]])) {
|
|
203
|
-
return {
|
|
204
|
-
key: keys[i],
|
|
205
|
-
value: data[keys[i]]
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
throw new ebec.BaseError('Cannot find specific module export.');
|
|
210
|
-
}
|
|
211
|
-
return {
|
|
212
|
-
key: 'default',
|
|
213
|
-
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
206
|
/*
|
|
218
207
|
* Copyright (c) 2022.
|
|
219
208
|
* Author Peter Placzek (tada5hi)
|
|
@@ -255,14 +244,14 @@ class ModuleLoader {
|
|
|
255
244
|
}
|
|
256
245
|
// ---------------------------------------------------------------------------
|
|
257
246
|
async load(data, options) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
247
|
+
const locatorInfo = this.buildLocatorInfo(data);
|
|
248
|
+
options = options || {};
|
|
249
|
+
let filePath;
|
|
250
|
+
if (options.withExtension) {
|
|
251
|
+
filePath = buildFilePath(locatorInfo);
|
|
261
252
|
} else {
|
|
262
|
-
|
|
253
|
+
filePath = buildFilePathWithoutExtension(locatorInfo);
|
|
263
254
|
}
|
|
264
|
-
options = options || {};
|
|
265
|
-
let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);
|
|
266
255
|
if (options.withFilePrefix) {
|
|
267
256
|
filePath = node_url.pathToFileURL(filePath).href;
|
|
268
257
|
}
|
|
@@ -294,18 +283,18 @@ class ModuleLoader {
|
|
|
294
283
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
295
284
|
});
|
|
296
285
|
}
|
|
297
|
-
/* istanbul ignore next */ return
|
|
286
|
+
/* istanbul ignore next */ return handleException(e);
|
|
298
287
|
}
|
|
299
288
|
}
|
|
300
289
|
loadSync(data, options) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
290
|
+
const locatorInfo = this.buildLocatorInfo(data);
|
|
291
|
+
options = options || {};
|
|
292
|
+
let filePath;
|
|
293
|
+
if (options.withExtension) {
|
|
294
|
+
filePath = buildFilePath(locatorInfo);
|
|
304
295
|
} else {
|
|
305
|
-
|
|
296
|
+
filePath = buildFilePathWithoutExtension(locatorInfo);
|
|
306
297
|
}
|
|
307
|
-
options = options || {};
|
|
308
|
-
const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);
|
|
309
298
|
try {
|
|
310
299
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
311
300
|
return require(filePath);
|
|
@@ -323,8 +312,14 @@ class ModuleLoader {
|
|
|
323
312
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
324
313
|
});
|
|
325
314
|
}
|
|
326
|
-
return
|
|
315
|
+
return handleException(e);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
buildLocatorInfo(input) {
|
|
319
|
+
if (typeof input === 'string') {
|
|
320
|
+
return pathToLocatorInfo(input);
|
|
327
321
|
}
|
|
322
|
+
return input;
|
|
328
323
|
}
|
|
329
324
|
constructor(){
|
|
330
325
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -344,21 +339,21 @@ class ModuleLoader {
|
|
|
344
339
|
|
|
345
340
|
class JSONLoader {
|
|
346
341
|
async execute(input) {
|
|
347
|
-
const filePath =
|
|
342
|
+
const filePath = buildFilePath(input);
|
|
348
343
|
try {
|
|
349
344
|
const file = await fs.promises.readFile(filePath);
|
|
350
345
|
return JSON.parse(file.toString('utf-8'));
|
|
351
346
|
} catch (e) {
|
|
352
|
-
return
|
|
347
|
+
return handleException(e);
|
|
353
348
|
}
|
|
354
349
|
}
|
|
355
350
|
executeSync(input) {
|
|
356
|
-
const filePath =
|
|
351
|
+
const filePath = buildFilePath(input);
|
|
357
352
|
try {
|
|
358
353
|
const file = fs.readFileSync(filePath);
|
|
359
354
|
return JSON.parse(file.toString('utf-8'));
|
|
360
355
|
} catch (e) {
|
|
361
|
-
return
|
|
356
|
+
return handleException(e);
|
|
362
357
|
}
|
|
363
358
|
}
|
|
364
359
|
}
|
|
@@ -414,7 +409,7 @@ class LoaderManager {
|
|
|
414
409
|
if (test.indexOf(info.extension) !== -1) {
|
|
415
410
|
return this.rules[i].loader;
|
|
416
411
|
}
|
|
417
|
-
} else if (test.test(
|
|
412
|
+
} else if (test.test(buildFilePath(info))) {
|
|
418
413
|
return this.rules[i].loader;
|
|
419
414
|
}
|
|
420
415
|
}
|
|
@@ -516,23 +511,43 @@ async function load(input) {
|
|
|
516
511
|
if (typeof input === 'string') {
|
|
517
512
|
return manager.execute(input);
|
|
518
513
|
}
|
|
519
|
-
return manager.execute(
|
|
514
|
+
return manager.execute(buildFilePath(input));
|
|
520
515
|
}
|
|
521
516
|
function loadSync(input) {
|
|
522
517
|
const manager = useLoader();
|
|
523
518
|
if (typeof input === 'string') {
|
|
524
519
|
return manager.executeSync(input);
|
|
525
520
|
}
|
|
526
|
-
return manager.executeSync(
|
|
521
|
+
return manager.executeSync(buildFilePath(input));
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
function getExportItem(data, filterFn) {
|
|
525
|
+
if (filterFn) {
|
|
526
|
+
const keys = Object.keys(data);
|
|
527
|
+
for(let i = 0; i < keys.length; i++){
|
|
528
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
529
|
+
return {
|
|
530
|
+
key: keys[i],
|
|
531
|
+
value: data[keys[i]]
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
throw new ebec.BaseError('Cannot find specific module export.');
|
|
536
|
+
}
|
|
537
|
+
return {
|
|
538
|
+
key: 'default',
|
|
539
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
540
|
+
};
|
|
527
541
|
}
|
|
528
542
|
|
|
529
543
|
exports.JSONLoader = JSONLoader;
|
|
530
544
|
exports.LoaderManager = LoaderManager;
|
|
531
545
|
exports.ModuleLoader = ModuleLoader;
|
|
532
|
-
exports.
|
|
546
|
+
exports.buildFilePath = buildFilePath;
|
|
547
|
+
exports.buildFilePathWithoutExtension = buildFilePathWithoutExtension;
|
|
533
548
|
exports.buildLocatorOptions = buildLocatorOptions;
|
|
534
549
|
exports.getExportItem = getExportItem;
|
|
535
|
-
exports.
|
|
550
|
+
exports.handleException = handleException;
|
|
536
551
|
exports.hasOwnProperty = hasOwnProperty;
|
|
537
552
|
exports.hasStringProperty = hasStringProperty;
|
|
538
553
|
exports.isFilePath = isFilePath;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/to-array.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/utils.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/* istanbul ignore next */\nexport function handleFileLoadError(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n if (typeof e === 'string') {\n throw new Error(e);\n }\n\n throw new Error('Cannot determine file loading error.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n if (input.includes('.')) {\n const position = input.lastIndexOf('.');\n const extension = input.substring(\n position,\n input.length,\n );\n\n if (\n typeof extensions === 'undefined' ||\n extensions.indexOf(extension) !== -1\n ) {\n input = input.substring(0, position);\n }\n }\n\n return input;\n}\n","export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function isFilePath(input: string) {\n const info = path.parse(input);\n return info.ext !== '';\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport 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 path from 'node:path';\nimport type { LocatorInfo } from '../locator';\nimport { pathToLocatorInfo } from '../locator';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function buildLoaderFilePath(input: LocatorInfo | string, withExtension?: boolean) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n if (\n withExtension &&\n info.extension\n ) {\n return path.join(info.path, info.name) + info.extension;\n }\n\n return path.join(info.path, info.name);\n}\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport { pathToLocatorInfo } from '../../../locator';\nimport { handleFileLoadError, hasStringProperty, isObject } from '../../../utils';\nimport type { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\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 let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleFileLoadError(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { handleFileLoadError } from '../../../utils';\nimport type { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isFilePath, pathToLocatorInfo } from '../locator';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildLoaderFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* 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 type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildLoaderFilePath(input, true));\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(buildLoaderFilePath(input, true));\n}\n"],"names":["handleFileLoadError","e","Error","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","toArray","options","buildLocatorOptions","path","push","process","cwd","ignore","isFilePath","info","parse","ext","pathToLocatorInfo","skipResolve","isAbsolute","resolve","dir","split","join","sep","name","locateMany","pattern","patterns","items","i","j","files","glob","absolute","nodir","k","locate","element","shift","undefined","locateManySync","globSync","locateSync","buildLoaderFilePath","withExtension","getExportItem","data","filterFn","keys","key","value","BaseError","default","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","ModuleLoader","execute","output","load","loadSync","jiti","executeSync","locatorInfo","filePath","withFilePrefix","pathToFileURL","href","require","code","message","stack","constructor","createJITI","JSONLoader","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager"],"mappings":"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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","../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';\nimport type { LocatorInfo } from '../locator';\nimport { pathToLocatorInfo } from '../locator';\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 path from 'node:path';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function isFilePath(input: string) {\n const info = path.parse(input);\n return info.ext !== '';\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport 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 { pathToLocatorInfo } from '../../../locator';\nimport {\n buildFilePath, buildFilePathWithoutExtension, handleException, hasStringProperty, 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 const locatorInfo = this.buildLocatorInfo(data);\n\n options = options || {};\n\n let filePath : string;\n if (options.withExtension) {\n filePath = buildFilePath(locatorInfo);\n } else {\n filePath = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n const locatorInfo = this.buildLocatorInfo(data);\n\n options = options || {};\n\n let filePath : string;\n if (options.withExtension) {\n filePath = buildFilePath(locatorInfo);\n } else {\n filePath = buildFilePathWithoutExtension(locatorInfo);\n }\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private buildLocatorInfo(input: LocatorInfo | string) : LocatorInfo {\n if (typeof input === 'string') {\n return pathToLocatorInfo(input);\n }\n\n return input;\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, 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 { isFilePath, pathToLocatorInfo } from '../locator';\nimport { buildFilePath } 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 type { LocatorInfo } from '../locator';\nimport { buildFilePath } from '../utils';\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","buildFilePath","path","join","name","buildFilePathWithoutExtension","info","pathToLocatorInfo","options","buildLocatorOptions","push","process","cwd","ignore","isFilePath","parse","ext","skipResolve","isAbsolute","resolve","dir","split","sep","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","buildLocatorInfo","filePath","withExtension","withFilePrefix","pathToFileURL","href","require","code","BaseError","constructor","createJITI","JSONLoader","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager","getExportItem","filterFn","keys","key","value","default"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -12,19 +12,36 @@ import __cjs_mod__ from 'module';
|
|
|
12
12
|
const __filename = __cjs_url__.fileURLToPath(import.meta.url);
|
|
13
13
|
const __dirname = __cjs_path__.dirname(__filename);
|
|
14
14
|
const require = __cjs_mod__.createRequire(import.meta.url);
|
|
15
|
+
function hasOwnProperty(obj, prop) {
|
|
16
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
}
|
|
18
|
+
function hasStringProperty(obj, prop) {
|
|
19
|
+
return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';
|
|
20
|
+
}
|
|
21
|
+
|
|
15
22
|
/*
|
|
16
23
|
* Copyright (c) 2022.
|
|
17
24
|
* Author Peter Placzek (tada5hi)
|
|
18
25
|
* For the full copyright and license information,
|
|
19
26
|
* view the LICENSE file that was distributed with this source code.
|
|
20
|
-
*/
|
|
27
|
+
*/ function isObject(item) {
|
|
28
|
+
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function handleException(e) {
|
|
21
32
|
if (e instanceof Error) {
|
|
22
33
|
throw e;
|
|
23
34
|
}
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
const error = new Error('Can not process thrown exception.');
|
|
36
|
+
if (isObject(e)) {
|
|
37
|
+
if (hasOwnProperty(e, 'message') && typeof e.message === 'string') {
|
|
38
|
+
error.message = e.message;
|
|
39
|
+
}
|
|
40
|
+
if (hasOwnProperty(e, 'stack') && typeof e.stack === 'string') {
|
|
41
|
+
error.stack = e.stack;
|
|
42
|
+
}
|
|
26
43
|
}
|
|
27
|
-
throw
|
|
44
|
+
throw error;
|
|
28
45
|
}
|
|
29
46
|
|
|
30
47
|
/*
|
|
@@ -43,22 +60,6 @@ const require = __cjs_mod__.createRequire(import.meta.url);
|
|
|
43
60
|
return input;
|
|
44
61
|
}
|
|
45
62
|
|
|
46
|
-
function hasOwnProperty(obj, prop) {
|
|
47
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
48
|
-
}
|
|
49
|
-
function hasStringProperty(obj, prop) {
|
|
50
|
-
return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/*
|
|
54
|
-
* Copyright (c) 2022.
|
|
55
|
-
* Author Peter Placzek (tada5hi)
|
|
56
|
-
* For the full copyright and license information,
|
|
57
|
-
* view the LICENSE file that was distributed with this source code.
|
|
58
|
-
*/ function isObject(item) {
|
|
59
|
-
return !!item && typeof item === 'object' && !Array.isArray(item);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
63
|
/*
|
|
63
64
|
* Copyright (c) 2022.
|
|
64
65
|
* Author Peter Placzek (tada5hi)
|
|
@@ -70,6 +71,25 @@ function hasStringProperty(obj, prop) {
|
|
|
70
71
|
];
|
|
71
72
|
}
|
|
72
73
|
|
|
74
|
+
function buildFilePath(input) {
|
|
75
|
+
if (typeof input === 'string') {
|
|
76
|
+
return input;
|
|
77
|
+
}
|
|
78
|
+
if (input.extension) {
|
|
79
|
+
return path.join(input.path, input.name) + input.extension;
|
|
80
|
+
}
|
|
81
|
+
return path.join(input.path, input.name);
|
|
82
|
+
}
|
|
83
|
+
function buildFilePathWithoutExtension(input) {
|
|
84
|
+
let info;
|
|
85
|
+
if (typeof input === 'string') {
|
|
86
|
+
info = pathToLocatorInfo(input);
|
|
87
|
+
} else {
|
|
88
|
+
info = input;
|
|
89
|
+
}
|
|
90
|
+
return path.join(info.path, info.name);
|
|
91
|
+
}
|
|
92
|
+
|
|
73
93
|
/*
|
|
74
94
|
* Copyright (c) 2022.
|
|
75
95
|
* Author Peter Placzek (tada5hi)
|
|
@@ -188,37 +208,6 @@ function locateSync(pattern, options) {
|
|
|
188
208
|
return undefined;
|
|
189
209
|
}
|
|
190
210
|
|
|
191
|
-
function buildLoaderFilePath(input, withExtension) {
|
|
192
|
-
let info;
|
|
193
|
-
if (typeof input === 'string') {
|
|
194
|
-
info = pathToLocatorInfo(input);
|
|
195
|
-
} else {
|
|
196
|
-
info = input;
|
|
197
|
-
}
|
|
198
|
-
if (withExtension && info.extension) {
|
|
199
|
-
return path.join(info.path, info.name) + info.extension;
|
|
200
|
-
}
|
|
201
|
-
return path.join(info.path, info.name);
|
|
202
|
-
}
|
|
203
|
-
function getExportItem(data, filterFn) {
|
|
204
|
-
if (filterFn) {
|
|
205
|
-
const keys = Object.keys(data);
|
|
206
|
-
for(let i = 0; i < keys.length; i++){
|
|
207
|
-
if (filterFn(keys[i], data[keys[i]])) {
|
|
208
|
-
return {
|
|
209
|
-
key: keys[i],
|
|
210
|
-
value: data[keys[i]]
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
throw new BaseError('Cannot find specific module export.');
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
key: 'default',
|
|
218
|
-
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
211
|
/*
|
|
223
212
|
* Copyright (c) 2022.
|
|
224
213
|
* Author Peter Placzek (tada5hi)
|
|
@@ -260,14 +249,14 @@ class ModuleLoader {
|
|
|
260
249
|
}
|
|
261
250
|
// ---------------------------------------------------------------------------
|
|
262
251
|
async load(data, options) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
252
|
+
const locatorInfo = this.buildLocatorInfo(data);
|
|
253
|
+
options = options || {};
|
|
254
|
+
let filePath;
|
|
255
|
+
if (options.withExtension) {
|
|
256
|
+
filePath = buildFilePath(locatorInfo);
|
|
266
257
|
} else {
|
|
267
|
-
|
|
258
|
+
filePath = buildFilePathWithoutExtension(locatorInfo);
|
|
268
259
|
}
|
|
269
|
-
options = options || {};
|
|
270
|
-
let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);
|
|
271
260
|
if (options.withFilePrefix) {
|
|
272
261
|
filePath = pathToFileURL(filePath).href;
|
|
273
262
|
}
|
|
@@ -299,18 +288,18 @@ class ModuleLoader {
|
|
|
299
288
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
300
289
|
});
|
|
301
290
|
}
|
|
302
|
-
/* istanbul ignore next */ return
|
|
291
|
+
/* istanbul ignore next */ return handleException(e);
|
|
303
292
|
}
|
|
304
293
|
}
|
|
305
294
|
loadSync(data, options) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
295
|
+
const locatorInfo = this.buildLocatorInfo(data);
|
|
296
|
+
options = options || {};
|
|
297
|
+
let filePath;
|
|
298
|
+
if (options.withExtension) {
|
|
299
|
+
filePath = buildFilePath(locatorInfo);
|
|
309
300
|
} else {
|
|
310
|
-
|
|
301
|
+
filePath = buildFilePathWithoutExtension(locatorInfo);
|
|
311
302
|
}
|
|
312
|
-
options = options || {};
|
|
313
|
-
const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);
|
|
314
303
|
try {
|
|
315
304
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
316
305
|
return require(filePath);
|
|
@@ -328,8 +317,14 @@ class ModuleLoader {
|
|
|
328
317
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
329
318
|
});
|
|
330
319
|
}
|
|
331
|
-
return
|
|
320
|
+
return handleException(e);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
buildLocatorInfo(input) {
|
|
324
|
+
if (typeof input === 'string') {
|
|
325
|
+
return pathToLocatorInfo(input);
|
|
332
326
|
}
|
|
327
|
+
return input;
|
|
333
328
|
}
|
|
334
329
|
constructor(){
|
|
335
330
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -349,21 +344,21 @@ class ModuleLoader {
|
|
|
349
344
|
|
|
350
345
|
class JSONLoader {
|
|
351
346
|
async execute(input) {
|
|
352
|
-
const filePath =
|
|
347
|
+
const filePath = buildFilePath(input);
|
|
353
348
|
try {
|
|
354
349
|
const file = await fs.promises.readFile(filePath);
|
|
355
350
|
return JSON.parse(file.toString('utf-8'));
|
|
356
351
|
} catch (e) {
|
|
357
|
-
return
|
|
352
|
+
return handleException(e);
|
|
358
353
|
}
|
|
359
354
|
}
|
|
360
355
|
executeSync(input) {
|
|
361
|
-
const filePath =
|
|
356
|
+
const filePath = buildFilePath(input);
|
|
362
357
|
try {
|
|
363
358
|
const file = fs.readFileSync(filePath);
|
|
364
359
|
return JSON.parse(file.toString('utf-8'));
|
|
365
360
|
} catch (e) {
|
|
366
|
-
return
|
|
361
|
+
return handleException(e);
|
|
367
362
|
}
|
|
368
363
|
}
|
|
369
364
|
}
|
|
@@ -419,7 +414,7 @@ class LoaderManager {
|
|
|
419
414
|
if (test.indexOf(info.extension) !== -1) {
|
|
420
415
|
return this.rules[i].loader;
|
|
421
416
|
}
|
|
422
|
-
} else if (test.test(
|
|
417
|
+
} else if (test.test(buildFilePath(info))) {
|
|
423
418
|
return this.rules[i].loader;
|
|
424
419
|
}
|
|
425
420
|
}
|
|
@@ -521,15 +516,34 @@ async function load(input) {
|
|
|
521
516
|
if (typeof input === 'string') {
|
|
522
517
|
return manager.execute(input);
|
|
523
518
|
}
|
|
524
|
-
return manager.execute(
|
|
519
|
+
return manager.execute(buildFilePath(input));
|
|
525
520
|
}
|
|
526
521
|
function loadSync(input) {
|
|
527
522
|
const manager = useLoader();
|
|
528
523
|
if (typeof input === 'string') {
|
|
529
524
|
return manager.executeSync(input);
|
|
530
525
|
}
|
|
531
|
-
return manager.executeSync(
|
|
526
|
+
return manager.executeSync(buildFilePath(input));
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
function getExportItem(data, filterFn) {
|
|
530
|
+
if (filterFn) {
|
|
531
|
+
const keys = Object.keys(data);
|
|
532
|
+
for(let i = 0; i < keys.length; i++){
|
|
533
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
534
|
+
return {
|
|
535
|
+
key: keys[i],
|
|
536
|
+
value: data[keys[i]]
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
throw new BaseError('Cannot find specific module export.');
|
|
541
|
+
}
|
|
542
|
+
return {
|
|
543
|
+
key: 'default',
|
|
544
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
545
|
+
};
|
|
532
546
|
}
|
|
533
547
|
|
|
534
|
-
export { JSONLoader, LoaderManager, ModuleLoader,
|
|
548
|
+
export { JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, getExportItem, handleException, hasOwnProperty, hasStringProperty, isFilePath, isJestRuntimeEnvironment, isObject, isTsNodeRuntimeEnvironment, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray };
|
|
535
549
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/to-array.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/utils.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/* istanbul ignore next */\nexport function handleFileLoadError(e: unknown) : void {\n if (e instanceof Error) {\n throw e;\n }\n\n if (typeof e === 'string') {\n throw new Error(e);\n }\n\n throw new Error('Cannot determine file loading error.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n if (input.includes('.')) {\n const position = input.lastIndexOf('.');\n const extension = input.substring(\n position,\n input.length,\n );\n\n if (\n typeof extensions === 'undefined' ||\n extensions.indexOf(extension) !== -1\n ) {\n input = input.substring(0, position);\n }\n }\n\n return input;\n}\n","export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function isFilePath(input: string) {\n const info = path.parse(input);\n return info.ext !== '';\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport 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 path from 'node:path';\nimport type { LocatorInfo } from '../locator';\nimport { pathToLocatorInfo } from '../locator';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function buildLoaderFilePath(input: LocatorInfo | string, withExtension?: boolean) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n if (\n withExtension &&\n info.extension\n ) {\n return path.join(info.path, info.name) + info.extension;\n }\n\n return path.join(info.path, info.name);\n}\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport { pathToLocatorInfo } from '../../../locator';\nimport { handleFileLoadError, hasStringProperty, isObject } from '../../../utils';\nimport type { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\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 let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n let filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleFileLoadError(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n let locatorInfo : LocatorInfo;\n\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n options = options || {};\n\n const filePath = buildLoaderFilePath(locatorInfo, options.withExtension);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { handleFileLoadError } from '../../../utils';\nimport type { Loader } from '../../type';\nimport { buildLoaderFilePath } from '../../utils';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildLoaderFilePath(input, true);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleFileLoadError(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isFilePath, pathToLocatorInfo } from '../locator';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildLoaderFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* 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 type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\nimport { buildLoaderFilePath } from './utils';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildLoaderFilePath(input, true));\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(buildLoaderFilePath(input, true));\n}\n"],"names":["input","options","name","extension","pattern","absolute","cwd","nodir","ignore","items","info","value","output","executeSync","locatorInfo","withExtension","withFilePrefix","code","message","stack","LoaderId","test","loader","findLoader","instance","manager"],"mappings":";;;;;;;;;;;;;;AAAA;;;;;AAKC;AAIG;AACI;;;;;;AAQR;;AClBA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACbA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACTA;;;;;;AAWO;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;;AAGJ;AAEO;;;AAGP;AAEO;AAIH;AAIID;;;;;AAOAE;AACAC;AACJ;AACJ;;ACrCO;AAIHF;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AAIHP;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACtDO;;;AAICE;;;;;;;AAYJ;AACJ;AAEO;AAIH;;AAEI;;;;AAIYC;AACJ;;AAER;;;;;AAOAA;AACJ;AACJ;;ACvDA;;;;;;AAQI;AAEJ;AAEO;;;AAGH;AACJ;;ACGO;;;;AAeKC;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;;;;AAKI;;AAEA;;AAGJ;;AAIA;;;AAOQC;;;;AAKJb;AAEA;;;;;;;AAQI;;AAEI;;;AAIR;AACI;AAKI;AAOI;AACI;AACAc;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;AAGJ;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;;;AASQL;;;;AAKJb;AAEA;;;AAII;AACJ;AACI;AAKI;AAOI;AACI;AACAc;AACJ;;AAGJ;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;;;AA5JI;;AACiB;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AAC9D;AACJ;AA0JJ;;AC1KO;;;;AAKK;AACA;AACJ;AACI;AACJ;AACJ;AAEAN;;;;AAKQ;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;;;;AAKA;AACJ;AAEO;AACH;;;;AAKA;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","../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';\nimport type { LocatorInfo } from '../locator';\nimport { pathToLocatorInfo } from '../locator';\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 path from 'node:path';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { toArray } from '../utils';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function isFilePath(input: string) {\n const info = path.parse(input);\n return info.ext !== '';\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport 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 { pathToLocatorInfo } from '../../../locator';\nimport {\n buildFilePath, buildFilePathWithoutExtension, handleException, hasStringProperty, 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 const locatorInfo = this.buildLocatorInfo(data);\n\n options = options || {};\n\n let filePath : string;\n if (options.withExtension) {\n filePath = buildFilePath(locatorInfo);\n } else {\n filePath = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n filePath = pathToFileURL(filePath).href;\n }\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n }\n\n return await import(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n const locatorInfo = this.buildLocatorInfo(data);\n\n options = options || {};\n\n let filePath : string;\n if (options.withExtension) {\n filePath = buildFilePath(locatorInfo);\n } else {\n filePath = buildFilePathWithoutExtension(locatorInfo);\n }\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(filePath);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private buildLocatorInfo(input: LocatorInfo | string) : LocatorInfo {\n if (typeof input === 'string') {\n return pathToLocatorInfo(input);\n }\n\n return input;\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, 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 { isFilePath, pathToLocatorInfo } from '../locator';\nimport { buildFilePath } 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 type { LocatorInfo } from '../locator';\nimport { buildFilePath } from '../utils';\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","info","options","name","extension","pattern","absolute","cwd","nodir","ignore","items","output","executeSync","filePath","withExtension","withFilePrefix","code","message","stack","buildLocatorInfo","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;;ACCO;;;;;;;AASH;AACJ;AAEO;;;AAICC;;;;AAKJ;AACJ;;AChCA;;;;;;AAWO;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;;AAGJ;AAEO;;;AAGP;AAEO;AAIH;AAIIF;;;;;AAOAG;AACAC;AACJ;AACJ;;ACrCO;AAIHF;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AAIHP;AAEA;AAEKG;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHR;AAEA;AAEKG;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACpEA;;;;;;AAQI;AAEJ;AAEO;;;AAGH;AACJ;;ACIO;;;;AAeKE;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;;;;AAKI;;AAEA;;AAGJ;;AAIA;AAII;AAEAV;;;AAIIW;;AAEAA;;;;;;;;AAUA;;AAEI;;;AAIR;AACI;AAKI;AAOI;AACI;AACAC;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;AAGJ;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;AAMI;AAEAhB;;;AAIIW;;AAEAA;;;;AAKA;AACJ;AACI;AAKI;AAOI;AACI;AACAC;AACJ;;AAGJ;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;AAEQC;;AAEA;;;AAIR;;;;AAnKI;;AACiB;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AAC9D;AACJ;AAiKJ;;ACnLO;;AAEC;;AAGI;AACA;AACJ;AACI;AACJ;AACJ;AAEAP;AACI;;;AAII;AACJ;AACI;AACJ;AACJ;AACJ;;ACjCA;;;;;;;AAOYQ;AAAAA;;;ACOL;;;AAwBK;AAAkBC;AAAMC;AAAO;AAC/B;;AAGJ;AACJ;;AAGI;AACA;AACI;;;AAIJ;;AAEJ;AAEAV;AACI;AACA;AACI;;;AAIJ;;AAEJ;AAEAW;;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;;"}
|
|
@@ -9,4 +9,5 @@ export declare class ModuleLoader implements Loader {
|
|
|
9
9
|
executeSync(input: string): any;
|
|
10
10
|
load(data: LocatorInfo | string, options?: ScriptFileLoadOptions): Promise<unknown>;
|
|
11
11
|
loadSync(data: LocatorInfo | string, options?: ScriptFileLoadOptions): unknown;
|
|
12
|
+
private buildLocatorInfo;
|
|
12
13
|
}
|
package/dist/loader/utils.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import type { LocatorInfo } from '../locator';
|
|
2
1
|
import type { LoaderFilterFn, ScriptFileExportItem } from './built-in';
|
|
3
|
-
export declare function buildLoaderFilePath(input: LocatorInfo | string, withExtension?: boolean): string;
|
|
4
2
|
export declare function getExportItem(data: Record<string, any>, filterFn?: LoaderFilterFn): ScriptFileExportItem;
|
package/dist/utils/error.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function handleException(e: unknown): void;
|
package/dist/utils/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locter",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "A library to locate a file/module by criteria and load it!",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Peter Placzek",
|
|
@@ -57,21 +57,21 @@
|
|
|
57
57
|
"@semantic-release/github": "^8.0.7",
|
|
58
58
|
"@semantic-release/npm": "^9.0.1",
|
|
59
59
|
"@semantic-release/release-notes-generator": "^10.0.3",
|
|
60
|
-
"@swc/core": "^1.3.
|
|
60
|
+
"@swc/core": "^1.3.37",
|
|
61
61
|
"@swc/jest": "^0.2.24",
|
|
62
62
|
"@tada5hi/commitlint-config": "^1.0.0",
|
|
63
63
|
"@tada5hi/eslint-config-typescript": "^1.1.4",
|
|
64
64
|
"@tada5hi/tsconfig": "^0.4.0",
|
|
65
65
|
"@types/jest": "^27.5.2",
|
|
66
|
-
"@types/node": "^18.14.
|
|
66
|
+
"@types/node": "^18.14.5",
|
|
67
67
|
"cross-env": "^7.0.3",
|
|
68
|
-
"eslint": "^8.
|
|
68
|
+
"eslint": "^8.35.0",
|
|
69
69
|
"husky": "^8.0.3",
|
|
70
70
|
"jest": "^27.5.1",
|
|
71
|
-
"magic-string": "^0.
|
|
71
|
+
"magic-string": "^0.30.0",
|
|
72
72
|
"mlly": "^1.1.1",
|
|
73
|
-
"rimraf": "^4.
|
|
74
|
-
"rollup": "^3.
|
|
73
|
+
"rimraf": "^4.2.0",
|
|
74
|
+
"rollup": "^3.18.0",
|
|
75
75
|
"semantic-release": "^19.0.5",
|
|
76
76
|
"sourcemap-codec": "^1.4.8",
|
|
77
77
|
"typescript": "^4.9.5"
|