refactor: tidy

This commit is contained in:
cha0s 2024-01-31 18:21:25 -06:00
parent 4cc203bd20
commit b120824f84

View File

@ -30,6 +30,7 @@ const {
const debug = D('@flecks/build/build/commands');
// Find `exports.dependencies = ...`.
const dependenciesVisitor = (fn) => ({
AssignmentExpression: (path) => {
if (isMemberExpression(path.node.left)) {
@ -77,26 +78,16 @@ exports.commands = (program, flecks) => {
// If it seems like we're in a fleck path, update the bootstrap dependencies if possible.
const bootstrapPath = join(FLECKS_CORE_ROOT, 'build', 'flecks.bootstrap.js');
let code;
let dependencies;
let devDependencies;
let packageDependencies;
try {
({
dependencies,
devDependencies,
} = require(join(FLECKS_CORE_ROOT, 'package.json')));
const {dependencies, devDependencies} = require(join(FLECKS_CORE_ROOT, 'package.json'));
packageDependencies = [].concat(Object.keys(dependencies), Object.keys(devDependencies));
}
catch (error) {
dependencies = {};
devDependencies = {};
packageDependencies = [];
}
if (
[]
.concat(
Object.keys(dependencies),
Object.keys(devDependencies),
)
.includes('@flecks/fleck')
) {
// Try loading the bootstrap script.
if (packageDependencies.includes('@flecks/fleck')) {
try {
// eslint-disable-next-line no-bitwise
await access(bootstrapPath, R_OK | W_OK);
@ -105,6 +96,7 @@ exports.commands = (program, flecks) => {
catch (error) { /* empty */ }
}
if ('undefined' !== typeof code) {
// Parse the script and find `exports.dependencies`.
const ast = await parseAsync(code, {ast: true, code: false});
let dependencies;
traverse(ast, dependenciesVisitor((node) => {
@ -113,8 +105,10 @@ exports.commands = (program, flecks) => {
if (dependencies) {
const {elements, end, start} = dependencies;
const seen = {};
// Add the fleck to dependencies.
dependencies.elements = elements
.concat(stringLiteralSinglequote(fleck))
// Filter duplicate literal strings.
.filter((node) => {
if (isStringLiteral(node)) {
if (seen[node.value]) {
@ -124,12 +118,14 @@ exports.commands = (program, flecks) => {
}
return true;
});
// Be surgical, don't generate the whole file. Splice the new dependencies in.
code = [
code.slice(0, start),
generate(dependencies).code,
code.slice(end),
].join('');
}
// No dependencies, append some.
else {
code = [
code,