locter 2.0.2 → 2.1.1
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 +5 -20
- package/dist/index.cjs +61 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +61 -69
- package/dist/index.mjs.map +1 -1
- package/dist/locator/async.d.ts +3 -3
- package/dist/locator/index.d.ts +1 -1
- package/dist/locator/sync.d.ts +3 -3
- package/dist/locator/types.d.ts +15 -0
- package/dist/locator/utils.d.ts +3 -2
- package/package.json +17 -17
- package/dist/locator/type.d.ts +0 -9
package/README.MD
CHANGED
|
@@ -44,10 +44,7 @@ import { locateMany } from 'locter';
|
|
|
44
44
|
|
|
45
45
|
(async () => {
|
|
46
46
|
let files = await locateMany(
|
|
47
|
-
'files/example.{js,.ts}'
|
|
48
|
-
{
|
|
49
|
-
path: process.cwd()
|
|
50
|
-
}
|
|
47
|
+
'files/example.{js,.ts}'
|
|
51
48
|
);
|
|
52
49
|
|
|
53
50
|
console.log(files);
|
|
@@ -59,10 +56,7 @@ import { locateMany } from 'locter';
|
|
|
59
56
|
*/
|
|
60
57
|
|
|
61
58
|
files = await locateMany(
|
|
62
|
-
'files/*.{js,ts}'
|
|
63
|
-
{
|
|
64
|
-
path: process.cwd()
|
|
65
|
-
}
|
|
59
|
+
'files/*.{js,ts}'
|
|
66
60
|
);
|
|
67
61
|
|
|
68
62
|
console.log(files);
|
|
@@ -87,10 +81,7 @@ import { locate } from 'locter';
|
|
|
87
81
|
|
|
88
82
|
(async () => {
|
|
89
83
|
let file = await locate(
|
|
90
|
-
'files/example.{js,.ts}'
|
|
91
|
-
{
|
|
92
|
-
path: process.cwd()
|
|
93
|
-
}
|
|
84
|
+
'files/example.{js,.ts}'
|
|
94
85
|
);
|
|
95
86
|
|
|
96
87
|
console.log(file);
|
|
@@ -112,10 +103,7 @@ import { load, locate } from 'locter';
|
|
|
112
103
|
|
|
113
104
|
(async () => {
|
|
114
105
|
const file = await locate(
|
|
115
|
-
'files/example.{js,.ts}'
|
|
116
|
-
{
|
|
117
|
-
path: process.cwd()
|
|
118
|
-
}
|
|
106
|
+
'files/example.{js,.ts}'
|
|
119
107
|
);
|
|
120
108
|
|
|
121
109
|
let content = await load(file);
|
|
@@ -135,10 +123,7 @@ import { loadSync, locateSync } from 'locter';
|
|
|
135
123
|
|
|
136
124
|
(async () => {
|
|
137
125
|
const file = await locateSync(
|
|
138
|
-
'files/example.{js,.ts}'
|
|
139
|
-
{
|
|
140
|
-
path: process.cwd()
|
|
141
|
-
}
|
|
126
|
+
'files/example.{js,.ts}'
|
|
142
127
|
);
|
|
143
128
|
|
|
144
129
|
let content = await loadSync(file);
|
package/dist/index.cjs
CHANGED
|
@@ -103,16 +103,35 @@ function isTypeScriptError(input) {
|
|
|
103
103
|
return typeof input.message === 'string' && /TS\d+/.test(input.message);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
function
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
106
|
+
function buildLocatorPatterns(pattern) {
|
|
107
|
+
return Array.isArray(pattern) ? pattern : [
|
|
108
|
+
pattern
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
function buildLocatorOptions(options = {}) {
|
|
112
|
+
const paths = options.path ? toArray(options.path) : [];
|
|
113
|
+
const ignore = options.ignore ? toArray(options.ignore) : [];
|
|
114
|
+
if (paths.length === 0) {
|
|
115
|
+
paths.push(process.cwd());
|
|
116
|
+
}
|
|
117
|
+
let onlyFiles;
|
|
118
|
+
let onlyDirectories;
|
|
119
|
+
if (options.onlyDirectories === options.onlyFiles) {
|
|
120
|
+
onlyDirectories = false;
|
|
121
|
+
onlyFiles = !options.onlyDirectories;
|
|
122
|
+
} else if (typeof options.onlyFiles === 'undefined') {
|
|
123
|
+
onlyDirectories = options.onlyDirectories ?? false;
|
|
124
|
+
onlyFiles = !options.onlyDirectories;
|
|
125
|
+
} else {
|
|
126
|
+
onlyFiles = options.onlyFiles ?? true;
|
|
127
|
+
onlyDirectories = !options.onlyFiles;
|
|
113
128
|
}
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
return {
|
|
130
|
+
path: paths,
|
|
131
|
+
ignore,
|
|
132
|
+
onlyDirectories,
|
|
133
|
+
onlyFiles
|
|
134
|
+
};
|
|
116
135
|
}
|
|
117
136
|
function pathToLocatorInfo(input, skipResolve) {
|
|
118
137
|
if (!skipResolve && !path.isAbsolute(input)) {
|
|
@@ -122,7 +141,7 @@ function pathToLocatorInfo(input, skipResolve) {
|
|
|
122
141
|
return {
|
|
123
142
|
path: info.dir.split('/').join(path.sep),
|
|
124
143
|
name: info.name,
|
|
125
|
-
extension: info.ext
|
|
144
|
+
extension: info.ext ? info.ext : undefined
|
|
126
145
|
};
|
|
127
146
|
}
|
|
128
147
|
function isLocatorInfo(input) {
|
|
@@ -148,24 +167,17 @@ function buildFilePathWithoutExtension(input) {
|
|
|
148
167
|
}
|
|
149
168
|
|
|
150
169
|
async function locateMany(pattern, options) {
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
pattern
|
|
154
|
-
];
|
|
155
|
-
let ignore;
|
|
156
|
-
if (options.ignore) {
|
|
157
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
158
|
-
options.ignore
|
|
159
|
-
];
|
|
160
|
-
}
|
|
170
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
171
|
+
const opts = buildLocatorOptions(options);
|
|
161
172
|
const items = [];
|
|
162
173
|
for(let i = 0; i < patterns.length; i++){
|
|
163
|
-
for(let j = 0; j <
|
|
174
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
164
175
|
const files = await fg(patterns[i], {
|
|
165
176
|
absolute: true,
|
|
166
|
-
cwd:
|
|
167
|
-
ignore,
|
|
168
|
-
onlyFiles:
|
|
177
|
+
cwd: opts.path[j],
|
|
178
|
+
ignore: opts.ignore,
|
|
179
|
+
onlyFiles: opts.onlyFiles,
|
|
180
|
+
onlyDirectories: opts.onlyDirectories
|
|
169
181
|
});
|
|
170
182
|
for(let k = 0; k < files.length; k++){
|
|
171
183
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -175,23 +187,16 @@ async function locateMany(pattern, options) {
|
|
|
175
187
|
return items;
|
|
176
188
|
}
|
|
177
189
|
async function locate(pattern, options) {
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
pattern
|
|
181
|
-
];
|
|
182
|
-
let ignore;
|
|
183
|
-
if (options.ignore) {
|
|
184
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
185
|
-
options.ignore
|
|
186
|
-
];
|
|
187
|
-
}
|
|
190
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
191
|
+
const opts = buildLocatorOptions(options);
|
|
188
192
|
for(let i = 0; i < patterns.length; i++){
|
|
189
|
-
for(let j = 0; j <
|
|
193
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
190
194
|
const files = await fg(patterns[i], {
|
|
191
195
|
absolute: true,
|
|
192
|
-
cwd:
|
|
193
|
-
ignore,
|
|
194
|
-
onlyFiles:
|
|
196
|
+
cwd: opts.path[j],
|
|
197
|
+
ignore: opts.ignore,
|
|
198
|
+
onlyFiles: opts.onlyFiles,
|
|
199
|
+
onlyDirectories: opts.onlyDirectories
|
|
195
200
|
});
|
|
196
201
|
const element = files.shift();
|
|
197
202
|
if (element) {
|
|
@@ -203,24 +208,17 @@ async function locate(pattern, options) {
|
|
|
203
208
|
}
|
|
204
209
|
|
|
205
210
|
function locateManySync(pattern, options) {
|
|
206
|
-
|
|
207
|
-
const
|
|
208
|
-
pattern
|
|
209
|
-
];
|
|
210
|
-
let ignore;
|
|
211
|
-
if (options.ignore) {
|
|
212
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
213
|
-
options.ignore
|
|
214
|
-
];
|
|
215
|
-
}
|
|
211
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
212
|
+
const opts = buildLocatorOptions(options);
|
|
216
213
|
const items = [];
|
|
217
214
|
for(let i = 0; i < patterns.length; i++){
|
|
218
|
-
for(let j = 0; j <
|
|
215
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
219
216
|
const files = fg.sync(patterns[i], {
|
|
220
217
|
absolute: true,
|
|
221
|
-
cwd:
|
|
222
|
-
ignore,
|
|
223
|
-
onlyFiles:
|
|
218
|
+
cwd: opts.path[j],
|
|
219
|
+
ignore: opts.ignore,
|
|
220
|
+
onlyFiles: opts.onlyFiles,
|
|
221
|
+
onlyDirectories: opts.onlyDirectories
|
|
224
222
|
});
|
|
225
223
|
for(let k = 0; k < files.length; k++){
|
|
226
224
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -230,23 +228,16 @@ function locateManySync(pattern, options) {
|
|
|
230
228
|
return items;
|
|
231
229
|
}
|
|
232
230
|
function locateSync(pattern, options) {
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
pattern
|
|
236
|
-
];
|
|
237
|
-
let ignore;
|
|
238
|
-
if (options.ignore) {
|
|
239
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
240
|
-
options.ignore
|
|
241
|
-
];
|
|
242
|
-
}
|
|
231
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
232
|
+
const opts = buildLocatorOptions(options);
|
|
243
233
|
for(let i = 0; i < patterns.length; i++){
|
|
244
|
-
for(let j = 0; j <
|
|
234
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
245
235
|
const files = fg.sync(patterns[i], {
|
|
246
236
|
absolute: true,
|
|
247
|
-
cwd:
|
|
248
|
-
ignore,
|
|
249
|
-
onlyFiles:
|
|
237
|
+
cwd: opts.path[j],
|
|
238
|
+
ignore: opts.ignore,
|
|
239
|
+
onlyFiles: opts.onlyFiles,
|
|
240
|
+
onlyDirectories: opts.onlyDirectories
|
|
250
241
|
});
|
|
251
242
|
const element = files.shift();
|
|
252
243
|
if (element) {
|
|
@@ -579,7 +570,7 @@ class LoaderManager {
|
|
|
579
570
|
for(let i = 0; i < this.rules.length; i++){
|
|
580
571
|
const { test } = this.rules[i];
|
|
581
572
|
if (Array.isArray(test)) {
|
|
582
|
-
if (test.indexOf(info.extension) !== -1) {
|
|
573
|
+
if (info.extension && test.indexOf(info.extension) !== -1) {
|
|
583
574
|
return this.rules[i].loader;
|
|
584
575
|
}
|
|
585
576
|
} else if (test.test(buildFilePath(info))) {
|
|
@@ -676,7 +667,8 @@ class LoaderManager {
|
|
|
676
667
|
},
|
|
677
668
|
{
|
|
678
669
|
test: [
|
|
679
|
-
'.yml'
|
|
670
|
+
'.yml',
|
|
671
|
+
'.yaml'
|
|
680
672
|
],
|
|
681
673
|
loader: LoaderId.YAML
|
|
682
674
|
}
|
|
@@ -723,6 +715,7 @@ exports.ModuleLoader = ModuleLoader;
|
|
|
723
715
|
exports.buildFilePath = buildFilePath;
|
|
724
716
|
exports.buildFilePathWithoutExtension = buildFilePathWithoutExtension;
|
|
725
717
|
exports.buildLocatorOptions = buildLocatorOptions;
|
|
718
|
+
exports.buildLocatorPatterns = buildLocatorPatterns;
|
|
726
719
|
exports.getFileNameExtension = getFileNameExtension;
|
|
727
720
|
exports.getModuleExport = getModuleExport;
|
|
728
721
|
exports.handleException = handleException;
|
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/utils/runtime.ts","../src/utils/typescript.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) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment(): boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter 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 { isObject } from './object';\n\nexport function isTypeScriptError(input: unknown) : input is Error {\n if (!isObject(input)) {\n return false;\n }\n\n if (typeof input.diagnosticCodes !== 'undefined') {\n return true;\n }\n\n return typeof input.message === 'string' &&\n /TS\\d+/.test(input.message);\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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\ntype ESModule = { [key: string]: any, __esModule: boolean };\nexport function isESModule(input: unknown) : input is ESModule {\n return isObject(input) &&\n // eslint-disable-next-line no-underscore-dangle\n typeof input.__esModule !== 'undefined';\n}\n\n// https://2ality.com/2017/01/babel-esm-spec-mode.html\nexport function toModuleRecord(\n data: unknown,\n) {\n if (isESModule(data)) {\n // @see https://github.com/testing-library/user-event/issues/813\n // @see https://stackoverflow.com/questions/62717394/export-default-class-exports-double-nested-default\n if (\n isESModule(data.default) &&\n data.default.default\n ) {\n return {\n ...data,\n default: data.default.default,\n };\n }\n\n return data;\n }\n\n const output = Object.create(null, {\n __esModule: {\n value: true,\n },\n [Symbol.toStringTag]: {\n value: 'Module',\n },\n });\n\n if (isObject(data)) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in data) {\n if (hasOwnProperty(output, key)) {\n continue;\n }\n\n let descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (\n !descriptor ||\n ('get' in descriptor || descriptor.writable || descriptor.configurable)\n ) {\n descriptor = {\n enumerable: true,\n get() {\n return data[key];\n },\n };\n }\n\n Object.defineProperty(output, key, descriptor);\n }\n }\n\n if (!hasOwnProperty(output, 'default')) {\n Object.defineProperty(output, 'default', {\n value: data,\n enumerable: true,\n });\n }\n\n return Object.freeze(output);\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn: LoaderFilterFn,\n): ModuleExport | undefined {\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 return undefined;\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 isLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty,\n isFilePath, isJestRuntimeEnvironment,\n isObject,\n isTsNodeRuntimeEnvironment,\n isTypeScriptError,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { toModuleRecord } 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 isTypeScriptError(e)\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 toModuleRecord(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 isTypeScriptError(e)\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return toModuleRecord(output);\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : Promise<unknown> {\n const id = 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(id);\n }\n\n return await import(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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(data, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : unknown {\n const id = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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 {\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data !== 'string') {\n data = buildFilePath(data);\n }\n\n if (options.withFilePrefix) {\n data = pathToFileURL(data).href;\n }\n }\n\n return data;\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","isJestRuntimeEnvironment","process","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","isTypeScriptError","diagnosticCodes","test","buildLocatorOptions","options","push","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","isESModule","__esModule","toModuleRecord","data","default","output","create","toStringTag","descriptor","getOwnPropertyDescriptor","writable","configurable","enumerable","get","defineProperty","freeze","getModuleExport","filterFn","keys","ModuleLoader","load","SyntaxError","ReferenceError","loadSync","jiti","id","build","require","withFilePrefix","code","BaseError","pathToFileURL","href","constructor","createJITI","JSONLoader","JSON","YAMLLoader","LoaderId","LoaderManager","register","loader","rules","findLoader","MODULE","loaders","CONF","YAML","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/utils/runtime.ts","../src/utils/typescript.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) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment(): boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter 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 { isObject } from './object';\n\nexport function isTypeScriptError(input: unknown) : input is Error {\n if (!isObject(input)) {\n return false;\n }\n\n if (typeof input.diagnosticCodes !== 'undefined') {\n return true;\n }\n\n return typeof input.message === 'string' &&\n /TS\\d+/.test(input.message);\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, LocatorOptionsInput } from './types';\n\nexport function buildLocatorPatterns(pattern: string | string[]) : string[] {\n return Array.isArray(pattern) ?\n pattern :\n [pattern];\n}\n\nexport function buildLocatorOptions(options: LocatorOptionsInput = {}) : LocatorOptions {\n const paths = options.path ?\n toArray(options.path) :\n [];\n\n const ignore = options.ignore ?\n toArray(options.ignore) :\n [];\n\n if (paths.length === 0) {\n paths.push(process.cwd());\n }\n\n let onlyFiles : boolean;\n let onlyDirectories : boolean;\n\n if (options.onlyDirectories === options.onlyFiles) {\n onlyDirectories = false;\n onlyFiles = !options.onlyDirectories;\n } else if (typeof options.onlyFiles === 'undefined') {\n onlyDirectories = options.onlyDirectories ?? false;\n onlyFiles = !options.onlyDirectories;\n } else {\n onlyFiles = options.onlyFiles ?? true;\n onlyDirectories = !options.onlyFiles;\n }\n\n return {\n path: paths,\n ignore,\n onlyDirectories,\n onlyFiles,\n };\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 info.ext :\n undefined,\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, LocatorOptionsInput } from './types';\nimport { buildLocatorOptions, buildLocatorPatterns, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : Promise<LocatorInfo[]> {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = await fg(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k], true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : Promise<LocatorInfo | undefined> {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = await fg(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\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, LocatorOptionsInput } from './types';\nimport { buildLocatorOptions, buildLocatorPatterns, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : LocatorInfo[] {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = fg.sync(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k], true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : LocatorInfo | undefined {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\ntype ESModule = { [key: string]: any, __esModule: boolean };\nexport function isESModule(input: unknown) : input is ESModule {\n return isObject(input) &&\n // eslint-disable-next-line no-underscore-dangle\n typeof input.__esModule !== 'undefined';\n}\n\n// https://2ality.com/2017/01/babel-esm-spec-mode.html\nexport function toModuleRecord(\n data: unknown,\n) {\n if (isESModule(data)) {\n // @see https://github.com/testing-library/user-event/issues/813\n // @see https://stackoverflow.com/questions/62717394/export-default-class-exports-double-nested-default\n if (\n isESModule(data.default) &&\n data.default.default\n ) {\n return {\n ...data,\n default: data.default.default,\n };\n }\n\n return data;\n }\n\n const output = Object.create(null, {\n __esModule: {\n value: true,\n },\n [Symbol.toStringTag]: {\n value: 'Module',\n },\n });\n\n if (isObject(data)) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in data) {\n if (hasOwnProperty(output, key)) {\n continue;\n }\n\n let descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (\n !descriptor ||\n ('get' in descriptor || descriptor.writable || descriptor.configurable)\n ) {\n descriptor = {\n enumerable: true,\n get() {\n return data[key];\n },\n };\n }\n\n Object.defineProperty(output, key, descriptor);\n }\n }\n\n if (!hasOwnProperty(output, 'default')) {\n Object.defineProperty(output, 'default', {\n value: data,\n enumerable: true,\n });\n }\n\n return Object.freeze(output);\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn: LoaderFilterFn,\n): ModuleExport | undefined {\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 return undefined;\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 isLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty,\n isFilePath, isJestRuntimeEnvironment,\n isObject,\n isTsNodeRuntimeEnvironment,\n isTypeScriptError,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { toModuleRecord } 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 isTypeScriptError(e)\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 toModuleRecord(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 isTypeScriptError(e)\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return toModuleRecord(output);\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : Promise<unknown> {\n const id = 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(id);\n }\n\n return await import(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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(data, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : unknown {\n const id = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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 {\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data !== 'string') {\n data = buildFilePath(data);\n }\n\n if (options.withFilePrefix) {\n data = pathToFileURL(data).href;\n }\n }\n\n return data;\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', '.yaml'], 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 (\n info.extension &&\n test.indexOf(info.extension) !== -1\n ) {\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","isJestRuntimeEnvironment","process","env","JEST_WORKER_ID","isTsNodeRuntimeEnvironment","Symbol","for","isTypeScriptError","diagnosticCodes","test","buildLocatorPatterns","pattern","buildLocatorOptions","options","paths","ignore","push","cwd","onlyFiles","onlyDirectories","pathToLocatorInfo","skipResolve","isAbsolute","resolve","info","parse","dir","split","join","sep","name","ext","isLocatorInfo","buildFilePath","buildFilePathWithoutExtension","locateMany","patterns","opts","items","i","j","files","fg","absolute","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","isESModule","__esModule","toModuleRecord","data","default","output","create","toStringTag","descriptor","getOwnPropertyDescriptor","writable","configurable","enumerable","get","defineProperty","freeze","getModuleExport","filterFn","keys","ModuleLoader","load","SyntaxError","ReferenceError","loadSync","jiti","id","build","require","withFilePrefix","code","BaseError","pathToFileURL","href","constructor","createJITI","JSONLoader","JSON","YAMLLoader","LoaderId","LoaderManager","register","loader","rules","findLoader","MODULE","loaders","CONF","YAML","pluginPath","normalizePath","moduleLoader","startsWith","instance","useLoader","registerLoader","manager"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -109,16 +109,35 @@ function isTypeScriptError(input) {
|
|
|
109
109
|
return typeof input.message === 'string' && /TS\d+/.test(input.message);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
function
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
112
|
+
function buildLocatorPatterns(pattern) {
|
|
113
|
+
return Array.isArray(pattern) ? pattern : [
|
|
114
|
+
pattern
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
function buildLocatorOptions(options = {}) {
|
|
118
|
+
const paths = options.path ? toArray(options.path) : [];
|
|
119
|
+
const ignore = options.ignore ? toArray(options.ignore) : [];
|
|
120
|
+
if (paths.length === 0) {
|
|
121
|
+
paths.push(process.cwd());
|
|
122
|
+
}
|
|
123
|
+
let onlyFiles;
|
|
124
|
+
let onlyDirectories;
|
|
125
|
+
if (options.onlyDirectories === options.onlyFiles) {
|
|
126
|
+
onlyDirectories = false;
|
|
127
|
+
onlyFiles = !options.onlyDirectories;
|
|
128
|
+
} else if (typeof options.onlyFiles === 'undefined') {
|
|
129
|
+
onlyDirectories = options.onlyDirectories ?? false;
|
|
130
|
+
onlyFiles = !options.onlyDirectories;
|
|
131
|
+
} else {
|
|
132
|
+
onlyFiles = options.onlyFiles ?? true;
|
|
133
|
+
onlyDirectories = !options.onlyFiles;
|
|
119
134
|
}
|
|
120
|
-
|
|
121
|
-
|
|
135
|
+
return {
|
|
136
|
+
path: paths,
|
|
137
|
+
ignore,
|
|
138
|
+
onlyDirectories,
|
|
139
|
+
onlyFiles
|
|
140
|
+
};
|
|
122
141
|
}
|
|
123
142
|
function pathToLocatorInfo(input, skipResolve) {
|
|
124
143
|
if (!skipResolve && !path.isAbsolute(input)) {
|
|
@@ -128,7 +147,7 @@ function pathToLocatorInfo(input, skipResolve) {
|
|
|
128
147
|
return {
|
|
129
148
|
path: info.dir.split('/').join(path.sep),
|
|
130
149
|
name: info.name,
|
|
131
|
-
extension: info.ext
|
|
150
|
+
extension: info.ext ? info.ext : undefined
|
|
132
151
|
};
|
|
133
152
|
}
|
|
134
153
|
function isLocatorInfo(input) {
|
|
@@ -154,24 +173,17 @@ function buildFilePathWithoutExtension(input) {
|
|
|
154
173
|
}
|
|
155
174
|
|
|
156
175
|
async function locateMany(pattern, options) {
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
pattern
|
|
160
|
-
];
|
|
161
|
-
let ignore;
|
|
162
|
-
if (options.ignore) {
|
|
163
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
164
|
-
options.ignore
|
|
165
|
-
];
|
|
166
|
-
}
|
|
176
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
177
|
+
const opts = buildLocatorOptions(options);
|
|
167
178
|
const items = [];
|
|
168
179
|
for(let i = 0; i < patterns.length; i++){
|
|
169
|
-
for(let j = 0; j <
|
|
180
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
170
181
|
const files = await fg(patterns[i], {
|
|
171
182
|
absolute: true,
|
|
172
|
-
cwd:
|
|
173
|
-
ignore,
|
|
174
|
-
onlyFiles:
|
|
183
|
+
cwd: opts.path[j],
|
|
184
|
+
ignore: opts.ignore,
|
|
185
|
+
onlyFiles: opts.onlyFiles,
|
|
186
|
+
onlyDirectories: opts.onlyDirectories
|
|
175
187
|
});
|
|
176
188
|
for(let k = 0; k < files.length; k++){
|
|
177
189
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -181,23 +193,16 @@ async function locateMany(pattern, options) {
|
|
|
181
193
|
return items;
|
|
182
194
|
}
|
|
183
195
|
async function locate(pattern, options) {
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
pattern
|
|
187
|
-
];
|
|
188
|
-
let ignore;
|
|
189
|
-
if (options.ignore) {
|
|
190
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
191
|
-
options.ignore
|
|
192
|
-
];
|
|
193
|
-
}
|
|
196
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
197
|
+
const opts = buildLocatorOptions(options);
|
|
194
198
|
for(let i = 0; i < patterns.length; i++){
|
|
195
|
-
for(let j = 0; j <
|
|
199
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
196
200
|
const files = await fg(patterns[i], {
|
|
197
201
|
absolute: true,
|
|
198
|
-
cwd:
|
|
199
|
-
ignore,
|
|
200
|
-
onlyFiles:
|
|
202
|
+
cwd: opts.path[j],
|
|
203
|
+
ignore: opts.ignore,
|
|
204
|
+
onlyFiles: opts.onlyFiles,
|
|
205
|
+
onlyDirectories: opts.onlyDirectories
|
|
201
206
|
});
|
|
202
207
|
const element = files.shift();
|
|
203
208
|
if (element) {
|
|
@@ -209,24 +214,17 @@ async function locate(pattern, options) {
|
|
|
209
214
|
}
|
|
210
215
|
|
|
211
216
|
function locateManySync(pattern, options) {
|
|
212
|
-
|
|
213
|
-
const
|
|
214
|
-
pattern
|
|
215
|
-
];
|
|
216
|
-
let ignore;
|
|
217
|
-
if (options.ignore) {
|
|
218
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
219
|
-
options.ignore
|
|
220
|
-
];
|
|
221
|
-
}
|
|
217
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
218
|
+
const opts = buildLocatorOptions(options);
|
|
222
219
|
const items = [];
|
|
223
220
|
for(let i = 0; i < patterns.length; i++){
|
|
224
|
-
for(let j = 0; j <
|
|
221
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
225
222
|
const files = fg.sync(patterns[i], {
|
|
226
223
|
absolute: true,
|
|
227
|
-
cwd:
|
|
228
|
-
ignore,
|
|
229
|
-
onlyFiles:
|
|
224
|
+
cwd: opts.path[j],
|
|
225
|
+
ignore: opts.ignore,
|
|
226
|
+
onlyFiles: opts.onlyFiles,
|
|
227
|
+
onlyDirectories: opts.onlyDirectories
|
|
230
228
|
});
|
|
231
229
|
for(let k = 0; k < files.length; k++){
|
|
232
230
|
items.push(pathToLocatorInfo(files[k], true));
|
|
@@ -236,23 +234,16 @@ function locateManySync(pattern, options) {
|
|
|
236
234
|
return items;
|
|
237
235
|
}
|
|
238
236
|
function locateSync(pattern, options) {
|
|
239
|
-
|
|
240
|
-
const
|
|
241
|
-
pattern
|
|
242
|
-
];
|
|
243
|
-
let ignore;
|
|
244
|
-
if (options.ignore) {
|
|
245
|
-
ignore = Array.isArray(options.ignore) ? options.ignore : [
|
|
246
|
-
options.ignore
|
|
247
|
-
];
|
|
248
|
-
}
|
|
237
|
+
const patterns = buildLocatorPatterns(pattern);
|
|
238
|
+
const opts = buildLocatorOptions(options);
|
|
249
239
|
for(let i = 0; i < patterns.length; i++){
|
|
250
|
-
for(let j = 0; j <
|
|
240
|
+
for(let j = 0; j < opts.path.length; j++){
|
|
251
241
|
const files = fg.sync(patterns[i], {
|
|
252
242
|
absolute: true,
|
|
253
|
-
cwd:
|
|
254
|
-
ignore,
|
|
255
|
-
onlyFiles:
|
|
243
|
+
cwd: opts.path[j],
|
|
244
|
+
ignore: opts.ignore,
|
|
245
|
+
onlyFiles: opts.onlyFiles,
|
|
246
|
+
onlyDirectories: opts.onlyDirectories
|
|
256
247
|
});
|
|
257
248
|
const element = files.shift();
|
|
258
249
|
if (element) {
|
|
@@ -585,7 +576,7 @@ class LoaderManager {
|
|
|
585
576
|
for(let i = 0; i < this.rules.length; i++){
|
|
586
577
|
const { test } = this.rules[i];
|
|
587
578
|
if (Array.isArray(test)) {
|
|
588
|
-
if (test.indexOf(info.extension) !== -1) {
|
|
579
|
+
if (info.extension && test.indexOf(info.extension) !== -1) {
|
|
589
580
|
return this.rules[i].loader;
|
|
590
581
|
}
|
|
591
582
|
} else if (test.test(buildFilePath(info))) {
|
|
@@ -682,7 +673,8 @@ class LoaderManager {
|
|
|
682
673
|
},
|
|
683
674
|
{
|
|
684
675
|
test: [
|
|
685
|
-
'.yml'
|
|
676
|
+
'.yml',
|
|
677
|
+
'.yaml'
|
|
686
678
|
],
|
|
687
679
|
loader: LoaderId.YAML
|
|
688
680
|
}
|
|
@@ -722,5 +714,5 @@ function loadSync(input) {
|
|
|
722
714
|
return manager.executeSync(buildFilePath(input));
|
|
723
715
|
}
|
|
724
716
|
|
|
725
|
-
export { ConfLoader, JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, getFileNameExtension, getModuleExport, handleException, hasOwnProperty, hasStringProperty, isESModule, isFilePath, isJestRuntimeEnvironment, isLocatorInfo, isObject, isSafeObjectKey, isTsNodeRuntimeEnvironment, isTypeScriptError, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray, toModuleRecord };
|
|
717
|
+
export { ConfLoader, JSONLoader, LoaderManager, ModuleLoader, buildFilePath, buildFilePathWithoutExtension, buildLocatorOptions, buildLocatorPatterns, getFileNameExtension, getModuleExport, handleException, hasOwnProperty, hasStringProperty, isESModule, isFilePath, isJestRuntimeEnvironment, isLocatorInfo, isObject, isSafeObjectKey, isTsNodeRuntimeEnvironment, isTypeScriptError, load, loadSync, locate, locateMany, locateManySync, locateSync, pathToLocatorInfo, registerLoader, removeFileNameExtension, toArray, toModuleRecord };
|
|
726
718
|
//# sourceMappingURL=index.mjs.map
|
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/utils/runtime.ts","../src/utils/typescript.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) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment(): boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter 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 { isObject } from './object';\n\nexport function isTypeScriptError(input: unknown) : input is Error {\n if (!isObject(input)) {\n return false;\n }\n\n if (typeof input.diagnosticCodes !== 'undefined') {\n return true;\n }\n\n return typeof input.message === 'string' &&\n /TS\\d+/.test(input.message);\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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\ntype ESModule = { [key: string]: any, __esModule: boolean };\nexport function isESModule(input: unknown) : input is ESModule {\n return isObject(input) &&\n // eslint-disable-next-line no-underscore-dangle\n typeof input.__esModule !== 'undefined';\n}\n\n// https://2ality.com/2017/01/babel-esm-spec-mode.html\nexport function toModuleRecord(\n data: unknown,\n) {\n if (isESModule(data)) {\n // @see https://github.com/testing-library/user-event/issues/813\n // @see https://stackoverflow.com/questions/62717394/export-default-class-exports-double-nested-default\n if (\n isESModule(data.default) &&\n data.default.default\n ) {\n return {\n ...data,\n default: data.default.default,\n };\n }\n\n return data;\n }\n\n const output = Object.create(null, {\n __esModule: {\n value: true,\n },\n [Symbol.toStringTag]: {\n value: 'Module',\n },\n });\n\n if (isObject(data)) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in data) {\n if (hasOwnProperty(output, key)) {\n continue;\n }\n\n let descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (\n !descriptor ||\n ('get' in descriptor || descriptor.writable || descriptor.configurable)\n ) {\n descriptor = {\n enumerable: true,\n get() {\n return data[key];\n },\n };\n }\n\n Object.defineProperty(output, key, descriptor);\n }\n }\n\n if (!hasOwnProperty(output, 'default')) {\n Object.defineProperty(output, 'default', {\n value: data,\n enumerable: true,\n });\n }\n\n return Object.freeze(output);\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn: LoaderFilterFn,\n): ModuleExport | undefined {\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 return undefined;\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 isLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty,\n isFilePath, isJestRuntimeEnvironment,\n isObject,\n isTsNodeRuntimeEnvironment,\n isTypeScriptError,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { toModuleRecord } 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 isTypeScriptError(e)\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 toModuleRecord(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 isTypeScriptError(e)\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return toModuleRecord(output);\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : Promise<unknown> {\n const id = 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(id);\n }\n\n return await import(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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(data, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : unknown {\n const id = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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 {\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data !== 'string') {\n data = buildFilePath(data);\n }\n\n if (options.withFilePrefix) {\n data = pathToFileURL(data).href;\n }\n }\n\n return data;\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","get","value","output","code","message","stack","loadSync","build","data","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/utils/runtime.ts","../src/utils/typescript.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) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isJestRuntimeEnvironment() : boolean {\n return process.env &&\n process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport function isTsNodeRuntimeEnvironment(): boolean {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return !!process[Symbol.for('ts-node.register.instance')];\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter 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 { isObject } from './object';\n\nexport function isTypeScriptError(input: unknown) : input is Error {\n if (!isObject(input)) {\n return false;\n }\n\n if (typeof input.diagnosticCodes !== 'undefined') {\n return true;\n }\n\n return typeof input.message === 'string' &&\n /TS\\d+/.test(input.message);\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, LocatorOptionsInput } from './types';\n\nexport function buildLocatorPatterns(pattern: string | string[]) : string[] {\n return Array.isArray(pattern) ?\n pattern :\n [pattern];\n}\n\nexport function buildLocatorOptions(options: LocatorOptionsInput = {}) : LocatorOptions {\n const paths = options.path ?\n toArray(options.path) :\n [];\n\n const ignore = options.ignore ?\n toArray(options.ignore) :\n [];\n\n if (paths.length === 0) {\n paths.push(process.cwd());\n }\n\n let onlyFiles : boolean;\n let onlyDirectories : boolean;\n\n if (options.onlyDirectories === options.onlyFiles) {\n onlyDirectories = false;\n onlyFiles = !options.onlyDirectories;\n } else if (typeof options.onlyFiles === 'undefined') {\n onlyDirectories = options.onlyDirectories ?? false;\n onlyFiles = !options.onlyDirectories;\n } else {\n onlyFiles = options.onlyFiles ?? true;\n onlyDirectories = !options.onlyFiles;\n }\n\n return {\n path: paths,\n ignore,\n onlyDirectories,\n onlyFiles,\n };\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 info.ext :\n undefined,\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, LocatorOptionsInput } from './types';\nimport { buildLocatorOptions, buildLocatorPatterns, pathToLocatorInfo } from './utils';\n\nexport async function locateMany(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : Promise<LocatorInfo[]> {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = await fg(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k], true));\n }\n }\n }\n\n return items;\n}\n\nexport async function locate(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : Promise<LocatorInfo | undefined> {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = await fg(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\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, LocatorOptionsInput } from './types';\nimport { buildLocatorOptions, buildLocatorPatterns, pathToLocatorInfo } from './utils';\n\nexport function locateManySync(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : LocatorInfo[] {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n const items : LocatorInfo[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = fg.sync(patterns[i], {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\n });\n\n for (let k = 0; k < files.length; k++) {\n items.push(pathToLocatorInfo(files[k], true));\n }\n }\n }\n\n return items;\n}\n\nexport function locateSync(\n pattern: string | string[],\n options?: LocatorOptionsInput,\n) : LocatorInfo | undefined {\n const patterns = buildLocatorPatterns(pattern);\n const opts = buildLocatorOptions(options);\n\n for (let i = 0; i < patterns.length; i++) {\n for (let j = 0; j < opts.path.length; j++) {\n const files = fg.sync(patterns[i] as string, {\n absolute: true,\n cwd: opts.path[j],\n ignore: opts.ignore,\n onlyFiles: opts.onlyFiles,\n onlyDirectories: opts.onlyDirectories,\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 { hasOwnProperty, isObject } from '../../../utils';\nimport type { LoaderFilterFn, ModuleExport } from './type';\n\ntype ESModule = { [key: string]: any, __esModule: boolean };\nexport function isESModule(input: unknown) : input is ESModule {\n return isObject(input) &&\n // eslint-disable-next-line no-underscore-dangle\n typeof input.__esModule !== 'undefined';\n}\n\n// https://2ality.com/2017/01/babel-esm-spec-mode.html\nexport function toModuleRecord(\n data: unknown,\n) {\n if (isESModule(data)) {\n // @see https://github.com/testing-library/user-event/issues/813\n // @see https://stackoverflow.com/questions/62717394/export-default-class-exports-double-nested-default\n if (\n isESModule(data.default) &&\n data.default.default\n ) {\n return {\n ...data,\n default: data.default.default,\n };\n }\n\n return data;\n }\n\n const output = Object.create(null, {\n __esModule: {\n value: true,\n },\n [Symbol.toStringTag]: {\n value: 'Module',\n },\n });\n\n if (isObject(data)) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in data) {\n if (hasOwnProperty(output, key)) {\n continue;\n }\n\n let descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (\n !descriptor ||\n ('get' in descriptor || descriptor.writable || descriptor.configurable)\n ) {\n descriptor = {\n enumerable: true,\n get() {\n return data[key];\n },\n };\n }\n\n Object.defineProperty(output, key, descriptor);\n }\n }\n\n if (!hasOwnProperty(output, 'default')) {\n Object.defineProperty(output, 'default', {\n value: data,\n enumerable: true,\n });\n }\n\n return Object.freeze(output);\n}\n\nexport function getModuleExport(\n data: Record<string, any>,\n filterFn: LoaderFilterFn,\n): ModuleExport | undefined {\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 return undefined;\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 isLocatorInfo,\n} from '../../../locator';\nimport {\n handleException,\n hasStringProperty,\n isFilePath, isJestRuntimeEnvironment,\n isObject,\n isTsNodeRuntimeEnvironment,\n isTypeScriptError,\n} from '../../../utils';\nimport type { Loader } from '../../type';\nimport type { ModuleLoadOptions } from './type';\nimport { toModuleRecord } 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 isTypeScriptError(e)\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 toModuleRecord(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 isTypeScriptError(e)\n ) {\n throw e;\n }\n\n output = this.jiti(input);\n }\n\n return toModuleRecord(output);\n }\n\n // ---------------------------------------------------------------------------\n\n async load(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : Promise<unknown> {\n const id = 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(id);\n }\n\n return await import(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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(data, {\n ...options,\n withFilePrefix: true,\n });\n }\n\n throw new BaseError({\n code: e.code,\n message: hasStringProperty(e, 'message') ? e.message : undefined,\n stack: hasStringProperty(e, 'stack') ? e.stack : undefined,\n });\n }\n\n /* istanbul ignore next */\n return handleException(e);\n }\n }\n\n loadSync(\n data: LocatorInfo | string,\n options: ModuleLoadOptions = {},\n ) : unknown {\n const id = this.build(data, options);\n\n try {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n return require(id);\n } catch (e) {\n /* istanbul ignore next */\n if (\n isObject(e) &&\n hasStringProperty(e, 'code')\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 {\n if (isLocatorInfo(data) || isFilePath(data)) {\n if (typeof data !== 'string') {\n data = buildFilePath(data);\n }\n\n if (options.withFilePrefix) {\n data = pathToFileURL(data).href;\n }\n }\n\n return data;\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', '.yaml'], 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 (\n info.extension &&\n test.indexOf(info.extension) !== -1\n ) {\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","pattern","ignore","onlyDirectories","onlyFiles","name","extension","info","items","executeSync","parse","config","get","value","output","code","message","stack","loadSync","build","data","LoaderId","test","loader","findLoader","instance","manager"],"mappings":"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"}
|
package/dist/locator/async.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LocatorInfo,
|
|
2
|
-
export declare function locateMany(pattern: string | string[], options?:
|
|
3
|
-
export declare function locate(pattern: string | string[], options?:
|
|
1
|
+
import type { LocatorInfo, LocatorOptionsInput } from './types';
|
|
2
|
+
export declare function locateMany(pattern: string | string[], options?: LocatorOptionsInput): Promise<LocatorInfo[]>;
|
|
3
|
+
export declare function locate(pattern: string | string[], options?: LocatorOptionsInput): Promise<LocatorInfo | undefined>;
|
package/dist/locator/index.d.ts
CHANGED
package/dist/locator/sync.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { LocatorInfo,
|
|
2
|
-
export declare function locateManySync(pattern: string | string[], options?:
|
|
3
|
-
export declare function locateSync(pattern: string | string[], options?:
|
|
1
|
+
import type { LocatorInfo, LocatorOptionsInput } from './types';
|
|
2
|
+
export declare function locateManySync(pattern: string | string[], options?: LocatorOptionsInput): LocatorInfo[];
|
|
3
|
+
export declare function locateSync(pattern: string | string[], options?: LocatorOptionsInput): LocatorInfo | undefined;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type LocatorInfo = {
|
|
2
|
+
path: string;
|
|
3
|
+
name: string;
|
|
4
|
+
extension?: string;
|
|
5
|
+
};
|
|
6
|
+
export type LocatorOptions = {
|
|
7
|
+
path: string[];
|
|
8
|
+
ignore: string[];
|
|
9
|
+
onlyFiles: boolean;
|
|
10
|
+
onlyDirectories: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type LocatorOptionsInput = Partial<Omit<LocatorOptions, 'path' | 'ignore'>> & {
|
|
13
|
+
path?: string | string[];
|
|
14
|
+
ignore?: string | string[];
|
|
15
|
+
};
|
package/dist/locator/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { LocatorInfo, LocatorOptions } from './
|
|
2
|
-
export declare function
|
|
1
|
+
import type { LocatorInfo, LocatorOptions, LocatorOptionsInput } from './types';
|
|
2
|
+
export declare function buildLocatorPatterns(pattern: string | string[]): string[];
|
|
3
|
+
export declare function buildLocatorOptions(options?: LocatorOptionsInput): LocatorOptions;
|
|
3
4
|
export declare function pathToLocatorInfo(input: string, skipResolve?: boolean): LocatorInfo;
|
|
4
5
|
export declare function isLocatorInfo(input: unknown): input is LocatorInfo;
|
|
5
6
|
export declare function buildFilePath(input: LocatorInfo | string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "A library to locate a file/module by criteria and load it!",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Peter Placzek",
|
|
@@ -49,32 +49,32 @@
|
|
|
49
49
|
],
|
|
50
50
|
"license": "MIT",
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@rollup/plugin-esm-shim": "^0.1.
|
|
52
|
+
"@rollup/plugin-esm-shim": "^0.1.7",
|
|
53
53
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
54
|
-
"@swc/core": "^1.
|
|
55
|
-
"@swc/jest": "^0.2.
|
|
56
|
-
"@tada5hi/commitlint-config": "^1.1
|
|
57
|
-
"@tada5hi/eslint-config-typescript": "^1.2.
|
|
58
|
-
"@tada5hi/semantic-release": "^0.3.
|
|
59
|
-
"@tada5hi/tsconfig": "^0.5.
|
|
54
|
+
"@swc/core": "^1.7.11",
|
|
55
|
+
"@swc/jest": "^0.2.36",
|
|
56
|
+
"@tada5hi/commitlint-config": "^1.2.1",
|
|
57
|
+
"@tada5hi/eslint-config-typescript": "^1.2.11",
|
|
58
|
+
"@tada5hi/semantic-release": "^0.3.1",
|
|
59
|
+
"@tada5hi/tsconfig": "^0.5.1",
|
|
60
60
|
"@types/flat": "^5.0.2",
|
|
61
|
-
"@types/jest": "^29.5.
|
|
62
|
-
"@types/node": "^
|
|
61
|
+
"@types/jest": "^29.5.12",
|
|
62
|
+
"@types/node": "^22.3.0",
|
|
63
63
|
"cross-env": "^7.0.3",
|
|
64
|
-
"eslint": "^8.
|
|
65
|
-
"husky": "^
|
|
64
|
+
"eslint": "^8.57.0",
|
|
65
|
+
"husky": "^9.1.4",
|
|
66
66
|
"jest": "^29.6.4",
|
|
67
67
|
"rimraf": "^5.0.5",
|
|
68
|
-
"rollup": "^4.
|
|
68
|
+
"rollup": "^4.20.0",
|
|
69
69
|
"semantic-release": "^22.0.8",
|
|
70
|
-
"typescript": "^5.
|
|
70
|
+
"typescript": "^5.5.4"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"destr": "^2.0.
|
|
73
|
+
"destr": "^2.0.3",
|
|
74
74
|
"ebec": "^2.3.0",
|
|
75
75
|
"fast-glob": "^3.3.2",
|
|
76
76
|
"flat": "^5.0.2",
|
|
77
|
-
"jiti": "^1.21.
|
|
78
|
-
"yaml": "^2.
|
|
77
|
+
"jiti": "^1.21.6",
|
|
78
|
+
"yaml": "^2.5.0"
|
|
79
79
|
}
|
|
80
80
|
}
|