derby
Version:
MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers.
76 lines (75 loc) • 2.75 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadStylesSync = exports.loadViewsSync = void 0;
/*
* files.ts
* load templates and styles from disk
*
*/
var fs = require("node:fs");
var path = require("node:path");
var racer = require("racer");
var resolve = require("resolve");
var parsing = require("./parsing");
function loadViewsSync(app, sourceFilename, namespace) {
var views = [];
var files = [];
var filename = resolve.sync(sourceFilename, {
extensions: app.viewExtensions,
packageFilter: deleteMain
});
if (!filename) {
throw new Error('View template file not found: ' + sourceFilename);
}
var file = fs.readFileSync(filename, 'utf8');
var extension = path.extname(filename);
var compiler = app.compilers[extension];
if (!compiler) {
throw new Error('Unable to find compiler for: ' + extension);
}
function onImport(attrs) {
var dir = path.dirname(filename);
var importFilename = resolve.sync(attrs.src, {
basedir: dir,
extensions: app.viewExtensions,
packageFilter: deleteMain
});
var importNamespace = parsing.getImportNamespace(namespace, attrs, importFilename);
var imported = loadViewsSync(app, importFilename, importNamespace);
views = views.concat(imported.views);
files = files.concat(imported.files);
}
var htmlFile = compiler(file, filename);
var parsedViews = parsing.parseViews(htmlFile, namespace, filename, onImport);
return {
views: views.concat(parsedViews),
files: files.concat(filename)
};
}
exports.loadViewsSync = loadViewsSync;
function loadStylesSync(app, sourceFilename, options) {
if (options == null) {
options = { compress: racer.util.isProduction };
}
var resolved = resolve.sync(sourceFilename, {
extensions: app.styleExtensions,
packageFilter: deleteMain
});
if (!resolved) {
throw new Error('Style file not found: ' + sourceFilename);
}
var extension = path.extname(resolved);
var compiler = app.compilers[extension];
if (!compiler) {
throw new Error('Unable to find compiler for: ' + extension);
}
var file = fs.readFileSync(resolved, 'utf8');
return compiler(file, resolved, options);
}
exports.loadStylesSync = loadStylesSync;
// Resolve will use a main path from a package.json if found. Main is the
// entry point for javascript in a module, so this will mistakenly cause us to
// load the JS file instead of a view or style file in some cases. This package
// filter deletes the main property so that the normal file name lookup happens
function deleteMain() {
return {};
}