locter 1.0.6 → 1.0.8
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 +130 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +127 -101
- 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/locator/utils.d.ts +3 -1
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/file-path.d.ts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +8 -8
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,11 @@ function hasStringProperty(obj, prop) {
|
|
|
65
66
|
];
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
function isFilePath(input) {
|
|
70
|
+
const extension = path.extname(input);
|
|
71
|
+
return extension && extension !== '';
|
|
72
|
+
}
|
|
73
|
+
|
|
68
74
|
/*
|
|
69
75
|
* Copyright (c) 2022.
|
|
70
76
|
* Author Peter Placzek (tada5hi)
|
|
@@ -81,10 +87,6 @@ function buildLocatorOptions(options) {
|
|
|
81
87
|
(_options = options).ignore ?? (_options.ignore = []);
|
|
82
88
|
return options;
|
|
83
89
|
}
|
|
84
|
-
function isFilePath(input) {
|
|
85
|
-
const info = path.parse(input);
|
|
86
|
-
return info.ext !== '';
|
|
87
|
-
}
|
|
88
90
|
function pathToLocatorInfo(input, skipResolve) {
|
|
89
91
|
if (!skipResolve && !path.isAbsolute(input)) {
|
|
90
92
|
input = path.resolve(process.cwd(), input);
|
|
@@ -96,6 +98,27 @@ function pathToLocatorInfo(input, skipResolve) {
|
|
|
96
98
|
extension: info.ext
|
|
97
99
|
};
|
|
98
100
|
}
|
|
101
|
+
function isLocatorInfo(input) {
|
|
102
|
+
return isObject(input) && typeof input.path === 'string' && typeof input.name === 'string' && typeof input.extension === 'string';
|
|
103
|
+
}
|
|
104
|
+
function buildFilePath(input) {
|
|
105
|
+
if (typeof input === 'string') {
|
|
106
|
+
return input;
|
|
107
|
+
}
|
|
108
|
+
if (input.extension) {
|
|
109
|
+
return path.join(input.path, input.name) + input.extension;
|
|
110
|
+
}
|
|
111
|
+
return path.join(input.path, input.name);
|
|
112
|
+
}
|
|
113
|
+
function buildFilePathWithoutExtension(input) {
|
|
114
|
+
let info;
|
|
115
|
+
if (typeof input === 'string') {
|
|
116
|
+
info = pathToLocatorInfo(input);
|
|
117
|
+
} else {
|
|
118
|
+
info = input;
|
|
119
|
+
}
|
|
120
|
+
return path.join(info.path, info.name);
|
|
121
|
+
}
|
|
99
122
|
|
|
100
123
|
async function locateMany(pattern, options) {
|
|
101
124
|
options = buildLocatorOptions(options);
|
|
@@ -183,37 +206,6 @@ function locateSync(pattern, options) {
|
|
|
183
206
|
return undefined;
|
|
184
207
|
}
|
|
185
208
|
|
|
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
209
|
/*
|
|
218
210
|
* Copyright (c) 2022.
|
|
219
211
|
* Author Peter Placzek (tada5hi)
|
|
@@ -255,38 +247,31 @@ class ModuleLoader {
|
|
|
255
247
|
}
|
|
256
248
|
// ---------------------------------------------------------------------------
|
|
257
249
|
async load(data, options) {
|
|
258
|
-
let locatorInfo;
|
|
259
|
-
if (typeof data === 'string') {
|
|
260
|
-
locatorInfo = pathToLocatorInfo(data);
|
|
261
|
-
} else {
|
|
262
|
-
locatorInfo = data;
|
|
263
|
-
}
|
|
264
250
|
options = options || {};
|
|
265
|
-
|
|
266
|
-
if (options.withFilePrefix) {
|
|
267
|
-
filePath = node_url.pathToFileURL(filePath).href;
|
|
268
|
-
}
|
|
251
|
+
const [name, locatorInfo] = this.build(data, options);
|
|
269
252
|
try {
|
|
270
253
|
// segmentation fault
|
|
271
254
|
// issue: https://github.com/nodejs/node/issues/35889
|
|
272
255
|
if (isJestRuntimeEnvironment()) {
|
|
273
256
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
274
|
-
return require(
|
|
257
|
+
return require(name);
|
|
275
258
|
}
|
|
276
|
-
return await import(
|
|
259
|
+
return await import(name);
|
|
277
260
|
} catch (e) {
|
|
278
261
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
279
|
-
if (
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
262
|
+
if (locatorInfo) {
|
|
263
|
+
if (!options.withExtension && (e.code === 'ERR_MODULE_NOT_FOUND' || e.code === 'MODULE_NOT_FOUND')) {
|
|
264
|
+
return this.load(locatorInfo, {
|
|
265
|
+
...options,
|
|
266
|
+
withExtension: true
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
if (!options.withFilePrefix && (e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' || e.code === 'UNSUPPORTED_ESM_URL_SCHEME')) {
|
|
270
|
+
return this.load(locatorInfo, {
|
|
271
|
+
...options,
|
|
272
|
+
withFilePrefix: true
|
|
273
|
+
});
|
|
274
|
+
}
|
|
290
275
|
}
|
|
291
276
|
throw new ebec.BaseError({
|
|
292
277
|
code: e.code,
|
|
@@ -294,28 +279,24 @@ class ModuleLoader {
|
|
|
294
279
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
295
280
|
});
|
|
296
281
|
}
|
|
297
|
-
/* istanbul ignore next */ return
|
|
282
|
+
/* istanbul ignore next */ return handleException(e);
|
|
298
283
|
}
|
|
299
284
|
}
|
|
300
285
|
loadSync(data, options) {
|
|
301
|
-
let locatorInfo;
|
|
302
|
-
if (typeof data === 'string') {
|
|
303
|
-
locatorInfo = pathToLocatorInfo(data);
|
|
304
|
-
} else {
|
|
305
|
-
locatorInfo = data;
|
|
306
|
-
}
|
|
307
286
|
options = options || {};
|
|
308
|
-
const
|
|
287
|
+
const [name, locatorInfo] = this.build(data, options);
|
|
309
288
|
try {
|
|
310
289
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
311
|
-
return require(
|
|
290
|
+
return require(name);
|
|
312
291
|
} catch (e) {
|
|
313
292
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
314
|
-
if (
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
293
|
+
if (locatorInfo) {
|
|
294
|
+
if (!options.withExtension && (e.code === 'ERR_MODULE_NOT_FOUND' || e.code === 'MODULE_NOT_FOUND')) {
|
|
295
|
+
return this.loadSync(locatorInfo, {
|
|
296
|
+
...options,
|
|
297
|
+
withExtension: true
|
|
298
|
+
});
|
|
299
|
+
}
|
|
319
300
|
}
|
|
320
301
|
throw new ebec.BaseError({
|
|
321
302
|
code: e.code,
|
|
@@ -323,9 +304,35 @@ class ModuleLoader {
|
|
|
323
304
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
324
305
|
});
|
|
325
306
|
}
|
|
326
|
-
return
|
|
307
|
+
return handleException(e);
|
|
327
308
|
}
|
|
328
309
|
}
|
|
310
|
+
build(data, options) {
|
|
311
|
+
let name;
|
|
312
|
+
let locatorInfo;
|
|
313
|
+
options = options || {};
|
|
314
|
+
if (isLocatorInfo(data) || isFilePath(data)) {
|
|
315
|
+
if (typeof data === 'string') {
|
|
316
|
+
locatorInfo = pathToLocatorInfo(data);
|
|
317
|
+
} else {
|
|
318
|
+
locatorInfo = data;
|
|
319
|
+
}
|
|
320
|
+
if (options.withExtension) {
|
|
321
|
+
name = buildFilePath(locatorInfo);
|
|
322
|
+
} else {
|
|
323
|
+
name = buildFilePathWithoutExtension(locatorInfo);
|
|
324
|
+
}
|
|
325
|
+
if (options.withFilePrefix) {
|
|
326
|
+
name = node_url.pathToFileURL(name).href;
|
|
327
|
+
}
|
|
328
|
+
} else {
|
|
329
|
+
name = data;
|
|
330
|
+
}
|
|
331
|
+
return [
|
|
332
|
+
name,
|
|
333
|
+
locatorInfo
|
|
334
|
+
];
|
|
335
|
+
}
|
|
329
336
|
constructor(){
|
|
330
337
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
331
338
|
// @ts-ignore
|
|
@@ -344,21 +351,21 @@ class ModuleLoader {
|
|
|
344
351
|
|
|
345
352
|
class JSONLoader {
|
|
346
353
|
async execute(input) {
|
|
347
|
-
const filePath =
|
|
354
|
+
const filePath = buildFilePath(input);
|
|
348
355
|
try {
|
|
349
356
|
const file = await fs.promises.readFile(filePath);
|
|
350
357
|
return JSON.parse(file.toString('utf-8'));
|
|
351
358
|
} catch (e) {
|
|
352
|
-
return
|
|
359
|
+
return handleException(e);
|
|
353
360
|
}
|
|
354
361
|
}
|
|
355
362
|
executeSync(input) {
|
|
356
|
-
const filePath =
|
|
363
|
+
const filePath = buildFilePath(input);
|
|
357
364
|
try {
|
|
358
365
|
const file = fs.readFileSync(filePath);
|
|
359
366
|
return JSON.parse(file.toString('utf-8'));
|
|
360
367
|
} catch (e) {
|
|
361
|
-
return
|
|
368
|
+
return handleException(e);
|
|
362
369
|
}
|
|
363
370
|
}
|
|
364
371
|
}
|
|
@@ -414,7 +421,7 @@ class LoaderManager {
|
|
|
414
421
|
if (test.indexOf(info.extension) !== -1) {
|
|
415
422
|
return this.rules[i].loader;
|
|
416
423
|
}
|
|
417
|
-
} else if (test.test(
|
|
424
|
+
} else if (test.test(buildFilePath(info))) {
|
|
418
425
|
return this.rules[i].loader;
|
|
419
426
|
}
|
|
420
427
|
}
|
|
@@ -516,27 +523,48 @@ async function load(input) {
|
|
|
516
523
|
if (typeof input === 'string') {
|
|
517
524
|
return manager.execute(input);
|
|
518
525
|
}
|
|
519
|
-
return manager.execute(
|
|
526
|
+
return manager.execute(buildFilePath(input));
|
|
520
527
|
}
|
|
521
528
|
function loadSync(input) {
|
|
522
529
|
const manager = useLoader();
|
|
523
530
|
if (typeof input === 'string') {
|
|
524
531
|
return manager.executeSync(input);
|
|
525
532
|
}
|
|
526
|
-
return manager.executeSync(
|
|
533
|
+
return manager.executeSync(buildFilePath(input));
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
function getExportItem(data, filterFn) {
|
|
537
|
+
if (filterFn) {
|
|
538
|
+
const keys = Object.keys(data);
|
|
539
|
+
for(let i = 0; i < keys.length; i++){
|
|
540
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
541
|
+
return {
|
|
542
|
+
key: keys[i],
|
|
543
|
+
value: data[keys[i]]
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
throw new ebec.BaseError('Cannot find specific module export.');
|
|
548
|
+
}
|
|
549
|
+
return {
|
|
550
|
+
key: 'default',
|
|
551
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
552
|
+
};
|
|
527
553
|
}
|
|
528
554
|
|
|
529
555
|
exports.JSONLoader = JSONLoader;
|
|
530
556
|
exports.LoaderManager = LoaderManager;
|
|
531
557
|
exports.ModuleLoader = ModuleLoader;
|
|
532
|
-
exports.
|
|
558
|
+
exports.buildFilePath = buildFilePath;
|
|
559
|
+
exports.buildFilePathWithoutExtension = buildFilePathWithoutExtension;
|
|
533
560
|
exports.buildLocatorOptions = buildLocatorOptions;
|
|
534
561
|
exports.getExportItem = getExportItem;
|
|
535
|
-
exports.
|
|
562
|
+
exports.handleException = handleException;
|
|
536
563
|
exports.hasOwnProperty = hasOwnProperty;
|
|
537
564
|
exports.hasStringProperty = hasStringProperty;
|
|
538
565
|
exports.isFilePath = isFilePath;
|
|
539
566
|
exports.isJestRuntimeEnvironment = isJestRuntimeEnvironment;
|
|
567
|
+
exports.isLocatorInfo = isLocatorInfo;
|
|
540
568
|
exports.isObject = isObject;
|
|
541
569
|
exports.isTsNodeRuntimeEnvironment = isTsNodeRuntimeEnvironment;
|
|
542
570
|
exports.load = load;
|
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';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ScriptFileLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ScriptFileLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n"],"names":["hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","handleException","e","Error","error","message","stack","removeFileNameExtension","input","extensions","includes","position","lastIndexOf","extension","substring","length","indexOf","toArray","isFilePath","path","extname","options","buildLocatorOptions","push","process","cwd","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","pattern","patterns","items","i","j","files","glob","absolute","nodir","k","locate","element","shift","undefined","locateManySync","globSync","locateSync","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","ModuleLoader","execute","output","load","loadSync","jiti","executeSync","data","locatorInfo","build","require","withExtension","code","withFilePrefix","BaseError","pathToFileURL","href","constructor","createJITI","JSONLoader","filePath","file","fs","promises","readFile","JSON","toString","readFileSync","LoaderId","MODULE","LoaderManager","register","test","loader","rules","id","findLoader","loaders","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager","getExportItem","filterFn","keys","key","value","default"],"mappings":"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"}
|
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,11 @@ function hasStringProperty(obj, prop) {
|
|
|
70
71
|
];
|
|
71
72
|
}
|
|
72
73
|
|
|
74
|
+
function isFilePath(input) {
|
|
75
|
+
const extension = path.extname(input);
|
|
76
|
+
return extension && extension !== '';
|
|
77
|
+
}
|
|
78
|
+
|
|
73
79
|
/*
|
|
74
80
|
* Copyright (c) 2022.
|
|
75
81
|
* Author Peter Placzek (tada5hi)
|
|
@@ -86,10 +92,6 @@ function buildLocatorOptions(options) {
|
|
|
86
92
|
(_options = options).ignore ?? (_options.ignore = []);
|
|
87
93
|
return options;
|
|
88
94
|
}
|
|
89
|
-
function isFilePath(input) {
|
|
90
|
-
const info = path.parse(input);
|
|
91
|
-
return info.ext !== '';
|
|
92
|
-
}
|
|
93
95
|
function pathToLocatorInfo(input, skipResolve) {
|
|
94
96
|
if (!skipResolve && !path.isAbsolute(input)) {
|
|
95
97
|
input = path.resolve(process.cwd(), input);
|
|
@@ -101,6 +103,27 @@ function pathToLocatorInfo(input, skipResolve) {
|
|
|
101
103
|
extension: info.ext
|
|
102
104
|
};
|
|
103
105
|
}
|
|
106
|
+
function isLocatorInfo(input) {
|
|
107
|
+
return isObject(input) && typeof input.path === 'string' && typeof input.name === 'string' && typeof input.extension === 'string';
|
|
108
|
+
}
|
|
109
|
+
function buildFilePath(input) {
|
|
110
|
+
if (typeof input === 'string') {
|
|
111
|
+
return input;
|
|
112
|
+
}
|
|
113
|
+
if (input.extension) {
|
|
114
|
+
return path.join(input.path, input.name) + input.extension;
|
|
115
|
+
}
|
|
116
|
+
return path.join(input.path, input.name);
|
|
117
|
+
}
|
|
118
|
+
function buildFilePathWithoutExtension(input) {
|
|
119
|
+
let info;
|
|
120
|
+
if (typeof input === 'string') {
|
|
121
|
+
info = pathToLocatorInfo(input);
|
|
122
|
+
} else {
|
|
123
|
+
info = input;
|
|
124
|
+
}
|
|
125
|
+
return path.join(info.path, info.name);
|
|
126
|
+
}
|
|
104
127
|
|
|
105
128
|
async function locateMany(pattern, options) {
|
|
106
129
|
options = buildLocatorOptions(options);
|
|
@@ -188,37 +211,6 @@ function locateSync(pattern, options) {
|
|
|
188
211
|
return undefined;
|
|
189
212
|
}
|
|
190
213
|
|
|
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
214
|
/*
|
|
223
215
|
* Copyright (c) 2022.
|
|
224
216
|
* Author Peter Placzek (tada5hi)
|
|
@@ -260,38 +252,31 @@ class ModuleLoader {
|
|
|
260
252
|
}
|
|
261
253
|
// ---------------------------------------------------------------------------
|
|
262
254
|
async load(data, options) {
|
|
263
|
-
let locatorInfo;
|
|
264
|
-
if (typeof data === 'string') {
|
|
265
|
-
locatorInfo = pathToLocatorInfo(data);
|
|
266
|
-
} else {
|
|
267
|
-
locatorInfo = data;
|
|
268
|
-
}
|
|
269
255
|
options = options || {};
|
|
270
|
-
|
|
271
|
-
if (options.withFilePrefix) {
|
|
272
|
-
filePath = pathToFileURL(filePath).href;
|
|
273
|
-
}
|
|
256
|
+
const [name, locatorInfo] = this.build(data, options);
|
|
274
257
|
try {
|
|
275
258
|
// segmentation fault
|
|
276
259
|
// issue: https://github.com/nodejs/node/issues/35889
|
|
277
260
|
if (isJestRuntimeEnvironment()) {
|
|
278
261
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
279
|
-
return require(
|
|
262
|
+
return require(name);
|
|
280
263
|
}
|
|
281
|
-
return await import(
|
|
264
|
+
return await import(name);
|
|
282
265
|
} catch (e) {
|
|
283
266
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
267
|
+
if (locatorInfo) {
|
|
268
|
+
if (!options.withExtension && (e.code === 'ERR_MODULE_NOT_FOUND' || e.code === 'MODULE_NOT_FOUND')) {
|
|
269
|
+
return this.load(locatorInfo, {
|
|
270
|
+
...options,
|
|
271
|
+
withExtension: true
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
if (!options.withFilePrefix && (e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' || e.code === 'UNSUPPORTED_ESM_URL_SCHEME')) {
|
|
275
|
+
return this.load(locatorInfo, {
|
|
276
|
+
...options,
|
|
277
|
+
withFilePrefix: true
|
|
278
|
+
});
|
|
279
|
+
}
|
|
295
280
|
}
|
|
296
281
|
throw new BaseError({
|
|
297
282
|
code: e.code,
|
|
@@ -299,28 +284,24 @@ class ModuleLoader {
|
|
|
299
284
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
300
285
|
});
|
|
301
286
|
}
|
|
302
|
-
/* istanbul ignore next */ return
|
|
287
|
+
/* istanbul ignore next */ return handleException(e);
|
|
303
288
|
}
|
|
304
289
|
}
|
|
305
290
|
loadSync(data, options) {
|
|
306
|
-
let locatorInfo;
|
|
307
|
-
if (typeof data === 'string') {
|
|
308
|
-
locatorInfo = pathToLocatorInfo(data);
|
|
309
|
-
} else {
|
|
310
|
-
locatorInfo = data;
|
|
311
|
-
}
|
|
312
291
|
options = options || {};
|
|
313
|
-
const
|
|
292
|
+
const [name, locatorInfo] = this.build(data, options);
|
|
314
293
|
try {
|
|
315
294
|
// eslint-disable-next-line global-require,import/no-dynamic-require
|
|
316
|
-
return require(
|
|
295
|
+
return require(name);
|
|
317
296
|
} catch (e) {
|
|
318
297
|
/* istanbul ignore next */ if (isObject(e) && hasStringProperty(e, 'code')) {
|
|
319
|
-
if (
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
298
|
+
if (locatorInfo) {
|
|
299
|
+
if (!options.withExtension && (e.code === 'ERR_MODULE_NOT_FOUND' || e.code === 'MODULE_NOT_FOUND')) {
|
|
300
|
+
return this.loadSync(locatorInfo, {
|
|
301
|
+
...options,
|
|
302
|
+
withExtension: true
|
|
303
|
+
});
|
|
304
|
+
}
|
|
324
305
|
}
|
|
325
306
|
throw new BaseError({
|
|
326
307
|
code: e.code,
|
|
@@ -328,9 +309,35 @@ class ModuleLoader {
|
|
|
328
309
|
stack: hasStringProperty(e, 'stack') ? e.stack : undefined
|
|
329
310
|
});
|
|
330
311
|
}
|
|
331
|
-
return
|
|
312
|
+
return handleException(e);
|
|
332
313
|
}
|
|
333
314
|
}
|
|
315
|
+
build(data, options) {
|
|
316
|
+
let name;
|
|
317
|
+
let locatorInfo;
|
|
318
|
+
options = options || {};
|
|
319
|
+
if (isLocatorInfo(data) || isFilePath(data)) {
|
|
320
|
+
if (typeof data === 'string') {
|
|
321
|
+
locatorInfo = pathToLocatorInfo(data);
|
|
322
|
+
} else {
|
|
323
|
+
locatorInfo = data;
|
|
324
|
+
}
|
|
325
|
+
if (options.withExtension) {
|
|
326
|
+
name = buildFilePath(locatorInfo);
|
|
327
|
+
} else {
|
|
328
|
+
name = buildFilePathWithoutExtension(locatorInfo);
|
|
329
|
+
}
|
|
330
|
+
if (options.withFilePrefix) {
|
|
331
|
+
name = pathToFileURL(name).href;
|
|
332
|
+
}
|
|
333
|
+
} else {
|
|
334
|
+
name = data;
|
|
335
|
+
}
|
|
336
|
+
return [
|
|
337
|
+
name,
|
|
338
|
+
locatorInfo
|
|
339
|
+
];
|
|
340
|
+
}
|
|
334
341
|
constructor(){
|
|
335
342
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
336
343
|
// @ts-ignore
|
|
@@ -349,21 +356,21 @@ class ModuleLoader {
|
|
|
349
356
|
|
|
350
357
|
class JSONLoader {
|
|
351
358
|
async execute(input) {
|
|
352
|
-
const filePath =
|
|
359
|
+
const filePath = buildFilePath(input);
|
|
353
360
|
try {
|
|
354
361
|
const file = await fs.promises.readFile(filePath);
|
|
355
362
|
return JSON.parse(file.toString('utf-8'));
|
|
356
363
|
} catch (e) {
|
|
357
|
-
return
|
|
364
|
+
return handleException(e);
|
|
358
365
|
}
|
|
359
366
|
}
|
|
360
367
|
executeSync(input) {
|
|
361
|
-
const filePath =
|
|
368
|
+
const filePath = buildFilePath(input);
|
|
362
369
|
try {
|
|
363
370
|
const file = fs.readFileSync(filePath);
|
|
364
371
|
return JSON.parse(file.toString('utf-8'));
|
|
365
372
|
} catch (e) {
|
|
366
|
-
return
|
|
373
|
+
return handleException(e);
|
|
367
374
|
}
|
|
368
375
|
}
|
|
369
376
|
}
|
|
@@ -419,7 +426,7 @@ class LoaderManager {
|
|
|
419
426
|
if (test.indexOf(info.extension) !== -1) {
|
|
420
427
|
return this.rules[i].loader;
|
|
421
428
|
}
|
|
422
|
-
} else if (test.test(
|
|
429
|
+
} else if (test.test(buildFilePath(info))) {
|
|
423
430
|
return this.rules[i].loader;
|
|
424
431
|
}
|
|
425
432
|
}
|
|
@@ -521,15 +528,34 @@ async function load(input) {
|
|
|
521
528
|
if (typeof input === 'string') {
|
|
522
529
|
return manager.execute(input);
|
|
523
530
|
}
|
|
524
|
-
return manager.execute(
|
|
531
|
+
return manager.execute(buildFilePath(input));
|
|
525
532
|
}
|
|
526
533
|
function loadSync(input) {
|
|
527
534
|
const manager = useLoader();
|
|
528
535
|
if (typeof input === 'string') {
|
|
529
536
|
return manager.executeSync(input);
|
|
530
537
|
}
|
|
531
|
-
return manager.executeSync(
|
|
538
|
+
return manager.executeSync(buildFilePath(input));
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
function getExportItem(data, filterFn) {
|
|
542
|
+
if (filterFn) {
|
|
543
|
+
const keys = Object.keys(data);
|
|
544
|
+
for(let i = 0; i < keys.length; i++){
|
|
545
|
+
if (filterFn(keys[i], data[keys[i]])) {
|
|
546
|
+
return {
|
|
547
|
+
key: keys[i],
|
|
548
|
+
value: data[keys[i]]
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
throw new BaseError('Cannot find specific module export.');
|
|
553
|
+
}
|
|
554
|
+
return {
|
|
555
|
+
key: 'default',
|
|
556
|
+
value: hasOwnProperty(data, 'default') ? data.default : data
|
|
557
|
+
};
|
|
532
558
|
}
|
|
533
559
|
|
|
534
|
-
export { JSONLoader, LoaderManager, ModuleLoader,
|
|
560
|
+
export { JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, getExportItem, handleException, hasOwnProperty, hasStringProperty, isFilePath, isJestRuntimeEnvironment, isLocatorInfo, isObject, isTsNodeRuntimeEnvironment, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray };
|
|
535
561
|
//# 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';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ScriptFileLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n // jiti + ts-node\n // issue: https://github.com/nuxt/bridge/issues/228\n if (isTsNodeRuntimeEnvironment()) {\n output = this.loadSync(input);\n } else {\n output = this.jiti(input);\n }\n }\n\n return output;\n }\n\n executeSync(input: string) {\n let output : any;\n\n try {\n output = this.loadSync(input);\n } catch (e) {\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ScriptFileLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ScriptFileLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n\n executeSync(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = fs.readFileSync(filePath);\n return JSON.parse(file.toString('utf-8'));\n } catch (e) {\n return handleException(e);\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum LoaderId {\n MODULE = 'module',\n JSON = 'json',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { JSONLoader, ModuleLoader } from './built-in';\nimport { LoaderId } from './constants';\nimport type { Loader, Rule } from './type';\n\nexport class LoaderManager implements Loader {\n protected loaders : Record<string, Loader>;\n\n protected rules : Rule[];\n\n constructor() {\n this.loaders = {};\n this.rules = [\n {\n test: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n loader: LoaderId.MODULE,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n ];\n }\n\n register(rule: Rule) : void;\n\n register(test: string[] | RegExp, loader: Loader) : void;\n\n register(test: any, loader?: Loader) : void {\n if (typeof loader !== 'undefined') {\n this.rules.push({ test, loader });\n return;\n }\n\n this.rules.push(test);\n }\n\n async execute(input: string) : Promise<any> {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: \"${info.extension}\"`);\n }\n\n const loader = this.resolve(id);\n return loader.execute(input);\n }\n\n executeSync(input: string) : any {\n const id = this.findLoader(input);\n if (!id) {\n const info = pathToLocatorInfo(input);\n throw new Error(`No loader registered for extension: ${info.extension || 'unknown'}`);\n }\n\n const loader = this.resolve(id);\n return loader.executeSync(input);\n }\n\n findLoader(input: string) : Loader | string | undefined {\n if (!isFilePath(input)) {\n return LoaderId.MODULE;\n }\n\n const info = pathToLocatorInfo(input);\n for (let i = 0; i < this.rules.length; i++) {\n const { test } = this.rules[i] as Rule;\n if (Array.isArray(test)) {\n if (test.indexOf(info.extension) !== -1) {\n return this.rules[i].loader;\n }\n } else if (test.test(buildFilePath(info))) {\n return this.rules[i].loader;\n }\n }\n\n return undefined;\n }\n\n /**\n * Resolve loader by id.\n *\n * @param id\n */\n resolve(id: string | Loader) : Loader {\n if (typeof id !== 'string') {\n return id;\n }\n\n if (Object.prototype.hasOwnProperty.call(this.loaders, id)) {\n return this.loaders[id] as Loader;\n }\n\n let loader : Loader | undefined;\n\n // built-in\n switch (id) {\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport { hasOwnProperty } from '../utils';\nimport type { LoaderFilterFn, ScriptFileExportItem } from './built-in';\n\nexport function getExportItem(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ScriptFileExportItem {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n return {\n key: 'default',\n value: hasOwnProperty(data, 'default') ? data.default : data,\n };\n}\n"],"names":["input","options","name","extension","info","pattern","absolute","cwd","nodir","ignore","items","output","executeSync","withExtension","withFilePrefix","code","message","stack","locatorInfo","LoaderId","test","loader","findLoader","instance","manager","value"],"mappings":";;;;;;;;;;;;;;AAAO;AACH;AACJ;AAEO;AACH;AACJ;;ACNA;;;;;AAKC;;AAQD;;ACHO;AACH;AACI;;;AAKJ;AACI;;;AAOA;;;;AAQJ;AACJ;;AClCA;;;;;AAKC;;;AAQO;;;;;;AAcR;;AC3BA;;;;;AAKC;AAGG;AAAuCA;AAAM;AACjD;;ACDO;;AAEH;AACJ;;ACXA;;;;;;AAWO;AACHC;AAEAA;AACAA;AACA;AACIA;;AAGJA;;AAGJ;AAEO;AAIH;AAIID;;;;;AAOAE;AACAC;AACJ;AACJ;AAEO;AAGH;AAIJ;AAEO;;;;;;;AASH;AACJ;AAEO;;;AAICC;;;;AAKJ;AACJ;;ACjEO;AAIHH;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACzDO;AAIHR;AAEA;AAEKI;AAAQ;AAEb;AAEA;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;AAEA;AACIC;AACJ;AACJ;AACJ;;AAGJ;AAEO;AAIHT;AAEA;AAEKI;AAAQ;AAEb;;AAEQ;AACIC;AACAC;AACAC;AACAC;AACJ;;AAGA;;;AAGJ;AACJ;;AAGJ;;ACpEA;;;;;;AAQI;AAEJ;AAEO;;;AAGH;AACJ;;ACWO;;;;AAeKE;AACJ;;;AAGI;;;;;AAKJ;;AAGJ;AAEAC;;;;AAKI;;AAEA;;AAGJ;;AAIA;AAIIX;;;;;AAMI;;AAEI;;;AAIR;AACI;AAKI;AACI;AAOI;AACI;AACAY;AACJ;;AAGJ;AAOI;AACI;AACAC;AACJ;;;AAIR;AACIC;AACAC;AACAC;;;;AAMZ;AACJ;;AAMIhB;;;;AAKI;AACJ;AACI;AAKI;AACI;AAOI;AACI;AACAY;AACJ;;;AAIR;AACIE;AACAC;AACAC;;;AAIR;AACJ;AACJ;;;;AASIhB;;;AAIQiB;;;;;AAMAhB;;AAEAA;;;;;;;;;AAUAA;AAAMgB;AAAY;AAC9B;;;;AA3KI;;AACiB;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AAC9D;AACJ;AAyKJ;;ACjMO;;AAEC;;AAGI;AACA;AACJ;AACI;AACJ;AACJ;AAEAN;AACI;;;AAII;AACJ;AACI;AACJ;AACJ;AACJ;;AClCA;;;;;;;AAOYO;AAAAA;;;ACOL;;;AAwBK;AAAkBC;AAAMC;AAAO;AAC/B;;AAGJ;AACJ;;AAGI;AACA;AACI;;;AAIJ;;AAEJ;AAEAT;AACI;AACA;AACI;;;AAIJ;;AAEJ;AAEAU;;AAEQ;;AAGJ;;;;AAIQ;AACI;;AAER;AACI;;AAER;;AAGJ;AAEA;;;;;;;;;AAWQ;;;;;AAOA;AAAsB;AAClBD;;AAEJ;AACA;AAAoB;AAChBA;;AAEJ;AACA;AACS;AACL;AACA;;;AAIJ;AACJ;;AAGI;;;;AAMR;;AAII;;;;AAKI;;AAGJ;AACI;;;AAIR;;;;AA7HQ;;AACW;AAAO;AAAQ;AAAQ;AAAQ;AAAQ;AAAM;AACpDA;AACJ;AACA;;AACW;AAAQ;AAAEA;AACrB;AACH;AACL;AAsHJ;;AC3IA;AACO;;;;AAKHE;;AAGJ;;ACJO;AACH;;;AAII;;AAGJC;AACJ;AAEO;AACH;;;;;AAMJ;AAEO;AACH;;;;;AAMJ;;AC9BO;AAIH;;AAEI;;;;AAIYC;AACJ;;AAER;;;;;AAOAA;AACJ;AACJ;;"}
|
|
@@ -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 build;
|
|
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/locator/utils.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { LocatorInfo, LocatorOptions } from './type';
|
|
2
2
|
export declare function buildLocatorOptions(options?: Partial<LocatorOptions>): LocatorOptions;
|
|
3
|
-
export declare function isFilePath(input: string): boolean;
|
|
4
3
|
export declare function pathToLocatorInfo(input: string, skipResolve?: boolean): LocatorInfo;
|
|
4
|
+
export declare function isLocatorInfo(input: unknown): input is LocatorInfo;
|
|
5
|
+
export declare function buildFilePath(input: LocatorInfo | string): string;
|
|
6
|
+
export declare function buildFilePathWithoutExtension(input: LocatorInfo | string): string;
|
package/dist/utils/error.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function handleException(e: unknown): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isFilePath(input: string): boolean | "";
|
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.8",
|
|
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.38",
|
|
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.6",
|
|
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.4.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"
|
|
@@ -79,6 +79,6 @@
|
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"ebec": "^0.2.1",
|
|
81
81
|
"glob": "^9.0.1",
|
|
82
|
-
"jiti": "^1.17.
|
|
82
|
+
"jiti": "^1.17.2"
|
|
83
83
|
}
|
|
84
84
|
}
|