@nodejs-loaders/media
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"media.loader.d.mts","sourceRoot":"","sources":["media.loader.mjs"],"names":[],"mappings":"AAmFA,+BAwBG;sBAvGW,OAAO,eAAe,EAAE,OAAO;iCAwChC,KAAK,CAAC,MAAM,CAAC,GAAC,GAAG,CAAC,MAAM,CAAC;;;;;eAG5B,kBAAkB;;;;eAClB,kBAAkB;;;;;8CAEf,kBAAkB;uIA0Dsvc,CAAC;kHAA89C,CAAC"} | ||
| {"version":3,"file":"media.loader.d.mts","sourceRoot":"","sources":["media.loader.mjs"],"names":[],"mappings":"AA0GA,+BAwBG;sBA5HW,OAAO,eAAe,EAAE,OAAO;iCA6DhC,KAAK,CAAC,MAAM,CAAC,GAAC,GAAG,CAAC,MAAM,CAAC;;;;;eAG5B,kBAAkB;;;;eAClB,kBAAkB;;;;;8CAEf,kBAAkB;uIA0Di+hB,CAAC;kHAAywD,CAAC"} |
+35
-12
| import process from 'node:process'; | ||
| import { pathToFileURL } from 'node:url'; | ||
| import { runForAsyncOrSync } from '@nodejs-loaders/chain-utils/run-normalised'; | ||
| import { getFilenameExt } from '@nodejs-loaders/parse-filename'; | ||
@@ -10,9 +12,20 @@ | ||
| */ | ||
| async function resolveMedia(specifier, ctx, nextResolve) { | ||
| const nextResult = await nextResolve(specifier); | ||
| function resolveMedia(specifier, ctx, nextResolve) { | ||
| return runForAsyncOrSync( | ||
| nextResolve(specifier), | ||
| finaliseResolveMedia, | ||
| ctx, | ||
| ); | ||
| } | ||
| export { resolveMedia as resolve }; | ||
| /** | ||
| * @param {import('node:module').ResolveFnOutput} resolvedResult Specifier has been fully resolved. | ||
| * @param {import('node:module').ResolveHookContext} ctx Context about the module. | ||
| */ | ||
| function finaliseResolveMedia(resolvedResult, ctx) { | ||
| // Check against the fully resolved URL, not just the specifier, in case another loader has | ||
| // something to contribute to the resolution. | ||
| if (!exts.has(getFilenameExt(/** @type {FileURL} */ (nextResult.url)))) { | ||
| return nextResult; | ||
| if (!exts.has(getFilenameExt(/** @type {FileURL} */ (resolvedResult.url)))) { | ||
| return resolvedResult; | ||
| } | ||
@@ -22,8 +35,6 @@ | ||
| ...ctx, | ||
| format: 'media', | ||
| url: nextResult.url, | ||
| url: resolvedResult.url, | ||
| }; | ||
| } | ||
| export { resolveMedia as resolve }; | ||
@@ -33,5 +44,18 @@ /** | ||
| */ | ||
| async function loadMedia(url, ctx, nextLoad) { | ||
| function loadMedia(url, ctx, nextLoad) { | ||
| if (ctx.format !== 'media') return nextLoad(url); | ||
| return runForAsyncOrSync( | ||
| { format: ctx.format }, | ||
| finaliseLoadMedia, | ||
| url, | ||
| ); | ||
| } | ||
| export { loadMedia as load }; | ||
| /** | ||
| * @param {import('node:module').LoadFnOutput} loadedResult Raw source has been retrieved. | ||
| * @param {FileURL} url Context about the module being loaded. | ||
| */ | ||
| function finaliseLoadMedia(loadedResult, url) { | ||
| const source = `export default '${url.replace(cwd, '[…]')}';`; | ||
@@ -45,3 +69,2 @@ | ||
| } | ||
| export { loadMedia as load }; | ||
@@ -59,3 +82,3 @@ /** | ||
| * @type {import('node:module').InitializeHook} | ||
| * @param {MediaExtensionAddRemoveConfig|MediaExtensionReplacementConfig} config | ||
| * @param {MediaExtensionAddRemoveConfig|MediaExtensionReplacementConfig} config Data to configure media loader file extensions. | ||
| */ | ||
@@ -80,3 +103,3 @@ function initialiseMedia(config) { | ||
| /** | ||
| * @param {unknown} suspect | ||
| * @param {unknown} suspect The item to check. | ||
| * @returns {boolean} | ||
@@ -88,3 +111,3 @@ */ | ||
| const cwd = process.cwd(); | ||
| const cwd = pathToFileURL(process.cwd()).pathname; | ||
@@ -91,0 +114,0 @@ export const exts = new Set([ |
+3
-2
| { | ||
| "version": "1.3.0", | ||
| "version": "1.4.0", | ||
| "name": "@nodejs-loaders/media", | ||
@@ -28,3 +28,4 @@ "description": "Extend node to support media imports via customization hooks.", | ||
| "dependencies": { | ||
| "@nodejs-loaders/parse-filename": "1.0.0" | ||
| "@nodejs-loaders/chain-utils": "^1.0.0", | ||
| "@nodejs-loaders/parse-filename": "^1.0.0" | ||
| }, | ||
@@ -31,0 +32,0 @@ "repository": { |
+4
-1
@@ -25,4 +25,7 @@ # Nodejs Loaders: Media | ||
| **Compatible APIs**: [`module.register`](https://nodejs.org/api/module.html#moduleregisterspecifier-parenturl-options) | ||
| **Compatible APIs**: | ||
| * [`module.register`](https://nodejs.org/api/module.html#moduleregisterspecifier-parenturl-options) | ||
| * [`module.registerHooks`](https://nodejs.org/api/module.html#moduleregisterhooksoptions) | ||
| ```js | ||
@@ -29,0 +32,0 @@ import photo from './team.jpg'; // photo = '[…]/team.jpg' |
8850
11.8%122
23.23%104
2.97%2
100%+ Added