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