locter 1.2.3 → 1.3.0
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/README.MD +2 -1
- package/dist/index.cjs +82 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +82 -23
- package/dist/index.mjs.map +1 -1
- package/dist/loader/built-in/yaml/index.d.ts +1 -0
- package/dist/loader/built-in/yaml/module.d.ts +5 -0
- package/dist/loader/constants.d.ts +2 -1
- package/package.json +7 -6
package/README.MD
CHANGED
|
@@ -153,7 +153,8 @@ import { loadSync, locateSync } from 'locter';
|
|
|
153
153
|
|
|
154
154
|
Two loaders are predefined from scratch and already registered:
|
|
155
155
|
- **ConfLoader**: This loader allows to load `.conf` files.
|
|
156
|
-
- **
|
|
156
|
+
- **JSONLoader**: This loader allows to load `.json` files.
|
|
157
|
+
- **YAMLLoader**: This loader allows to load `.yml` files.
|
|
157
158
|
- **ModuleLoader**: This loader allows to load modules with
|
|
158
159
|
`.js`, `.mjs`, `.mts`, `.cjs`, `.cts`, `.ts` file extensions independent of the environment (cjs or esm).
|
|
159
160
|
|
package/dist/index.cjs
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
var destr = require('destr');
|
|
4
4
|
var flat = require('flat');
|
|
5
5
|
var fs = require('node:fs');
|
|
6
|
-
var
|
|
6
|
+
var fg = require('fast-glob');
|
|
7
7
|
var path = require('node:path');
|
|
8
8
|
var ebec = require('ebec');
|
|
9
9
|
var createJITI = require('jiti');
|
|
10
10
|
var node_url = require('node:url');
|
|
11
|
+
var yaml = require('yaml');
|
|
11
12
|
|
|
12
13
|
function hasOwnProperty(obj, prop) {
|
|
13
14
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
@@ -127,14 +128,20 @@ async function locateMany(pattern, options) {
|
|
|
127
128
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
128
129
|
pattern
|
|
129
130
|
];
|
|
131
|
+
let ignore;
|
|
132
|
+
if (options.ignore) {
|
|
133
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
134
|
+
options.ignore
|
|
135
|
+
];
|
|
136
|
+
}
|
|
130
137
|
const items = [];
|
|
131
138
|
for(let i = 0; i < patterns.length; i++){
|
|
132
139
|
for(let j = 0; j < options.path.length; j++){
|
|
133
|
-
const files = await
|
|
140
|
+
const files = await fg(patterns[i], {
|
|
134
141
|
absolute: true,
|
|
135
142
|
cwd: options.path[j],
|
|
136
|
-
|
|
137
|
-
|
|
143
|
+
ignore,
|
|
144
|
+
onlyFiles: true
|
|
138
145
|
});
|
|
139
146
|
for(let k = 0; k < files.length; k++){
|
|
140
147
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -148,13 +155,19 @@ async function locate(pattern, options) {
|
|
|
148
155
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
149
156
|
pattern
|
|
150
157
|
];
|
|
158
|
+
let ignore;
|
|
159
|
+
if (options.ignore) {
|
|
160
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
161
|
+
options.ignore
|
|
162
|
+
];
|
|
163
|
+
}
|
|
151
164
|
for(let i = 0; i < patterns.length; i++){
|
|
152
165
|
for(let j = 0; j < options.path.length; j++){
|
|
153
|
-
const files = await
|
|
166
|
+
const files = await fg(patterns[i], {
|
|
154
167
|
absolute: true,
|
|
155
168
|
cwd: options.path[j],
|
|
156
|
-
|
|
157
|
-
|
|
169
|
+
ignore,
|
|
170
|
+
onlyFiles: true
|
|
158
171
|
});
|
|
159
172
|
const element = files.shift();
|
|
160
173
|
if (element) {
|
|
@@ -170,14 +183,20 @@ function locateManySync(pattern, options) {
|
|
|
170
183
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
171
184
|
pattern
|
|
172
185
|
];
|
|
186
|
+
let ignore;
|
|
187
|
+
if (options.ignore) {
|
|
188
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
189
|
+
options.ignore
|
|
190
|
+
];
|
|
191
|
+
}
|
|
173
192
|
const items = [];
|
|
174
193
|
for(let i = 0; i < patterns.length; i++){
|
|
175
194
|
for(let j = 0; j < options.path.length; j++){
|
|
176
|
-
const files =
|
|
195
|
+
const files = fg.sync(patterns[i], {
|
|
177
196
|
absolute: true,
|
|
178
197
|
cwd: options.path[j],
|
|
179
|
-
|
|
180
|
-
|
|
198
|
+
ignore,
|
|
199
|
+
onlyFiles: true
|
|
181
200
|
});
|
|
182
201
|
for(let k = 0; k < files.length; k++){
|
|
183
202
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -191,13 +210,19 @@ function locateSync(pattern, options) {
|
|
|
191
210
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
192
211
|
pattern
|
|
193
212
|
];
|
|
213
|
+
let ignore;
|
|
214
|
+
if (options.ignore) {
|
|
215
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
216
|
+
options.ignore
|
|
217
|
+
];
|
|
218
|
+
}
|
|
194
219
|
for(let i = 0; i < patterns.length; i++){
|
|
195
220
|
for(let j = 0; j < options.path.length; j++){
|
|
196
|
-
const files =
|
|
221
|
+
const files = fg.sync(patterns[i], {
|
|
197
222
|
absolute: true,
|
|
198
223
|
cwd: options.path[j],
|
|
199
|
-
|
|
200
|
-
|
|
224
|
+
ignore,
|
|
225
|
+
onlyFiles: true
|
|
201
226
|
});
|
|
202
227
|
const element = files.shift();
|
|
203
228
|
if (element) {
|
|
@@ -285,19 +310,16 @@ function getModuleExport(data, filterFn) {
|
|
|
285
310
|
}
|
|
286
311
|
throw new ebec.BaseError('Cannot find specific module export.');
|
|
287
312
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
if (isObject(value) && hasOwnProperty(value, 'default')) {
|
|
296
|
-
value = value.default;
|
|
313
|
+
if (// eslint-disable-next-line no-underscore-dangle
|
|
314
|
+
typeof data.__esModule !== 'undefined' && typeof data.default !== 'undefined') {
|
|
315
|
+
return {
|
|
316
|
+
key: 'default',
|
|
317
|
+
value: data.default
|
|
318
|
+
};
|
|
297
319
|
}
|
|
298
320
|
return {
|
|
299
321
|
key: 'default',
|
|
300
|
-
value
|
|
322
|
+
value: data
|
|
301
323
|
};
|
|
302
324
|
}
|
|
303
325
|
|
|
@@ -462,6 +484,31 @@ class JSONLoader {
|
|
|
462
484
|
}
|
|
463
485
|
}
|
|
464
486
|
|
|
487
|
+
class YAMLLoader {
|
|
488
|
+
async execute(input) {
|
|
489
|
+
const filePath = buildFilePath(input);
|
|
490
|
+
try {
|
|
491
|
+
const file = await fs.promises.readFile(filePath, {
|
|
492
|
+
encoding: 'utf-8'
|
|
493
|
+
});
|
|
494
|
+
return yaml.parse(file);
|
|
495
|
+
} catch (e) {
|
|
496
|
+
return handleException(e);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
executeSync(input) {
|
|
500
|
+
const filePath = buildFilePath(input);
|
|
501
|
+
try {
|
|
502
|
+
const file = fs.readFileSync(filePath, {
|
|
503
|
+
encoding: 'utf-8'
|
|
504
|
+
});
|
|
505
|
+
return yaml.parse(file);
|
|
506
|
+
} catch (e) {
|
|
507
|
+
return handleException(e);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
465
512
|
/*
|
|
466
513
|
* Copyright (c) 2023.
|
|
467
514
|
* Author Peter Placzek (tada5hi)
|
|
@@ -472,6 +519,7 @@ class JSONLoader {
|
|
|
472
519
|
LoaderId["MODULE"] = "module";
|
|
473
520
|
LoaderId["JSON"] = "json";
|
|
474
521
|
LoaderId["CONF"] = "conf";
|
|
522
|
+
LoaderId["YAML"] = "yaml";
|
|
475
523
|
})(LoaderId || (LoaderId = {}));
|
|
476
524
|
|
|
477
525
|
class LoaderManager {
|
|
@@ -549,6 +597,11 @@ class LoaderManager {
|
|
|
549
597
|
loader = new JSONLoader();
|
|
550
598
|
break;
|
|
551
599
|
}
|
|
600
|
+
case LoaderId.YAML:
|
|
601
|
+
{
|
|
602
|
+
loader = new YAMLLoader();
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
552
605
|
/* istanbul ignore next */ default:
|
|
553
606
|
{
|
|
554
607
|
const pluginPath = this.normalizePath(id);
|
|
@@ -600,6 +653,12 @@ class LoaderManager {
|
|
|
600
653
|
'.json'
|
|
601
654
|
],
|
|
602
655
|
loader: LoaderId.JSON
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
test: [
|
|
659
|
+
'.yml'
|
|
660
|
+
],
|
|
661
|
+
loader: LoaderId.YAML
|
|
603
662
|
}
|
|
604
663
|
];
|
|
605
664
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/conf/module.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeObjectKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\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\nimport path from 'node:path';\n\nexport function getFileNameExtension(\n input: string,\n allowed?: string[],\n) : string | undefined {\n const extension = path.extname(input);\n if (extension === '' || extension === '.') {\n return undefined;\n }\n\n if (\n typeof allowed === 'undefined' ||\n allowed.indexOf(extension) !== -1\n ) {\n return extension;\n }\n\n return undefined;\n}\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n const extension = getFileNameExtension(input, extensions);\n if (extension) {\n return input.substring(0, input.length - extension.length);\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022-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\n// Based on https://github.com/unjs/rc9 (MIT)\n\nimport { destr } from 'destr';\nimport flat from 'flat';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException, isSafeObjectKey } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class ConfLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n\n return this.parse(file);\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, { encoding: 'utf-8' });\n\n return this.parse(file);\n } catch (e) {\n return handleException(e);\n }\n }\n\n parse(contents: string): Record<string, any> {\n const config: Record<string, any> = {};\n\n const lines = contents.split(/\\n|\\r|\\r\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(/^\\s*([^\\s=]+)\\s*=\\s*(.*)?\\s*$/);\n if (!match) {\n continue;\n }\n\n // Key\n const key = match[1];\n\n if (!key || !isSafeObjectKey(key)) {\n continue;\n }\n\n const value = destr(match[2].trim() /* val */);\n\n if (key.endsWith('[]')) {\n const arrKey = key.slice(0, Math.max(0, key.length - 2));\n config[arrKey] = (config[arrKey] || []).concat(value);\n continue;\n }\n\n config[key] = value;\n }\n\n return flat.unflatten(config, { overwrite: true });\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n let value: any;\n\n if (\n hasOwnProperty(data, '__esModule') &&\n // eslint-disable-next-line no-underscore-dangle\n !!data.__esModule &&\n hasOwnProperty(data, 'default')\n ) {\n value = data.default;\n } else {\n value = data;\n }\n\n if (\n isObject(value) &&\n hasOwnProperty(value, 'default')\n ) {\n value = value.default;\n }\n\n return {\n key: 'default',\n value,\n };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\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 if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return JSON.parse(file);\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, { encoding: 'utf-8' });\n return JSON.parse(file);\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 CONF = 'conf',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { ConfLoader, 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: ['.conf'], loader: LoaderId.CONF,\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.CONF: {\n loader = new ConfLoader();\n break;\n }\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","isSafeObjectKey","key","handleException","e","Error","error","message","stack","getFileNameExtension","input","allowed","extension","path","extname","undefined","indexOf","removeFileNameExtension","extensions","substring","length","toArray","isFilePath","buildLocatorOptions","options","push","process","cwd","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","pattern","patterns","items","i","j","files","glob","absolute","nodir","k","locate","element","shift","locateManySync","globSync","locateSync","ConfLoader","execute","filePath","file","fs","promises","readFile","encoding","executeSync","readFileSync","contents","config","lines","match","value","destr","trim","endsWith","arrKey","slice","Math","max","concat","flat","unflatten","overwrite","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","getModuleExport","data","filterFn","keys","BaseError","__esModule","default","ModuleLoader","output","load","SyntaxError","ReferenceError","loadSync","jiti","locatorInfo","build","require","withExtension","code","withFilePrefix","pathToFileURL","href","constructor","createJITI","JSONLoader","JSON","LoaderId","LoaderManager","register","test","loader","rules","id","findLoader","MODULE","loaders","CONF","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/conf/module.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/built-in/yaml/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeObjectKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\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\nimport path from 'node:path';\n\nexport function getFileNameExtension(\n input: string,\n allowed?: string[],\n) : string | undefined {\n const extension = path.extname(input);\n if (extension === '' || extension === '.') {\n return undefined;\n }\n\n if (\n typeof allowed === 'undefined' ||\n allowed.indexOf(extension) !== -1\n ) {\n return extension;\n }\n\n return undefined;\n}\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n const extension = getFileNameExtension(input, extensions);\n if (extension) {\n return input.substring(0, input.length - extension.length);\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fg from 'fast-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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 fg(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 fg(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 fg from 'fast-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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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-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\n// Based on https://github.com/unjs/rc9 (MIT)\n\nimport { destr } from 'destr';\nimport flat from 'flat';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException, isSafeObjectKey } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class ConfLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n\n return this.parse(file);\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, { encoding: 'utf-8' });\n\n return this.parse(file);\n } catch (e) {\n return handleException(e);\n }\n }\n\n parse(contents: string): Record<string, any> {\n const config: Record<string, any> = {};\n\n const lines = contents.split(/\\n|\\r|\\r\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(/^\\s*([^\\s=]+)\\s*=\\s*(.*)?\\s*$/);\n if (!match) {\n continue;\n }\n\n // Key\n const key = match[1];\n\n if (!key || !isSafeObjectKey(key)) {\n continue;\n }\n\n const value = destr(match[2].trim() /* val */);\n\n if (key.endsWith('[]')) {\n const arrKey = key.slice(0, Math.max(0, key.length - 2));\n config[arrKey] = (config[arrKey] || []).concat(value);\n continue;\n }\n\n config[key] = value;\n }\n\n return flat.unflatten(config, { overwrite: true });\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n if (\n // eslint-disable-next-line no-underscore-dangle\n typeof data.__esModule !== 'undefined' &&\n typeof data.default !== 'undefined'\n ) {\n return {\n key: 'default',\n value: data.default,\n };\n }\n\n return {\n key: 'default',\n value: data,\n };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\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 if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return JSON.parse(file);\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, { encoding: 'utf-8' });\n return JSON.parse(file);\n } catch (e) {\n return handleException(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 { parse } from 'yaml';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class YAMLLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return parse(file);\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, { encoding: 'utf-8' });\n return parse(file);\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 CONF = 'conf',\n YAML = 'yaml',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { ConfLoader, JSONLoader, ModuleLoader } from './built-in';\nimport { YAMLLoader } from './built-in/yaml';\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: ['.conf'], loader: LoaderId.CONF,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n {\n test: ['.yml'], loader: LoaderId.YAML,\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.CONF: {\n loader = new ConfLoader();\n break;\n }\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n case LoaderId.YAML: {\n loader = new YAMLLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["hasOwnProperty","obj","prop","Object","prototype","call","hasStringProperty","isObject","item","Array","isArray","isSafeObjectKey","key","handleException","e","Error","error","message","stack","getFileNameExtension","input","allowed","extension","path","extname","undefined","indexOf","removeFileNameExtension","extensions","substring","length","toArray","isFilePath","buildLocatorOptions","options","push","process","cwd","ignore","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","pattern","patterns","items","i","j","files","fg","absolute","onlyFiles","k","locate","element","shift","locateManySync","sync","locateSync","ConfLoader","execute","filePath","file","fs","promises","readFile","encoding","executeSync","readFileSync","contents","config","lines","match","value","destr","trim","endsWith","arrKey","slice","Math","max","concat","flat","unflatten","overwrite","isJestRuntimeEnvironment","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","getModuleExport","data","filterFn","keys","BaseError","__esModule","default","ModuleLoader","output","load","SyntaxError","ReferenceError","loadSync","jiti","locatorInfo","build","require","withExtension","code","withFilePrefix","pathToFileURL","href","constructor","createJITI","JSONLoader","JSON","YAMLLoader","LoaderId","LoaderManager","register","test","loader","rules","id","findLoader","MODULE","loaders","CONF","YAML","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { destr } from 'destr';
|
|
2
2
|
import flat from 'flat';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
|
-
import
|
|
4
|
+
import fg from 'fast-glob';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { BaseError } from 'ebec';
|
|
7
7
|
import createJITI from 'jiti';
|
|
8
8
|
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import { parse } from 'yaml';
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
// -- Shims --
|
|
@@ -133,14 +134,20 @@ async function locateMany(pattern, options) {
|
|
|
133
134
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
134
135
|
pattern
|
|
135
136
|
];
|
|
137
|
+
let ignore;
|
|
138
|
+
if (options.ignore) {
|
|
139
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
140
|
+
options.ignore
|
|
141
|
+
];
|
|
142
|
+
}
|
|
136
143
|
const items = [];
|
|
137
144
|
for(let i = 0; i < patterns.length; i++){
|
|
138
145
|
for(let j = 0; j < options.path.length; j++){
|
|
139
|
-
const files = await
|
|
146
|
+
const files = await fg(patterns[i], {
|
|
140
147
|
absolute: true,
|
|
141
148
|
cwd: options.path[j],
|
|
142
|
-
|
|
143
|
-
|
|
149
|
+
ignore,
|
|
150
|
+
onlyFiles: true
|
|
144
151
|
});
|
|
145
152
|
for(let k = 0; k < files.length; k++){
|
|
146
153
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -154,13 +161,19 @@ async function locate(pattern, options) {
|
|
|
154
161
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
155
162
|
pattern
|
|
156
163
|
];
|
|
164
|
+
let ignore;
|
|
165
|
+
if (options.ignore) {
|
|
166
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
167
|
+
options.ignore
|
|
168
|
+
];
|
|
169
|
+
}
|
|
157
170
|
for(let i = 0; i < patterns.length; i++){
|
|
158
171
|
for(let j = 0; j < options.path.length; j++){
|
|
159
|
-
const files = await
|
|
172
|
+
const files = await fg(patterns[i], {
|
|
160
173
|
absolute: true,
|
|
161
174
|
cwd: options.path[j],
|
|
162
|
-
|
|
163
|
-
|
|
175
|
+
ignore,
|
|
176
|
+
onlyFiles: true
|
|
164
177
|
});
|
|
165
178
|
const element = files.shift();
|
|
166
179
|
if (element) {
|
|
@@ -176,14 +189,20 @@ function locateManySync(pattern, options) {
|
|
|
176
189
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
177
190
|
pattern
|
|
178
191
|
];
|
|
192
|
+
let ignore;
|
|
193
|
+
if (options.ignore) {
|
|
194
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
195
|
+
options.ignore
|
|
196
|
+
];
|
|
197
|
+
}
|
|
179
198
|
const items = [];
|
|
180
199
|
for(let i = 0; i < patterns.length; i++){
|
|
181
200
|
for(let j = 0; j < options.path.length; j++){
|
|
182
|
-
const files =
|
|
201
|
+
const files = fg.sync(patterns[i], {
|
|
183
202
|
absolute: true,
|
|
184
203
|
cwd: options.path[j],
|
|
185
|
-
|
|
186
|
-
|
|
204
|
+
ignore,
|
|
205
|
+
onlyFiles: true
|
|
187
206
|
});
|
|
188
207
|
for(let k = 0; k < files.length; k++){
|
|
189
208
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -197,13 +216,19 @@ function locateSync(pattern, options) {
|
|
|
197
216
|
const patterns = Array.isArray(pattern) ? pattern : [
|
|
198
217
|
pattern
|
|
199
218
|
];
|
|
219
|
+
let ignore;
|
|
220
|
+
if (options.ignore) {
|
|
221
|
+
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
222
|
+
options.ignore
|
|
223
|
+
];
|
|
224
|
+
}
|
|
200
225
|
for(let i = 0; i < patterns.length; i++){
|
|
201
226
|
for(let j = 0; j < options.path.length; j++){
|
|
202
|
-
const files =
|
|
227
|
+
const files = fg.sync(patterns[i], {
|
|
203
228
|
absolute: true,
|
|
204
229
|
cwd: options.path[j],
|
|
205
|
-
|
|
206
|
-
|
|
230
|
+
ignore,
|
|
231
|
+
onlyFiles: true
|
|
207
232
|
});
|
|
208
233
|
const element = files.shift();
|
|
209
234
|
if (element) {
|
|
@@ -291,19 +316,16 @@ function getModuleExport(data, filterFn) {
|
|
|
291
316
|
}
|
|
292
317
|
throw new BaseError('Cannot find specific module export.');
|
|
293
318
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
if (isObject(value) && hasOwnProperty(value, 'default')) {
|
|
302
|
-
value = value.default;
|
|
319
|
+
if (// eslint-disable-next-line no-underscore-dangle
|
|
320
|
+
typeof data.__esModule !== 'undefined' && typeof data.default !== 'undefined') {
|
|
321
|
+
return {
|
|
322
|
+
key: 'default',
|
|
323
|
+
value: data.default
|
|
324
|
+
};
|
|
303
325
|
}
|
|
304
326
|
return {
|
|
305
327
|
key: 'default',
|
|
306
|
-
value
|
|
328
|
+
value: data
|
|
307
329
|
};
|
|
308
330
|
}
|
|
309
331
|
|
|
@@ -468,6 +490,31 @@ class JSONLoader {
|
|
|
468
490
|
}
|
|
469
491
|
}
|
|
470
492
|
|
|
493
|
+
class YAMLLoader {
|
|
494
|
+
async execute(input) {
|
|
495
|
+
const filePath = buildFilePath(input);
|
|
496
|
+
try {
|
|
497
|
+
const file = await fs.promises.readFile(filePath, {
|
|
498
|
+
encoding: 'utf-8'
|
|
499
|
+
});
|
|
500
|
+
return parse(file);
|
|
501
|
+
} catch (e) {
|
|
502
|
+
return handleException(e);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
executeSync(input) {
|
|
506
|
+
const filePath = buildFilePath(input);
|
|
507
|
+
try {
|
|
508
|
+
const file = fs.readFileSync(filePath, {
|
|
509
|
+
encoding: 'utf-8'
|
|
510
|
+
});
|
|
511
|
+
return parse(file);
|
|
512
|
+
} catch (e) {
|
|
513
|
+
return handleException(e);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
471
518
|
/*
|
|
472
519
|
* Copyright (c) 2023.
|
|
473
520
|
* Author Peter Placzek (tada5hi)
|
|
@@ -478,6 +525,7 @@ class JSONLoader {
|
|
|
478
525
|
LoaderId["MODULE"] = "module";
|
|
479
526
|
LoaderId["JSON"] = "json";
|
|
480
527
|
LoaderId["CONF"] = "conf";
|
|
528
|
+
LoaderId["YAML"] = "yaml";
|
|
481
529
|
})(LoaderId || (LoaderId = {}));
|
|
482
530
|
|
|
483
531
|
class LoaderManager {
|
|
@@ -555,6 +603,11 @@ class LoaderManager {
|
|
|
555
603
|
loader = new JSONLoader();
|
|
556
604
|
break;
|
|
557
605
|
}
|
|
606
|
+
case LoaderId.YAML:
|
|
607
|
+
{
|
|
608
|
+
loader = new YAMLLoader();
|
|
609
|
+
break;
|
|
610
|
+
}
|
|
558
611
|
/* istanbul ignore next */ default:
|
|
559
612
|
{
|
|
560
613
|
const pluginPath = this.normalizePath(id);
|
|
@@ -606,6 +659,12 @@ class LoaderManager {
|
|
|
606
659
|
'.json'
|
|
607
660
|
],
|
|
608
661
|
loader: LoaderId.JSON
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
test: [
|
|
665
|
+
'.yml'
|
|
666
|
+
],
|
|
667
|
+
loader: LoaderId.YAML
|
|
609
668
|
}
|
|
610
669
|
];
|
|
611
670
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/error.ts","../src/utils/file-name.ts","../src/utils/to-array.ts","../src/utils/file-path.ts","../src/locator/utils.ts","../src/locator/async.ts","../src/locator/sync.ts","../src/loader/built-in/conf/module.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeObjectKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\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\nimport path from 'node:path';\n\nexport function getFileNameExtension(\n input: string,\n allowed?: string[],\n) : string | undefined {\n const extension = path.extname(input);\n if (extension === '' || extension === '.') {\n return undefined;\n }\n\n if (\n typeof allowed === 'undefined' ||\n allowed.indexOf(extension) !== -1\n ) {\n return extension;\n }\n\n return undefined;\n}\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n const extension = getFileNameExtension(input, extensions);\n if (extension) {\n return input.substring(0, input.length - extension.length);\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { glob } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo[]> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : Promise<LocatorInfo | undefined> {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = await glob(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { globSync } from 'glob';\nimport type { LocatorInfo, LocatorOptions } from './type';\nimport { buildLocatorOptions, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo[] {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k] as string, true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: Partial<LocatorOptions>,\n) : LocatorInfo | undefined {\n options = buildLocatorOptions(options);\n\n const patterns = Array.isArray(pattern) ?\n pattern :\n [pattern];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < (options as LocatorOptions).path.length; j++) {\n const files = globSync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n nodir: true,\n ignore: options.ignore,\n });\n\n const element = files.shift();\n if (element) {\n return pathToLocatorInfo(element, true);\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2022-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\n// Based on https://github.com/unjs/rc9 (MIT)\n\nimport { destr } from 'destr';\nimport flat from 'flat';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException, isSafeObjectKey } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class ConfLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n\n return this.parse(file);\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, { encoding: 'utf-8' });\n\n return this.parse(file);\n } catch (e) {\n return handleException(e);\n }\n }\n\n parse(contents: string): Record<string, any> {\n const config: Record<string, any> = {};\n\n const lines = contents.split(/\\n|\\r|\\r\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(/^\\s*([^\\s=]+)\\s*=\\s*(.*)?\\s*$/);\n if (!match) {\n continue;\n }\n\n // Key\n const key = match[1];\n\n if (!key || !isSafeObjectKey(key)) {\n continue;\n }\n\n const value = destr(match[2].trim() /* val */);\n\n if (key.endsWith('[]')) {\n const arrKey = key.slice(0, Math.max(0, key.length - 2));\n config[arrKey] = (config[arrKey] || []).concat(value);\n continue;\n }\n\n config[key] = value;\n }\n\n return flat.unflatten(config, { overwrite: true });\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n let value: any;\n\n if (\n hasOwnProperty(data, '__esModule') &&\n // eslint-disable-next-line no-underscore-dangle\n !!data.__esModule &&\n hasOwnProperty(data, 'default')\n ) {\n value = data.default;\n } else {\n value = data;\n }\n\n if (\n isObject(value) &&\n hasOwnProperty(value, 'default')\n ) {\n value = value.default;\n }\n\n return {\n key: 'default',\n value,\n };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\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 if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return JSON.parse(file);\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, { encoding: 'utf-8' });\n return JSON.parse(file);\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 CONF = 'conf',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { ConfLoader, 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: ['.conf'], loader: LoaderId.CONF,\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.CONF: {\n loader = new ConfLoader();\n break;\n }\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["input","options","name","extension","info","pattern","cwd","ignore","items","executeSync","parse","config","value","output","code","message","stack","locatorInfo","LoaderId","test","loader","findLoader","instance","manager"],"mappings":"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"}
|
|
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/conf/module.ts","../src/loader/built-in/module/utils.ts","../src/loader/built-in/module/module.ts","../src/loader/built-in/json/module.ts","../src/loader/built-in/yaml/module.ts","../src/loader/constants.ts","../src/loader/module.ts","../src/loader/singleton.ts","../src/loader/helpers.ts"],"sourcesContent":["export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) && typeof obj[prop] === 'string';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(item: unknown) : item is Record<string, any> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item)\n );\n}\n\nexport function isSafeObjectKey(key: string) : boolean {\n return key !== '__proto__' &&\n key !== 'prototype' &&\n key !== 'constructor';\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\nimport path from 'node:path';\n\nexport function getFileNameExtension(\n input: string,\n allowed?: string[],\n) : string | undefined {\n const extension = path.extname(input);\n if (extension === '' || extension === '.') {\n return undefined;\n }\n\n if (\n typeof allowed === 'undefined' ||\n allowed.indexOf(extension) !== -1\n ) {\n return extension;\n }\n\n return undefined;\n}\n\nexport function removeFileNameExtension(\n input: string,\n extensions?: string[],\n) {\n const extension = getFileNameExtension(input, extensions);\n if (extension) {\n return input.substring(0, input.length - extension.length);\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function toArray(input: string | string[]) : string[] {\n return Array.isArray(input) ? input : [input];\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport path from 'node:path';\n\nexport function isFilePath(input: string) {\n const extension = path.extname(input);\n return extension && extension !== '';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { isObject, toArray } from '../utils';\nimport type { LocatorInfo, LocatorOptions } from './type';\n\nexport function buildLocatorOptions(options?: Partial<LocatorOptions>) : LocatorOptions {\n options = options || {};\n\n options.path = options.path || [];\n options.path = toArray(options.path);\n if (options.path.length === 0) {\n options.path.push(process.cwd());\n }\n\n options.ignore ??= [];\n\n return options as LocatorOptions;\n}\n\nexport function pathToLocatorInfo(\n input: string,\n skipResolve?: boolean,\n) : LocatorInfo {\n if (\n !skipResolve &&\n !path.isAbsolute(input)\n ) {\n input = path.resolve(process.cwd(), input);\n }\n\n const info = path.parse(input);\n\n return {\n path: info.dir.split('/').join(path.sep),\n name: info.name,\n extension: info.ext,\n };\n}\n\nexport function isLocatorInfo(\n input: unknown,\n) : input is LocatorInfo {\n return isObject(input) &&\n typeof input.path === 'string' &&\n typeof input.name === 'string' &&\n typeof input.extension === 'string';\n}\n\nexport function buildFilePath(input: LocatorInfo | string) {\n if (typeof input === 'string') {\n return input;\n }\n\n if (input.extension) {\n return path.join(input.path, input.name) + input.extension;\n }\n\n return path.join(input.path, input.name);\n}\n\nexport function buildFilePathWithoutExtension(input: LocatorInfo | string) {\n let info: LocatorInfo;\n\n if (typeof input === 'string') {\n info = pathToLocatorInfo(input);\n } else {\n info = input;\n }\n\n return path.join(info.path, info.name);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fg from 'fast-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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 fg(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 fg(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 fg from 'fast-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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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 let ignore : string[] | undefined;\n if (options.ignore) {\n ignore = Array.isArray(options.ignore) ? options.ignore : [options.ignore];\n }\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 = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: (options as LocatorOptions).path[j],\n ignore,\n onlyFiles: true,\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-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\n// Based on https://github.com/unjs/rc9 (MIT)\n\nimport { destr } from 'destr';\nimport flat from 'flat';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException, isSafeObjectKey } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class ConfLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n\n return this.parse(file);\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, { encoding: 'utf-8' });\n\n return this.parse(file);\n } catch (e) {\n return handleException(e);\n }\n }\n\n parse(contents: string): Record<string, any> {\n const config: Record<string, any> = {};\n\n const lines = contents.split(/\\n|\\r|\\r\\n/);\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(/^\\s*([^\\s=]+)\\s*=\\s*(.*)?\\s*$/);\n if (!match) {\n continue;\n }\n\n // Key\n const key = match[1];\n\n if (!key || !isSafeObjectKey(key)) {\n continue;\n }\n\n const value = destr(match[2].trim() /* val */);\n\n if (key.endsWith('[]')) {\n const arrKey = key.slice(0, Math.max(0, key.length - 2));\n config[arrKey] = (config[arrKey] || []).concat(value);\n continue;\n }\n\n config[key] = value;\n }\n\n return flat.unflatten(config, { overwrite: true });\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment() : boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn?: LoaderFilterFn,\n): ModuleExport {\n if (filterFn) {\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n if (filterFn(keys[i] as string, data[keys[i] as string])) {\n return {\n key: keys[i] as string,\n value: data[keys[i] as string],\n };\n }\n }\n\n throw new BaseError('Cannot find specific module export.');\n }\n\n if (\n // eslint-disable-next-line no-underscore-dangle\n typeof data.__esModule !== 'undefined' &&\n typeof data.default !== 'undefined'\n ) {\n return {\n key: 'default',\n value: data.default,\n };\n }\n\n return {\n key: 'default',\n value: data,\n };\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BaseError } from 'ebec';\nimport type { JITI } from 'jiti';\nimport createJITI from 'jiti';\nimport { pathToFileURL } from 'node:url';\nimport type { LocatorInfo } from '../../../locator';\nimport {\n buildFilePath,\n buildFilePathWithoutExtension,\n isLocatorInfo,\n pathToLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty, isFilePath,\n isObject,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { isJestRuntimeEnvironment, isTsNodeRuntimeEnvironment } from './utils';\n\nexport class ModuleLoader implements Loader {\n protected jiti : JITI;\n\n constructor() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.jiti = createJITI(undefined, {\n extensions: ['.js', '.mjs', '.mts', '.cjs', '.cts', '.ts'],\n });\n }\n\n async execute(input: string) {\n let output : any;\n\n try {\n output = await this.load(input);\n } catch (e) {\n if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\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 if (\n e instanceof SyntaxError ||\n e instanceof ReferenceError\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return output;\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : Promise<unknown> {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // segmentation fault\n // issue: https://github.com/nodejs/node/issues/35889\n if (isJestRuntimeEnvironment()) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n }\n\n return await import(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n\n if (\n !options.withFilePrefix &&\n (\n e.code === 'ERR_UNSUPPORTED_ESM_URL_SCHEME' ||\n e.code === 'UNSUPPORTED_ESM_URL_SCHEME'\n )\n ) {\n return this.load(locatorInfo, {\n ...options,\n withExtension: true,\n withFilePrefix: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options?: ModuleLoadOptions,\n ) : unknown {\n options = options || {};\n const [name, locatorInfo] = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(name);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\n ) {\n if (locatorInfo) {\n if (\n !options.withExtension &&\n (\n e.code === 'ERR_MODULE_NOT_FOUND' ||\n e.code === 'MODULE_NOT_FOUND'\n )\n ) {\n return this.loadSync(locatorInfo, {\n ...options,\n withExtension: true,\n });\n }\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n return handleException(e);\n }\n }\n\n private build(\n data: LocatorInfo | string,\n options: ModuleLoadOptions,\n ) : [string, LocatorInfo | undefined] {\n let name : string;\n let locatorInfo : LocatorInfo | undefined;\n\n options = options || {};\n\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data === 'string') {\n locatorInfo = pathToLocatorInfo(data);\n } else {\n locatorInfo = data;\n }\n\n if (options.withExtension) {\n name = buildFilePath(locatorInfo);\n } else {\n name = buildFilePathWithoutExtension(locatorInfo);\n }\n\n if (options.withFilePrefix) {\n name = pathToFileURL(name).href;\n }\n } else {\n name = data;\n }\n\n return [name, locatorInfo];\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class JSONLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return JSON.parse(file);\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, { encoding: 'utf-8' });\n return JSON.parse(file);\n } catch (e) {\n return handleException(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 { parse } from 'yaml';\nimport fs from 'node:fs';\nimport { buildFilePath } from '../../../locator';\nimport { handleException } from '../../../utils';\nimport type { Loader } from '../../type';\n\nexport class YAMLLoader implements Loader {\n async execute(input: string) {\n const filePath = buildFilePath(input);\n\n try {\n const file = await fs.promises.readFile(filePath, { encoding: 'utf-8' });\n return parse(file);\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, { encoding: 'utf-8' });\n return parse(file);\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 CONF = 'conf',\n YAML = 'yaml',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport { buildFilePath, pathToLocatorInfo } from '../locator';\nimport { isFilePath } from '../utils';\nimport { ConfLoader, JSONLoader, ModuleLoader } from './built-in';\nimport { YAMLLoader } from './built-in/yaml';\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: ['.conf'], loader: LoaderId.CONF,\n },\n {\n test: ['.json'], loader: LoaderId.JSON,\n },\n {\n test: ['.yml'], loader: LoaderId.YAML,\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.CONF: {\n loader = new ConfLoader();\n break;\n }\n case LoaderId.MODULE: {\n loader = new ModuleLoader();\n break;\n }\n case LoaderId.JSON: {\n loader = new JSONLoader();\n break;\n }\n case LoaderId.YAML: {\n loader = new YAMLLoader();\n break;\n }\n /* istanbul ignore next */\n default: {\n const pluginPath = this.normalizePath(id);\n const moduleLoader = this.resolve(LoaderId.MODULE);\n loader = moduleLoader.executeSync(pluginPath);\n\n break;\n }\n }\n\n if (typeof loader !== 'undefined') {\n this.loaders[id] = loader;\n\n return loader;\n }\n\n throw new Error(`The loader ${id} could not be resolved.`);\n }\n\n /* istanbul ignore next */\n normalizePath(input: string) {\n if (path.isAbsolute(input) || input.startsWith('./')) {\n return input;\n }\n\n if (input.startsWith('module:')) {\n return input.substring(0, 'module:'.length);\n }\n\n if (!input.startsWith('@')) {\n return `@locter/${input}`;\n }\n\n return input;\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { LoaderManager } from './module';\n\nlet instance : LoaderManager;\nexport function useLoader() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new LoaderManager();\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildFilePath } from '../locator';\nimport type { LocatorInfo } from '../locator';\nimport { useLoader } from './singleton';\nimport type { Loader, Rule } from './type';\n\nexport function registerLoader(rule: Rule) : void;\nexport function registerLoader(test: string[] | RegExp, loader: Loader) : void;\nexport function registerLoader(test: any, loader?: Loader) : void {\n const manager = useLoader();\n if (typeof loader !== 'undefined') {\n manager.register(test, loader);\n\n return;\n }\n\n manager.register(test);\n}\n\nexport async function load(input: LocatorInfo | string) : Promise<any> {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.execute(input);\n }\n\n return manager.execute(buildFilePath(input));\n}\n\nexport function loadSync(input: LocatorInfo | string) : any {\n const manager = useLoader();\n if (typeof input === 'string') {\n return manager.executeSync(input);\n }\n\n return manager.executeSync(buildFilePath(input));\n}\n"],"names":["input","options","name","extension","info","pattern","cwd","ignore","items","executeSync","parse","config","value","output","code","message","stack","locatorInfo","LoaderId","test","loader","findLoader","instance","manager"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './module';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locter",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A library to locate a file/module by criteria and load it!",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Peter Placzek",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
54
54
|
"@swc/core": "^1.3.99",
|
|
55
55
|
"@swc/jest": "^0.2.27",
|
|
56
|
-
"@tada5hi/commitlint-config": "^1.1.
|
|
57
|
-
"@tada5hi/eslint-config-typescript": "^1.2.
|
|
56
|
+
"@tada5hi/commitlint-config": "^1.1.4",
|
|
57
|
+
"@tada5hi/eslint-config-typescript": "^1.2.7",
|
|
58
58
|
"@tada5hi/semantic-release": "^0.3.0",
|
|
59
59
|
"@tada5hi/tsconfig": "^0.5.0",
|
|
60
60
|
"@types/flat": "^5.0.2",
|
|
@@ -65,15 +65,16 @@
|
|
|
65
65
|
"husky": "^8.0.3",
|
|
66
66
|
"jest": "^29.6.4",
|
|
67
67
|
"rimraf": "^5.0.5",
|
|
68
|
-
"rollup": "^4.
|
|
68
|
+
"rollup": "^4.9.4",
|
|
69
69
|
"semantic-release": "^22.0.8",
|
|
70
70
|
"typescript": "^5.1.6"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"destr": "^2.0.2",
|
|
74
74
|
"ebec": "^2.3.0",
|
|
75
|
+
"fast-glob": "^3.3.2",
|
|
75
76
|
"flat": "^5.0.2",
|
|
76
|
-
"
|
|
77
|
-
"
|
|
77
|
+
"jiti": "^1.21.0",
|
|
78
|
+
"yaml": "^2.3.4"
|
|
78
79
|
}
|
|
79
80
|
}
|