@flex-development/mlly 1.0.0-alpha.16 → 1.0.0-alpha.17

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.
Files changed (175) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/index.mjs.map +4 -5
  3. package/dist/internal/dequote.mjs +1 -0
  4. package/dist/internal/dequote.mjs.map +8 -0
  5. package/dist/internal/format-type-map.mjs +1 -0
  6. package/dist/internal/format-type-map.mjs.map +8 -0
  7. package/dist/internal/get-specifier-kind.mjs +1 -0
  8. package/dist/internal/get-specifier-kind.mjs.map +8 -0
  9. package/dist/internal/get-subpaths.mjs +1 -0
  10. package/dist/internal/get-subpaths.mjs.map +8 -0
  11. package/dist/internal/regex-encoded-sep.mjs +1 -0
  12. package/dist/internal/regex-encoded-sep.mjs.map +8 -0
  13. package/dist/internal/regex-internal-specifier.mjs +1 -0
  14. package/dist/internal/regex-internal-specifier.mjs.map +8 -0
  15. package/dist/internal/regex-invalid-segment.mjs +1 -0
  16. package/dist/internal/regex-invalid-segment.mjs.map +8 -0
  17. package/dist/internal/regex-package-name.mjs +1 -0
  18. package/dist/internal/regex-package-name.mjs.map +8 -0
  19. package/dist/internal/regex-package-path.mjs +1 -0
  20. package/dist/internal/regex-package-path.mjs.map +8 -0
  21. package/dist/internal/resolver.mjs +1 -0
  22. package/dist/internal/resolver.mjs.map +8 -0
  23. package/dist/internal/validate-array-set.mjs +1 -0
  24. package/dist/internal/validate-array-set.mjs.map +8 -0
  25. package/dist/internal/validate-boolean.mjs +1 -0
  26. package/dist/internal/validate-boolean.mjs.map +8 -0
  27. package/dist/internal/validate-map.mjs +1 -0
  28. package/dist/internal/validate-map.mjs.map +8 -0
  29. package/dist/internal/validate-object.mjs +1 -0
  30. package/dist/internal/validate-object.mjs.map +8 -0
  31. package/dist/internal/validate-set.mjs +1 -0
  32. package/dist/internal/validate-set.mjs.map +8 -0
  33. package/dist/internal/validate-string.mjs +1 -0
  34. package/dist/internal/validate-string.mjs.map +8 -0
  35. package/dist/internal/validate-url-string.mjs +1 -0
  36. package/dist/internal/validate-url-string.mjs.map +8 -0
  37. package/dist/utils/compare-subpaths.mjs.map +4 -5
  38. package/dist/utils/conditions.mjs.map +4 -5
  39. package/dist/utils/detect-syntax.mjs.map +4 -5
  40. package/dist/utils/extension-format-map.mjs.map +4 -5
  41. package/dist/utils/extract-statements.mjs.map +4 -5
  42. package/dist/utils/fill-modules.mjs.map +5 -8
  43. package/dist/utils/find-dynamic-imports.mjs.map +5 -8
  44. package/dist/utils/find-exports.mjs.map +5 -8
  45. package/dist/utils/find-requires.mjs.map +5 -8
  46. package/dist/utils/find-static-imports.mjs.map +5 -8
  47. package/dist/utils/find-subpath.mjs.map +5 -9
  48. package/dist/utils/get-format.mjs.map +5 -8
  49. package/dist/utils/get-source.mjs.map +4 -5
  50. package/dist/utils/has-cjs-syntax.mjs.map +4 -5
  51. package/dist/utils/has-esm-syntax.mjs.map +4 -5
  52. package/dist/utils/index.mjs.map +5 -8
  53. package/dist/utils/is-absolute-specifier.mjs.map +4 -5
  54. package/dist/utils/is-bare-specifier.mjs.map +4 -5
  55. package/dist/utils/is-directory.mjs.map +4 -5
  56. package/dist/utils/is-exports-sugar.mjs.map +4 -5
  57. package/dist/utils/is-file.mjs.map +4 -5
  58. package/dist/utils/is-relative-specifier.mjs.map +4 -5
  59. package/dist/utils/lookup-package-scope.mjs.map +4 -5
  60. package/dist/utils/parse-data-url.mjs.map +4 -5
  61. package/dist/utils/parse-module-id.mjs.map +5 -9
  62. package/dist/utils/parse-subpath.mjs.map +5 -8
  63. package/dist/utils/pattern-character.mjs.map +4 -5
  64. package/dist/utils/read-package-json.mjs.map +4 -5
  65. package/dist/utils/resolve-alias.mjs.map +5 -9
  66. package/dist/utils/resolve-aliases.mjs.map +4 -5
  67. package/dist/utils/resolve-extensions.mjs.map +4 -5
  68. package/dist/utils/resolve-module.mjs.map +4 -5
  69. package/dist/utils/resolve-modules.mjs.map +4 -5
  70. package/dist/utils/to-absolute-specifier.mjs.map +4 -5
  71. package/dist/utils/to-bare-specifier.mjs.map +4 -5
  72. package/dist/utils/to-data-url.mjs.map +4 -5
  73. package/dist/utils/to-node-url.mjs.map +4 -5
  74. package/dist/utils/to-relative-specifier.mjs.map +4 -5
  75. package/dist/utils/to-url.mjs.map +4 -5
  76. package/dist/utils/validate-assertions.mjs.map +5 -8
  77. package/dist/utils/validate-exports.mjs.map +4 -5
  78. package/package.json +8 -9
  79. package/src/enums/assert-type.ts +0 -23
  80. package/src/enums/format.ts +0 -19
  81. package/src/enums/index.ts +0 -11
  82. package/src/enums/kind-specifier-syntax.ts +0 -16
  83. package/src/enums/kind-specifier.ts +0 -19
  84. package/src/enums/kind-statement-syntax.ts +0 -24
  85. package/src/enums/kind-statement.ts +0 -17
  86. package/src/index.ts +0 -9
  87. package/src/interfaces/import-assertions.ts +0 -24
  88. package/src/interfaces/import-dynamic.ts +0 -46
  89. package/src/interfaces/import-static.ts +0 -46
  90. package/src/interfaces/index.ts +0 -25
  91. package/src/interfaces/options-fill-module.ts +0 -26
  92. package/src/interfaces/options-find-subpath.ts +0 -57
  93. package/src/interfaces/options-get-format.ts +0 -80
  94. package/src/interfaces/options-get-source.ts +0 -59
  95. package/src/interfaces/options-parse-module-id.ts +0 -39
  96. package/src/interfaces/options-parse-subpath.ts +0 -57
  97. package/src/interfaces/options-resolve-alias.ts +0 -59
  98. package/src/interfaces/options-resolve-module.ts +0 -72
  99. package/src/interfaces/options-resolve.ts +0 -17
  100. package/src/interfaces/package-scope.ts +0 -30
  101. package/src/interfaces/parsed-data-url.ts +0 -63
  102. package/src/interfaces/parsed-module-id.ts +0 -90
  103. package/src/interfaces/parsed-subpath.ts +0 -56
  104. package/src/interfaces/statement-export.ts +0 -52
  105. package/src/interfaces/statement-import.ts +0 -45
  106. package/src/interfaces/statement-require.ts +0 -45
  107. package/src/interfaces/statement.ts +0 -64
  108. package/src/internal/dequote.ts +0 -18
  109. package/src/internal/format-type-map.ts +0 -28
  110. package/src/internal/get-specifier-kind.ts +0 -41
  111. package/src/internal/get-subpaths.ts +0 -43
  112. package/src/internal/regex-encoded-sep.ts +0 -17
  113. package/src/internal/regex-internal-specifier.ts +0 -19
  114. package/src/internal/regex-invalid-segment.ts +0 -25
  115. package/src/internal/regex-package-name.ts +0 -18
  116. package/src/internal/regex-package-path.ts +0 -20
  117. package/src/internal/resolver.ts +0 -790
  118. package/src/internal/validate-array-set.ts +0 -35
  119. package/src/internal/validate-boolean.ts +0 -30
  120. package/src/internal/validate-map.ts +0 -36
  121. package/src/internal/validate-object.ts +0 -30
  122. package/src/internal/validate-set.ts +0 -32
  123. package/src/internal/validate-string.ts +0 -31
  124. package/src/internal/validate-url-string.ts +0 -34
  125. package/src/types/declaration.ts +0 -22
  126. package/src/types/fn-change-ext.ts +0 -33
  127. package/src/types/index.ts +0 -14
  128. package/src/types/mime-type.ts +0 -19
  129. package/src/types/module-id.ts +0 -15
  130. package/src/types/module-specifier-type.ts +0 -13
  131. package/src/types/protocol.ts +0 -40
  132. package/src/types/syntax-kind-export.ts +0 -20
  133. package/src/types/syntax-kind-import.ts +0 -22
  134. package/src/types/syntax-kind-require.ts +0 -15
  135. package/src/utils/compare-subpaths.ts +0 -100
  136. package/src/utils/conditions.ts +0 -15
  137. package/src/utils/detect-syntax.ts +0 -40
  138. package/src/utils/extension-format-map.ts +0 -34
  139. package/src/utils/extract-statements.ts +0 -46
  140. package/src/utils/fill-modules.ts +0 -133
  141. package/src/utils/find-dynamic-imports.ts +0 -75
  142. package/src/utils/find-exports.ts +0 -156
  143. package/src/utils/find-requires.ts +0 -75
  144. package/src/utils/find-static-imports.ts +0 -86
  145. package/src/utils/find-subpath.ts +0 -251
  146. package/src/utils/get-format.ts +0 -249
  147. package/src/utils/get-source.ts +0 -144
  148. package/src/utils/has-cjs-syntax.ts +0 -44
  149. package/src/utils/has-esm-syntax.ts +0 -40
  150. package/src/utils/index.ts +0 -45
  151. package/src/utils/is-absolute-specifier.ts +0 -53
  152. package/src/utils/is-bare-specifier.ts +0 -36
  153. package/src/utils/is-directory.ts +0 -25
  154. package/src/utils/is-exports-sugar.ts +0 -81
  155. package/src/utils/is-file.ts +0 -25
  156. package/src/utils/is-relative-specifier.ts +0 -34
  157. package/src/utils/lookup-package-scope.ts +0 -97
  158. package/src/utils/parse-data-url.ts +0 -71
  159. package/src/utils/parse-module-id.ts +0 -197
  160. package/src/utils/parse-subpath.ts +0 -331
  161. package/src/utils/pattern-character.ts +0 -13
  162. package/src/utils/read-package-json.ts +0 -113
  163. package/src/utils/resolve-alias.ts +0 -224
  164. package/src/utils/resolve-aliases.ts +0 -58
  165. package/src/utils/resolve-extensions.ts +0 -33
  166. package/src/utils/resolve-module.ts +0 -181
  167. package/src/utils/resolve-modules.ts +0 -60
  168. package/src/utils/to-absolute-specifier.ts +0 -30
  169. package/src/utils/to-bare-specifier.ts +0 -211
  170. package/src/utils/to-data-url.ts +0 -42
  171. package/src/utils/to-node-url.ts +0 -27
  172. package/src/utils/to-relative-specifier.ts +0 -55
  173. package/src/utils/to-url.ts +0 -30
  174. package/src/utils/validate-assertions.ts +0 -126
  175. package/src/utils/validate-exports.ts +0 -131
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/find-requires.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/find-requires.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file findRequires\n * @module mlly/utils/findRequires\n */\n\nimport {\n SpecifierSyntaxKind,\n StatementKind,\n StatementSyntaxKind\n} from '#src/enums'\nimport type { RequireStatement } from '#src/interfaces'\nimport dequote from '#src/internal/dequote'\nimport getSpecifierKind from '#src/internal/get-specifier-kind'\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport { split, trim } from '@flex-development/tutils'\n\n/**\n * Finds all `require` statements in `code`. Ignores matches in comments.\n *\n * @see {@linkcode RequireStatement}\n * @see https://regex101.com/r/uCqSYB\n * @see https://nodejs.org/api/modules.html#requireid\n *\n * @param {string} [code=''] - Code to evaluate\n * @return {RequireStatement[]} Require statement objects\n * @throws {NodeError<TypeError>} If `code` is not a string\n */\nconst findRequires = (code: string = ''): RequireStatement[] => {\n validateString(code, 'code')\n\n /**\n * `require` statement regex.\n *\n * @const {RegExp} REQUIRE_REGEX\n */\n const REQUIRE_REGEX: RegExp =\n /(?<=^|[\\s,:;([])\\b(?:(?:const\\s*|let\\s*|var\\s*)?(?:(?<=(?:const\\s*|let\\s*|var\\s*))(?<imports>(?:[$_\\p{ID_Start}][$\\u200C\\u200D\\p{ID_Continue}]*)|(?:[\\w\\t\\n\\r \"$'*,./:{}-]+?)))?\\s*=?\\s*(?<kind>require)\\((?<specifier>[\"']?[\\S\\t\\n\\r]+?[\"']?)\\))(?<!(?:\\/\\/|\\*).*)/gu\n\n return [...code.matchAll(REQUIRE_REGEX)].map(match => {\n const { 0: code = '', index: start = 0, groups = {} } = match\n const { imports = '', specifier = '' } = groups\n\n /**\n * Module specifier syntax.\n *\n * @const {SpecifierSyntaxKind} specifier_syntax\n */\n const specifier_syntax: SpecifierSyntaxKind = /^[\"']/.test(specifier)\n ? SpecifierSyntaxKind.STATIC\n : SpecifierSyntaxKind.DYNAMIC\n\n return {\n code,\n end: start + code.length,\n imports:\n imports === ''\n ? []\n : split(imports.replace(/^{|}$/g, ''), ',')\n .map(trim)\n .filter(e => !!e.length),\n kind: StatementKind.REQUIRE,\n specifier: dequote(specifier),\n specifier_kind:\n specifier_syntax === SpecifierSyntaxKind.DYNAMIC\n ? null\n : getSpecifierKind(specifier),\n specifier_syntax,\n start,\n syntax: StatementSyntaxKind.REQUIRE\n }\n })\n}\n\nexport default findRequires\n"],
7
6
  "mappings": "AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,OAAO,aAAa;AACpB,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAE3B,SAAS,OAAO,YAAY;AAa5B,MAAM,eAAe,CAAC,OAAe,OAA2B;AAC9D,iBAAe,MAAM,MAAM;AAO3B,QAAM,gBACJ;AAEF,SAAO,CAAC,GAAG,KAAK,SAAS,aAAa,CAAC,EAAE,IAAI,WAAS;AACpD,UAAM,EAAE,GAAGA,QAAO,IAAI,OAAO,QAAQ,GAAG,SAAS,CAAC,EAAE,IAAI,OAClD,EAAE,UAAU,IAAI,YAAY,GAAG,IAAI,QAOnC,mBAAwC,QAAQ,KAAK,SAAS,IAChE,oBAAoB,SACpB,oBAAoB;AAExB,WAAO;AAAA,MACL,MAAAA;AAAA,MACA,KAAK,QAAQA,MAAK;AAAA,MAClB,SACE,YAAY,KACR,CAAC,IACD,MAAM,QAAQ,QAAQ,UAAU,EAAE,GAAG,GAAG,EACrC,IAAI,IAAI,EACR,OAAO,OAAK,CAAC,CAAC,EAAE,MAAM;AAAA,MAC/B,MAAM,cAAc;AAAA,MACpB,WAAW,QAAQ,SAAS;AAAA,MAC5B,gBACE,qBAAqB,oBAAoB,UACrC,OACA,iBAAiB,SAAS;AAAA,MAChC;AAAA,MACA;AAAA,MACA,QAAQ,oBAAoB;AAAA,IAC9B;AAAA,EACF,CAAC;AACH;AAEA,IAAO,wBAAQ;",
8
- "names": [
9
- "code"
10
- ]
11
- }
7
+ "names": ["code"]
8
+ }
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/find-static-imports.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/find-static-imports.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file findStaticImports\n * @module mlly/utils/findStaticImports\n */\n\nimport {\n SpecifierSyntaxKind,\n StatementKind,\n StatementSyntaxKind\n} from '#src/enums'\nimport type { StaticImport } from '#src/interfaces'\nimport getSpecifierKind from '#src/internal/get-specifier-kind'\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport { STATIC_IMPORT_REGEX } from '@flex-development/import-regex'\nimport { split, trim } from '@flex-development/tutils'\n\n/**\n * Finds all static import statements in `code`. Ignores matches in comments.\n *\n * @see {@linkcode StaticImport}\n * @see https://regex101.com/r/wlYQUN\n * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/import\n *\n * @param {string} [code=''] - Code to evaluate\n * @return {StaticImport[]} Static import statement objects\n * @throws {NodeError<TypeError>} If `code` is not a string\n */\nconst findStaticImports = (code: string = ''): StaticImport[] => {\n validateString(code, 'code')\n\n return [...code.matchAll(STATIC_IMPORT_REGEX)].map(match => {\n const { 0: code = '', index: start = 0, groups = {} } = match\n const { assertion = '', imports = '', specifier = '', type = '' } = groups\n\n /**\n * Statement syntax kind.\n *\n * @const {StaticImport['syntax']} syntax\n */\n const syntax: StaticImport['syntax'] =\n imports === ''\n ? StatementSyntaxKind.SIDE_EFFECT\n : imports.startsWith('* as')\n ? StatementSyntaxKind.NAMESPACE\n : imports.startsWith('{')\n ? StatementSyntaxKind.NAMED\n : /^\\w+$/.test(imports)\n ? StatementSyntaxKind.DEFAULT\n : /^\\w+,\\s*{/.test(imports)\n ? StatementSyntaxKind.DEFAULT_WITH_NAMED\n : StatementSyntaxKind.DEFAULT_WITH_NAMESPACE\n\n return {\n assertion,\n code,\n end: start + code.length,\n imports:\n syntax === StatementSyntaxKind.SIDE_EFFECT\n ? []\n : syntax === StatementSyntaxKind.NAMED\n ? split(imports.replace(/^{|}$/g, ''), ',')\n .map(trim)\n .filter(i => !!i.length)\n : syntax === StatementSyntaxKind.DEFAULT_WITH_NAMED\n ? split(imports, ',')\n .map(i => trim(i).replace(/^{|}$/g, ''))\n .map(trim)\n .filter(i => !!i.length)\n : syntax === StatementSyntaxKind.DEFAULT_WITH_NAMESPACE\n ? split(imports, ',')\n .map(trim)\n .filter(i => !!i.length)\n : [imports],\n kind: StatementKind.IMPORT,\n specifier,\n specifier_kind: getSpecifierKind(specifier),\n specifier_syntax: SpecifierSyntaxKind.STATIC,\n start,\n syntax,\n type: !!type\n }\n })\n}\n\nexport default findStaticImports\n"],
7
6
  "mappings": "AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,OAAO,sBAAsB;AAC7B,OAAO,oBAAoB;AAE3B,SAAS,2BAA2B;AACpC,SAAS,OAAO,YAAY;AAa5B,MAAM,oBAAoB,CAAC,OAAe,QACxC,eAAe,MAAM,MAAM,GAEpB,CAAC,GAAG,KAAK,SAAS,mBAAmB,CAAC,EAAE,IAAI,WAAS;AAC1D,QAAM,EAAE,GAAGA,QAAO,IAAI,OAAO,QAAQ,GAAG,SAAS,CAAC,EAAE,IAAI,OAClD,EAAE,YAAY,IAAI,UAAU,IAAI,YAAY,IAAI,OAAO,GAAG,IAAI,QAO9D,SACJ,YAAY,KACR,oBAAoB,cACpB,QAAQ,WAAW,MAAM,IACzB,oBAAoB,YACpB,QAAQ,WAAW,GAAG,IACtB,oBAAoB,QACpB,QAAQ,KAAK,OAAO,IACpB,oBAAoB,UACpB,YAAY,KAAK,OAAO,IACxB,oBAAoB,qBACpB,oBAAoB;AAE1B,SAAO;AAAA,IACL;AAAA,IACA,MAAAA;AAAA,IACA,KAAK,QAAQA,MAAK;AAAA,IAClB,SACE,WAAW,oBAAoB,cAC3B,CAAC,IACD,WAAW,oBAAoB,QAC/B,MAAM,QAAQ,QAAQ,UAAU,EAAE,GAAG,GAAG,EACrC,IAAI,IAAI,EACR,OAAO,OAAK,CAAC,CAAC,EAAE,MAAM,IACzB,WAAW,oBAAoB,qBAC/B,MAAM,SAAS,GAAG,EACf,IAAI,OAAK,KAAK,CAAC,EAAE,QAAQ,UAAU,EAAE,CAAC,EACtC,IAAI,IAAI,EACR,OAAO,OAAK,CAAC,CAAC,EAAE,MAAM,IACzB,WAAW,oBAAoB,yBAC/B,MAAM,SAAS,GAAG,EACf,IAAI,IAAI,EACR,OAAO,OAAK,CAAC,CAAC,EAAE,MAAM,IACzB,CAAC,OAAO;AAAA,IACd,MAAM,cAAc;AAAA,IACpB;AAAA,IACA,gBAAgB,iBAAiB,SAAS;AAAA,IAC1C,kBAAkB,oBAAoB;AAAA,IACtC;AAAA,IACA;AAAA,IACA,MAAM,CAAC,CAAC;AAAA,EACV;AACF,CAAC;AAGH,IAAO,8BAAQ;",
8
- "names": [
9
- "code"
10
- ]
11
- }
7
+ "names": ["code"]
8
+ }
@@ -1,12 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/find-subpath.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/find-subpath.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file findSubpath\n * @module mlly/utils/findSubpath\n */\n\nimport type { FindSubpathOptions } from '#src/interfaces'\nimport getSubpaths from '#src/internal/get-subpaths'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateSet from '#src/internal/validate-set'\nimport validateString from '#src/internal/validate-string'\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport type { Exports, Imports } from '@flex-development/pkg-types'\nimport {\n DOT,\n cast,\n isArray,\n isNIL,\n isObjectCurly,\n isString,\n sort,\n type Nilable,\n type Nullable,\n type Optional\n} from '@flex-development/tutils'\nimport { URL } from 'node:url'\nimport compareSubpaths from './compare-subpaths'\nimport CONDITIONS from './conditions'\nimport isExportsSugar from './is-exports-sugar'\nimport PATTERN_CHARACTER from './pattern-character'\nimport toURL from './to-url'\n\n/**\n * Finds the subpath defined in `context`, a `package.json` [`exports`][1] or\n * [`imports`][2] field, that maps to the given package `target`.\n *\n * Supports extensionless targets and targets without explicit `'/index'` usage.\n * Returns `null` if a subpath is not found.\n *\n * [1]: https://nodejs.org/api/packages.html#exports\n * [2]: https://nodejs.org/api/packages.html#imports\n *\n * @see {@linkcode Exports}\n * @see {@linkcode FindSubpathOptions}\n * @see {@linkcode Imports}\n * @see https://nodejs.org/api/packages.html#subpath-exports\n * @see https://nodejs.org/api/packages.html#subpath-imports\n *\n * @param {string} target - Package target to find in `context`\n * @param {Nilable<Exports | Imports>} context - Package context\n * @param {FindSubpathOptions} options - Search options\n * @return {Nullable<string>} Subpath defined in `context` or `null`\n * @throws {NodeError<Error | TypeError>}\n */\nconst findSubpath = (\n target: string,\n context: Nilable<Exports | Imports>,\n options: FindSubpathOptions\n): Nullable<string> => {\n const {\n condition = 'default',\n conditions = CONDITIONS,\n dir,\n internal = false,\n parent\n } = options\n\n // exit early if context is nil\n if (isNIL(context)) return null\n\n // ensure target is a string\n validateString(target, 'target')\n\n // exit early if target is an exactish match\n if (isString(context)) {\n if (target === context || target === pathe.changeExt(context, '')) {\n return DOT\n }\n }\n\n // ensure option schemas\n validateString(condition, 'options.condition')\n validateSet(conditions, 'options.conditions')\n validateURLString(dir, 'options.dir')\n validateBoolean(internal, 'options.internal')\n validateURLString(parent, 'options.parent')\n\n /**\n * Finds the subpath defined in `context`, a `package.json` [`exports`][1] or\n * [`imports`][2] field, that maps to the given package `target`.\n *\n * Returns `null` if a subpath is not found.\n *\n * [1]: https://nodejs.org/api/packages.html#exports\n * [2]: https://nodejs.org/api/packages.html#imports\n *\n * @param {string} target - Package target to find in `context`\n * @param {Nilable<Exports | Imports>} context - Package context\n * @param {string} [key=DOT] - Subpath in `context` being checked\n * @return {Nullable<string>} Subpath defined in `context` or `null`\n */\n const find = (\n target: string,\n context: Nilable<Exports | Imports>,\n key: string = DOT\n ): Nullable<string> => {\n /**\n * Subpath defined in {@linkcode context} that maps to {@linkcode target}.\n *\n * @var {Nullable<string>} subpath\n */\n let subpath: Nullable<string> = null\n\n // match target to subpath\n if (isArray(context) || isObjectCurly(context) || isString(context)) {\n /**\n * URL of directory containing relevant `package.json` file.\n *\n * @const {string} pkgdir\n */\n const pkgdir: string = toURL(dir).href.replace(/\\/$/, '') + pathe.sep\n\n /**\n * URL of relevant `package.json` file.\n *\n * @const {URL} pkg\n */\n const pkg: URL = new URL('package.json', pkgdir)\n\n // convert package context to object if using exports sugar\n if (!internal && isExportsSugar(context, pkg, parent)) {\n context = cast<Record<string, Exports>>({ [key]: context })\n }\n\n // context is now an object\n context = cast<Record<string, Exports>>(context)\n\n /**\n * Subpaths defined in {@linkcode context}.\n *\n * **Note**: Sorted from least to greatest.\n *\n * @see {@linkcode compareSubpaths}\n *\n * @const {string[]} keys\n */\n const subpaths: string[] = sort(\n getSubpaths(context, internal, pkg, parent),\n (s1, s2) => compareSubpaths(s1, s2) * -1\n )\n\n // match target to subpath defined in context\n for (const pkgsubpath of subpaths) {\n /**\n * Current package target being checked.\n *\n * @var {Optional<Exports>} tar\n */\n let tar: Optional<Exports> = context[pkgsubpath]\n\n // find subpath\n switch (true) {\n case isArray(tar):\n // try matching target based first match in target array\n for (const item of cast<string[]>(tar)) {\n subpath = find(target, item, pkgsubpath)\n if (subpath) break\n }\n\n break\n case isObjectCurly(tar):\n tar = cast<Record<string, Exports>>(tar)\n\n // try matching target based on export conditions\n for (const property of Object.getOwnPropertyNames(tar)) {\n if (property === condition || conditions.has(property)) {\n subpath = find(target, tar[property], pkgsubpath)\n if (subpath) break\n }\n }\n\n break\n case isString(tar):\n tar = cast<string>(tar)\n\n /**\n * {@linkcode tar} without file extension.\n *\n * @const {string} tar_ne\n */\n const tar_ne: string = pathe.changeExt(tar, '')\n\n /**\n * {@linkcode tar_ne} without `'/index'`.\n *\n * @const {string} tar_ni\n */\n const tar_ni: string = tar_ne.replace(/\\/index$/, '')\n\n /**\n * Index of {@linkcode PATTERN_CHARACTER} in {@linkcode tar}.\n *\n * @const {number} pattern\n */\n const pattern: number = tar.indexOf(PATTERN_CHARACTER)\n\n switch (true) {\n // target is an exactish match\n case target === tar:\n case target === tar_ne:\n case target === tar_ni && tar_ne.endsWith('/index'):\n case pattern === -1 && (target === tar || target === tar_ne):\n subpath = pkgsubpath\n break\n // pattern character => try finding best match for target\n case pattern !== -1 && target.startsWith(tar.slice(0, pattern)):\n /**\n * Boolean indicating if {@linkcode target} ends with the\n * characters after the pattern character (`*`) in\n * {@linkcode tar}.\n *\n * @const {boolean} match\n */\n const match: boolean =\n target.length >= tar.length &&\n tar.lastIndexOf(PATTERN_CHARACTER) === pattern &&\n (target.endsWith(tar.slice(pattern + 1)) ||\n target.endsWith(tar_ne.slice(pattern + 1)))\n\n // set subpath if match was found\n if (match) subpath = pkgsubpath\n\n break\n }\n\n break\n }\n\n // stop searching for subpath if subpath has been found\n if (subpath) break\n }\n }\n\n return subpath\n }\n\n return find(target, context)\n}\n\nexport default findSubpath\n"],
7
6
  "mappings": "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",
8
- "names": [
9
- "target",
10
- "context"
11
- ]
12
- }
7
+ "names": ["target", "context"]
8
+ }
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/get-format.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/get-format.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file getFormat\n * @module mlly/utils/getFormat\n */\n\nimport { Format } from '#src/enums'\nimport type { GetFormatOptions, PackageScope } from '#src/interfaces'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateMap from '#src/internal/validate-map'\nimport validateObject from '#src/internal/validate-object'\nimport type { ModuleId } from '#src/types'\nimport {\n ERR_UNKNOWN_FILE_EXTENSION,\n type NodeError\n} from '@flex-development/errnode'\nimport { isBuiltin } from '@flex-development/is-builtin'\nimport pathe, { type Ext } from '@flex-development/pathe'\nimport {\n isEmptyString,\n isUndefined,\n type EmptyString,\n type Nilable,\n type Nullable,\n type Optional\n} from '@flex-development/tutils'\nimport type { URL } from 'node:url'\nimport EXTENSION_FORMAT_MAP from './extension-format-map'\nimport lookupPackageScope from './lookup-package-scope'\nimport parseDataURL from './parse-data-url'\nimport toURL from './to-url'\n\n/**\n * Retrieves a module format for the given module `id`.\n *\n * ::: tip\n * The given module `id` should be absolute (i.e. a [`file:` URL][1] or absolute\n * specifier).\n * :::\n *\n * [1]: https://nodejs.org/api/esm.html#file-urls\n *\n * @see {@linkcode Format}\n * @see {@linkcode GetFormatOptions}\n * @see {@linkcode ModuleId}\n *\n * @async\n *\n * @param {ModuleId} id - Module id to evaluate\n * @param {GetFormatOptions?} [options={}] - Format retrieval options\n * @return {Promise<Nilable<Format>>} Module format, `null`, or `undefined`\n * @throws {NodeError<TypeError>}\n */\nconst getFormat = async (\n id: ModuleId,\n options: GetFormatOptions = {}\n): Promise<Nilable<Format>> => {\n const {\n experimental_json_modules: json_modules = true,\n experimental_network_imports: network_imports = false,\n experimental_wasm_modules: wasm_modules = false,\n extension_format_map = EXTENSION_FORMAT_MAP,\n ignore_errors = false,\n req = {}\n } = options\n\n validateBoolean(json_modules, 'options.experimental_json_modules')\n validateBoolean(network_imports, 'options.experimental_network_imports')\n validateBoolean(wasm_modules, 'options.experimental_wasm_modules')\n validateBoolean(ignore_errors, 'options.ignore_errors')\n validateMap(extension_format_map, 'options.extension_format_map')\n !isUndefined(req) && validateObject(req, 'options.req')\n\n /**\n * Module {@linkcode id} as {@linkcode URL}.\n *\n * @const {URL} url\n */\n const url: URL = toURL(id)\n\n /**\n * Extracts a [MIME type][1] from a {@linkcode URL} href, {@linkcode URL}\n * pathname, or [`Content-Type`][2] header and converts it to a module format.\n *\n * [1]: https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types\n * [2]: https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Type\n *\n * @param {Nullable<string>} value - `URL` component or `content-type` header\n * @param {boolean} [content_type=false] - `value` is `content-type` header?\n * @return {Nilable<Format>} Module format, `null`, or `undefined`\n */\n const mimeToFormat = (\n value: Nullable<string>,\n content_type: boolean = false\n ): Nilable<Format> => {\n /**\n * Module format for {@linkcode value}.\n *\n * @var {Nilable<Format>} format\n */\n let format: Nilable<Format> = null\n\n // do nothing if value is empty\n /* c8 ignore next */ if (!value) return format\n\n // sanitize content-type header\n if (content_type) value = value.replace(/;.*/, ',')\n\n // add data: protocol to value\n if (!value.startsWith('data:')) value = `data:${value}`\n\n // get format based on mime type\n try {\n switch (parseDataURL(value).mime) {\n case 'application/javascript':\n case 'application/typescript':\n case 'text/javascript':\n format = Format.MODULE\n break\n case 'application/json':\n format = json_modules ? Format.JSON : null\n break\n case 'application/wasm':\n format = wasm_modules ? Format.WASM : null\n break\n default:\n break\n }\n } catch {\n format = ignore_errors ? undefined : null\n }\n\n return format\n }\n\n /**\n * Module format for {@linkcode id}.\n *\n * @var {Nilable<Format>} format\n */\n let format: Nilable<Format> = null\n\n // get format based on url protocol\n switch (url.protocol) {\n case 'data:':\n format = mimeToFormat(url.href)\n break\n case 'file:':\n /**\n * File extension of {@linkcode url.pathname}.\n *\n * @const {EmptyString | Ext}\n */\n const ext: EmptyString | Ext = pathe.extname(url.pathname)\n\n /**\n * Package scope result for {@linkcode url}.\n *\n * @const {Nullable<PackageScope>} scope\n */\n const scope: Nullable<PackageScope> = lookupPackageScope(url)\n\n switch (true) {\n // get format based on package type\n case scope && ext === '.js':\n format =\n scope!.pkgjson.type === Format.MODULE\n ? Format.MODULE\n : Format.COMMONJS\n break\n // get format based on file extension\n case extension_format_map.has(ext):\n format = extension_format_map.get(ext)!\n\n switch (true) {\n case format === Format.JSON && !json_modules:\n case format === Format.WASM && !wasm_modules:\n format = ignore_errors ? undefined : null\n break\n default:\n break\n }\n\n break\n // ignore file extension errors\n case ignore_errors:\n format = undefined\n break\n default:\n /**\n * Recommended fix for [`ERR_UNKNOWN_FILE_EXTENSION`][1].\n *\n * [1]: https://nodejs.org/api/errors.html#err_unknown_file_extension\n *\n * @var {Optional<string>} suggestion\n */\n let suggestion: Optional<string>\n\n // add recommended fix for ERR_UNKNOWN_FILE_EXTENSION if package is\n // esm-only and module id does not include file extension\n if (scope && scope.pkgjson.type === Format.MODULE) {\n if (isEmptyString(ext)) {\n const { pkg } = scope\n\n /**\n * Basename of {@linkcode url.pathname}\n *\n * @const {string} basename\n */\n const basename: string = pathe.basename(url.pathname)\n\n /**\n * Relative path from {@linkcode pkg} to {@linkcode url.pathname}.\n *\n * @const {string} relative\n */\n const relative: string = pathe\n .relative(pkg, url.pathname)\n .slice(1)\n\n suggestion = `Loading extensionless files is not supported inside of \"type\":\"module\" package.json contexts. The package.json file ${pkg} caused this \"type\":\"module\" context. Try changing ${url.pathname} to have a file extension. Note the \"bin\" field of package.json can point to a file with an extension, for example {\"type\":\"module\",\"bin\":{\"${basename}\":\"${relative}.js\"}}`\n }\n }\n\n throw new ERR_UNKNOWN_FILE_EXTENSION(ext, url.pathname, suggestion)\n }\n\n break\n case 'http:':\n case 'https:':\n if (network_imports) {\n const { default: fetch } = await import('node-fetch')\n const { headers } = await fetch(url.href, req)\n format = mimeToFormat(headers.get('content-type'), true)\n } else {\n format = ignore_errors ? undefined : null\n }\n\n break\n case 'node:':\n if (isBuiltin(url)) format = Format.BUILTIN\n break\n default:\n break\n }\n\n return format\n}\n\nexport default getFormat\n"],
7
6
  "mappings": "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",
8
- "names": [
9
- "format"
10
- ]
11
- }
7
+ "names": ["format"]
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/get-source.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/get-source.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file getSource\n * @module mlly/utils/getSource\n */\n\nimport { Format } from '#src/enums'\nimport type { GetSourceOptions } from '#src/interfaces'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateObject from '#src/internal/validate-object'\nimport validateString from '#src/internal/validate-string'\nimport type { ModuleId } from '#src/types'\nimport {\n ERR_UNSUPPORTED_ESM_URL_SCHEME,\n type NodeError\n} from '@flex-development/errnode'\nimport { isUndefined, type Optional } from '@flex-development/tutils'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport type { URL } from 'node:url'\nimport util from 'node:util'\nimport parseDataURL from './parse-data-url'\nimport toURL from './to-url'\n\n/**\n * Retrieves source code for the given module `id`.\n *\n * ::: tip\n * The given module `id` should be absolute (i.e. a [`file:` URL][1] or absolute\n * specifier).\n * :::\n *\n * [1]: https://nodejs.org/api/esm.html#file-urls\n *\n * @see {@linkcode GetSourceOptions}\n * @see {@linkcode ModuleId}\n * @see https://nodejs.org/docs/latest-v19.x/api/esm.html#loadurl-context-nextload\n *\n * @async\n *\n * @param {ModuleId} id - Module id to evaluate\n * @param {GetSourceOptions?} [options={}] - Source code retrieval options\n * @return {Promise<Optional<Uint8Array | string>>} Source code for `id`\n * @throws {NodeError} If unsupported URL scheme is encountered\n */\nconst getSource = async (\n id: ModuleId,\n options: GetSourceOptions = {}\n): Promise<Optional<Uint8Array | string>> => {\n const {\n experimental_network_imports: network_imports = false,\n format,\n ignore_errors = false,\n req = {}\n } = options\n\n validateBoolean(network_imports, 'options.experimental_network_imports')\n !isUndefined(format) && validateString(format, 'options.format')\n validateBoolean(ignore_errors, 'options.ignore_errors')\n !isUndefined(req) && validateObject(req, 'options.req')\n\n // exit early if format is Format.BUILTIN\n if (format === Format.BUILTIN) return undefined\n\n /**\n * Module {@linkcode id} as {@linkcode URL}.\n *\n * @const {URL} url\n */\n const url: URL = toURL(id)\n\n /**\n * [`ERR_UNSUPPORTED_ESM_URL_SCHEME`][1] check.\n *\n * [1]: https://nodejs.org/api/errors.html#err_unsupported_esm_url_scheme\n *\n * @var {boolean} err\n */\n let err: boolean = false\n\n /**\n * Source code for {@linkcode id}.\n *\n * @var {Optional<Uint8Array | string>} source\n */\n let source: Optional<Uint8Array | string> = ''\n\n // get source code based on url protocol\n switch (url.protocol) {\n case 'data:':\n const { base64, data } = parseDataURL(url)\n\n /**\n * Buffer encoding used to create a {@linkcode Buffer} instance from\n * {@linkcode data}.\n *\n * @const {BufferEncoding} encoding\n */\n const encoding: BufferEncoding = base64 ? 'base64' : 'utf8'\n\n source = Buffer.from(decodeURIComponent(data), encoding).toString()\n break\n case 'file:':\n source = await fs.readFile(url, 'utf8')\n break\n case 'http:':\n case 'https:':\n if (network_imports) {\n const { default: fetch } = await import('node-fetch')\n source = await (await fetch(url.href, req)).text()\n } else {\n err = true\n }\n\n break\n case 'node:':\n source = undefined\n break\n default:\n err = true\n }\n\n // throw if unsupported url scheme was encountered\n if (!ignore_errors && err) {\n /**\n * Supported URL schemes.\n *\n * @const {string[]} schemes\n */\n const schemes: string[] = ['data', 'file']\n\n // update supported schemes if support for network based modules is enabled\n if (network_imports) schemes.push('http', 'https')\n\n throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(\n url,\n schemes,\n os.platform() === 'win32'\n )\n }\n\n return format === Format.WASM ? new util.TextEncoder().encode(source) : source\n}\n\nexport default getSource\n"],
7
6
  "mappings": "AAKA,SAAS,cAAc;AAEvB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAE3B;AAAA,EACE;AAAA,OAEK;AACP,SAAS,mBAAkC;AAC3C,OAAO,QAAQ;AACf,OAAO,QAAQ;AAEf,OAAO,UAAU;AACjB,OAAO,kBAAkB;AACzB,OAAO,WAAW;AAuBlB,MAAM,YAAY,OAChB,IACA,UAA4B,CAAC,MACc;AAC3C,QAAM;AAAA,IACJ,8BAA8B,kBAAkB;AAAA,IAChD;AAAA,IACA,gBAAgB;AAAA,IAChB,MAAM,CAAC;AAAA,EACT,IAAI;AAQJ,MANA,gBAAgB,iBAAiB,sCAAsC,GACvE,CAAC,YAAY,MAAM,KAAK,eAAe,QAAQ,gBAAgB,GAC/D,gBAAgB,eAAe,uBAAuB,GACtD,CAAC,YAAY,GAAG,KAAK,eAAe,KAAK,aAAa,GAGlD,WAAW,OAAO;AAAS;AAO/B,QAAM,MAAW,MAAM,EAAE;AASzB,MAAI,MAAe,IAOf,SAAwC;AAG5C,UAAQ,IAAI,UAAU;AAAA,IACpB,KAAK;AACH,YAAM,EAAE,QAAQ,KAAK,IAAI,aAAa,GAAG,GAQnC,WAA2B,SAAS,WAAW;AAErD,eAAS,OAAO,KAAK,mBAAmB,IAAI,GAAG,QAAQ,EAAE,SAAS;AAClE;AAAA,IACF,KAAK;AACH,eAAS,MAAM,GAAG,SAAS,KAAK,MAAM;AACtC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,UAAI,iBAAiB;AACnB,cAAM,EAAE,SAAS,MAAM,IAAI,MAAM,OAAO,YAAY;AACpD,iBAAS,OAAO,MAAM,MAAM,IAAI,MAAM,GAAG,GAAG,KAAK;AAAA,MACnD;AACE,cAAM;AAGR;AAAA,IACF,KAAK;AACH,eAAS;AACT;AAAA,IACF;AACE,YAAM;AAAA,EACV;AAGA,MAAI,CAAC,iBAAiB,KAAK;AAMzB,UAAM,UAAoB,CAAC,QAAQ,MAAM;AAGzC,UAAI,mBAAiB,QAAQ,KAAK,QAAQ,OAAO,GAE3C,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA,GAAG,SAAS,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,WAAW,OAAO,OAAO,IAAI,KAAK,YAAY,EAAE,OAAO,MAAM,IAAI;AAC1E;AAEA,IAAO,qBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/has-cjs-syntax.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/has-cjs-syntax.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file hasCJSSyntax\n * @module mlly/utils/hasCJSSyntax\n */\n\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\n\n/**\n * Detects if `code` contains CommonJS syntax. Ignores matches in comments.\n *\n * Syntax patterns:\n *\n * - `__dirname`\n * - `__filename`\n * - `await import`\n * - `exports`\n * - `module.exports`\n * - `require`\n * - `require.*`\n *\n * @see https://regex101.com/r/Co77SJ\n *\n * @param {string} code - Code to evaluate\n * @return {boolean} `true` if `code` contains cjs syntax, `false` otherwise\n * @throws {NodeError<TypeError>} If `code` is not a string\n */\nconst hasCJSSyntax = (code: string): boolean => {\n validateString(code, 'code')\n\n /**\n * CommonJS syntax regex.\n *\n * @see https://regex101.com/r/Co77SJ\n *\n * @const {RegExp} CJS_SYNTAX_REGEX\n */\n const CJS_SYNTAX_REGEX: RegExp =\n /(?<!(?:\\/\\/|\\*).*)((?:module\\.)?exports(?:\\.\\w+|(?<!\\s+=))|require(?=\\(.)|require\\.\\w+|__dirname|__filename|await import)/gm\n\n return !!code.match(CJS_SYNTAX_REGEX)\n}\n\nexport default hasCJSSyntax\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAsB3B,MAAM,eAAe,CAAC,SAA0B;AAC9C,iBAAe,MAAM,MAAM;AAS3B,QAAM,mBACJ;AAEF,SAAO,CAAC,CAAC,KAAK,MAAM,gBAAgB;AACtC;AAEA,IAAO,yBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/has-esm-syntax.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/has-esm-syntax.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file hasESMSyntax\n * @module mlly/utils/hasESMSyntax\n */\n\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\n\n/**\n * Detects if `code` contains ESM syntax. Ignores matches in comments.\n *\n * Syntax patterns:\n *\n * - `export` (declaration, default, named, star)\n * - `import` (default, dynamic, named, star)\n * - `import.meta.(env|resolve|url)`\n *\n * @see https://regex101.com/r/xfreyy\n *\n * @param {string} code - Code to evaluate\n * @return {boolean} `true` if `code` contains esm syntax, `false` otherwise\n * @throws {NodeError<TypeError>} If `code` is not a string\n */\nconst hasESMSyntax = (code: string): boolean => {\n validateString(code, 'code')\n\n /**\n * ESM syntax regex.\n *\n * @see https://regex101.com/r/xfreyy\n *\n * @const {RegExp} ESM_SYNTAX_REGEX\n */\n const ESM_SYNTAX_REGEX: RegExp =\n /(?<!(?:\\/\\/|\\*).*)((?:export|import)[\\s\\w*,{}]*(?=\\sfrom)|export\\b\\s*(?:[*{]|async function|(?:abstract\\s)?class|const|default|enum|function|interface|let|type|var)|await import|import\\.meta\\.(?:env(?:\\.\\w+)?|resolve|url))/gm\n\n return !!code.match(ESM_SYNTAX_REGEX)\n}\n\nexport default hasESMSyntax\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAkB3B,MAAM,eAAe,CAAC,SAA0B;AAC9C,iBAAe,MAAM,MAAM;AAS3B,QAAM,mBACJ;AAEF,SAAO,CAAC,CAAC,KAAK,MAAM,gBAAgB;AACtC;AAEA,IAAO,yBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/index.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/index.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file Utilities\n * @module mlly/utils\n */\n\nexport { default as compareSubpaths } from './compare-subpaths'\nexport { default as CONDITIONS } from './conditions'\nexport { default as detectSyntax } from './detect-syntax'\nexport { default as EXTENSION_FORMAT_MAP } from './extension-format-map'\nexport { default as extractStatements } from './extract-statements'\nexport { default as fillModules } from './fill-modules'\nexport { default as findDynamicImports } from './find-dynamic-imports'\nexport { default as findExports } from './find-exports'\nexport { default as findRequires } from './find-requires'\nexport { default as findStaticImports } from './find-static-imports'\nexport { default as findSubpath } from './find-subpath'\nexport { default as getFormat } from './get-format'\nexport { default as getSource } from './get-source'\nexport { default as hasCJSSyntax } from './has-cjs-syntax'\nexport { default as hasESMSyntax } from './has-esm-syntax'\nexport { default as isAbsoluteSpecifier } from './is-absolute-specifier'\nexport { default as isBareSpecifier } from './is-bare-specifier'\nexport { default as isDirectory } from './is-directory'\nexport { default as isExportsSugar } from './is-exports-sugar'\nexport { default as isFile } from './is-file'\nexport { default as isRelativeSpecifier } from './is-relative-specifier'\nexport { default as lookupPackageScope } from './lookup-package-scope'\nexport { default as parseDataURL } from './parse-data-url'\nexport { default as parseModuleId } from './parse-module-id'\nexport { default as parseSubpath } from './parse-subpath'\nexport { default as PATTERN_CHARACTER } from './pattern-character'\nexport { default as readPackageJson } from './read-package-json'\nexport { default as resolveAlias } from './resolve-alias'\nexport { default as resolveAliases } from './resolve-aliases'\nexport { default as RESOLVE_EXTENSIONS } from './resolve-extensions'\nexport { default as resolveModule } from './resolve-module'\nexport { default as resolveModules } from './resolve-modules'\nexport { default as toAbsoluteSpecifier } from './to-absolute-specifier'\nexport { default as toBareSpecifier } from './to-bare-specifier'\nexport { default as toDataURL } from './to-data-url'\nexport { default as toNodeURL } from './to-node-url'\nexport { default as toRelativeSpecifier } from './to-relative-specifier'\nexport { default as toURL } from './to-url'\nexport { default as validateAssertions } from './validate-assertions'\nexport { default as validateExports } from './validate-exports'\n"],
7
6
  "mappings": "AAKA,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAA+B;AACxC,SAAoB,WAAXA,gBAAuC;AAChD,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAA8B;AACvC,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAA8B;AACvC,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA4B;AACrC,SAAoB,WAAXA,iBAA4B;AACrC,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAqC;AAC9C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAAqC;AAC9C,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA4B;AACrC,SAAoB,WAAXA,iBAA4B;AACrC,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAwB;AACjC,SAAoB,WAAXA,iBAAqC;AAC9C,SAAoB,WAAXA,iBAAkC;",
8
- "names": [
9
- "default"
10
- ]
11
- }
7
+ "names": ["default"]
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-absolute-specifier.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-absolute-specifier.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file isAbsoluteSpecifier\n * @module mlly/utils/isAbsoluteSpecifier\n */\n\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport { URL } from 'node:url'\n\n/**\n * Checks if the given `specifier` is an absolute specifier.\n *\n * ::: warning\n * Only checks specifier syntax. Does **not** guarantee the specifier references\n * a file that exists.\n * :::\n *\n * @see https://nodejs.org/api/esm.html#terminology\n *\n * @param {string} specifier - Specifier to evaluate\n * @return {boolean} `true` if `specifier` is absolute specifier\n * @throws {NodeError<TypeError>} If `specifier` is not a string\n */\nconst isAbsoluteSpecifier = (specifier: string): boolean => {\n validateString(specifier, 'specifier')\n\n /**\n * Absolute specifier check.\n *\n * @var {string} absolute\n */\n let absolute: boolean = false\n\n // check if specifier is absolute path or valid file url\n switch (true) {\n case pathe.isAbsolute(specifier):\n absolute = true\n break\n case specifier.startsWith('file:'):\n try {\n new URL(specifier)\n absolute = true\n } /* c8 ignore next */ catch {}\n break\n default:\n absolute = false\n }\n\n return absolute\n}\n\nexport default isAbsoluteSpecifier\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAE3B,OAAO,WAAW;AAClB,SAAS,WAAW;AAgBpB,MAAM,sBAAsB,CAAC,cAA+B;AAC1D,iBAAe,WAAW,WAAW;AAOrC,MAAI,WAAoB;AAGxB,UAAQ,IAAM;AAAA,IACZ,KAAK,MAAM,WAAW,SAAS;AAC7B,iBAAW;AACX;AAAA,IACF,KAAK,UAAU,WAAW,OAAO;AAC/B,UAAI;AACF,YAAI,IAAI,SAAS,GACjB,WAAW;AAAA,MACb,QAA6B;AAAA,MAAC;AAC9B;AAAA,IACF;AACE,iBAAW;AAAA,EACf;AAEA,SAAO;AACT;AAEA,IAAO,gCAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-bare-specifier.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-bare-specifier.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file isBareSpecifier\n * @module mlly/utils/isBareSpecifier\n */\n\nimport validateString from '#src/internal/validate-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport { trim } from '@flex-development/tutils'\nimport isAbsoluteSpecifier from './is-absolute-specifier'\nimport isRelativeSpecifier from './is-relative-specifier'\n\n/**\n * Checks if the given `specifier` is a bare specifier.\n *\n * ::: warning\n * Only checks specifier syntax. Does **not** guarantee the specifier references\n * a file that exists.\n * :::\n *\n * @see https://nodejs.org/api/esm.html#terminology\n *\n * @param {string} specifier - Specifier to evaluate\n * @return {boolean} `true` if `specifier` is bare specifier\n * @throws {NodeError<TypeError>} If `specifier` is not a string\n */\nconst isBareSpecifier = (specifier: string): boolean => {\n validateString(specifier, 'specifier')\n\n return (\n !!trim(specifier).length &&\n !isAbsoluteSpecifier(specifier) &&\n !isRelativeSpecifier(specifier)\n )\n}\n\nexport default isBareSpecifier\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAE3B,SAAS,YAAY;AACrB,OAAO,yBAAyB;AAChC,OAAO,yBAAyB;AAgBhC,MAAM,kBAAkB,CAAC,eACvB,eAAe,WAAW,WAAW,GAGnC,CAAC,CAAC,KAAK,SAAS,EAAE,UAClB,CAAC,oBAAoB,SAAS,KAC9B,CAAC,oBAAoB,SAAS;AAIlC,IAAO,4BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-directory.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-directory.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file Internal - isDirectory\n * @module mlly/internal/isDirectory\n */\n\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { ModuleId } from '#src/types'\nimport fs from 'node:fs'\n\n/**\n * Checks if a directory exists at the given module `id`.\n *\n * @param {ModuleId} id - Module id to evaluate\n * @return {boolean} `true` if directory exists at `id`\n */\nconst isDirectory = (id: ModuleId): boolean => {\n try {\n validateURLString(id, 'id')\n return fs.statSync(id, { throwIfNoEntry: false })?.isDirectory() ?? false\n } catch {\n return false\n }\n}\n\nexport default isDirectory\n"],
7
6
  "mappings": "AAKA,OAAO,uBAAuB;AAE9B,OAAO,QAAQ;AAQf,MAAM,cAAc,CAAC,OAA0B;AAC7C,MAAI;AACF,6BAAkB,IAAI,IAAI,GACnB,GAAG,SAAS,IAAI,EAAE,gBAAgB,GAAM,CAAC,GAAG,YAAY,KAAK;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAO,uBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-exports-sugar.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-exports-sugar.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file isExportsSugar\n * @module mlly/utils/isExportsSugar\n */\n\nimport type { ModuleId } from '#src/types'\nimport type { NodeError } from '@flex-development/errnode'\nimport type { Exports } from '@flex-development/pkg-types'\nimport {\n at,\n cast,\n DOT,\n isArray,\n isObjectCurly,\n isString,\n type Nilable\n} from '@flex-development/tutils'\nimport validateExports from './validate-exports'\n\n/**\n * Checks if the given package [`exports`][1] value is using [exports sugar][2].\n *\n * [1]: https://nodejs.org/api/packages.html#exports\n * [2]: https://nodejs.org/api/packages.html#exports-sugar\n *\n * @see {@linkcode Exports}\n * @see {@linkcode ModuleId}\n *\n * @param {Nilable<Exports>} exports - Package `exports`\n * @param {ModuleId} pkg - URL of relevant `package.json` file\n * @param {ModuleId} parent - URL of module to resolve from\n * @return {boolean} `true` if `exports` is using exports sugar\n * @throws {NodeError<Error | TypeError>} If either `pkg` or `parent` is not an\n * instance of {@linkcode URL} or a string, or if `exports` configuration or\n * schema is invalid\n */\nconst isExportsSugar = (\n exports: Nilable<Exports>,\n pkg: ModuleId,\n parent: ModuleId\n): boolean => {\n /**\n * [Exports sugar][1] check.\n *\n * [1]: https://nodejs.org/api/packages.html#exports-sugar\n *\n * @var {boolean} sugar\n */\n let sugar: boolean = false\n\n // check if exports sugar is being used\n switch (true) {\n case isArray(exports):\n case isString(exports):\n sugar = true\n break\n case !isObjectCurly(exports):\n sugar = false\n break\n default:\n exports = cast<Record<string, Exports>>(exports)\n\n /*\n * Validate exports object configuration.\n *\n * This ensures the exports object is either an object of package subpath\n * keys (i.e. keys starting with '.') or an object of main entry condition\n * name keys (i.e. keys not starting with '.') only. An error will be\n * thrown otherwise. This also means only the first key in `keys` needs to\n * be checked for exports sugar usage.\n */\n validateExports(exports, pkg, parent)\n\n // check for exports sugar\n sugar = !at(Object.getOwnPropertyNames(exports), 0, DOT).startsWith(DOT)\n }\n\n return sugar\n}\n\nexport default isExportsSugar\n"],
7
6
  "mappings": "AAQA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,OAAO,qBAAqB;AAmB5B,MAAM,iBAAiB,CACrB,SACA,KACA,WACY;AAQZ,MAAI,QAAiB;AAGrB,UAAQ,IAAM;AAAA,IACZ,KAAK,QAAQ,OAAO;AAAA,IACpB,KAAK,SAAS,OAAO;AACnB,cAAQ;AACR;AAAA,IACF,KAAK,CAAC,cAAc,OAAO;AACzB,cAAQ;AACR;AAAA,IACF;AACE,gBAAU,KAA8B,OAAO,GAW/C,gBAAgB,SAAS,KAAK,MAAM,GAGpC,QAAQ,CAAC,GAAG,OAAO,oBAAoB,OAAO,GAAG,GAAG,GAAG,EAAE,WAAW,GAAG;AAAA,EAC3E;AAEA,SAAO;AACT;AAEA,IAAO,2BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-file.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-file.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file Internal - isFile\n * @module mlly/internal/isFile\n */\n\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { ModuleId } from '#src/types'\nimport fs from 'node:fs'\n\n/**\n * Checks if a file exists at the given module `id`.\n *\n * @param {ModuleId} id - Module id to evaluate\n * @return {boolean} `true` if file exists at `id`\n */\nconst isFile = (id: ModuleId): boolean => {\n try {\n validateURLString(id, 'id')\n return fs.statSync(id, { throwIfNoEntry: false })?.isFile() ?? false\n } catch {\n return false\n }\n}\n\nexport default isFile\n"],
7
6
  "mappings": "AAKA,OAAO,uBAAuB;AAE9B,OAAO,QAAQ;AAQf,MAAM,SAAS,CAAC,OAA0B;AACxC,MAAI;AACF,6BAAkB,IAAI,IAAI,GACnB,GAAG,SAAS,IAAI,EAAE,gBAAgB,GAAM,CAAC,GAAG,OAAO,KAAK;AAAA,EACjE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAO,kBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/is-relative-specifier.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/is-relative-specifier.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file isRelativeSpecifier\n * @module mlly/utils/isRelativeSpecifier\n */\n\nimport validateString from '#src/internal/validate-string'\nimport pathe from '@flex-development/pathe'\nimport { DOT, at } from '@flex-development/tutils'\n\n/**\n * Checks if the given `specifier` is a relative specifier.\n *\n * ::: warning\n * Only checks specifier syntax. Does **not** guarantee the specifier references\n * a file that exists.\n * :::\n *\n * @see https://nodejs.org/api/esm.html#terminology\n *\n * @param {string} specifier - Specifier to evaluate\n * @return {boolean} `true` if `specifier` is relative specifier\n */\nconst isRelativeSpecifier = (specifier: string): boolean => {\n validateString(specifier, 'specifier')\n\n return specifier.startsWith(DOT)\n ? specifier.length === 1 || at(specifier, 1) === pathe.sep\n ? true\n : at(specifier, 1) === DOT &&\n (specifier.length === 2 || at(specifier, 2) === pathe.sep)\n : false\n}\n\nexport default isRelativeSpecifier\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAC3B,OAAO,WAAW;AAClB,SAAS,KAAK,UAAU;AAexB,MAAM,sBAAsB,CAAC,eAC3B,eAAe,WAAW,WAAW,GAE9B,UAAU,WAAW,GAAG,IAC3B,UAAU,WAAW,KAAK,GAAG,WAAW,CAAC,MAAM,MAAM,MACnD,KACA,GAAG,WAAW,CAAC,MAAM,QACpB,UAAU,WAAW,KAAK,GAAG,WAAW,CAAC,MAAM,MAAM,OACxD;AAGN,IAAO,gCAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/lookup-package-scope.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/lookup-package-scope.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file lookupPackageScope\n * @module mlly/utils/lookupPackageScope\n */\n\nimport type { PackageScope } from '#src/interfaces'\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { ModuleId } from '#src/types'\nimport type { NodeError } from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport type { PackageJson } from '@flex-development/pkg-types'\nimport { DOT, type Nullable } from '@flex-development/tutils'\nimport { pathToFileURL } from 'node:url'\nimport readPackageJson from './read-package-json'\nimport toURL from './to-url'\n\n/**\n * Finds a `package.json` file for the given module `id`. Ends the search at the\n * given end point **after** checking for a `package.json` file.\n *\n * Returns `null` if a `package.json` file is not found.\n *\n * @see {@linkcode ModuleId}\n * @see {@linkcode PackageScope}\n *\n * @param {ModuleId} id - Id of module to get package scope for\n * @param {ModuleId?} [stopdir=pathe.sep] - Directory to end search\n * @param {string?} [specifier] - Module specifier passed by user\n * @param {ModuleId?} [parent] - Id of module to resolve from\n * @return {?PackageScope} Package scope result or `null`\n * @throws {NodeError<TypeError>} If either `id` or `stopdir` is not an instance\n * of {@linkcode URL} or a string\n */\nconst lookupPackageScope = (\n id: ModuleId,\n stopdir: ModuleId = pathe.sep,\n specifier?: string,\n parent?: ModuleId\n): Nullable<PackageScope> => {\n validateURLString(id, 'id')\n validateURLString(stopdir, 'stopdir')\n\n // ensure search endpoint is a path\n stopdir = toURL(stopdir).pathname\n\n /**\n * Path to directory containing `package.json` file.\n *\n * @var {string} dir\n */\n let dir: string = toURL(id).pathname\n\n /**\n * Package scope result.\n *\n * @var {Nullable<PackageScope>} scope\n */\n let scope: Nullable<PackageScope> = null\n\n // search for package.json\n while (dir && !dir.endsWith('node_modules')) {\n // stop search if outside of endpoint\n if (pathe.relative(stopdir, dir).startsWith(DOT.repeat(2) + '/')) break\n\n /**\n * Possible `package.json` object.\n *\n * @const {Nullable<PackageJson>} pkgjson\n */\n const pkgjson: Nullable<PackageJson> = readPackageJson(\n dir,\n specifier,\n parent\n )\n\n // stop search if package.json has been found\n if (pkgjson) {\n scope = {\n dir: pathToFileURL((dir = pathe.resolve(process.cwd(), dir))).href,\n pkg: pathToFileURL(pathe.join(dir, 'package.json')).href,\n pkgjson\n }\n\n break\n }\n\n // stop search if endpoint has been reached\n if (dir === stopdir.replace(/\\/$/, '')) break\n\n // continue searching for package.json\n dir = pathe.dirname(dir)\n }\n\n return scope\n}\n\nexport default lookupPackageScope\n"],
7
6
  "mappings": "AAMA,OAAO,uBAAuB;AAG9B,OAAO,WAAW;AAElB,SAAS,WAA0B;AACnC,SAAS,qBAAqB;AAC9B,OAAO,qBAAqB;AAC5B,OAAO,WAAW;AAmBlB,MAAM,qBAAqB,CACzB,IACA,UAAoB,MAAM,KAC1B,WACA,WAC2B;AAC3B,oBAAkB,IAAI,IAAI,GAC1B,kBAAkB,SAAS,SAAS,GAGpC,UAAU,MAAM,OAAO,EAAE;AAOzB,MAAI,MAAc,MAAM,EAAE,EAAE,UAOxB,QAAgC;AAGpC,SAAO,OAAO,CAAC,IAAI,SAAS,cAAc,KAEpC,OAAM,SAAS,SAAS,GAAG,EAAE,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,KAFpB;AAS3C,UAAM,UAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,QAAI,SAAS;AACX,cAAQ;AAAA,QACN,KAAK,cAAe,MAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG,GAAG,CAAE,EAAE;AAAA,QAC9D,KAAK,cAAc,MAAM,KAAK,KAAK,cAAc,CAAC,EAAE;AAAA,QACpD;AAAA,MACF;AAEA;AAAA,IACF;AAGA,QAAI,QAAQ,QAAQ,QAAQ,OAAO,EAAE;AAAG;AAGxC,UAAM,MAAM,QAAQ,GAAG;AAAA,EACzB;AAEA,SAAO;AACT;AAEA,IAAO,+BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/parse-data-url.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/parse-data-url.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file parseDataURL\n * @module mlly/utils/parseDataURL\n */\n\nimport type { ParsedDataUrl } from '#src/interfaces'\nimport {\n ERR_INVALID_URL,\n type ErrInvalidUrl,\n type NodeError\n} from '@flex-development/errnode'\nimport { cast, trim, type Nullable } from '@flex-development/tutils'\nimport type { URL } from 'node:url'\nimport toURL from './to-url'\n\n/**\n * Parses a [`data:` URL][1].\n *\n * If valid, returns an object representing the given `url`.\n *\n * **Note**: A [MIME type][2] string is required.\n *\n * [1]: https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URLs\n * [2]: https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types\n *\n * @see https://nodejs.org/api/esm.html#data-imports\n *\n * @param {URL | string} url - URL to evaluate\n * @return {ParsedDataUrl} Object representing `url`\n * @throws {ErrInvalidUrl | NodeError<TypeError>} If `url` is not a string or\n * instance of {@linkcode URL}, or if `url` not a valid `data:` URL\n */\nconst parseDataURL = (url: URL | string): ParsedDataUrl => {\n // ensure url is an instance of URL\n url = toURL(url)\n\n /**\n * Regex to extract `data:` URL components.\n *\n * @see https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URLs\n * @see https://regex101.com/r/Ie8Doq\n *\n * @const {RegExp} regex\n */\n const regex: RegExp =\n /^(?<protocol>data:)(?<mime>[^/]+\\/[^,;]+)[^,]*?(?:;(?<base64>base64))?,(?<data>[\\S\\s]*?)$/\n\n /**\n * `data:` URL match.\n *\n * @const {Nullable<RegExpExecArray>} match\n */\n const match: Nullable<RegExpExecArray> = regex.exec(url.href)\n\n // throw if url is not data url\n if (!match) throw new ERR_INVALID_URL(url.href)\n\n // get data url components\n const [, , mime = '', base64, data = ''] = match\n\n return {\n base64: !!base64,\n data: trim(data),\n href: url.href,\n mime,\n pathname: url.pathname,\n protocol: cast(url.protocol)\n }\n}\n\nexport default parseDataURL\n"],
7
6
  "mappings": "AAMA;AAAA,EACE;AAAA,OAGK;AACP,SAAS,MAAM,YAA2B;AAE1C,OAAO,WAAW;AAmBlB,MAAM,eAAe,CAAC,QAAqC;AAEzD,QAAM,MAAM,GAAG;AAkBf,QAAM,QAPJ,4FAO6C,KAAK,IAAI,IAAI;AAG5D,MAAI,CAAC;AAAO,UAAM,IAAI,gBAAgB,IAAI,IAAI;AAG9C,QAAM,CAAC,EAAE,EAAE,OAAO,IAAI,QAAQ,OAAO,EAAE,IAAI;AAE3C,SAAO;AAAA,IACL,QAAQ,CAAC,CAAC;AAAA,IACV,MAAM,KAAK,IAAI;AAAA,IACf,MAAM,IAAI;AAAA,IACV;AAAA,IACA,UAAU,IAAI;AAAA,IACd,UAAU,KAAK,IAAI,QAAQ;AAAA,EAC7B;AACF;AAEA,IAAO,yBAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,12 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/parse-module-id.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/parse-module-id.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file parseModuleId\n * @module mlly/lib/parseModuleId\n */\n\nimport type { ParseModuleIdOptions, ParsedModuleId } from '#src/interfaces'\nimport ENCODED_SEP_REGEX from '#src/internal/regex-encoded-sep'\nimport INTERNAL_SPECIFIER_REGEX from '#src/internal/regex-internal-specifier'\nimport PACKAGE_PATH_REGEX from '#src/internal/regex-package-path'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { ModuleId } from '#src/types'\nimport {\n ERR_INVALID_MODULE_SPECIFIER,\n type NodeError\n} from '@flex-development/errnode'\nimport { isBuiltin } from '@flex-development/is-builtin'\nimport pathe from '@flex-development/pathe'\nimport {\n DOT,\n cast,\n isString,\n isUndefined,\n trim,\n type Optional\n} from '@flex-development/tutils'\nimport { URL, fileURLToPath } from 'node:url'\nimport isBareSpecifier from './is-bare-specifier'\nimport isRelativeSpecifier from './is-relative-specifier'\nimport toNodeURL from './to-node-url'\n\n/**\n * Creates an object representation the given module `id`.\n *\n * @see {@linkcode ModuleId}\n * @see {@linkcode ParseModuleIdOptions}\n * @see {@linkcode ParsedModuleId}\n *\n * @param {ModuleId} id - Module id to parse\n * @param {ParseModuleIdOptions?} [options={}] - Parsing options\n * @return {ParsedModuleId} Object representing `id`\n * @throws {NodeError<TypeError>}\n */\nconst parseModuleId = (\n id: ModuleId,\n options: ParseModuleIdOptions = {}\n): ParsedModuleId => {\n const {\n internal = id instanceof URL ? false : id.startsWith('#'),\n pkgname = false\n } = options\n\n // ensure id is an instance of URL or a string\n validateURLString(id, 'id')\n\n // ensure option schemas\n validateBoolean(internal, 'options.internal')\n validateBoolean(pkgname, 'options.pkgname')\n\n // ensure id a string without leading and trailing spaces\n id = id instanceof URL ? id.href : trim(id)\n\n /**\n * Reason for [`ERR_INVALID_MODULE_SPECIFIER`][1], if any.\n *\n * [1]: https://nodejs.org/api/errors.html#err_invalid_module_specifier\n *\n * @const {Optional<string>} error\n */\n let error: Optional<string>\n\n /**\n * Object representing `id`.\n *\n * @var {ParsedModuleId} parsed\n */\n let parsed: ParsedModuleId = {\n internal: false,\n path: id,\n pkg: '',\n protocol: '',\n raw: id,\n scope: '',\n version: '',\n version_prefix: ''\n }\n\n // try parsing module id\n switch (true) {\n case ENCODED_SEP_REGEX.test(id):\n error = `must not include encoded '${pathe.sep}' or '\\\\' characters`\n break\n case isBuiltin(id):\n const { href, protocol, pathname } = new URL(toNodeURL(id))\n\n parsed = {\n internal: false,\n path: pathname.replace(/^\\S+?(?=\\/|$)/, ''),\n pkg: href.replace(/\\/.*$/, ''),\n protocol: id.startsWith('node:') ? protocol : '',\n raw: id,\n scope: '',\n version: '',\n version_prefix: ''\n }\n\n break\n case INTERNAL_SPECIFIER_REGEX.test(id):\n const [, root = ''] = INTERNAL_SPECIFIER_REGEX.exec(id)!\n\n parsed = {\n internal: true,\n path: id,\n pkg: root,\n protocol: '',\n raw: id,\n scope: '',\n version: '',\n version_prefix: ''\n }\n\n break\n case PACKAGE_PATH_REGEX.test(id):\n const [\n ,\n pkg = '',\n scope = '',\n version_prefix = '',\n version = '',\n subpath = ''\n ] = PACKAGE_PATH_REGEX.exec(id)!\n\n parsed = {\n internal: false,\n path: DOT + subpath,\n pkg,\n protocol: '',\n raw: id,\n scope,\n version,\n version_prefix\n }\n\n break\n case /^[\\w-]{2,}:/.test(id):\n try {\n const { host, protocol, pathname } = new URL(id)\n\n parsed = {\n internal: false,\n path: host + pathname,\n pkg: '',\n protocol,\n raw: id,\n scope: '',\n version: '',\n version_prefix: ''\n }\n } catch {\n error = 'is not a valid URL'\n }\n\n break\n case isBareSpecifier(cast(id)):\n case isRelativeSpecifier(cast(id)):\n case pathe.isAbsolute(id):\n break\n default:\n error = ''\n break\n }\n\n // reset error reason\n error = ENCODED_SEP_REGEX.test(id)\n ? error\n : internal && !INTERNAL_SPECIFIER_REGEX.test(id)\n ? 'is not a valid internal imports specifier name'\n : pkgname && !PACKAGE_PATH_REGEX.test(id)\n ? 'does not start with a valid package name'\n : error\n\n // throw if module specifier is invalid\n if (isString(error)) {\n let { parent } = options\n\n if (!isUndefined(parent)) {\n validateURLString(parent, 'options.parent')\n parent = fileURLToPath(parent)\n }\n\n throw new ERR_INVALID_MODULE_SPECIFIER(id, error, parent)\n }\n\n return parsed\n}\n\nexport default parseModuleId\n"],
7
6
  "mappings": "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",
8
- "names": [
9
- "protocol",
10
- "pathname"
11
- ]
12
- }
7
+ "names": ["protocol", "pathname"]
8
+ }
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/parse-subpath.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/parse-subpath.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file parseSubpath\n * @module mlly/utils/parseSubpath\n */\n\nimport type {\n ParseSubpathOptions,\n ParsedModuleId,\n ParsedSubpath\n} from '#src/interfaces'\nimport getSubpaths from '#src/internal/get-subpaths'\nimport invalidSegmentRegex from '#src/internal/regex-invalid-segment'\nimport PACKAGE_NAME_REGEX from '#src/internal/regex-package-name'\nimport validateArraySet from '#src/internal/validate-array-set'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateString from '#src/internal/validate-string'\nimport validateURLString from '#src/internal/validate-url-string'\nimport {\n ERR_INVALID_PACKAGE_CONFIG,\n ERR_INVALID_PACKAGE_TARGET,\n ERR_PACKAGE_IMPORT_NOT_DEFINED,\n ERR_PACKAGE_PATH_NOT_EXPORTED,\n ErrorCode,\n type NodeError\n} from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport type { Exports, Imports } from '@flex-development/pkg-types'\nimport {\n CompareResult,\n DOT,\n cast,\n get,\n isArray,\n isArrayIndex,\n isNIL,\n isNull,\n isObjectCurly,\n isString,\n type Dot,\n type Nullable,\n type Optional\n} from '@flex-development/tutils'\nimport { URL, fileURLToPath, pathToFileURL } from 'node:url'\nimport compareSubpaths from './compare-subpaths'\nimport CONDITIONS from './conditions'\nimport isExportsSugar from './is-exports-sugar'\nimport parseModuleId from './parse-module-id'\nimport PATTERN_CHARACTER from './pattern-character'\n\n/**\n * Creates an object representation of a subpath export or import from the given\n * module `specifier` after ensuring the subpath defined in `specifier` is also\n * defined in the given package `context`, a `package.json` [`exports`][1] or\n * [`imports`][2] field.\n *\n * ::: warning\n * Does **not** guarantee `specifier` resolves to an existing module.\n * :::\n *\n * [1]: https://nodejs.org/api/packages.html#exports\n * [2]: https://nodejs.org/api/packages.html#imports\n *\n * @see {@linkcode Exports}\n * @see {@linkcode Imports}\n * @see {@linkcode ParseSubpathOptions}\n * @see {@linkcode ParsedSubpath}\n * @see https://nodejs.org/api/packages.html#subpath-exports\n * @see https://nodejs.org/api/packages.html#subpath-imports\n *\n * @param {string} specifier - Module specifier to evaluate\n * @param {Optional<Exports | Imports>} context - Package context\n * @param {ParseSubpathOptions} options - Parsing options\n * @return {ParsedSubpath} Object representing package subpath\n * @throws {NodeError<Error | TypeError>}\n */\nconst parseSubpath = (\n specifier: string,\n context: Optional<Exports | Imports>,\n options: ParseSubpathOptions\n): ParsedSubpath => {\n const {\n condition = 'default',\n conditions = CONDITIONS,\n dir,\n internal = specifier.startsWith('#'),\n parent\n } = options\n\n // ensure specifier is a string\n validateString(specifier, 'specifier')\n\n // ensure option schemas\n validateString(condition, 'options.condition')\n validateArraySet(conditions, 'options.conditions')\n validateURLString(dir, 'options.dir')\n validateBoolean(internal, 'options.internal')\n validateURLString(parent, 'options.parent')\n\n /**\n * Parsed module id.\n *\n * **Note**: Ensures {@linkcode specifier} begins with a valid package name or\n * is a valid [subpath import][1].\n *\n * [1]: https://nodejs.org/api/packages.html#subpath-imports\n *\n * @const {ParsedModuleId} id\n */\n const id: ParsedModuleId = parseModuleId(specifier, {\n internal,\n parent,\n pkgname: !internal\n })\n\n /**\n * Absolute path to directory containing relevant `package.json` file.\n *\n * @const {string} pkgdir\n */\n const pkgdir: string = fileURLToPath(dir).replace(/\\/$/, '') + pathe.sep\n\n /**\n * URL of relevant `package.json` file.\n *\n * @const {URL} pkg\n */\n const pkg: URL = new URL('package.json', pathToFileURL(pkgdir))\n\n /**\n * Subpaths defined in {@linkcode context}.\n *\n * @const {string[]} keys\n */\n const keys: string[] = getSubpaths(context, id.internal, pkg, parent)\n\n /**\n * Subpath defined in {@linkcode context} that maps to {@linkcode specifier}.\n *\n * @var {Nullable<string>} key\n */\n let key: Nullable<string> = null\n\n /**\n * Subpath without entry prefix ({@linkcode key}).\n *\n * @var {string} base\n */\n let base: string = ''\n\n // match specifier to subpath defined in context\n for (const pkgsubpath of keys) {\n /**\n * Index of {@linkcode PATTERN_CHARACTER} in {@linkcode pkgsubpath}.\n *\n * @const {number} pattern\n */\n const pattern: number = pkgsubpath.indexOf(PATTERN_CHARACTER)\n\n // no pattern character => subpath must be exact match\n if (pattern === -1 && pkgsubpath === id.path) {\n key = pkgsubpath\n break\n }\n\n // pattern character => try finding best match for subpath\n if (pattern !== -1 && id.path.startsWith(pkgsubpath.slice(0, pattern))) {\n /**\n * Everything after pattern character (`*`) in {@linkcode pkgsubpath}.\n *\n * @const {string} trailer\n */\n const trailer: string = pkgsubpath.slice(pattern + 1)\n\n // best match found => reset key and base of subpath\n if (\n id.path.length >= pkgsubpath.length &&\n id.path.endsWith(trailer) &&\n compareSubpaths(key ?? '', pkgsubpath) === CompareResult.GREATER_THAN &&\n pkgsubpath.lastIndexOf(PATTERN_CHARACTER) === pattern\n ) {\n key = pkgsubpath\n base = id.path.slice(pattern, id.path.length - trailer.length)\n }\n }\n }\n\n // throw if defined subpath was not found\n if (isNull(key)) {\n let { parent } = options\n\n // ensure parent is a path\n parent = fileURLToPath(parent)\n\n throw internal\n ? new ERR_PACKAGE_IMPORT_NOT_DEFINED(id.path, parent, pkgdir)\n : new ERR_PACKAGE_PATH_NOT_EXPORTED(pkgdir, id.path, parent)\n }\n\n /**\n * Finds the package target string specified by {@linkcode key}.\n *\n * @param {Optional<Exports>} data - Initial package target\n * @return {Nullable<string>} Package target string or `null`\n * @throws {NodeError<Error | TypeError>}\n */\n const findPackageTarget = (data: Optional<Exports>): Nullable<string> => {\n /**\n * Package target.\n *\n * @var {Nullable<string>} target\n */\n let target: Nullable<string> = null\n\n switch (true) {\n case isNIL(data):\n target = null\n break\n case isArray(data):\n /**\n * Possible package target search error.\n *\n * @var {Optional<NodeError>} error\n */\n let error: Optional<NodeError>\n\n // try finding package target based on first match in search context\n for (const item of cast<string[]>(data)) {\n try {\n target = findPackageTarget(item)\n } catch (e: unknown) {\n error = cast<NodeError>(e)\n\n /* c8 ignore next */\n if (error.code !== ErrorCode.ERR_INVALID_PACKAGE_TARGET) throw error\n\n continue\n }\n\n // stop search attempts if target was found\n if (target) {\n error = undefined\n break\n }\n }\n\n // throw if error was encountered\n if (error) throw error\n\n break\n case isObjectCurly(data):\n data = cast<Record<string, Exports>>(data)\n\n // try finding package target based on condition\n for (const property of Object.getOwnPropertyNames(data)) {\n if (isArrayIndex(property)) {\n throw new ERR_INVALID_PACKAGE_CONFIG(\n fileURLToPath(pkg),\n fileURLToPath(parent),\n '\"exports\" cannot contain numeric property keys'\n )\n }\n\n // check conditions\n if (property === condition || new Set(conditions).has(property)) {\n target = findPackageTarget(data[property])\n if (target) break\n }\n }\n\n break\n case isString(data):\n target = cast<string>(data)\n\n switch (true) {\n case internal && PACKAGE_NAME_REGEX.test(target):\n break\n case target.startsWith(DOT + pathe.sep):\n // check target for invalid segments\n if (invalidSegmentRegex().test(target.slice(2))) {\n if (invalidSegmentRegex('deprecated').test(target.slice(2))) {\n throw new ERR_INVALID_PACKAGE_TARGET(\n fileURLToPath(dir),\n key!,\n target,\n internal,\n fileURLToPath(parent)\n )\n }\n }\n\n break\n default:\n throw new ERR_INVALID_PACKAGE_TARGET(\n fileURLToPath(dir),\n key!,\n target,\n internal,\n fileURLToPath(parent)\n )\n }\n\n break\n default:\n throw new ERR_INVALID_PACKAGE_TARGET(\n fileURLToPath(dir),\n key!,\n data,\n internal,\n fileURLToPath(parent)\n )\n }\n\n return target\n }\n\n // convert exports to object if using exports main sugar\n if (!internal && isExportsSugar(context, pkg, parent)) {\n context = cast<Record<Dot, Exports>>({ [DOT]: context })\n }\n\n return {\n base,\n internal,\n key,\n raw: id.path,\n specifier: id.raw,\n target: findPackageTarget(get(context, key))\n }\n}\n\nexport default parseSubpath\n"],
7
6
  "mappings": "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",
8
- "names": [
9
- "parent"
10
- ]
11
- }
7
+ "names": ["parent"]
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/pattern-character.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/pattern-character.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file PATTERN_CHARACTER\n * @module mlly/utils/PATTERN_CHARACTER\n */\n\n/**\n * Character representing a subpath pattern.\n *\n * @const {string} PATTERN_CHARACTER\n */\nconst PATTERN_CHARACTER: string = '*'\n\nexport default PATTERN_CHARACTER\n"],
7
6
  "mappings": "AAUA,MAAM,oBAA4B;AAElC,IAAO,4BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/read-package-json.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/read-package-json.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file readPackageJson\n * @module mlly/utils/readPackageJson\n */\n\nimport validateString from '#src/internal/validate-string'\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { ModuleId } from '#src/types'\nimport {\n ERR_INVALID_PACKAGE_CONFIG,\n type NodeError\n} from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport type { PackageJson } from '@flex-development/pkg-types'\nimport {\n DOT,\n cast,\n isEmptyString,\n isNIL,\n isUndefined,\n type Nullable,\n type Optional\n} from '@flex-development/tutils'\nimport fs from 'node:fs'\nimport { fileURLToPath } from 'node:url'\nimport isFile from './is-file'\nimport toURL from './to-url'\n\n/**\n * Reads a `package.json` file from the given directory.\n *\n * Returns `null` if a file is not found.\n *\n * @see {@linkcode ModuleId}\n * @see {@linkcode PackageJson}\n *\n * @param {ModuleId} [dir='.'] - Id of directory containing `package.json` file\n * @param {string?} [specifier] - Module specifier passed by user to initiate\n * reading of `package.json` file\n * @param {ModuleId?} [parent] - Id of module to resolve from\n * @return {?PackageJson} `package.json` object or `null` if file is not found\n * @throws {NodeError<Error | TypeError>} If `dir` is not a string or instance\n * of {@linkcode URL}, if `specifier` is not a string, if `parent` is not a\n * string, or if a `package.json` is file found and does not contain valid JSON\n */\nconst readPackageJson = (\n dir: ModuleId = DOT,\n specifier?: string,\n parent?: ModuleId\n): Nullable<PackageJson> => {\n // ensure dir is an instance of URL or a string\n validateURLString(dir, 'dir')\n\n // ensure specifier is a string\n !isUndefined(specifier) && validateString(specifier, 'specifier')\n\n // ensure parent is an instance of URL or a string\n !isUndefined(parent) && validateURLString(parent, 'parent')\n\n // ensure dir is a path\n dir = fileURLToPath(toURL(dir))\n\n /**\n * Absolute path to `package.json` file.\n *\n * @const {string} path\n */\n const path: string = pathe.toNamespacedPath(pathe.join(dir, 'package.json'))\n\n // return null if package.json file does not exist\n if (!isFile(path)) return null\n\n /**\n * Possible `package.json` object.\n *\n * @var {PackageJson} pkg\n */\n let pkg: PackageJson\n\n // try parsing package.json file\n try {\n pkg = JSON.parse(fs.readFileSync(path, 'utf8'))\n } catch (e: unknown) {\n /**\n * String containing module specifier passed by user to initiate reading of\n * `package.json` file and the location the module specifier was imported\n * from.\n *\n * @var {Optional<string>} base\n */\n let base: Optional<string>\n\n // get base\n switch (true) {\n case specifier && !isNIL(parent) && !isEmptyString(parent):\n base = `'${specifier}' from ${fileURLToPath(toURL(parent!))}`\n break\n case specifier?.startsWith('file:'):\n base = fileURLToPath(specifier!)\n break\n }\n\n throw new ERR_INVALID_PACKAGE_CONFIG(\n path,\n base,\n cast<SyntaxError>(e).message\n )\n }\n\n return pkg\n}\n\nexport default readPackageJson\n"],
7
6
  "mappings": "AAKA,OAAO,oBAAoB;AAC3B,OAAO,uBAAuB;AAE9B;AAAA,EACE;AAAA,OAEK;AACP,OAAO,WAAW;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAC9B,OAAO,YAAY;AACnB,OAAO,WAAW;AAmBlB,MAAM,kBAAkB,CACtB,MAAgB,KAChB,WACA,WAC0B;AAE1B,oBAAkB,KAAK,KAAK,GAG5B,CAAC,YAAY,SAAS,KAAK,eAAe,WAAW,WAAW,GAGhE,CAAC,YAAY,MAAM,KAAK,kBAAkB,QAAQ,QAAQ,GAG1D,MAAM,cAAc,MAAM,GAAG,CAAC;AAO9B,QAAM,OAAe,MAAM,iBAAiB,MAAM,KAAK,KAAK,cAAc,CAAC;AAG3E,MAAI,CAAC,OAAO,IAAI;AAAG,WAAO;AAO1B,MAAI;AAGJ,MAAI;AACF,UAAM,KAAK,MAAM,GAAG,aAAa,MAAM,MAAM,CAAC;AAAA,EAChD,SAAS,GAAY;AAQnB,QAAI;AAGJ,YAAQ,IAAM;AAAA,MACZ,MAAK,aAAa,CAAC,MAAM,MAAM,KAAK,CAAC,cAAc,MAAM;AACvD,eAAO,IAAI,SAAS,UAAU,cAAc,MAAM,MAAO,CAAC,CAAC;AAC3D;AAAA,MACF,KAAK,WAAW,WAAW,OAAO;AAChC,eAAO,cAAc,SAAU;AAC/B;AAAA,IACJ;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA,KAAkB,CAAC,EAAE;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,4BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,12 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/resolve-alias.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/resolve-alias.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file resolveAlias\n * @module mlly/utils/resolveAlias\n */\n\nimport type { ParsedModuleId, ResolveAliasOptions } from '#src/interfaces'\nimport validateArraySet from '#src/internal/validate-array-set'\nimport validateBoolean from '#src/internal/validate-boolean'\nimport validateObject from '#src/internal/validate-object'\nimport validateString from '#src/internal/validate-string'\nimport validateURLString from '#src/internal/validate-url-string'\nimport type { NodeError } from '@flex-development/errnode'\nimport pathe from '@flex-development/pathe'\nimport {\n CompareResult,\n DOT,\n flat,\n get,\n includes,\n isNIL,\n isNull,\n keys,\n regexp,\n sort,\n type Nullable\n} from '@flex-development/tutils'\nimport { URL, pathToFileURL } from 'node:url'\nimport compareSubpaths from './compare-subpaths'\nimport CONDITIONS from './conditions'\nimport parseModuleId from './parse-module-id'\nimport PATTERN_CHARACTER from './pattern-character'\nimport RESOLVE_EXTENSIONS from './resolve-extensions'\nimport resolveModule from './resolve-module'\nimport toBareSpecifier from './to-bare-specifier'\nimport toRelativeSpecifier from './to-relative-specifier'\nimport toURL from './to-url'\n\n/**\n * Resolves a path alias in the given module `specifier`; does nothing if a path\n * match isn't found.\n *\n * @see {@linkcode ResolveAliasOptions}\n *\n * @async\n *\n * @param {string} specifier - Module specifier to evaluate\n * @param {ResolveAliasOptions} [options={}] - Resolution options\n * @return {Promise<string>} Resolved specifier or original module specifier\n * @throws {NodeError}\n */\nconst resolveAlias = async (\n specifier: string,\n options: ResolveAliasOptions = {}\n): Promise<string> => {\n const {\n absolute = true,\n aliases = {},\n condition = 'default',\n conditions = CONDITIONS,\n cwd = pathToFileURL(DOT),\n ext,\n extensions = RESOLVE_EXTENSIONS,\n parent = import.meta.url,\n preserveSymlinks = false\n } = options\n\n // ensure specifier is a string\n validateString(specifier, 'specifier')\n\n // ensure option schemas\n validateBoolean(absolute, 'options.absolute')\n validateObject(aliases, 'options.aliases')\n validateString(condition, 'options.condition')\n validateArraySet(conditions, 'options.conditions')\n validateURLString(cwd, 'options.cwd')\n validateArraySet(extensions, 'options.extensions')\n validateURLString(parent, 'options.parent')\n validateBoolean(preserveSymlinks, 'options.preserveSymlinks')\n\n /**\n * Parsed module id.\n *\n * **Note**: Ensures {@linkcode specifier} is a valid module specifier.\n *\n * @const {ParsedModuleId} id\n */\n const id: ParsedModuleId = parseModuleId(specifier, {\n parent: toURL(parent),\n pkgname: false\n })\n\n /**\n * Path alias in {@linkcode aliases} that maps to {@linkcode specifier}.\n *\n * @var {Nullable<string>} key\n */\n let alias: Nullable<string> = null\n\n /**\n * Everything after {@linkcode alias} in {@linkcode specifier}.\n *\n * @var {string} trail\n */\n let trail: string = ''\n\n // match specifier to alias\n for (const key of sort(keys(aliases), compareSubpaths)) {\n /**\n * Index of {@linkcode PATTERN_CHARACTER} in {@linkcode key}.\n *\n * @const {number} p\n */\n const pattern: number = key.indexOf(PATTERN_CHARACTER)\n\n // no pattern character => need exact match for alias\n if (pattern === -1 && key === id.raw) {\n alias = key\n break\n }\n\n // pattern character => need best match for alias\n if (pattern !== -1 && id.raw.startsWith(key.slice(0, pattern))) {\n /**\n * Everything after pattern character (`*`) in {@linkcode key}.\n *\n * @const {string} trailer\n */\n const trailer: string = key.slice(pattern + 1)\n\n // best match found => reset key and base\n if (\n id.raw.length >= key.length &&\n id.raw.endsWith(trailer) &&\n compareSubpaths(alias ?? '', key) === CompareResult.GREATER_THAN &&\n key.lastIndexOf(PATTERN_CHARACTER) === pattern\n ) {\n alias = key\n trail = id.raw.slice(pattern, id.raw.length - trailer.length)\n }\n }\n }\n\n // exit early if alias was not found or alias does not map any paths\n if (isNull(alias) || isNIL(aliases[alias])) return specifier\n\n /**\n * URL of directory to resolve non-absolute modules from.\n *\n * @const {string} base\n */\n const base: string = toURL(cwd).href.replace(/\\/$/, '') + pathe.sep\n\n /**\n * Resolved module URL.\n *\n * @var {Nullable<URL>} url\n */\n let url: Nullable<URL> = null\n\n // try resolving path alias\n for (let segment of flat([get(aliases, alias, [])])) {\n // replace pattern character in segment with trail of specifier\n if (includes(segment, PATTERN_CHARACTER)) {\n segment = segment.replace(\n new RegExp(`${regexp(PATTERN_CHARACTER)}$`),\n trail\n )\n }\n\n /**\n * Absolute paths to modules to try resolving.\n *\n * @var {Set<string>} tries\n */\n let tries: Set<string> = new Set(\n [\n '',\n ...[...extensions].map(ext => pathe.formatExt(ext)),\n ...[...extensions].map(ext => '/index' + pathe.formatExt(ext))\n ]\n .map((suffix: string) => segment + suffix)\n .filter((segment: string) => !!segment.length)\n .map((segment: string) => new URL(segment, base).pathname)\n )\n\n // add attempt to resolve possible package export\n if (segment.startsWith('node_modules')) {\n const [trypath = ''] = [...tries]\n tries = new Set([trypath.replace(/.*\\/node_modules\\//, ''), ...tries])\n }\n\n // find first resolvable module\n for (const trypath of tries) {\n try {\n url = await resolveModule(trypath, {\n condition,\n conditions,\n ext,\n extensions,\n parent: toURL(parent),\n preserveSymlinks\n })\n\n // exit if module was resolved\n break\n } catch {\n continue\n }\n }\n\n // stop checking path segments if path alias was resolved\n if (url) break\n }\n\n return url\n ? absolute\n ? url.href\n : /\\/node_modules\\//.test(url.href)\n ? toBareSpecifier(url, toURL(parent), new Set(conditions))\n : toRelativeSpecifier(url, toURL(parent))\n : specifier\n}\n\nexport default resolveAlias\n"],
7
6
  "mappings": "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",
8
- "names": [
9
- "ext",
10
- "segment"
11
- ]
12
- }
7
+ "names": ["ext", "segment"]
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/resolve-aliases.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/resolve-aliases.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file resolveAliases\n * @module mlly/utils/resolveAliases\n */\n\nimport { SpecifierSyntaxKind } from '#src/enums'\nimport type { ResolveAliasOptions } from '#src/interfaces'\nimport { regexp } from '@flex-development/tutils'\nimport extractStatements from './extract-statements'\nimport resolveAlias from './resolve-alias'\n\n/**\n * Resolves path aliases in the given piece of source `code`.\n *\n * @see {@linkcode ResolveAliasOptions}\n * @see {@linkcode resolveAlias}\n *\n * @async\n *\n * @param {string} code - Code to evaluate\n * @param {ResolveAliasOptions} [options={}] - Resolve alias options\n * @return {Promise<string>} `code` unmodified or with path aliases resolved\n */\nconst resolveAliases = async (\n code: string,\n options: ResolveAliasOptions = {}\n): Promise<string> => {\n for (const statement of extractStatements(code)) {\n if (statement.specifier) {\n if (statement.specifier_syntax !== SpecifierSyntaxKind.DYNAMIC) {\n /**\n * Resolved module specifier.\n *\n * @const {string} specifier\n */\n const specifier: string = await resolveAlias(\n statement.specifier,\n options\n )\n\n // replace path alias\n if (specifier !== statement.specifier) {\n code = code.replace(\n statement.code,\n statement.code.replace(\n new RegExp(`(?<=[\"'])${regexp(statement.specifier)}(?=[\"'])`),\n specifier\n )\n )\n }\n }\n }\n }\n\n return code\n}\n\nexport default resolveAliases\n"],
7
6
  "mappings": "AAKA,SAAS,2BAA2B;AAEpC,SAAS,cAAc;AACvB,OAAO,uBAAuB;AAC9B,OAAO,kBAAkB;AAczB,MAAM,iBAAiB,OACrB,MACA,UAA+B,CAAC,MACZ;AACpB,aAAW,aAAa,kBAAkB,IAAI;AAC5C,QAAI,UAAU,aACR,UAAU,qBAAqB,oBAAoB,SAAS;AAM9D,YAAM,YAAoB,MAAM;AAAA,QAC9B,UAAU;AAAA,QACV;AAAA,MACF;AAGA,MAAI,cAAc,UAAU,cAC1B,OAAO,KAAK;AAAA,QACV,UAAU;AAAA,QACV,UAAU,KAAK;AAAA,UACb,IAAI,OAAO,YAAY,OAAO,UAAU,SAAS,CAAC,UAAU;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA,IAEJ;AAIJ,SAAO;AACT;AAEA,IAAO,0BAAQ;",
8
7
  "names": []
9
- }
8
+ }
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [
4
- "src/utils/resolve-extensions.ts"
5
- ],
6
- "sourceRoot": "https:/github.com/flex-development/mlly/blob/1.0.0-alpha.16",
3
+ "sources": ["../../src/utils/resolve-extensions.ts"],
4
+ "sourceRoot": "file://",
5
+ "sourcesContent": ["/**\n * @file RESOLVE_EXTENSIONS\n * @module mlly/utils/RESOLVE_EXTENSIONS\n */\n\nimport type { Ext } from '@flex-development/pathe'\n\n/**\n * Default resolvable file extensions.\n *\n * @see {@linkcode Ext}\n *\n * @const {Set<Ext>} RESOLVE_EXTENSIONS\n */\nconst RESOLVE_EXTENSIONS: Set<Ext> = new Set([\n '.mjs',\n '.mts',\n '.cjs',\n '.cts',\n '.js',\n '.ts',\n '.jsx',\n '.tsx',\n '.css',\n '.json',\n '.node',\n '.wasm',\n '.d.mts',\n '.d.cts',\n '.d.ts'\n])\n\nexport default RESOLVE_EXTENSIONS\n"],
7
6
  "mappings": "AAcA,MAAM,qBAA+B,oBAAI,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAO,6BAAQ;",
8
7
  "names": []
9
- }
8
+ }