assets.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const genmap = require('./generate_asset_map');
  2. const isServer = typeof genmap === 'function';
  3. let prefix = '';
  4. let manifest = {};
  5. try {
  6. //eslint-disable-next-line node/no-missing-require
  7. manifest = require('../dist/manifest.json');
  8. } catch (e) {
  9. // use middleware
  10. }
  11. const assets = isServer ? manifest : genmap;
  12. function getAsset(name) {
  13. return prefix + assets[name];
  14. }
  15. function setPrefix(name) {
  16. prefix = name;
  17. }
  18. function getMatches(match) {
  19. return Object.keys(assets)
  20. .filter(k => match.test(k))
  21. .map(getAsset);
  22. }
  23. const instance = {
  24. setPrefix: setPrefix,
  25. get: getAsset,
  26. match: getMatches,
  27. setMiddleware: function(middleware) {
  28. function getManifest() {
  29. return JSON.parse(
  30. middleware.fileSystem.readFileSync(
  31. middleware.getFilenameFromUrl('/manifest.json')
  32. )
  33. );
  34. }
  35. if (middleware) {
  36. instance.get = function getAssetWithMiddleware(name) {
  37. const m = getManifest();
  38. return prefix + m[name];
  39. };
  40. instance.match = function matchAssetWithMiddleware(match) {
  41. const m = getManifest();
  42. return Object.keys(m)
  43. .filter(k => match.test(k))
  44. .map(k => prefix + m[k]);
  45. };
  46. }
  47. }
  48. };
  49. module.exports = instance;