forked from svrjs/svrjs
141 lines
4.8 KiB
JavaScript
141 lines
4.8 KiB
JavaScript
|
const esbuild = require("esbuild");
|
||
|
const esbuildCopyPlugin = require("esbuild-plugin-copy");
|
||
|
const fs = require("fs");
|
||
|
const ejs = require("ejs");
|
||
|
const dependencies = JSON.parse(fs.readFileSync(__dirname + "/package.json")).dependencies || {};
|
||
|
const requiredDependencyList = Object.keys(dependencies);
|
||
|
let dependencyList = Object.keys(dependencies);
|
||
|
const version = JSON.parse(fs.readFileSync(__dirname + "/svrjs.json")).version;
|
||
|
|
||
|
// Function to find and add all dependencies into the dependencyList array.
|
||
|
function findAllDependencies(curList) {
|
||
|
// If no curList parameter is specified, use dependencyList.
|
||
|
if (!curList) curList = dependencyList;
|
||
|
curList.forEach((dependency) => {
|
||
|
const newDeplist = Object.keys(JSON.parse(fs.readFileSync(__dirname + "/node_modules/" + dependency.replace(/\/\.\./g,"") + "/package.json").toString()).dependencies || {});
|
||
|
let noDupNewDepList = [];
|
||
|
newDeplist.forEach((dep) => {
|
||
|
// Ignore duplicates
|
||
|
if (dependencyList.indexOf(dep) == -1) {
|
||
|
noDupNewDepList.push(dep);
|
||
|
dependencyList.push(dep);
|
||
|
}
|
||
|
});
|
||
|
// Call findAllDependencies for the dependency list.
|
||
|
findAllDependencies(noDupNewDepList);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Get list of all dependencies
|
||
|
findAllDependencies();
|
||
|
dependencyList = dependencyList.sort();
|
||
|
|
||
|
// Create and populate an object, where whenever the dependencies are required are listed.
|
||
|
let dependenciesAreRequired = {};
|
||
|
dependencyList.forEach((dependency) => {
|
||
|
dependenciesAreRequired[dependency] = false;
|
||
|
});
|
||
|
requiredDependencyList.forEach((dependency) => {
|
||
|
dependenciesAreRequired[dependency] = true;
|
||
|
});
|
||
|
|
||
|
// Create the template functions using EJS
|
||
|
const layoutTemplate = ejs.compile(fs.readFileSync(__dirname + "/templates/layout.ejs").toString());
|
||
|
const testsTemplate = ejs.compile(fs.readFileSync(__dirname + "/templates/tests.ejs").toString());
|
||
|
const indexTemplate = ejs.compile(fs.readFileSync(__dirname + "/templates/index.ejs").toString());
|
||
|
const licensesTemplate = ejs.compile(fs.readFileSync(__dirname + "/templates/licenses.ejs").toString());
|
||
|
const licenseElementTemplate = ejs.compile(fs.readFileSync(__dirname + "/templates/licenseElement.ejs").toString());
|
||
|
|
||
|
let licenseElements = "";
|
||
|
|
||
|
// Generate the licenses list in HTML
|
||
|
dependencyList.forEach((dependency) => {
|
||
|
const packageJSON = JSON.parse(fs.readFileSync(__dirname + "/node_modules/" + dependency.replace(/\/\.\./g,"") + "/package.json").toString());
|
||
|
licenseElements += licenseElementTemplate({
|
||
|
name: packageJSON.name,
|
||
|
license: packageJSON.license,
|
||
|
description: packageJSON.description || "No description",
|
||
|
author: packageJSON.author ? packageJSON.author.name : packageJSON.author,
|
||
|
required: dependenciesAreRequired[dependency]
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Generate pages
|
||
|
const licensesPage = layoutTemplate({
|
||
|
title: "SVR.JS " + version + " Licenses",
|
||
|
content: licensesTemplate({
|
||
|
version: version,
|
||
|
licenses: licenseElements
|
||
|
})
|
||
|
});
|
||
|
|
||
|
const testsPage = layoutTemplate({
|
||
|
title: "SVR.JS " + version + " Tests",
|
||
|
content: testsTemplate({
|
||
|
version: version
|
||
|
})
|
||
|
});
|
||
|
|
||
|
const indexPage = layoutTemplate({
|
||
|
title: "SVR.JS " + version,
|
||
|
content: indexTemplate({
|
||
|
version: version
|
||
|
})
|
||
|
});
|
||
|
|
||
|
// Remove the generated assets directory if exists, and create a new one.
|
||
|
if (fs.existsSync(__dirname + "/generatedAssets")) {
|
||
|
if (fs.rmSync) fs.rmSync(__dirname + "/generatedAssets", {recursive: true});
|
||
|
else fs.rmdirSync(__dirname + "/generatedAssets", {recursive: true});
|
||
|
}
|
||
|
fs.mkdirSync(__dirname + "/generatedAssets");
|
||
|
|
||
|
// Remove the dist directory if exists, and create a new one.
|
||
|
if (fs.existsSync(__dirname + "/dist")) {
|
||
|
if (fs.rmSync) fs.rmSync(__dirname + "/dist", {recursive: true});
|
||
|
else fs.rmdirSync(__dirname + "/dist", {recursive: true});
|
||
|
}
|
||
|
fs.mkdirSync(__dirname + "/dist");
|
||
|
|
||
|
// Create a licenses directory
|
||
|
fs.mkdirSync(__dirname + "/generatedAssets/licenses");
|
||
|
|
||
|
// Write to HTML files
|
||
|
fs.writeFileSync(__dirname + "/generatedAssets/index.html", indexPage);
|
||
|
fs.writeFileSync(__dirname + "/generatedAssets/tests.html", testsPage);
|
||
|
fs.writeFileSync(__dirname + "/generatedAssets/licenses/index.html", licensesPage);
|
||
|
|
||
|
// Bundle the source and copy the assets using esbuild and esbuild-plugin-copy
|
||
|
esbuild.build({
|
||
|
entryPoints: ["src/index.js"], // Your entry file
|
||
|
bundle: true,
|
||
|
outfile: "dist/svr.js", // Output file
|
||
|
platform: "node",
|
||
|
target: "es2020",
|
||
|
plugins: [
|
||
|
esbuildCopyPlugin.copy({
|
||
|
resolveFrom: __dirname,
|
||
|
assets: {
|
||
|
from: ["./utilities/**/*"],
|
||
|
to: ["./dist"],
|
||
|
}
|
||
|
}),
|
||
|
esbuildCopyPlugin.copy({
|
||
|
resolveFrom: __dirname,
|
||
|
assets: {
|
||
|
from: ["./assets/**/*"],
|
||
|
to: ["./dist"],
|
||
|
}
|
||
|
}),
|
||
|
esbuildCopyPlugin.copy({
|
||
|
resolveFrom: __dirname,
|
||
|
assets: {
|
||
|
from: ["./generatedAssets/**/*"],
|
||
|
to: ["./dist"],
|
||
|
}
|
||
|
})
|
||
|
],
|
||
|
}).catch((err) => {
|
||
|
throw err;
|
||
|
});
|