@leafage/renderer
Version:
The React Server Side Render Framework
75 lines (71 loc) • 2.04 kB
JavaScript
/**
* @leafage/renderer v1.3.2
*
* Copyright (c) Leafage.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
;
var path = require('node:path');
var fs = require('node:fs');
var pathToRegexp = require('path-to-regexp');
var toolkit = require('@leafage/toolkit');
var loadResourcePreset = function loadResourcePreset(ctx) {
var loadResourceHandle = function loadResourceHandle(mfs) {
var resources = [];
try {
var fullPath = path.join(ctx.options.dir.root, ctx.options.dir.dist, ctx.options.dir.manifest);
if (mfs.existsSync(fullPath)) {
var contents = mfs.readFileSync(fullPath, 'utf-8');
resources = JSON.parse(contents) || [];
}
} catch (err) {
resources = [];
}
return resources;
};
if (ctx.isDev) {
ctx.context.hook('bundle:resources', function (mfs) {
ctx.resources = loadResourceHandle(mfs);
});
return;
}
ctx.resources = loadResourceHandle(fs);
};
var findResourcePreset = function findResourcePreset(ctx) {
var map = new Map();
ctx.findResource = function (id) {
if (!id) return null;
if (map.has(id)) return map.get(id);
for (var i = 0, len = ctx.resources.length; i < len; i += 1) {
var row = ctx.resources[i];
// view find
if (row.view === id) {
map.set(id, row);
return row;
}
if (path.isAbsolute(id)) {
// path find
var match = pathToRegexp.match(row.path, {
sensitive: true
});
var result = match(id);
if (result) {
var resource = toolkit.utils.mergeProps(row, {
params: result.params || {}
});
map.set(id, resource);
return resource;
}
}
}
return null;
};
};
var resourcePreset = function resourcePreset(ctx) {
toolkit.utils.applyPresets(ctx, [loadResourcePreset, findResourcePreset]);
};
exports.resourcePreset = resourcePreset;