* Make the synthetic "base name" property double underscore prefixed, since internal, and to avoid future conflicts w/ YAML format add'ns. * Switch to PS hash dictionaries for our metadata collections for saner data inspection/use.
69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
/*
|
|
* Copyright (c) 2021 The ZMK Contributors
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
var PrebuildPlugin = require("prebuild-webpack-plugin");
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
const glob = require("glob");
|
|
const yaml = require("js-yaml");
|
|
const Mustache = require("mustache");
|
|
|
|
function generateSetupScripts() {
|
|
return glob("../app/boards/**/*.zmk.yml", (error, files) => {
|
|
const aggregated = files.map((f) => ({
|
|
...yaml.load(fs.readFileSync(f, "utf8")),
|
|
__base_dir: path.basename(path.dirname(f)),
|
|
}));
|
|
|
|
const data = aggregated.reduce(
|
|
(agg, item) => {
|
|
switch (item.type) {
|
|
case "shield":
|
|
item.compatible = true;
|
|
item.split = item.siblings?.length > 1;
|
|
agg.keyboards.push(item);
|
|
break;
|
|
case "board":
|
|
if (item.features?.includes("keys")) {
|
|
agg.keyboards.push(item);
|
|
} else {
|
|
agg.boards.push(item);
|
|
}
|
|
break;
|
|
}
|
|
return agg;
|
|
},
|
|
{ keyboards: [], boards: [] }
|
|
);
|
|
|
|
data.keyboards.sort((a, b) => a.name.localeCompare(b.name));
|
|
data.boards.sort((a, b) => a.name.localeCompare(b.name));
|
|
|
|
for (let script_ext of ["sh", "ps1"]) {
|
|
const templateBuffer = fs.readFileSync(
|
|
`src/templates/setup.${script_ext}.mustache`,
|
|
"utf8"
|
|
);
|
|
const script = Mustache.render(templateBuffer, data);
|
|
fs.writeFileSync(`static/setup.${script_ext}`, script);
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = function () {
|
|
return {
|
|
name: "setup-script-generation-plugin",
|
|
configureWebpack() {
|
|
return {
|
|
plugins: [
|
|
new PrebuildPlugin({
|
|
build: generateSetupScripts,
|
|
}),
|
|
],
|
|
};
|
|
},
|
|
};
|
|
};
|