@flex-development/mlly 1.0.0-alpha.17 → 1.0.0-alpha.19
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/CHANGELOG.md +829 -681
- package/README.md +173 -12
- package/dist/index.d.mts +3 -4
- package/dist/index.mjs +1 -5
- package/dist/interfaces/aliases.d.mts +11 -0
- package/dist/interfaces/context-get-source.d.mts +52 -0
- package/dist/interfaces/file-system.d.mts +57 -0
- package/dist/interfaces/index.d.mts +11 -21
- package/dist/interfaces/main-field-map.d.mts +13 -0
- package/dist/interfaces/module-format-map.d.mts +17 -0
- package/dist/interfaces/options-get-source.d.mts +22 -29
- package/dist/interfaces/options-resolve-alias.d.mts +14 -26
- package/dist/interfaces/options-resolve-module.d.mts +38 -27
- package/dist/interfaces/protocol-map.d.mts +35 -0
- package/dist/interfaces/stats.d.mts +28 -0
- package/dist/internal/chars.mjs +11 -0
- package/dist/internal/check-invalid-segments.mjs +19 -0
- package/dist/internal/fs.browser.mjs +36 -0
- package/dist/internal/fs.d.mts +7 -0
- package/dist/internal/invalid-package-target.mjs +18 -0
- package/dist/internal/invalid-subpath.mjs +16 -0
- package/dist/internal/process.browser.mjs +7 -0
- package/dist/internal/process.d.mts +4 -0
- package/dist/lib/can-parse-url.d.mts +21 -0
- package/dist/lib/can-parse-url.mjs +12 -0
- package/dist/lib/cwd.d.mts +12 -0
- package/dist/lib/cwd.mjs +8 -0
- package/dist/lib/default-conditions.d.mts +15 -0
- package/dist/lib/default-conditions.mjs +5 -0
- package/dist/lib/default-extensions.d.mts +14 -0
- package/dist/lib/default-extensions.mjs +21 -0
- package/dist/lib/default-main-fields.d.mts +14 -0
- package/dist/lib/default-main-fields.mjs +5 -0
- package/dist/lib/extension-format-map.d.mts +16 -0
- package/dist/lib/extension-format-map.mjs +21 -0
- package/dist/lib/formats.d.mts +21 -0
- package/dist/lib/formats.mjs +14 -0
- package/dist/lib/get-source.d.mts +26 -0
- package/dist/lib/get-source.mjs +70 -0
- package/dist/lib/index.d.mts +40 -0
- package/dist/lib/index.mjs +53 -0
- package/dist/lib/is-absolute-specifier.d.mts +23 -0
- package/dist/lib/is-absolute-specifier.mjs +9 -0
- package/dist/lib/is-array-index.d.mts +17 -0
- package/dist/lib/is-array-index.mjs +11 -0
- package/dist/lib/is-bare-specifier.d.mts +23 -0
- package/dist/lib/is-bare-specifier.mjs +11 -0
- package/dist/lib/is-directory.d.mts +22 -0
- package/dist/lib/is-directory.mjs +13 -0
- package/dist/lib/is-file.d.mts +22 -0
- package/dist/lib/is-file.mjs +13 -0
- package/dist/lib/is-imports-subpath.d.mts +19 -0
- package/dist/lib/is-imports-subpath.mjs +8 -0
- package/dist/lib/is-relative-specifier.d.mts +21 -0
- package/dist/lib/is-relative-specifier.mjs +16 -0
- package/dist/lib/lookup-package-scope.d.mts +26 -0
- package/dist/lib/lookup-package-scope.mjs +16 -0
- package/dist/lib/pattern-key-compare.d.mts +31 -0
- package/dist/lib/pattern-key-compare.mjs +18 -0
- package/dist/lib/pattern-match.d.mts +19 -0
- package/dist/lib/pattern-match.mjs +36 -0
- package/dist/lib/read-package-json.d.mts +35 -0
- package/dist/lib/read-package-json.mjs +29 -0
- package/dist/lib/resolve-alias.d.mts +19 -0
- package/dist/lib/resolve-alias.mjs +50 -0
- package/dist/lib/resolve-module.d.mts +37 -0
- package/dist/lib/resolve-module.mjs +75 -0
- package/dist/lib/resolver.d.mts +280 -0
- package/dist/lib/resolver.mjs +462 -0
- package/dist/lib/root.d.mts +11 -0
- package/dist/lib/root.mjs +6 -0
- package/dist/lib/to-relative-specifier.d.mts +25 -0
- package/dist/lib/to-relative-specifier.mjs +26 -0
- package/dist/lib/to-url.d.mts +24 -0
- package/dist/lib/to-url.mjs +10 -0
- package/dist/types/awaitable.d.mts +14 -0
- package/dist/types/change-ext-fn.d.mts +29 -0
- package/dist/types/get-source-handler.d.mts +21 -0
- package/dist/types/get-source-handlers.d.mts +14 -0
- package/dist/types/index.d.mts +12 -10
- package/dist/types/main-field.d.mts +13 -0
- package/dist/types/module-format.d.mts +13 -0
- package/dist/types/module-id.d.mts +2 -4
- package/dist/types/numeric.d.mts +9 -0
- package/dist/types/pattern-key-compare-result.d.mts +9 -0
- package/dist/types/pattern-match.d.mts +10 -0
- package/dist/types/protocol.d.mts +6 -7
- package/package.json +227 -155
- package/dist/enums/assert-type.d.mts +0 -21
- package/dist/enums/assert-type.mjs +0 -4
- package/dist/enums/format.d.mts +0 -17
- package/dist/enums/format.mjs +0 -4
- package/dist/enums/index.d.mts +0 -10
- package/dist/enums/index.mjs +0 -14
- package/dist/enums/kind-specifier-syntax.d.mts +0 -14
- package/dist/enums/kind-specifier-syntax.mjs +0 -4
- package/dist/enums/kind-specifier.d.mts +0 -17
- package/dist/enums/kind-specifier.mjs +0 -4
- package/dist/enums/kind-statement-syntax.d.mts +0 -22
- package/dist/enums/kind-statement-syntax.mjs +0 -4
- package/dist/enums/kind-statement.d.mts +0 -15
- package/dist/enums/kind-statement.mjs +0 -4
- package/dist/index.mjs.map +0 -8
- package/dist/interfaces/import-assertions.d.mts +0 -20
- package/dist/interfaces/import-dynamic.d.mts +0 -41
- package/dist/interfaces/import-static.d.mts +0 -35
- package/dist/interfaces/index.mjs +0 -0
- package/dist/interfaces/options-fill-module.d.mts +0 -23
- package/dist/interfaces/options-find-subpath.d.mts +0 -50
- package/dist/interfaces/options-get-format.d.mts +0 -73
- package/dist/interfaces/options-parse-module-id.d.mts +0 -34
- package/dist/interfaces/options-parse-subpath.d.mts +0 -50
- package/dist/interfaces/options-resolve.d.mts +0 -15
- package/dist/interfaces/package-scope.d.mts +0 -25
- package/dist/interfaces/parsed-data-url.d.mts +0 -56
- package/dist/interfaces/parsed-module-id.d.mts +0 -80
- package/dist/interfaces/parsed-subpath.d.mts +0 -44
- package/dist/interfaces/statement-export.d.mts +0 -44
- package/dist/interfaces/statement-import.d.mts +0 -38
- package/dist/interfaces/statement-require.d.mts +0 -38
- package/dist/interfaces/statement.d.mts +0 -49
- package/dist/internal/dequote.d.mts +0 -14
- package/dist/internal/dequote.mjs +0 -7
- package/dist/internal/dequote.mjs.map +0 -8
- package/dist/internal/format-type-map.d.mts +0 -19
- package/dist/internal/format-type-map.mjs +0 -13
- package/dist/internal/format-type-map.mjs.map +0 -8
- package/dist/internal/get-specifier-kind.d.mts +0 -19
- package/dist/internal/get-specifier-kind.mjs +0 -11
- package/dist/internal/get-specifier-kind.mjs.map +0 -8
- package/dist/internal/get-subpaths.d.mts +0 -28
- package/dist/internal/get-subpaths.mjs +0 -8
- package/dist/internal/get-subpaths.mjs.map +0 -8
- package/dist/internal/regex-encoded-sep.d.mts +0 -15
- package/dist/internal/regex-encoded-sep.mjs +0 -6
- package/dist/internal/regex-encoded-sep.mjs.map +0 -8
- package/dist/internal/regex-internal-specifier.d.mts +0 -16
- package/dist/internal/regex-internal-specifier.mjs +0 -6
- package/dist/internal/regex-internal-specifier.mjs.map +0 -8
- package/dist/internal/regex-invalid-segment.d.mts +0 -16
- package/dist/internal/regex-invalid-segment.mjs +0 -9
- package/dist/internal/regex-invalid-segment.mjs.map +0 -8
- package/dist/internal/regex-package-name.d.mts +0 -15
- package/dist/internal/regex-package-name.mjs +0 -6
- package/dist/internal/regex-package-name.mjs.map +0 -8
- package/dist/internal/regex-package-path.d.mts +0 -17
- package/dist/internal/regex-package-path.mjs +0 -6
- package/dist/internal/regex-package-path.mjs.map +0 -8
- package/dist/internal/resolver.d.mts +0 -132
- package/dist/internal/resolver.mjs +0 -483
- package/dist/internal/resolver.mjs.map +0 -8
- package/dist/internal/validate-array-set.d.mts +0 -24
- package/dist/internal/validate-array-set.mjs +0 -12
- package/dist/internal/validate-array-set.mjs.map +0 -8
- package/dist/internal/validate-boolean.d.mts +0 -22
- package/dist/internal/validate-boolean.mjs +0 -12
- package/dist/internal/validate-boolean.mjs.map +0 -8
- package/dist/internal/validate-map.d.mts +0 -26
- package/dist/internal/validate-map.mjs +0 -12
- package/dist/internal/validate-map.mjs.map +0 -8
- package/dist/internal/validate-object.d.mts +0 -23
- package/dist/internal/validate-object.mjs +0 -12
- package/dist/internal/validate-object.mjs.map +0 -8
- package/dist/internal/validate-set.d.mts +0 -24
- package/dist/internal/validate-set.mjs +0 -12
- package/dist/internal/validate-set.mjs.map +0 -8
- package/dist/internal/validate-string.d.mts +0 -23
- package/dist/internal/validate-string.mjs +0 -12
- package/dist/internal/validate-string.mjs.map +0 -8
- package/dist/internal/validate-url-string.d.mts +0 -24
- package/dist/internal/validate-url-string.mjs +0 -13
- package/dist/internal/validate-url-string.mjs.map +0 -8
- package/dist/types/declaration.d.mts +0 -9
- package/dist/types/fn-change-ext.d.mts +0 -31
- package/dist/types/index.mjs +0 -0
- package/dist/types/mime-type.d.mts +0 -13
- package/dist/types/module-specifier-type.d.mts +0 -11
- package/dist/types/syntax-kind-export.d.mts +0 -12
- package/dist/types/syntax-kind-import.d.mts +0 -12
- package/dist/types/syntax-kind-require.d.mts +0 -12
- package/dist/utils/compare-subpaths.d.mts +0 -25
- package/dist/utils/compare-subpaths.mjs +0 -19
- package/dist/utils/compare-subpaths.mjs.map +0 -8
- package/dist/utils/conditions.d.mts +0 -13
- package/dist/utils/conditions.mjs +0 -6
- package/dist/utils/conditions.mjs.map +0 -8
- package/dist/utils/detect-syntax.d.mts +0 -21
- package/dist/utils/detect-syntax.mjs +0 -11
- package/dist/utils/detect-syntax.mjs.map +0 -8
- package/dist/utils/extension-format-map.d.mts +0 -16
- package/dist/utils/extension-format-map.mjs +0 -22
- package/dist/utils/extension-format-map.mjs.map +0 -8
- package/dist/utils/extract-statements.d.mts +0 -21
- package/dist/utils/extract-statements.mjs +0 -20
- package/dist/utils/extract-statements.mjs.map +0 -8
- package/dist/utils/fill-modules.d.mts +0 -24
- package/dist/utils/fill-modules.mjs +0 -67
- package/dist/utils/fill-modules.mjs.map +0 -8
- package/dist/utils/find-dynamic-imports.d.mts +0 -18
- package/dist/utils/find-dynamic-imports.mjs +0 -36
- package/dist/utils/find-dynamic-imports.mjs.map +0 -8
- package/dist/utils/find-exports.d.mts +0 -21
- package/dist/utils/find-exports.mjs +0 -92
- package/dist/utils/find-exports.mjs.map +0 -8
- package/dist/utils/find-requires.d.mts +0 -18
- package/dist/utils/find-requires.mjs +0 -32
- package/dist/utils/find-requires.mjs.map +0 -8
- package/dist/utils/find-static-imports.d.mts +0 -18
- package/dist/utils/find-static-imports.mjs +0 -30
- package/dist/utils/find-static-imports.mjs.map +0 -8
- package/dist/utils/find-subpath.d.mts +0 -31
- package/dist/utils/find-subpath.mjs +0 -86
- package/dist/utils/find-subpath.mjs.map +0 -8
- package/dist/utils/get-format.d.mts +0 -31
- package/dist/utils/get-format.mjs +0 -107
- package/dist/utils/get-format.mjs.map +0 -8
- package/dist/utils/get-source.d.mts +0 -30
- package/dist/utils/get-source.mjs +0 -61
- package/dist/utils/get-source.mjs.map +0 -8
- package/dist/utils/has-cjs-syntax.d.mts +0 -25
- package/dist/utils/has-cjs-syntax.mjs +0 -11
- package/dist/utils/has-cjs-syntax.mjs.map +0 -8
- package/dist/utils/has-esm-syntax.d.mts +0 -21
- package/dist/utils/has-esm-syntax.mjs +0 -11
- package/dist/utils/has-esm-syntax.mjs.map +0 -8
- package/dist/utils/index.d.mts +0 -44
- package/dist/utils/index.mjs +0 -83
- package/dist/utils/index.mjs.map +0 -8
- package/dist/utils/is-absolute-specifier.d.mts +0 -20
- package/dist/utils/is-absolute-specifier.mjs +0 -26
- package/dist/utils/is-absolute-specifier.mjs.map +0 -8
- package/dist/utils/is-bare-specifier.d.mts +0 -20
- package/dist/utils/is-bare-specifier.mjs +0 -10
- package/dist/utils/is-bare-specifier.mjs.map +0 -8
- package/dist/utils/is-directory.d.mts +0 -13
- package/dist/utils/is-directory.mjs +0 -14
- package/dist/utils/is-directory.mjs.map +0 -8
- package/dist/utils/is-exports-sugar.d.mts +0 -26
- package/dist/utils/is-exports-sugar.mjs +0 -29
- package/dist/utils/is-exports-sugar.mjs.map +0 -8
- package/dist/utils/is-file.d.mts +0 -13
- package/dist/utils/is-file.mjs +0 -14
- package/dist/utils/is-file.mjs.map +0 -8
- package/dist/utils/is-relative-specifier.d.mts +0 -19
- package/dist/utils/is-relative-specifier.mjs +0 -9
- package/dist/utils/is-relative-specifier.mjs.map +0 -8
- package/dist/utils/lookup-package-scope.d.mts +0 -26
- package/dist/utils/lookup-package-scope.mjs +0 -34
- package/dist/utils/lookup-package-scope.mjs.map +0 -8
- package/dist/utils/parse-data-url.d.mts +0 -25
- package/dist/utils/parse-data-url.mjs +0 -25
- package/dist/utils/parse-data-url.mjs.map +0 -8
- package/dist/utils/parse-module-id.d.mts +0 -20
- package/dist/utils/parse-module-id.mjs +0 -123
- package/dist/utils/parse-module-id.mjs.map +0 -8
- package/dist/utils/parse-subpath.d.mts +0 -35
- package/dist/utils/parse-subpath.mjs +0 -149
- package/dist/utils/parse-subpath.mjs.map +0 -8
- package/dist/utils/pattern-character.d.mts +0 -11
- package/dist/utils/pattern-character.mjs +0 -6
- package/dist/utils/pattern-character.mjs.map +0 -8
- package/dist/utils/read-package-json.d.mts +0 -26
- package/dist/utils/read-package-json.mjs +0 -48
- package/dist/utils/read-package-json.mjs.map +0 -8
- package/dist/utils/resolve-alias.d.mts +0 -20
- package/dist/utils/resolve-alias.mjs +0 -101
- package/dist/utils/resolve-alias.mjs.map +0 -8
- package/dist/utils/resolve-aliases.d.mts +0 -19
- package/dist/utils/resolve-aliases.mjs +0 -26
- package/dist/utils/resolve-aliases.mjs.map +0 -8
- package/dist/utils/resolve-extensions.d.mts +0 -14
- package/dist/utils/resolve-extensions.mjs +0 -22
- package/dist/utils/resolve-extensions.mjs.map +0 -8
- package/dist/utils/resolve-module.d.mts +0 -39
- package/dist/utils/resolve-module.mjs +0 -63
- package/dist/utils/resolve-module.mjs.map +0 -8
- package/dist/utils/resolve-modules.d.mts +0 -25
- package/dist/utils/resolve-modules.mjs +0 -23
- package/dist/utils/resolve-modules.mjs.map +0 -8
- package/dist/utils/to-absolute-specifier.d.mts +0 -22
- package/dist/utils/to-absolute-specifier.mjs +0 -8
- package/dist/utils/to-absolute-specifier.mjs.map +0 -8
- package/dist/utils/to-bare-specifier.d.mts +0 -42
- package/dist/utils/to-bare-specifier.mjs +0 -72
- package/dist/utils/to-bare-specifier.mjs.map +0 -8
- package/dist/utils/to-data-url.d.mts +0 -30
- package/dist/utils/to-data-url.mjs +0 -7
- package/dist/utils/to-data-url.mjs.map +0 -8
- package/dist/utils/to-node-url.d.mts +0 -19
- package/dist/utils/to-node-url.mjs +0 -7
- package/dist/utils/to-node-url.mjs.map +0 -8
- package/dist/utils/to-relative-specifier.d.mts +0 -24
- package/dist/utils/to-relative-specifier.mjs +0 -10
- package/dist/utils/to-relative-specifier.mjs.map +0 -8
- package/dist/utils/to-url.d.mts +0 -21
- package/dist/utils/to-url.mjs +0 -8
- package/dist/utils/to-url.mjs.map +0 -8
- package/dist/utils/validate-assertions.d.mts +0 -23
- package/dist/utils/validate-assertions.mjs +0 -47
- package/dist/utils/validate-assertions.mjs.map +0 -8
- package/dist/utils/validate-exports.d.mts +0 -25
- package/dist/utils/validate-exports.mjs +0 -73
- package/dist/utils/validate-exports.mjs.map +0 -8
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Interfaces - ProtocolMap
|
|
3
|
+
* @module mlly/interfaces/ProtocolMap
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* URL protocol registry.
|
|
7
|
+
*
|
|
8
|
+
* @see https://nodejs.org/api/url.html#urlprotocol
|
|
9
|
+
* @see https://iana.org/assignments/uri-schemes/uri-schemes.xhtml
|
|
10
|
+
* @see https://url.spec.whatwg.org/#special-scheme
|
|
11
|
+
*/
|
|
12
|
+
interface ProtocolMap {
|
|
13
|
+
blob: 'blob:';
|
|
14
|
+
content: 'content:';
|
|
15
|
+
cvs: 'cvs:';
|
|
16
|
+
data: 'data:';
|
|
17
|
+
dns: 'dns:';
|
|
18
|
+
file: 'file:';
|
|
19
|
+
fish: 'fish:';
|
|
20
|
+
ftp: 'ftp:';
|
|
21
|
+
git: 'git:';
|
|
22
|
+
http: 'http:';
|
|
23
|
+
https: 'https:';
|
|
24
|
+
mvn: 'mvn:';
|
|
25
|
+
node: 'node:';
|
|
26
|
+
redis: 'redis:';
|
|
27
|
+
sftp: 'sftp:';
|
|
28
|
+
ssh: 'ssh:';
|
|
29
|
+
svn: 'svn:';
|
|
30
|
+
urn: 'urn:';
|
|
31
|
+
viewSource: 'view-source:';
|
|
32
|
+
ws: 'ws:';
|
|
33
|
+
wss: 'wss:';
|
|
34
|
+
}
|
|
35
|
+
export type { ProtocolMap as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Interfaces - Stats
|
|
3
|
+
* @module mlly/interfaces/Stats
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* File system metadata.
|
|
7
|
+
*/
|
|
8
|
+
interface Stats {
|
|
9
|
+
/**
|
|
10
|
+
* Check if the stats object describes a file system directory.
|
|
11
|
+
*
|
|
12
|
+
* @this {void}
|
|
13
|
+
*
|
|
14
|
+
* @return {boolean}
|
|
15
|
+
* `true` if stats object describes directory, `false` otherwise
|
|
16
|
+
*/
|
|
17
|
+
isDirectory(this: void): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Check if the stats object describes a regular file.
|
|
20
|
+
*
|
|
21
|
+
* @this {void}
|
|
22
|
+
*
|
|
23
|
+
* @return {boolean}
|
|
24
|
+
* `true` if stats object describes regular file, `false` otherwise
|
|
25
|
+
*/
|
|
26
|
+
isFile(this: void): boolean;
|
|
27
|
+
}
|
|
28
|
+
export type { Stats as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import chars from "#internal/chars";
|
|
2
|
+
function checkInvalidSegments(str) {
|
|
3
|
+
const separator = /\/|\\/;
|
|
4
|
+
const segments = str.startsWith("./") ? str.slice(2).split(separator) : str.split(separator);
|
|
5
|
+
const checks = [
|
|
6
|
+
/^(\.|%2e)(\.|%2e)?/i,
|
|
7
|
+
/^(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53)/i
|
|
8
|
+
];
|
|
9
|
+
for (const segment of segments) {
|
|
10
|
+
if (segment === chars.empty || checks.some((check) => check.test(segment))) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
var check_invalid_segments_default = checkInvalidSegments;
|
|
17
|
+
export {
|
|
18
|
+
check_invalid_segments_default as default
|
|
19
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const fs = {
|
|
2
|
+
/**
|
|
3
|
+
* Get the contents of a file.
|
|
4
|
+
*
|
|
5
|
+
* @return {never}
|
|
6
|
+
* Never; not implemented
|
|
7
|
+
* @throws {Error}
|
|
8
|
+
*/
|
|
9
|
+
readFile() {
|
|
10
|
+
throw new Error("[readFile] not implemented");
|
|
11
|
+
},
|
|
12
|
+
/**
|
|
13
|
+
* Get the resolved pathname of a file.
|
|
14
|
+
*
|
|
15
|
+
* @return {never}
|
|
16
|
+
* Never; not implemented
|
|
17
|
+
* @throws {Error}
|
|
18
|
+
*/
|
|
19
|
+
realpath() {
|
|
20
|
+
throw new Error("[realpath] not implemented");
|
|
21
|
+
},
|
|
22
|
+
/**
|
|
23
|
+
* Get information about a file.
|
|
24
|
+
*
|
|
25
|
+
* @return {never}
|
|
26
|
+
* Never; not implemented
|
|
27
|
+
* @throws {Error}
|
|
28
|
+
*/
|
|
29
|
+
stat() {
|
|
30
|
+
throw new Error("[stat] not implemented");
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var fs_browser_default = fs;
|
|
34
|
+
export {
|
|
35
|
+
fs_browser_default as default
|
|
36
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import chars from "#internal/chars";
|
|
2
|
+
import {
|
|
3
|
+
ERR_INVALID_PACKAGE_TARGET
|
|
4
|
+
} from "@flex-development/errnode";
|
|
5
|
+
import { fileURLToPath } from "@flex-development/pathe";
|
|
6
|
+
function invalidPackageTarget(packageUrl, subpath, target, isImports, parent) {
|
|
7
|
+
return new ERR_INVALID_PACKAGE_TARGET(
|
|
8
|
+
fileURLToPath(packageUrl),
|
|
9
|
+
subpath,
|
|
10
|
+
typeof target === "object" && target !== null ? JSON.stringify(target, null, "") : String(target) + (typeof target === "bigint" ? "n" : chars.empty),
|
|
11
|
+
isImports,
|
|
12
|
+
parent && fileURLToPath(parent)
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
var invalid_package_target_default = invalidPackageTarget;
|
|
16
|
+
export {
|
|
17
|
+
invalid_package_target_default as default
|
|
18
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import chars from "#internal/chars";
|
|
2
|
+
import {
|
|
3
|
+
ERR_INVALID_MODULE_SPECIFIER
|
|
4
|
+
} from "@flex-development/errnode";
|
|
5
|
+
import { fileURLToPath } from "@flex-development/pathe";
|
|
6
|
+
function invalidSubpath(subpath, patternMatch, packageUrl, isImports, parent) {
|
|
7
|
+
return new ERR_INVALID_MODULE_SPECIFIER(
|
|
8
|
+
subpath.replace(chars.asterisk, () => patternMatch),
|
|
9
|
+
`request is not a valid match in pattern "${subpath}" for the "${isImports ? "imports" : "exports"}" resolution of ${fileURLToPath(new URL("package.json", packageUrl))}`,
|
|
10
|
+
parent && fileURLToPath(parent)
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
var invalid_subpath_default = invalidSubpath;
|
|
14
|
+
export {
|
|
15
|
+
invalid_subpath_default as default
|
|
16
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file canParseUrl
|
|
3
|
+
* @module mlly/lib/canParseUrl
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Check if `input` can be parsed to a {@linkcode URL}.
|
|
7
|
+
*
|
|
8
|
+
* > 👉 **Note**: If `input` is relative, `base` is required. If `input` is
|
|
9
|
+
* > absolute, `base` is ignored.
|
|
10
|
+
*
|
|
11
|
+
* @see {@linkcode ModuleId}
|
|
12
|
+
*
|
|
13
|
+
* @param {unknown} input
|
|
14
|
+
* The absolute or relative input URL to parse
|
|
15
|
+
* @param {unknown} [base]
|
|
16
|
+
* Base URL to resolve against if `input` is not absolute
|
|
17
|
+
* @return {boolean}
|
|
18
|
+
* `true` if `input` can be parsed to a `URL`
|
|
19
|
+
*/
|
|
20
|
+
declare function canParseUrl(input: unknown, base?: unknown): boolean;
|
|
21
|
+
export default canParseUrl;
|
package/dist/lib/cwd.mjs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file defaultConditions
|
|
3
|
+
* @module mlly/lib/defaultConditions
|
|
4
|
+
*/
|
|
5
|
+
import type { Condition } from '@flex-development/pkg-types';
|
|
6
|
+
/**
|
|
7
|
+
* Default conditions.
|
|
8
|
+
*
|
|
9
|
+
* @see {@linkcode Condition}
|
|
10
|
+
* @see https://nodejs.org/api/packages.html#conditional-exports
|
|
11
|
+
*
|
|
12
|
+
* @const {Set<Condition>} defaultConditions
|
|
13
|
+
*/
|
|
14
|
+
declare const defaultConditions: Set<Condition>;
|
|
15
|
+
export default defaultConditions;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file defaultExtensions
|
|
3
|
+
* @module mlly/lib/defaultExtensions
|
|
4
|
+
*/
|
|
5
|
+
import type { Ext } from '@flex-development/pathe';
|
|
6
|
+
/**
|
|
7
|
+
* Default resolvable file extensions.
|
|
8
|
+
*
|
|
9
|
+
* @see {@linkcode Ext}
|
|
10
|
+
*
|
|
11
|
+
* @const {Set<Ext>} defaultExtensions
|
|
12
|
+
*/
|
|
13
|
+
declare const defaultExtensions: Set<Ext>;
|
|
14
|
+
export default defaultExtensions;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const defaultExtensions = /* @__PURE__ */ new Set([
|
|
2
|
+
".mjs",
|
|
3
|
+
".mts",
|
|
4
|
+
".cjs",
|
|
5
|
+
".cts",
|
|
6
|
+
".js",
|
|
7
|
+
".ts",
|
|
8
|
+
".jsx",
|
|
9
|
+
".tsx",
|
|
10
|
+
".css",
|
|
11
|
+
".json",
|
|
12
|
+
".node",
|
|
13
|
+
".wasm",
|
|
14
|
+
".d.mts",
|
|
15
|
+
".d.cts",
|
|
16
|
+
".d.ts"
|
|
17
|
+
]);
|
|
18
|
+
var default_extensions_default = defaultExtensions;
|
|
19
|
+
export {
|
|
20
|
+
default_extensions_default as default
|
|
21
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file defaultMainFields
|
|
3
|
+
* @module mlly/lib/defaultMainFields
|
|
4
|
+
*/
|
|
5
|
+
import type { MainField } from '@flex-development/mlly';
|
|
6
|
+
/**
|
|
7
|
+
* Default main fields.
|
|
8
|
+
*
|
|
9
|
+
* @see {@linkcode MainField}
|
|
10
|
+
*
|
|
11
|
+
* @const {Set<MainField>} defaultMainFields
|
|
12
|
+
*/
|
|
13
|
+
declare const defaultMainFields: Set<MainField>;
|
|
14
|
+
export default defaultMainFields;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file extensionFormatMap
|
|
3
|
+
* @module mlly/lib/extensionFormatMap
|
|
4
|
+
*/
|
|
5
|
+
import type { ModuleFormat } from '@flex-development/mlly';
|
|
6
|
+
import type { Ext } from '@flex-development/pathe';
|
|
7
|
+
/**
|
|
8
|
+
* File extension to module format map.
|
|
9
|
+
*
|
|
10
|
+
* @see {@linkcode Ext}
|
|
11
|
+
* @see {@linkcode ModuleFormat}
|
|
12
|
+
*
|
|
13
|
+
* @const {Map<Ext, ModuleFormat>} extensionFormatMap
|
|
14
|
+
*/
|
|
15
|
+
declare const extensionFormatMap: Map<Ext, ModuleFormat>;
|
|
16
|
+
export default extensionFormatMap;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import formats from "#lib/formats";
|
|
2
|
+
const extensionFormatMap = /* @__PURE__ */ new Map([
|
|
3
|
+
[".cjs", formats.commonjs],
|
|
4
|
+
[".cts", formats.cts],
|
|
5
|
+
[".d.cts", formats.cts],
|
|
6
|
+
[".d.mts", formats.mts],
|
|
7
|
+
[".d.ts", formats.mts],
|
|
8
|
+
[".js", formats.module],
|
|
9
|
+
[".json", formats.json],
|
|
10
|
+
[".jsx", formats.module],
|
|
11
|
+
[".mjs", formats.module],
|
|
12
|
+
[".mts", formats.mts],
|
|
13
|
+
[".node", formats.commonjs],
|
|
14
|
+
[".ts", formats.mts],
|
|
15
|
+
[".tsx", formats.mts],
|
|
16
|
+
[".wasm", formats.wasm]
|
|
17
|
+
]);
|
|
18
|
+
var extension_format_map_default = extensionFormatMap;
|
|
19
|
+
export {
|
|
20
|
+
extension_format_map_default as default
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file formats
|
|
3
|
+
* @module mlly/lib/formats
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Module formats.
|
|
7
|
+
*
|
|
8
|
+
* @see {@linkcode ModuleFormat}
|
|
9
|
+
*
|
|
10
|
+
* @enum {ModuleFormat}
|
|
11
|
+
*/
|
|
12
|
+
declare enum formats {
|
|
13
|
+
builtin = "builtin",
|
|
14
|
+
commonjs = "commonjs",
|
|
15
|
+
cts = "commonjs-typescript",
|
|
16
|
+
json = "json",
|
|
17
|
+
module = "module",
|
|
18
|
+
mts = "module-typescript",
|
|
19
|
+
wasm = "wasm"
|
|
20
|
+
}
|
|
21
|
+
export default formats;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var formats = /* @__PURE__ */ ((formats2) => {
|
|
2
|
+
formats2["builtin"] = "builtin";
|
|
3
|
+
formats2["commonjs"] = "commonjs";
|
|
4
|
+
formats2["cts"] = "commonjs-typescript";
|
|
5
|
+
formats2["json"] = "json";
|
|
6
|
+
formats2["module"] = "module";
|
|
7
|
+
formats2["mts"] = "module-typescript";
|
|
8
|
+
formats2["wasm"] = "wasm";
|
|
9
|
+
return formats2;
|
|
10
|
+
})(formats || {});
|
|
11
|
+
var formats_default = formats;
|
|
12
|
+
export {
|
|
13
|
+
formats_default as default
|
|
14
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file getSource
|
|
3
|
+
* @module mlly/lib/getSource
|
|
4
|
+
*/
|
|
5
|
+
import type { GetSourceOptions, ModuleId } from '@flex-development/mlly';
|
|
6
|
+
export default getSource;
|
|
7
|
+
/**
|
|
8
|
+
* Get the source code for `id`.
|
|
9
|
+
*
|
|
10
|
+
* @see {@linkcode ErrUnsupportedEsmUrlScheme}
|
|
11
|
+
* @see {@linkcode GetSourceOptions}
|
|
12
|
+
* @see {@linkcode ModuleId}
|
|
13
|
+
*
|
|
14
|
+
* @async
|
|
15
|
+
*
|
|
16
|
+
* @this {void}
|
|
17
|
+
*
|
|
18
|
+
* @param {ModuleId} id
|
|
19
|
+
* Module id to handle
|
|
20
|
+
* @param {GetSourceOptions | null | undefined} [options]
|
|
21
|
+
* Source code retrieval options
|
|
22
|
+
* @return {Promise<string | null | undefined>}
|
|
23
|
+
* Source code for `id`
|
|
24
|
+
* @throws {ErrUnsupportedEsmUrlScheme}
|
|
25
|
+
*/
|
|
26
|
+
declare function getSource(this: void, id: ModuleId, options?: GetSourceOptions | null | undefined): Promise<string | null | undefined>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import fs from "#internal/fs";
|
|
2
|
+
import process from "#internal/process";
|
|
3
|
+
import isFile from "#lib/is-file";
|
|
4
|
+
import toUrl from "#lib/to-url";
|
|
5
|
+
import {
|
|
6
|
+
ERR_UNSUPPORTED_ESM_URL_SCHEME
|
|
7
|
+
} from "@flex-development/errnode";
|
|
8
|
+
import { ok } from "devlop";
|
|
9
|
+
var get_source_default = getSource;
|
|
10
|
+
async function getSource(id, options) {
|
|
11
|
+
const context = {
|
|
12
|
+
...options,
|
|
13
|
+
error: false,
|
|
14
|
+
fs: options?.fs ?? fs,
|
|
15
|
+
handlers: {
|
|
16
|
+
"data:": data,
|
|
17
|
+
"file:": file,
|
|
18
|
+
"http:": https,
|
|
19
|
+
"https:": https,
|
|
20
|
+
"node:": node,
|
|
21
|
+
...options?.handlers
|
|
22
|
+
},
|
|
23
|
+
req: { ...options?.req },
|
|
24
|
+
schemes: new Set(
|
|
25
|
+
options?.schemes ? [...options.schemes] : ["data", "file", "http", "https", "node"]
|
|
26
|
+
)
|
|
27
|
+
};
|
|
28
|
+
const url = toUrl(id);
|
|
29
|
+
const handle = context.handlers[url.protocol];
|
|
30
|
+
let code;
|
|
31
|
+
if (handle) {
|
|
32
|
+
code = await handle.call(context, url);
|
|
33
|
+
} else {
|
|
34
|
+
context.error = true;
|
|
35
|
+
}
|
|
36
|
+
if (context.error && !context.ignoreErrors) {
|
|
37
|
+
throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(
|
|
38
|
+
url,
|
|
39
|
+
[...context.schemes],
|
|
40
|
+
process.platform === "win32"
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
if (code !== null && code !== void 0) code = String(code);
|
|
44
|
+
return code;
|
|
45
|
+
}
|
|
46
|
+
function data(url) {
|
|
47
|
+
const [mime, data2 = ""] = url.pathname.split(",");
|
|
48
|
+
ok(url.protocol === "data:", "expected `data:` URL");
|
|
49
|
+
ok(mime !== void 0, "expected `mime` to be a string");
|
|
50
|
+
return Buffer.from(
|
|
51
|
+
decodeURIComponent(data2),
|
|
52
|
+
mime.endsWith("base64") ? "base64" : "utf8"
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
async function file(url) {
|
|
56
|
+
ok(url.protocol === "file:", "expected `file:` URL");
|
|
57
|
+
let code = null;
|
|
58
|
+
if (await isFile(url, this.fs)) code = await this.fs.readFile(url);
|
|
59
|
+
return code;
|
|
60
|
+
}
|
|
61
|
+
async function https(url) {
|
|
62
|
+
ok(/^https?:$/.test(url.protocol), "expected `http:` or `https:` URL");
|
|
63
|
+
return (await fetch(url.href, this.req)).text();
|
|
64
|
+
}
|
|
65
|
+
function node(url) {
|
|
66
|
+
return void ok(url.protocol === "node:", "expected `node:` URL");
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
get_source_default as default
|
|
70
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Entry Point - Library
|
|
3
|
+
* @module mlly/lib
|
|
4
|
+
*
|
|
5
|
+
* @todo `detectModuleSyntax` (esast integration)
|
|
6
|
+
* @todo `findDynamicImports` (esast integration)
|
|
7
|
+
* @todo `findExports` (esast integration)
|
|
8
|
+
* @todo `findImports` (esast integration)
|
|
9
|
+
* @todo `findRequires` (esast integration)
|
|
10
|
+
* @todo `findSpecifiers` (esast integration)
|
|
11
|
+
* @todo `findStaticImports` (esast integration)
|
|
12
|
+
* @todo `resolveAliases` (esast integration)
|
|
13
|
+
* @todo `resolveModules` (esast integration)
|
|
14
|
+
*/
|
|
15
|
+
export { default as canParseUrl } from '#lib/can-parse-url';
|
|
16
|
+
export { default as cwd } from '#lib/cwd';
|
|
17
|
+
export { default as defaultConditions } from '#lib/default-conditions';
|
|
18
|
+
export { default as defaultExtensions } from '#lib/default-extensions';
|
|
19
|
+
export { default as defaultMainFields } from '#lib/default-main-fields';
|
|
20
|
+
export { default as extensionFormatMap } from '#lib/extension-format-map';
|
|
21
|
+
export { default as formats } from '#lib/formats';
|
|
22
|
+
export { default as getSource } from '#lib/get-source';
|
|
23
|
+
export { default as isAbsoluteSpecifier } from '#lib/is-absolute-specifier';
|
|
24
|
+
export { default as isArrayIndex } from '#lib/is-array-index';
|
|
25
|
+
export { default as isBareSpecifier } from '#lib/is-bare-specifier';
|
|
26
|
+
export { default as isDirectory } from '#lib/is-directory';
|
|
27
|
+
export { default as isFile } from '#lib/is-file';
|
|
28
|
+
export { default as isImportsSubpath } from '#lib/is-imports-subpath';
|
|
29
|
+
export { default as isRelativeSpecifier } from '#lib/is-relative-specifier';
|
|
30
|
+
export { default as lookupPackageScope } from '#lib/lookup-package-scope';
|
|
31
|
+
export { default as patternKeyCompare } from '#lib/pattern-key-compare';
|
|
32
|
+
export { default as patternMatch } from '#lib/pattern-match';
|
|
33
|
+
export { default as readPackageJson } from '#lib/read-package-json';
|
|
34
|
+
export { default as resolveAlias } from '#lib/resolve-alias';
|
|
35
|
+
export { default as resolveModule } from '#lib/resolve-module';
|
|
36
|
+
export * from '#lib/resolver';
|
|
37
|
+
export * as resolver from '#lib/resolver';
|
|
38
|
+
export { default as root } from '#lib/root';
|
|
39
|
+
export { default as toRelativeSpecifier } from '#lib/to-relative-specifier';
|
|
40
|
+
export { default as toUrl } from '#lib/to-url';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { default as default2 } from "#lib/can-parse-url";
|
|
2
|
+
import { default as default3 } from "#lib/cwd";
|
|
3
|
+
import { default as default4 } from "#lib/default-conditions";
|
|
4
|
+
import { default as default5 } from "#lib/default-extensions";
|
|
5
|
+
import { default as default6 } from "#lib/default-main-fields";
|
|
6
|
+
import { default as default7 } from "#lib/extension-format-map";
|
|
7
|
+
import { default as default8 } from "#lib/formats";
|
|
8
|
+
import { default as default9 } from "#lib/get-source";
|
|
9
|
+
import { default as default10 } from "#lib/is-absolute-specifier";
|
|
10
|
+
import { default as default11 } from "#lib/is-array-index";
|
|
11
|
+
import { default as default12 } from "#lib/is-bare-specifier";
|
|
12
|
+
import { default as default13 } from "#lib/is-directory";
|
|
13
|
+
import { default as default14 } from "#lib/is-file";
|
|
14
|
+
import { default as default15 } from "#lib/is-imports-subpath";
|
|
15
|
+
import { default as default16 } from "#lib/is-relative-specifier";
|
|
16
|
+
import { default as default17 } from "#lib/lookup-package-scope";
|
|
17
|
+
import { default as default18 } from "#lib/pattern-key-compare";
|
|
18
|
+
import { default as default19 } from "#lib/pattern-match";
|
|
19
|
+
import { default as default20 } from "#lib/read-package-json";
|
|
20
|
+
import { default as default21 } from "#lib/resolve-alias";
|
|
21
|
+
import { default as default22 } from "#lib/resolve-module";
|
|
22
|
+
export * from "#lib/resolver";
|
|
23
|
+
import * as resolver from "#lib/resolver";
|
|
24
|
+
import { default as default23 } from "#lib/root";
|
|
25
|
+
import { default as default24 } from "#lib/to-relative-specifier";
|
|
26
|
+
import { default as default25 } from "#lib/to-url";
|
|
27
|
+
export {
|
|
28
|
+
default2 as canParseUrl,
|
|
29
|
+
default3 as cwd,
|
|
30
|
+
default4 as defaultConditions,
|
|
31
|
+
default5 as defaultExtensions,
|
|
32
|
+
default6 as defaultMainFields,
|
|
33
|
+
default7 as extensionFormatMap,
|
|
34
|
+
default8 as formats,
|
|
35
|
+
default9 as getSource,
|
|
36
|
+
default10 as isAbsoluteSpecifier,
|
|
37
|
+
default11 as isArrayIndex,
|
|
38
|
+
default12 as isBareSpecifier,
|
|
39
|
+
default13 as isDirectory,
|
|
40
|
+
default14 as isFile,
|
|
41
|
+
default15 as isImportsSubpath,
|
|
42
|
+
default16 as isRelativeSpecifier,
|
|
43
|
+
default17 as lookupPackageScope,
|
|
44
|
+
default18 as patternKeyCompare,
|
|
45
|
+
default19 as patternMatch,
|
|
46
|
+
default20 as readPackageJson,
|
|
47
|
+
default21 as resolveAlias,
|
|
48
|
+
default22 as resolveModule,
|
|
49
|
+
resolver,
|
|
50
|
+
default23 as root,
|
|
51
|
+
default24 as toRelativeSpecifier,
|
|
52
|
+
default25 as toUrl
|
|
53
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file isAbsoluteSpecifier
|
|
3
|
+
* @module mlly/lib/isAbsoluteSpecifier
|
|
4
|
+
*/
|
|
5
|
+
import type { ModuleId } from '@flex-development/mlly';
|
|
6
|
+
/**
|
|
7
|
+
* Check if `specifier` is an *absolute specifier*.
|
|
8
|
+
*
|
|
9
|
+
* ::: warning
|
|
10
|
+
* Only checks specifier syntax. Does **not** guarantee the specifier references
|
|
11
|
+
* a file that exists.
|
|
12
|
+
* :::
|
|
13
|
+
*
|
|
14
|
+
* @see {@linkcode ModuleId}
|
|
15
|
+
* @see https://nodejs.org/api/esm.html#terminology
|
|
16
|
+
*
|
|
17
|
+
* @param {ModuleId} specifier
|
|
18
|
+
* Specifier to check
|
|
19
|
+
* @return {boolean}
|
|
20
|
+
* `true` if `specifier` is absolute specifier, `false` otherwise
|
|
21
|
+
*/
|
|
22
|
+
declare function isAbsoluteSpecifier(specifier: ModuleId): boolean;
|
|
23
|
+
export default isAbsoluteSpecifier;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import canParseUrl from "#lib/can-parse-url";
|
|
2
|
+
import pathe from "@flex-development/pathe";
|
|
3
|
+
function isAbsoluteSpecifier(specifier) {
|
|
4
|
+
return typeof specifier === "string" ? specifier.startsWith("file:") ? canParseUrl(specifier) : pathe.isAbsolute(specifier) : specifier.protocol === "file:" && canParseUrl(specifier);
|
|
5
|
+
}
|
|
6
|
+
var is_absolute_specifier_default = isAbsoluteSpecifier;
|
|
7
|
+
export {
|
|
8
|
+
is_absolute_specifier_default as default
|
|
9
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file isArrayIndex
|
|
3
|
+
* @module mlly/lib/isArrayIndex
|
|
4
|
+
*/
|
|
5
|
+
import type { Numeric } from '@flex-development/mlly';
|
|
6
|
+
/**
|
|
7
|
+
* Check if `value` is a valid array index.
|
|
8
|
+
*
|
|
9
|
+
* @see {@linkcode Numeric}
|
|
10
|
+
*
|
|
11
|
+
* @param {unknown} value
|
|
12
|
+
* Key to check
|
|
13
|
+
* @return {value is Numeric}
|
|
14
|
+
* `true` if `value` is valid array index, `false` otherwise
|
|
15
|
+
*/
|
|
16
|
+
declare function isArrayIndex(value: unknown): value is Numeric;
|
|
17
|
+
export default isArrayIndex;
|