UNPKG

@leafage/renderer

Version:

The React Server Side Render Framework

75 lines (71 loc) 2.04 kB
/** * @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 */ 'use strict'; 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;