Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 84 additions & 11 deletions common/assets.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
'use strict';

const path = require('path');

const genmap = require('./generate_asset_map');
const isServer = typeof genmap === 'function';
let prefix = '';
Expand All @@ -21,35 +25,104 @@ function setPrefix(name) {

function getMatches(match) {
return Object.keys(assets)
.filter(k => match.test(k))
.filter((k) => match.test(k))
.map(getAsset);
}

const instance = {
setPrefix: setPrefix,
get: getAsset,
match: getMatches,
setMiddleware: function(middleware) {

// === Only this block changed to support WDS v3/v4 shapes ===
setMiddleware: function (middleware) {
// Normalize various shapes:
// - WDS v4: middleware.context.{outputFileSystem,getFilenameFromURL,compiler}
// - Older: middleware.fileSystem, middleware.getFilenameFromUrl
function resolveFsAndHelpers(mw) {
const ctx = mw && (mw.context || mw);

const fs = (ctx && (ctx.outputFileSystem || ctx.fileSystem)) || null;

const getFilenameFromURL =
(ctx && (ctx.getFilenameFromURL || ctx.getFilenameFromUrl)) || null;

// When getFilenameFromURL is missing, fall back to compiler.outputPath
const compiler =
(ctx && (ctx.compiler || (ctx.context && ctx.context.compiler))) ||
null;

const outputPath = compiler && compiler.outputPath;

return { fs, getFilenameFromURL, outputPath };
}

// hide Node require from bundlers
function safeRequireFs() {
try {
// eslint-disable-next-line no-eval
const req = eval('require');
return req && req('fs');
} catch (_) {
return null;
}
}

function getManifest() {
return JSON.parse(
middleware.fileSystem.readFileSync(
middleware.getFilenameFromUrl('/manifest.json')
)
);
const { fs, getFilenameFromURL, outputPath } =
resolveFsAndHelpers(middleware);
// If WDS memfs isn't present yet, fall back to disk in Node; otherwise return empty
if (!fs) {
if (
typeof process !== 'undefined' &&
process.versions &&
process.versions.node
) {
const nfs = safeRequireFs();
if (nfs) {
const disk = path.resolve(__dirname, '..', 'dist', 'manifest.json');
return JSON.parse(nfs.readFileSync(disk, 'utf8'));
}
}
return {};
}

const filename =
typeof getFilenameFromURL === 'function'
? getFilenameFromURL('/manifest.json')
: outputPath && path.join(outputPath, 'manifest.json');

if (!filename) {
if (
typeof process !== 'undefined' &&
process.versions &&
process.versions.node
) {
const nfs = safeRequireFs();
if (nfs) {
const disk = path.resolve(__dirname, '..', 'dist', 'manifest.json');
return JSON.parse(nfs.readFileSync(disk, 'utf8'));
}
}
return {};
}

return JSON.parse(fs.readFileSync(filename).toString());
}

if (middleware) {
instance.get = function getAssetWithMiddleware(name) {
const m = getManifest();
return prefix + m[name];
return prefix + (m[name] || name);
};
instance.match = function matchAssetWithMiddleware(match) {
const m = getManifest();
return Object.keys(m)
.filter(k => match.test(k))
.map(k => prefix + m[k]);
.filter((k) => match.test(k))
.map((k) => prefix + m[k]);
};
}
}
},
};

module.exports = instance;
Loading