2021-07-24 00:00:38 -07:00
|
|
|
const esbuild = require('esbuild');
|
|
|
|
const { sassPlugin } = require('esbuild-sass-plugin');
|
2021-04-25 20:11:46 -07:00
|
|
|
|
2021-04-26 00:31:51 -07:00
|
|
|
// Bundler options common to all bundle jobs.
|
2021-04-25 20:11:46 -07:00
|
|
|
const options = {
|
2021-07-24 00:00:38 -07:00
|
|
|
outdir: './dist',
|
|
|
|
bundle: true,
|
2021-04-25 20:11:46 -07:00
|
|
|
minify: true,
|
2021-07-24 00:00:38 -07:00
|
|
|
sourcemap: true,
|
|
|
|
logLevel: 'error',
|
2021-04-25 20:11:46 -07:00
|
|
|
};
|
|
|
|
|
2021-04-26 00:31:51 -07:00
|
|
|
// Get CLI arguments for optional overrides.
|
2021-07-24 00:00:38 -07:00
|
|
|
const ARGS = process.argv.slice(2);
|
2021-04-25 20:11:46 -07:00
|
|
|
|
2021-07-31 23:49:48 -07:00
|
|
|
async function bundleGraphIQL() {
|
|
|
|
try {
|
|
|
|
const result = await esbuild.build({
|
|
|
|
...options,
|
|
|
|
entryPoints: {
|
|
|
|
graphiql: 'netbox-graphiql/index.ts',
|
|
|
|
},
|
|
|
|
target: 'es2016',
|
|
|
|
define: {
|
|
|
|
global: 'window',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
if (result.errors.length === 0) {
|
|
|
|
console.log(`✅ Bundled source file 'netbox-graphiql/index.ts' to 'graphiql.js'`);
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-26 00:31:51 -07:00
|
|
|
/**
|
2021-07-31 23:49:48 -07:00
|
|
|
* Bundle Core NetBox JavaScript.
|
2021-04-26 00:31:51 -07:00
|
|
|
*/
|
2021-07-31 23:49:48 -07:00
|
|
|
async function bundleNetBox() {
|
2021-07-24 00:00:38 -07:00
|
|
|
const entryPoints = {
|
|
|
|
netbox: 'src/index.ts',
|
|
|
|
jobs: 'src/jobs.ts',
|
|
|
|
lldp: 'src/device/lldp.ts',
|
|
|
|
config: 'src/device/config.ts',
|
|
|
|
status: 'src/device/status.ts',
|
|
|
|
};
|
|
|
|
try {
|
2021-07-31 23:49:48 -07:00
|
|
|
const result = await esbuild.build({
|
2021-07-24 00:00:38 -07:00
|
|
|
...options,
|
|
|
|
entryPoints,
|
|
|
|
target: 'es2016',
|
|
|
|
});
|
|
|
|
if (result.errors.length === 0) {
|
|
|
|
for (const [targetName, sourceName] of Object.entries(entryPoints)) {
|
|
|
|
const source = sourceName.split('/')[1];
|
|
|
|
console.log(`✅ Bundled source file '${source}' to '${targetName}.js'`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.error(err);
|
2021-04-25 20:11:46 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-31 23:49:48 -07:00
|
|
|
/**
|
|
|
|
* Run script bundle jobs.
|
|
|
|
*/
|
|
|
|
async function bundleScripts() {
|
|
|
|
for (const bundle of [bundleNetBox, bundleGraphIQL]) {
|
|
|
|
await bundle();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-26 00:31:51 -07:00
|
|
|
/**
|
2021-07-24 00:00:38 -07:00
|
|
|
* Run style bundle jobs.
|
2021-04-26 00:31:51 -07:00
|
|
|
*/
|
2021-07-24 00:00:38 -07:00
|
|
|
async function bundleStyles() {
|
|
|
|
try {
|
|
|
|
const entryPoints = {
|
|
|
|
'netbox-external': 'styles/_external.scss',
|
|
|
|
'netbox-light': 'styles/_light.scss',
|
|
|
|
'netbox-dark': 'styles/_dark.scss',
|
2021-07-24 01:40:23 -07:00
|
|
|
rack_elevation: 'styles/_rack_elevation.scss',
|
2021-07-24 00:00:38 -07:00
|
|
|
cable_trace: 'styles/_cable_trace.scss',
|
2021-07-31 23:49:48 -07:00
|
|
|
graphiql: 'netbox-graphiql/graphiql.scss',
|
2021-07-24 00:00:38 -07:00
|
|
|
};
|
|
|
|
const pluginOptions = { outputStyle: 'compressed' };
|
|
|
|
// Allow cache disabling.
|
|
|
|
if (ARGS.includes('--no-cache')) {
|
|
|
|
pluginOptions.cache = false;
|
|
|
|
}
|
|
|
|
let result = await esbuild.build({
|
|
|
|
...options,
|
|
|
|
entryPoints,
|
|
|
|
plugins: [sassPlugin(pluginOptions)],
|
|
|
|
loader: {
|
|
|
|
'.eot': 'file',
|
|
|
|
'.woff': 'file',
|
|
|
|
'.woff2': 'file',
|
|
|
|
'.svg': 'file',
|
|
|
|
'.ttf': 'file',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
if (result.errors.length === 0) {
|
|
|
|
for (const [targetName, sourceName] of Object.entries(entryPoints)) {
|
|
|
|
const source = sourceName.split('/')[1];
|
|
|
|
console.log(`✅ Bundled source file '${source}' to '${targetName}.css'`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.error(err);
|
2021-04-25 20:11:46 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-26 00:31:51 -07:00
|
|
|
/**
|
|
|
|
* Run all bundle jobs.
|
|
|
|
*/
|
2021-04-25 20:11:46 -07:00
|
|
|
async function bundleAll() {
|
2021-07-24 00:00:38 -07:00
|
|
|
if (ARGS.includes('--styles')) {
|
2021-04-26 00:31:51 -07:00
|
|
|
// Only run style jobs.
|
2021-04-25 20:11:46 -07:00
|
|
|
return await bundleStyles();
|
2021-07-24 00:00:38 -07:00
|
|
|
} else if (ARGS.includes('--scripts')) {
|
2021-04-26 00:31:51 -07:00
|
|
|
// Only run script jobs.
|
2021-04-25 20:11:46 -07:00
|
|
|
return await bundleScripts();
|
|
|
|
}
|
|
|
|
await bundleStyles();
|
|
|
|
await bundleScripts();
|
|
|
|
}
|
|
|
|
|
|
|
|
bundleAll();
|