Skip to content

Commit

Permalink
chore(loader): use @flex-development/tsconfig-utils
Browse files Browse the repository at this point in the history
- https://github.com/flex-development/tsconfig-utils/tree/1.1.1

Signed-off-by: Lexus Drumgold <unicornware@flexdevelopment.llc>
  • Loading branch information
unicornware committed Feb 12, 2023
1 parent c4c65b3 commit bcaa531
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 24 deletions.
2 changes: 1 addition & 1 deletion .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@
"useGitignore": true,
"usePnP": false,
"version": "0.2",
"words": ["fldv", "flexdevelopmentllc", "mkbuild", "mlly"]
"words": ["fldv", "flexdevelopmentllc", "mkbuild", "mlly", "pathe", "tscu"]
}
64 changes: 41 additions & 23 deletions loader.mjs
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
/**
* @file Custom Loader
* @file Custom Loader Hooks
* @module loader
* @see https://nodejs.org/docs/latest-v16.x/api/esm.html#loaders
* @see https://nodejs.org/api/esm.html#loaders
*/

import * as mlly from '@flex-development/mlly'
import * as pathe from '@flex-development/pathe'
import * as tscu from '@flex-development/tsconfig-utils'
import * as tutils from '@flex-development/tutils'
import * as esbuild from 'esbuild'
import path from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'
import tsconfig from './tsconfig.json' assert { type: 'json' }

// add support for extensionless files in "bin" scripts
// https://github.com/nodejs/modules/issues/488
mlly.EXTENSION_FORMAT_MAP.set('', mlly.Format.COMMONJS)

/**
* URL of current working directory.
* URL of tsconfig file.
*
* @const {URL} cwd
* @type {import('node:url').URL}
* @const tsconfig
*/
const cwd = pathToFileURL(tsconfig.compilerOptions.baseUrl)
const tsconfig = mlly.toURL('tsconfig.json')

/**
* Determines how `url` should be interpreted, retrieved, and parsed.
* TypeScript compiler options.
*
* @type {tscu.CompilerOptions}
* @const compilerOptions
*/
const compilerOptions = tscu.loadCompilerOptions(tsconfig)

/**
* Determines how the module at the given `url` should be interpreted,
* retrieved, and parsed.
*
* @see {@linkcode LoadHookContext}
* @see https://nodejs.org/docs/latest-v16.x/api/esm.html#loadurl-context-nextload
* @see https://nodejs.org/api/esm.html#loadurl-context-nextload
*
* @async
*
Expand All @@ -43,25 +54,27 @@ export const load = async (url, context) => {
/**
* File extension of {@linkcode url}.
*
* @const {string} ext
* @type {pathe.Ext | tutils.EmptyString}
* @const ext
*/
const ext = path.extname(url)
const ext = pathe.extname(url)

/**
* Source code.
*
* @var {Uint8Array | string | undefined} source
* @type {Uint8Array | string | undefined}
* @var source
*/
let source = await mlly.getSource(url, { format: context.format })

// transform typescript files
if (/^\.(?:cts|mts|tsx?)$/.test(ext) && !/\.d\.(?:cts|mts|ts)$/.test(url)) {
// resolve path aliases
source = await mlly.resolveAliases(source, {
aliases: tsconfig.compilerOptions.paths,
source = await tscu.resolvePaths(source, {
conditions: context.conditions,
cwd,
parent: url
ext: '',
parent: url,
tsconfig
})

// resolve modules
Expand All @@ -73,11 +86,12 @@ export const load = async (url, context) => {
// transpile source code
const { code } = await esbuild.transform(source, {
format: ext === '.cts' ? 'cjs' : 'esm',
loader: /^[cm]/.test(ext) ? 'ts' : ext.slice(1),
loader: ext.slice(/^\.[cm]/.test(ext) ? 2 : 1),
minify: false,
sourcefile: fileURLToPath(url),
sourcemap: 'inline',
tsconfigRaw: { compilerOptions: tsconfig.compilerOptions }
target: `node${process.versions.node}`,
tsconfigRaw: { compilerOptions }
})

// set source code to transpiled source
Expand All @@ -96,7 +110,7 @@ export const load = async (url, context) => {
* - Extensionless file and directory index resolution
*
* @see {@linkcode ResolveHookContext}
* @see https://nodejs.org/docs/latest-v16.x/api/esm.html#resolvespecifier-context-nextresolve
* @see https://nodejs.org/api/esm.html#resolvespecifier-context-nextresolve
*
* @async
*
Expand All @@ -110,18 +124,22 @@ export const resolve = async (specifier, context) => {

// resolve path alias
specifier = await mlly.resolveAlias(specifier, {
aliases: tsconfig.compilerOptions.paths,
aliases: tscu.loadPaths(tsconfig),
conditions,
cwd,
cwd: pathToFileURL(compilerOptions.baseUrl),
parent
})

/**
* Resolved module URL.
*
* @const {URL} url
* @type {import('node:url').URL}
* @const url
*/
const url = await mlly.resolveModule(specifier, { conditions, parent })
const url = await mlly.resolveModule(specifier, {
conditions,
parent: parent?.startsWith('file:') ? parent : specifier
})

return {
format: await mlly.getFormat(url),
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
"@commitlint/config-conventional": "17.4.2",
"@flex-development/mkbuild": "1.0.0-alpha.9",
"@flex-development/mlly": "1.0.0-alpha.11",
"@flex-development/pathe": "1.0.3",
"@flex-development/tsconfig-utils": "1.1.1",
"@flex-development/tutils": "6.0.0-alpha.10",
"@graphql-eslint/eslint-plugin": "3.15.0",
"@types/chai": "4.3.4",
Expand Down
108 changes: 108 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1161,6 +1161,8 @@ __metadata:
"@commitlint/config-conventional": "npm:17.4.2"
"@flex-development/mkbuild": "npm:1.0.0-alpha.9"
"@flex-development/mlly": "npm:1.0.0-alpha.11"
"@flex-development/pathe": "npm:1.0.3"
"@flex-development/tsconfig-utils": "npm:1.1.1"
"@flex-development/tutils": "npm:6.0.0-alpha.10"
"@graphql-eslint/eslint-plugin": "npm:3.15.0"
"@types/chai": "npm:4.3.4"
Expand Down Expand Up @@ -1257,6 +1259,18 @@ __metadata:
languageName: node
linkType: hard

"@flex-development/errnode@npm:1.5.0":
version: 1.5.0
resolution: "@flex-development/errnode@npm:1.5.0::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Ferrnode%2F1.5.0%2F33dedbfaeb3139375e41d4382a8de53f9415a261"
dependencies:
"@flex-development/tutils": "npm:6.0.0-alpha.10"
node-inspect-extracted: "npm:2.0.0"
peerDependencies:
"@types/node": ">=14"
checksum: 884d5339afb245fdb3e635ba599e373ba1dd9f68e789c796817fe4fbe15317fb0192f49684b524c3baba1d4b70934799a5b353439543f29ee36b513d63e53bfa
languageName: node
linkType: hard

"@flex-development/export-regex@npm:1.0.0":
version: 1.0.0
resolution: "@flex-development/export-regex@npm:1.0.0::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Fexport-regex%2F1.0.0%2Fee7486c94c3ecbb392ae3beff0c9ecc4f1ce7282"
Expand Down Expand Up @@ -1315,6 +1329,24 @@ __metadata:
languageName: node
linkType: hard

"@flex-development/mlly@npm:1.0.0-alpha.10":
version: 1.0.0-alpha.10
resolution: "@flex-development/mlly@npm:1.0.0-alpha.10::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Fmlly%2F1.0.0-alpha.10%2F6e84e05b66e57a92d750539044617fce7304b80f"
dependencies:
"@flex-development/errnode": "npm:1.4.0"
"@flex-development/export-regex": "npm:1.0.0"
"@flex-development/import-regex": "npm:2.0.1"
"@flex-development/is-builtin": "npm:2.0.0"
"@flex-development/pathe": "npm:1.0.3"
"@flex-development/pkg-types": "npm:2.0.0"
"@flex-development/tutils": "npm:6.0.0-alpha.9"
peerDependencies:
"@types/node": ">=14.17.0"
node-fetch: ">=3.3.0"
checksum: 198d01ebe2c226b9df0aecb35eaf4e1bc56dc87a07ac809b5c5b9a8b88a35382a90837ee4c295f0a598588c3b6c6affb9418b59f0d8ce2e806c4179aa4ad4c06
languageName: node
linkType: hard

"@flex-development/mlly@npm:1.0.0-alpha.11":
version: 1.0.0-alpha.11
resolution: "@flex-development/mlly@npm:1.0.0-alpha.11::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Fmlly%2F1.0.0-alpha.11%2F4801f76b2e43ae5f14be38212e22c43cf335af48"
Expand Down Expand Up @@ -1369,6 +1401,36 @@ __metadata:
languageName: node
linkType: hard

"@flex-development/tsconfig-types@npm:3.2.0":
version: 3.2.0
resolution: "@flex-development/tsconfig-types@npm:3.2.0::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Ftsconfig-types%2F3.2.0%2Fe49eb5faa42583a340fdff7c9ec64ac5feaf4529"
dependencies:
"@flex-development/pkg-types": "npm:2.0.0"
"@flex-development/tutils": "npm:6.0.0-alpha.10"
checksum: 3955eb124d092798c32f3d72f8b9c79e97464ad3f20521b448f1432a64762f939f04fb983299d5d38c5e0963ab4efad71f9e262a27101cc4e571e1e50f5afdf8
languageName: node
linkType: hard

"@flex-development/tsconfig-utils@npm:1.1.1":
version: 1.1.1
resolution: "@flex-development/tsconfig-utils@npm:1.1.1::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Ftsconfig-utils%2F1.1.1%2Ffe7f9d391c9d4f0d8d2c31ab11bd36aae172d7da"
dependencies:
"@flex-development/errnode": "npm:1.5.0"
"@flex-development/mlly": "npm:1.0.0-alpha.10"
"@flex-development/pathe": "npm:1.0.3"
"@flex-development/tsconfig-types": "npm:3.2.0"
"@flex-development/tutils": "npm:6.0.0-alpha.10"
merge-anything: "npm:5.1.4"
sort-keys: "npm:5.0.0"
strip-bom: "npm:5.0.0"
strip-json-comments: "npm:5.0.0"
peerDependencies:
"@types/node": ">=14.18.36"
typescript: ">=4.7"
checksum: 4a5cd5d2c2e89766ef036b834f0cb36f4c4d3ac1a7340efb8f15fd7448dace057d77756f49305af4a5b202f6d3a05db20680517b60af7e905a40ff7f3d1a6d2d
languageName: node
linkType: hard

"@flex-development/tutils@npm:6.0.0-alpha.10":
version: 6.0.0-alpha.10
resolution: "@flex-development/tutils@npm:6.0.0-alpha.10::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40flex-development%2Ftutils%2F6.0.0-alpha.10%2Fb2085f42d62aedfabfae2ed016c0cc5c47192f81"
Expand Down Expand Up @@ -5641,6 +5703,13 @@ __metadata:
languageName: node
linkType: hard

"is-plain-obj@npm:^4.0.0":
version: 4.1.0
resolution: "is-plain-obj@npm:4.1.0"
checksum: 9d6bfe46ad30eda62cc2f0caec2ee980257a84a0a003523588c8c0e5eb33b6e42e73910f42c323490bfdfdd1bf7fd7854e8f156c275da7c12bebebb1be11c73a
languageName: node
linkType: hard

"is-port-reachable@npm:4.0.0":
version: 4.0.0
resolution: "is-port-reachable@npm:4.0.0"
Expand Down Expand Up @@ -5685,6 +5754,13 @@ __metadata:
languageName: node
linkType: hard

"is-what@npm:^4.1.8":
version: 4.1.8
resolution: "is-what@npm:4.1.8"
checksum: c2e9f829658980ab7bc0d21be714e9683bef7a48b76e412792135f333105f940098a77258704d352d794f7766def0da36549ce6080d1cc3c8e1f3c45a728c8db
languageName: node
linkType: hard

"is-wsl@npm:^2.2.0":
version: 2.2.0
resolution: "is-wsl@npm:2.2.0"
Expand Down Expand Up @@ -6316,6 +6392,15 @@ __metadata:
languageName: node
linkType: hard

"merge-anything@npm:5.1.4":
version: 5.1.4
resolution: "merge-anything@npm:5.1.4"
dependencies:
is-what: "npm:^4.1.8"
checksum: 489fbf11bb7455e397a59bb1ed46e577308d6822b26c81ca204974f251c1e30b0f8586910195a59769c3732b33d6026f254031c05f77d54c99dcc160b35cb9a4
languageName: node
linkType: hard

"merge-stream@npm:^2.0.0":
version: 2.0.0
resolution: "merge-stream@npm:2.0.0"
Expand Down Expand Up @@ -8064,6 +8149,15 @@ __metadata:
languageName: node
linkType: hard

"sort-keys@npm:5.0.0":
version: 5.0.0
resolution: "sort-keys@npm:5.0.0"
dependencies:
is-plain-obj: "npm:^4.0.0"
checksum: f8a0a3e63f2c1a30921b8693ac785f974dd496e9e849f39685c4ce9f5901fc0f597226130668f4d1b95cf4c5a1aab4744802713428ef4057fd5b9257f0c6dee8
languageName: node
linkType: hard

"source-map-js@npm:^1.0.2":
version: 1.0.2
resolution: "source-map-js@npm:1.0.2"
Expand Down Expand Up @@ -8242,6 +8336,13 @@ __metadata:
languageName: node
linkType: hard

"strip-bom@npm:5.0.0":
version: 5.0.0
resolution: "strip-bom@npm:5.0.0"
checksum: 66cc7a869ae43ff0d6b9f26e7f623495cbf8ae6062ef9425f71d507009114098591b1c3468288695374f941b69a0129300fb3837859377e73cddfb1266df2216
languageName: node
linkType: hard

"strip-bom@npm:^3.0.0":
version: 3.0.0
resolution: "strip-bom@npm:3.0.0"
Expand Down Expand Up @@ -8281,6 +8382,13 @@ __metadata:
languageName: node
linkType: hard

"strip-json-comments@npm:5.0.0":
version: 5.0.0
resolution: "strip-json-comments@npm:5.0.0"
checksum: 3987fe7ac03f1f912375b63bfa010c54cfcf93b464eead789bd9deb3911bcf8fdaa6d3335e20915a7debbe76754b8bba18c13568e7c27946c21bbda117567666
languageName: node
linkType: hard

"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
Expand Down

0 comments on commit bcaa531

Please sign in to comment.