@flex-development/mlly 1.0.0-alpha.15 → 1.0.0-alpha.16
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 +181 -0
- package/README.md +1 -0
- package/dist/enums/assert-type.mjs +1 -7
- package/dist/enums/format.mjs +1 -10
- package/dist/enums/index.mjs +0 -1
- package/dist/enums/kind-specifier-syntax.mjs +1 -7
- package/dist/enums/kind-specifier.mjs +1 -8
- package/dist/enums/kind-statement-syntax.mjs +1 -15
- package/dist/enums/kind-statement.mjs +1 -8
- package/dist/index.mjs.map +5 -2
- package/dist/interfaces/import-dynamic.d.mts +1 -3
- package/dist/interfaces/import-static.d.mts +1 -3
- package/dist/interfaces/index.mjs +0 -1
- package/dist/interfaces/options-find-subpath.d.mts +4 -3
- package/dist/interfaces/options-get-format.d.mts +7 -7
- package/dist/interfaces/options-get-source.d.mts +5 -4
- package/dist/interfaces/options-parse-module-id.d.mts +4 -3
- package/dist/interfaces/options-parse-subpath.d.mts +4 -3
- package/dist/interfaces/options-resolve-alias.d.mts +5 -5
- package/dist/interfaces/options-resolve-module.d.mts +6 -6
- package/dist/internal/dequote.d.mts +14 -0
- package/dist/internal/dequote.mjs +6 -0
- package/dist/internal/format-type-map.d.mts +2 -0
- package/dist/internal/format-type-map.mjs +0 -1
- package/dist/internal/get-specifier-kind.d.mts +2 -0
- package/dist/internal/get-specifier-kind.mjs +3 -7
- package/dist/internal/get-subpaths.d.mts +5 -2
- package/dist/internal/get-subpaths.mjs +2 -5
- package/dist/internal/regex-encoded-sep.d.mts +2 -0
- package/dist/internal/regex-encoded-sep.mjs +0 -1
- package/dist/internal/regex-internal-specifier.d.mts +2 -0
- package/dist/internal/regex-internal-specifier.mjs +0 -1
- package/dist/internal/regex-invalid-segment.d.mts +2 -0
- package/dist/internal/regex-invalid-segment.mjs +4 -7
- package/dist/internal/regex-package-name.d.mts +2 -0
- package/dist/internal/regex-package-name.mjs +0 -1
- package/dist/internal/regex-package-path.d.mts +2 -0
- package/dist/internal/regex-package-path.mjs +0 -1
- package/dist/internal/resolver.d.mts +5 -3
- package/dist/internal/resolver.mjs +115 -130
- package/dist/internal/validate-array-set.d.mts +7 -5
- package/dist/internal/validate-array-set.mjs +5 -5
- package/dist/internal/validate-boolean.d.mts +4 -2
- package/dist/internal/validate-boolean.mjs +3 -3
- package/dist/internal/validate-map.d.mts +10 -7
- package/dist/internal/validate-map.mjs +5 -5
- package/dist/internal/validate-object.d.mts +9 -9
- package/dist/internal/validate-object.mjs +3 -3
- package/dist/internal/validate-set.d.mts +7 -5
- package/dist/internal/validate-set.mjs +5 -5
- package/dist/internal/validate-string.d.mts +5 -2
- package/dist/internal/validate-string.mjs +3 -3
- package/dist/internal/validate-url-string.d.mts +4 -2
- package/dist/internal/validate-url-string.mjs +3 -3
- package/dist/types/fn-change-ext.d.mts +7 -4
- package/dist/types/index.mjs +0 -1
- package/dist/utils/compare-subpaths.mjs +5 -10
- package/dist/utils/compare-subpaths.mjs.map +6 -3
- package/dist/utils/conditions.mjs.map +5 -2
- package/dist/utils/detect-syntax.mjs +1 -2
- package/dist/utils/detect-syntax.mjs.map +6 -3
- package/dist/utils/extension-format-map.mjs.map +5 -2
- package/dist/utils/extract-statements.mjs +6 -7
- package/dist/utils/extract-statements.mjs.map +6 -3
- package/dist/utils/fill-modules.mjs +43 -46
- package/dist/utils/fill-modules.mjs.map +9 -4
- package/dist/utils/find-dynamic-imports.mjs +23 -26
- package/dist/utils/find-dynamic-imports.mjs.map +9 -4
- package/dist/utils/find-exports.mjs +15 -20
- package/dist/utils/find-exports.mjs.map +9 -4
- package/dist/utils/find-requires.mjs +5 -5
- package/dist/utils/find-requires.mjs.map +9 -4
- package/dist/utils/find-static-imports.mjs +17 -21
- package/dist/utils/find-static-imports.mjs.map +9 -4
- package/dist/utils/find-subpath.d.mts +3 -3
- package/dist/utils/find-subpath.mjs +52 -74
- package/dist/utils/find-subpath.mjs.map +10 -4
- package/dist/utils/get-format.mjs +18 -33
- package/dist/utils/get-format.mjs.map +9 -4
- package/dist/utils/get-source.d.mts +3 -2
- package/dist/utils/get-source.mjs +10 -19
- package/dist/utils/get-source.mjs.map +6 -3
- package/dist/utils/has-cjs-syntax.mjs.map +5 -2
- package/dist/utils/has-esm-syntax.mjs.map +5 -2
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.mjs +46 -42
- package/dist/utils/index.mjs.map +9 -4
- package/dist/utils/is-absolute-specifier.mjs +5 -6
- package/dist/utils/is-absolute-specifier.mjs.map +6 -3
- package/dist/utils/is-bare-specifier.mjs +2 -4
- package/dist/utils/is-bare-specifier.mjs.map +6 -3
- package/dist/utils/is-directory.mjs +14 -0
- package/dist/utils/is-directory.mjs.map +9 -0
- package/dist/utils/is-exports-sugar.d.mts +3 -2
- package/dist/utils/is-exports-sugar.mjs +16 -13
- package/dist/utils/is-exports-sugar.mjs.map +6 -3
- package/dist/utils/is-file.mjs +14 -0
- package/dist/utils/is-file.mjs.map +9 -0
- package/dist/utils/is-relative-specifier.d.mts +0 -1
- package/dist/utils/is-relative-specifier.mjs +2 -4
- package/dist/utils/is-relative-specifier.mjs.map +6 -3
- package/dist/utils/lookup-package-scope.d.mts +1 -1
- package/dist/utils/lookup-package-scope.mjs +4 -8
- package/dist/utils/lookup-package-scope.mjs.map +6 -3
- package/dist/utils/parse-data-url.mjs +4 -4
- package/dist/utils/parse-data-url.mjs.map +6 -3
- package/dist/utils/parse-module-id.mjs +22 -24
- package/dist/utils/parse-module-id.mjs.map +10 -4
- package/dist/utils/parse-subpath.d.mts +3 -2
- package/dist/utils/parse-subpath.mjs +40 -55
- package/dist/utils/parse-subpath.mjs.map +9 -4
- package/dist/utils/pattern-character.mjs.map +5 -2
- package/dist/utils/read-package-json.mjs +12 -9
- package/dist/utils/read-package-json.mjs.map +6 -3
- package/dist/utils/resolve-alias.mjs +28 -34
- package/dist/utils/resolve-alias.mjs.map +10 -4
- package/dist/utils/resolve-aliases.mjs +15 -17
- package/dist/utils/resolve-aliases.mjs.map +6 -3
- package/dist/utils/resolve-extensions.mjs.map +5 -2
- package/dist/utils/resolve-module.mjs +10 -26
- package/dist/utils/resolve-module.mjs.map +6 -3
- package/dist/utils/resolve-modules.mjs +12 -15
- package/dist/utils/resolve-modules.mjs.map +6 -3
- package/dist/utils/to-absolute-specifier.mjs.map +5 -2
- package/dist/utils/to-bare-specifier.mjs +18 -38
- package/dist/utils/to-bare-specifier.mjs.map +6 -3
- package/dist/utils/to-data-url.mjs +1 -5
- package/dist/utils/to-data-url.mjs.map +6 -3
- package/dist/utils/to-node-url.mjs +1 -4
- package/dist/utils/to-node-url.mjs.map +6 -3
- package/dist/utils/to-relative-specifier.mjs +2 -16
- package/dist/utils/to-relative-specifier.mjs.map +6 -3
- package/dist/utils/to-url.mjs +1 -5
- package/dist/utils/to-url.mjs.map +6 -3
- package/dist/utils/validate-assertions.d.mts +2 -2
- package/dist/utils/validate-assertions.mjs +14 -21
- package/dist/utils/validate-assertions.mjs.map +9 -4
- package/dist/utils/validate-exports.d.mts +3 -2
- package/dist/utils/validate-exports.mjs +25 -24
- package/dist/utils/validate-exports.mjs.map +6 -3
- package/package.json +89 -81
- package/src/interfaces/import-dynamic.ts +1 -3
- package/src/interfaces/import-static.ts +1 -5
- package/src/interfaces/options-find-subpath.ts +4 -3
- package/src/interfaces/options-get-format.ts +7 -7
- package/src/interfaces/options-get-source.ts +5 -4
- package/src/interfaces/options-parse-module-id.ts +4 -3
- package/src/interfaces/options-parse-subpath.ts +4 -3
- package/src/interfaces/options-resolve-alias.ts +5 -5
- package/src/interfaces/options-resolve-module.ts +6 -6
- package/src/internal/dequote.ts +18 -0
- package/src/internal/format-type-map.ts +2 -0
- package/src/internal/get-specifier-kind.ts +7 -4
- package/src/internal/get-subpaths.ts +7 -5
- package/src/internal/regex-encoded-sep.ts +2 -0
- package/src/internal/regex-internal-specifier.ts +2 -0
- package/src/internal/regex-invalid-segment.ts +2 -0
- package/src/internal/regex-package-name.ts +2 -0
- package/src/internal/regex-package-path.ts +2 -0
- package/src/internal/resolver.ts +71 -49
- package/src/internal/validate-array-set.ts +10 -7
- package/src/internal/validate-boolean.ts +6 -3
- package/src/internal/validate-map.ts +12 -9
- package/src/internal/validate-object.ts +10 -10
- package/src/internal/validate-set.ts +9 -9
- package/src/internal/validate-string.ts +7 -3
- package/src/internal/validate-url-string.ts +6 -3
- package/src/types/fn-change-ext.ts +7 -7
- package/src/utils/extract-statements.ts +11 -7
- package/src/utils/fill-modules.ts +70 -62
- package/src/utils/find-dynamic-imports.ts +6 -6
- package/src/utils/find-exports.ts +19 -29
- package/src/utils/find-requires.ts +6 -6
- package/src/utils/find-static-imports.ts +11 -14
- package/src/utils/find-subpath.ts +140 -139
- package/src/utils/get-format.ts +27 -21
- package/src/utils/get-source.ts +5 -5
- package/src/utils/index.ts +2 -0
- package/src/utils/is-bare-specifier.ts +2 -1
- package/src/{internal → utils}/is-directory.ts +1 -1
- package/src/utils/is-exports-sugar.ts +16 -9
- package/src/{internal → utils}/is-file.ts +1 -1
- package/src/utils/is-relative-specifier.ts +5 -6
- package/src/utils/lookup-package-scope.ts +2 -2
- package/src/utils/parse-data-url.ts +3 -3
- package/src/utils/parse-module-id.ts +16 -8
- package/src/utils/parse-subpath.ts +32 -19
- package/src/utils/read-package-json.ts +13 -6
- package/src/utils/resolve-alias.ts +19 -15
- package/src/utils/resolve-aliases.ts +25 -25
- package/src/utils/resolve-module.ts +4 -5
- package/src/utils/resolve-modules.ts +19 -21
- package/src/utils/to-bare-specifier.ts +12 -7
- package/src/utils/to-relative-specifier.ts +2 -1
- package/src/utils/validate-assertions.ts +12 -7
- package/src/utils/validate-exports.ts +25 -18
- package/dist/enums/assert-type.mjs.map +0 -6
- package/dist/enums/format.mjs.map +0 -6
- package/dist/enums/index.mjs.map +0 -6
- package/dist/enums/kind-specifier-syntax.mjs.map +0 -6
- package/dist/enums/kind-specifier.mjs.map +0 -6
- package/dist/enums/kind-statement-syntax.mjs.map +0 -6
- package/dist/enums/kind-statement.mjs.map +0 -6
- package/dist/interfaces/index.mjs.map +0 -6
- package/dist/internal/escape-reg-exp.d.mts +0 -16
- package/dist/internal/escape-reg-exp.mjs +0 -10
- package/dist/internal/escape-reg-exp.mjs.map +0 -6
- package/dist/internal/format-type-map.mjs.map +0 -6
- package/dist/internal/get-specifier-kind.mjs.map +0 -6
- package/dist/internal/get-subpaths.mjs.map +0 -6
- package/dist/internal/is-array-index.d.mts +0 -15
- package/dist/internal/is-array-index.mjs +0 -9
- package/dist/internal/is-array-index.mjs.map +0 -6
- package/dist/internal/is-directory.mjs +0 -16
- package/dist/internal/is-directory.mjs.map +0 -6
- package/dist/internal/is-file.mjs +0 -16
- package/dist/internal/is-file.mjs.map +0 -6
- package/dist/internal/is-function.d.mts +0 -12
- package/dist/internal/is-function.mjs +0 -8
- package/dist/internal/is-function.mjs.map +0 -6
- package/dist/internal/regex-encoded-sep.mjs.map +0 -6
- package/dist/internal/regex-internal-specifier.mjs.map +0 -6
- package/dist/internal/regex-invalid-segment.mjs.map +0 -6
- package/dist/internal/regex-package-name.mjs.map +0 -6
- package/dist/internal/regex-package-path.mjs.map +0 -6
- package/dist/internal/resolver.mjs.map +0 -6
- package/dist/internal/validate-array-set.mjs.map +0 -6
- package/dist/internal/validate-boolean.mjs.map +0 -6
- package/dist/internal/validate-map.mjs.map +0 -6
- package/dist/internal/validate-object.mjs.map +0 -6
- package/dist/internal/validate-set.mjs.map +0 -6
- package/dist/internal/validate-string.mjs.map +0 -6
- package/dist/internal/validate-url-string.mjs.map +0 -6
- package/dist/types/index.mjs.map +0 -6
- package/src/internal/escape-reg-exp.ts +0 -24
- package/src/internal/is-array-index.ts +0 -28
- package/src/internal/is-function.ts +0 -16
- /package/dist/{internal → utils}/is-directory.d.mts +0 -0
- /package/dist/{internal → utils}/is-file.d.mts +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module mlly/types/ChangeExtFn
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { Nilable } from '@flex-development/tutils'
|
|
6
|
+
import type { Fn, Nilable } from '@flex-development/tutils'
|
|
7
7
|
import type { URL } from 'node:url'
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -19,15 +19,15 @@ import type { URL } from 'node:url'
|
|
|
19
19
|
* @see {@linkcode URL}
|
|
20
20
|
* @see https://github.com/flex-development/pathe/tree/1.0.3#changeextpath-string-ext-nullablestring-string
|
|
21
21
|
*
|
|
22
|
-
* @template
|
|
22
|
+
* @template X - File extension type
|
|
23
23
|
*
|
|
24
24
|
* @param {string} specifier - Original module specifier
|
|
25
25
|
* @param {URL} url - Resolved module URL
|
|
26
|
-
* @return {
|
|
26
|
+
* @return {PromiseLike<X> | X} New file extension, `null`, or `undefined`
|
|
27
27
|
*/
|
|
28
|
-
type ChangeExtFn<
|
|
29
|
-
specifier: string,
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
type ChangeExtFn<X extends Nilable<string> = Nilable<string>> = Fn<
|
|
29
|
+
[specifier: string, url: URL],
|
|
30
|
+
PromiseLike<X> | X
|
|
31
|
+
>
|
|
32
32
|
|
|
33
33
|
export type { ChangeExtFn as default }
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { Statement } from '#src/interfaces'
|
|
7
7
|
import validateString from '#src/internal/validate-string'
|
|
8
8
|
import type { NodeError } from '@flex-development/errnode'
|
|
9
|
+
import { sort, trim } from '@flex-development/tutils'
|
|
9
10
|
import findDynamicImports from './find-dynamic-imports'
|
|
10
11
|
import findExports from './find-exports'
|
|
11
12
|
import findRequires from './find-requires'
|
|
@@ -29,14 +30,17 @@ const extractStatements = (code: string = ''): Statement[] => {
|
|
|
29
30
|
validateString(code, 'code')
|
|
30
31
|
|
|
31
32
|
// code shorter than first shortest keyword => no possible matches
|
|
32
|
-
if (
|
|
33
|
+
if (trim(code).length < 'export'.length) return []
|
|
33
34
|
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
return sort(
|
|
36
|
+
[
|
|
37
|
+
...findDynamicImports(code),
|
|
38
|
+
...findExports(code),
|
|
39
|
+
...findRequires(code),
|
|
40
|
+
...findStaticImports(code)
|
|
41
|
+
],
|
|
42
|
+
(s1: Statement, s2: Statement): number => s1.start - s2.start
|
|
43
|
+
)
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
export default extractStatements
|
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
import { SpecifierSyntaxKind } from '#src/enums'
|
|
7
7
|
import type { FillModuleOptions } from '#src/interfaces'
|
|
8
|
-
import regexp from '#src/internal/escape-reg-exp'
|
|
9
|
-
import isFunction from '#src/internal/is-function'
|
|
10
8
|
import validateArraySet from '#src/internal/validate-array-set'
|
|
11
9
|
import validateURLString from '#src/internal/validate-url-string'
|
|
12
10
|
import {
|
|
@@ -14,6 +12,13 @@ import {
|
|
|
14
12
|
type NodeError
|
|
15
13
|
} from '@flex-development/errnode'
|
|
16
14
|
import pathe from '@flex-development/pathe'
|
|
15
|
+
import {
|
|
16
|
+
DOT,
|
|
17
|
+
isFunction,
|
|
18
|
+
regexp,
|
|
19
|
+
trim,
|
|
20
|
+
type Optional
|
|
21
|
+
} from '@flex-development/tutils'
|
|
17
22
|
import type { URL } from 'node:url'
|
|
18
23
|
import CONDITIONS from './conditions'
|
|
19
24
|
import extractStatements from './extract-statements'
|
|
@@ -46,77 +51,80 @@ const fillModules = async (
|
|
|
46
51
|
): Promise<string> => {
|
|
47
52
|
const { conditions = CONDITIONS, ext, parent = import.meta.url } = options
|
|
48
53
|
|
|
54
|
+
// validate options
|
|
49
55
|
validateArraySet(conditions, 'options.conditions')
|
|
50
56
|
validateURLString(parent, 'options.parent')
|
|
51
57
|
|
|
52
58
|
// ensure specifiers have file extensions
|
|
53
59
|
for (const statement of extractStatements(code)) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// ignore statements with dynamic specifiers
|
|
58
|
-
if (statement.specifier_syntax === SpecifierSyntaxKind.DYNAMIC) continue
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Resolved module URL.
|
|
62
|
-
*
|
|
63
|
-
* @const {URL} url
|
|
64
|
-
*/
|
|
65
|
-
const url: URL = await resolveModule(statement.specifier, {
|
|
66
|
-
...options,
|
|
67
|
-
/**
|
|
68
|
-
* Returns a replacement file extension for the given module `specifier`
|
|
69
|
-
* **if it is non-bare and does not already have an extension**.
|
|
70
|
-
*
|
|
71
|
-
* Throws [`ERR_UNKNOWN_FILE_EXTENSION`][1] if the replacement extension
|
|
72
|
-
* is `null`, `undefined`, an empty string, or a dot character (`'.'`).
|
|
73
|
-
*
|
|
74
|
-
* [1]: https://nodejs.org/api/errors.html#err_unknown_file_extension
|
|
75
|
-
*
|
|
76
|
-
* @async
|
|
77
|
-
*
|
|
78
|
-
* @param {string} specifier - Module specifier
|
|
79
|
-
* @param {URL} url - Resolved module URL
|
|
80
|
-
* @return {Promise<string | undefined>} New file extension or `undefined`
|
|
81
|
-
*/
|
|
82
|
-
async ext(specifier: string, url: URL): Promise<string | undefined> {
|
|
83
|
-
// skip replacement for bare specifiers
|
|
84
|
-
if (isBareSpecifier(specifier)) return void 0
|
|
85
|
-
|
|
86
|
-
// skip replacement for specifiers that are already fully specified
|
|
87
|
-
if (pathe.extname(specifier) === pathe.extname(url.href)) return void 0
|
|
88
|
-
|
|
60
|
+
if (statement.specifier) {
|
|
61
|
+
if (statement.specifier_syntax !== SpecifierSyntaxKind.DYNAMIC) {
|
|
89
62
|
/**
|
|
90
|
-
*
|
|
63
|
+
* Resolved module URL.
|
|
91
64
|
*
|
|
92
|
-
* @
|
|
65
|
+
* @const {URL} url
|
|
93
66
|
*/
|
|
94
|
-
const
|
|
67
|
+
const url: URL = await resolveModule(statement.specifier, {
|
|
68
|
+
...options,
|
|
69
|
+
/**
|
|
70
|
+
* Returns a replacement file extension for the given `specifier` if
|
|
71
|
+
* it is non-bare and does not already have an extension.
|
|
72
|
+
*
|
|
73
|
+
* Throws [`ERR_UNKNOWN_FILE_EXTENSION`][1] if the new extension is
|
|
74
|
+
* `null`, `undefined`, an empty string, or a dot character (`'.'`).
|
|
75
|
+
*
|
|
76
|
+
* [1]: https://nodejs.org/api/errors.html#err_unknown_file_extension
|
|
77
|
+
*
|
|
78
|
+
* @async
|
|
79
|
+
*
|
|
80
|
+
* @param {string} specifier - Module specifier
|
|
81
|
+
* @param {URL} url - Resolved module URL
|
|
82
|
+
* @return {Promise<Optional<string>>} New file extension
|
|
83
|
+
*/
|
|
84
|
+
async ext(specifier: string, url: URL): Promise<Optional<string>> {
|
|
85
|
+
// skip replacement for bare specifiers
|
|
86
|
+
if (isBareSpecifier(specifier)) return void 0
|
|
95
87
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
88
|
+
// skip replacement for specifiers that are already fully specified
|
|
89
|
+
if (pathe.extname(specifier) === pathe.extname(url.href)) {
|
|
90
|
+
return void 0
|
|
91
|
+
}
|
|
100
92
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Replacement file extension.
|
|
95
|
+
*
|
|
96
|
+
* @var {string} rext
|
|
97
|
+
*/
|
|
98
|
+
const rext: string = isFunction(ext)
|
|
99
|
+
? await ext(specifier, url)
|
|
100
|
+
: ext
|
|
101
|
+
|
|
102
|
+
// ensure replacement extension is non-empty and non-dot ('.')
|
|
103
|
+
if (!(rext && trim(rext).length > (rext.startsWith(DOT) ? 1 : 0))) {
|
|
104
|
+
throw new ERR_UNKNOWN_FILE_EXTENSION(rext, specifier)
|
|
105
|
+
}
|
|
104
106
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
107
|
+
return rext
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// replace original module specifier
|
|
112
|
+
code = code.replace(
|
|
113
|
+
statement.code,
|
|
114
|
+
statement.code.replace(
|
|
115
|
+
new RegExp(`(?<=["'])${regexp(statement.specifier)}(?=["'])`),
|
|
116
|
+
// convert module url back to absolute, bare, or relative specifier
|
|
117
|
+
statement.specifier.startsWith('#')
|
|
118
|
+
? statement.specifier
|
|
119
|
+
: isAbsoluteSpecifier(statement.specifier)
|
|
120
|
+
? url.href
|
|
121
|
+
: isBareSpecifier(statement.specifier)
|
|
122
|
+
? toBareSpecifier(url, parent, new Set(conditions))
|
|
123
|
+
: toRelativeSpecifier(url, parent)
|
|
124
|
+
)
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
return code
|
|
@@ -9,10 +9,12 @@ import {
|
|
|
9
9
|
StatementSyntaxKind
|
|
10
10
|
} from '#src/enums'
|
|
11
11
|
import type { DynamicImport } from '#src/interfaces'
|
|
12
|
+
import dequote from '#src/internal/dequote'
|
|
12
13
|
import getSpecifierKind from '#src/internal/get-specifier-kind'
|
|
13
14
|
import validateString from '#src/internal/validate-string'
|
|
14
15
|
import type { NodeError } from '@flex-development/errnode'
|
|
15
16
|
import { DYNAMIC_IMPORT_REGEX } from '@flex-development/import-regex'
|
|
17
|
+
import { split, trim } from '@flex-development/tutils'
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Finds all dynamic import statements in `code`. Ignores matches in comments.
|
|
@@ -53,14 +55,12 @@ const findDynamicImports = (code: string = ''): DynamicImport[] => {
|
|
|
53
55
|
imports:
|
|
54
56
|
imports === ''
|
|
55
57
|
? []
|
|
56
|
-
: imports
|
|
57
|
-
.
|
|
58
|
-
.
|
|
59
|
-
.map(e => e.trim())
|
|
60
|
-
.filter(e => e.length > 0),
|
|
58
|
+
: split(imports.replace(/^{|}$/g, ''), ',')
|
|
59
|
+
.map(trim)
|
|
60
|
+
.filter(e => !!e.length),
|
|
61
61
|
kind: StatementKind.IMPORT,
|
|
62
62
|
options,
|
|
63
|
-
specifier: specifier
|
|
63
|
+
specifier: dequote(specifier),
|
|
64
64
|
specifier_kind:
|
|
65
65
|
specifier_syntax === SpecifierSyntaxKind.DYNAMIC
|
|
66
66
|
? null
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
import type { ExportStatement } from '#src/interfaces'
|
|
12
12
|
import getSpecifierKind from '#src/internal/get-specifier-kind'
|
|
13
13
|
import validateString from '#src/internal/validate-string'
|
|
14
|
-
import type { Declaration } from '#src/types'
|
|
15
14
|
import type { NodeError } from '@flex-development/errnode'
|
|
16
15
|
import {
|
|
17
16
|
EXPORT_AGGREGATE_REGEX,
|
|
@@ -19,6 +18,7 @@ import {
|
|
|
19
18
|
EXPORT_DEFAULT_REGEX,
|
|
20
19
|
EXPORT_LIST_REGEX
|
|
21
20
|
} from '@flex-development/export-regex'
|
|
21
|
+
import { cast, sort, split, trim } from '@flex-development/tutils'
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Finds all export statements in `code`. Ignores matches in comments.
|
|
@@ -55,11 +55,9 @@ const findExports = (code: string = ''): ExportStatement[] => {
|
|
|
55
55
|
end: start + code.length,
|
|
56
56
|
exports: exports.startsWith('*')
|
|
57
57
|
? [exports]
|
|
58
|
-
: exports
|
|
59
|
-
.
|
|
60
|
-
.
|
|
61
|
-
.map(e => e.trim())
|
|
62
|
-
.filter(e => e.length > 0),
|
|
58
|
+
: split(exports.replace(/^{|}$/g, ''), ',')
|
|
59
|
+
.map(trim)
|
|
60
|
+
.filter(e => !!e.length),
|
|
63
61
|
kind: StatementKind.EXPORT,
|
|
64
62
|
modifiers: [],
|
|
65
63
|
specifier,
|
|
@@ -80,23 +78,20 @@ const findExports = (code: string = ''): ExportStatement[] => {
|
|
|
80
78
|
|
|
81
79
|
statements.push({
|
|
82
80
|
code,
|
|
83
|
-
declaration: declaration
|
|
81
|
+
declaration: cast(declaration),
|
|
84
82
|
end: start + code.length,
|
|
85
83
|
exports: /^\w+$/.test(exports)
|
|
86
84
|
? [exports]
|
|
87
|
-
: exports
|
|
88
|
-
.replace(
|
|
89
|
-
.
|
|
90
|
-
.map(e => e.trim().replace(/\s*=\s*.*$/, ''))
|
|
91
|
-
.filter(e => e.length > 0),
|
|
85
|
+
: split(exports.replace(/^[[{]|[\]}]$/g, ''), ',')
|
|
86
|
+
.map(e => trim(e).replace(/\s*=\s*.*$/, ''))
|
|
87
|
+
.filter(e => !!e.length),
|
|
92
88
|
kind: StatementKind.EXPORT,
|
|
93
89
|
modifiers:
|
|
94
90
|
modifiers === ''
|
|
95
91
|
? []
|
|
96
|
-
: modifiers
|
|
97
|
-
.
|
|
98
|
-
.
|
|
99
|
-
.filter(e => e.length > 0),
|
|
92
|
+
: split(modifiers, ' ')
|
|
93
|
+
.map(trim)
|
|
94
|
+
.filter(e => !!e.length),
|
|
100
95
|
specifier: null,
|
|
101
96
|
specifier_kind: null,
|
|
102
97
|
specifier_syntax: null,
|
|
@@ -113,17 +108,16 @@ const findExports = (code: string = ''): ExportStatement[] => {
|
|
|
113
108
|
|
|
114
109
|
statements.push({
|
|
115
110
|
code,
|
|
116
|
-
declaration: declaration ? (declaration
|
|
111
|
+
declaration: declaration ? cast(declaration) : null,
|
|
117
112
|
end: start + code.length,
|
|
118
113
|
exports: exports === '' ? [] : [exports],
|
|
119
114
|
kind: StatementKind.EXPORT,
|
|
120
115
|
modifiers:
|
|
121
116
|
modifiers === ''
|
|
122
117
|
? []
|
|
123
|
-
: modifiers
|
|
124
|
-
.
|
|
125
|
-
.
|
|
126
|
-
.filter(e => e.length > 0),
|
|
118
|
+
: split(modifiers, ' ')
|
|
119
|
+
.map(trim)
|
|
120
|
+
.filter(e => !!e.length),
|
|
127
121
|
specifier: null,
|
|
128
122
|
specifier_kind: null,
|
|
129
123
|
specifier_syntax: null,
|
|
@@ -142,11 +136,9 @@ const findExports = (code: string = ''): ExportStatement[] => {
|
|
|
142
136
|
code,
|
|
143
137
|
declaration: null,
|
|
144
138
|
end: start + code.length,
|
|
145
|
-
exports: exports
|
|
146
|
-
.
|
|
147
|
-
.
|
|
148
|
-
.map(e => e.trim())
|
|
149
|
-
.filter(e => e.length > 0),
|
|
139
|
+
exports: split(exports.replace(/^{|}$/g, ''), ',')
|
|
140
|
+
.map(trim)
|
|
141
|
+
.filter(e => !!e.length),
|
|
150
142
|
kind: StatementKind.EXPORT,
|
|
151
143
|
modifiers: [],
|
|
152
144
|
specifier: null,
|
|
@@ -158,9 +150,7 @@ const findExports = (code: string = ''): ExportStatement[] => {
|
|
|
158
150
|
})
|
|
159
151
|
}
|
|
160
152
|
|
|
161
|
-
return
|
|
162
|
-
return s1.start - s2.start
|
|
163
|
-
})
|
|
153
|
+
return sort(statements, (s1, s2): number => s1.start - s2.start)
|
|
164
154
|
}
|
|
165
155
|
|
|
166
156
|
export default findExports
|
|
@@ -9,9 +9,11 @@ import {
|
|
|
9
9
|
StatementSyntaxKind
|
|
10
10
|
} from '#src/enums'
|
|
11
11
|
import type { RequireStatement } from '#src/interfaces'
|
|
12
|
+
import dequote from '#src/internal/dequote'
|
|
12
13
|
import getSpecifierKind from '#src/internal/get-specifier-kind'
|
|
13
14
|
import validateString from '#src/internal/validate-string'
|
|
14
15
|
import type { NodeError } from '@flex-development/errnode'
|
|
16
|
+
import { split, trim } from '@flex-development/tutils'
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* Finds all `require` statements in `code`. Ignores matches in comments.
|
|
@@ -54,13 +56,11 @@ const findRequires = (code: string = ''): RequireStatement[] => {
|
|
|
54
56
|
imports:
|
|
55
57
|
imports === ''
|
|
56
58
|
? []
|
|
57
|
-
: imports
|
|
58
|
-
.
|
|
59
|
-
.
|
|
60
|
-
.map(e => e.trim())
|
|
61
|
-
.filter(e => e.length > 0),
|
|
59
|
+
: split(imports.replace(/^{|}$/g, ''), ',')
|
|
60
|
+
.map(trim)
|
|
61
|
+
.filter(e => !!e.length),
|
|
62
62
|
kind: StatementKind.REQUIRE,
|
|
63
|
-
specifier: specifier
|
|
63
|
+
specifier: dequote(specifier),
|
|
64
64
|
specifier_kind:
|
|
65
65
|
specifier_syntax === SpecifierSyntaxKind.DYNAMIC
|
|
66
66
|
? null
|
|
@@ -13,6 +13,7 @@ import getSpecifierKind from '#src/internal/get-specifier-kind'
|
|
|
13
13
|
import validateString from '#src/internal/validate-string'
|
|
14
14
|
import type { NodeError } from '@flex-development/errnode'
|
|
15
15
|
import { STATIC_IMPORT_REGEX } from '@flex-development/import-regex'
|
|
16
|
+
import { split, trim } from '@flex-development/tutils'
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Finds all static import statements in `code`. Ignores matches in comments.
|
|
@@ -58,22 +59,18 @@ const findStaticImports = (code: string = ''): StaticImport[] => {
|
|
|
58
59
|
syntax === StatementSyntaxKind.SIDE_EFFECT
|
|
59
60
|
? []
|
|
60
61
|
: syntax === StatementSyntaxKind.NAMED
|
|
61
|
-
? imports
|
|
62
|
-
.
|
|
63
|
-
.
|
|
64
|
-
.map(e => e.trim())
|
|
65
|
-
.filter(e => e.length > 0)
|
|
62
|
+
? split(imports.replace(/^{|}$/g, ''), ',')
|
|
63
|
+
.map(trim)
|
|
64
|
+
.filter(i => !!i.length)
|
|
66
65
|
: syntax === StatementSyntaxKind.DEFAULT_WITH_NAMED
|
|
67
|
-
? imports
|
|
68
|
-
.
|
|
69
|
-
.map(
|
|
70
|
-
.
|
|
71
|
-
.filter(i => i.length > 0)
|
|
66
|
+
? split(imports, ',')
|
|
67
|
+
.map(i => trim(i).replace(/^{|}$/g, ''))
|
|
68
|
+
.map(trim)
|
|
69
|
+
.filter(i => !!i.length)
|
|
72
70
|
: syntax === StatementSyntaxKind.DEFAULT_WITH_NAMESPACE
|
|
73
|
-
? imports
|
|
74
|
-
.
|
|
75
|
-
.
|
|
76
|
-
.filter(i => i.length > 0)
|
|
71
|
+
? split(imports, ',')
|
|
72
|
+
.map(trim)
|
|
73
|
+
.filter(i => !!i.length)
|
|
77
74
|
: [imports],
|
|
78
75
|
kind: StatementKind.IMPORT,
|
|
79
76
|
specifier,
|