@decaf-ts/fabric-weaver
Version:
template for ts projects
60 lines • 7.48 kB
JavaScript
/**
* @module build-scripts
* @description Custom build scripts for the fabric-weaver project.
* @summary This module extends the BuildScripts class from @decaf-ts/utils to provide custom build functionality for the fabric-weaver project. It includes utilities for building command-line interfaces and handling different module formats (CommonJS and ES Modules).
*/
import { BuildScripts, readFile, writeFile } from "@decaf-ts/utils";
import fs from "fs";
import path from "path";
/**
* @description Enumeration of module modes.
* @summary Defines the different module formats supported in the build process.
* @enum {string}
* @readonly
* @memberOf module:build-scripts
*/
var Modes;
(function (Modes) {
/** CommonJS module format */
Modes["CJS"] = "commonjs";
/** ECMAScript module format (ES2022) */
Modes["ESM"] = "es2022";
})(Modes || (Modes = {}));
/**
* @description Custom build scripts for the fabric-weaver project.
* @summary Extends the BuildScripts class to provide project-specific build functionality, including command bundling and file manipulation.
* @class BuildScriptsCustom
* @extends BuildScripts
*/
export class BuildScriptsCustom extends BuildScripts {
/**
* @description Builds command-line interfaces for the project.
* @summary Processes each command in the Commands array, bundling the TypeScript files, adding a shebang line, and setting appropriate permissions.
* @return {Promise<void>}
* @mermaid
* sequenceDiagram
* participant BuildScriptsCustom
* participant FileSystem
* loop For each command
* BuildScriptsCustom->>BuildScriptsCustom: bundle(Modes.CJS, true, true, `src/bin/${cmd}.ts`, cmd)
* BuildScriptsCustom->>FileSystem: readFile(`bin/${cmd}.cjs`)
* FileSystem-->>BuildScriptsCustom: file content
* BuildScriptsCustom->>BuildScriptsCustom: Add shebang to file content
* BuildScriptsCustom->>FileSystem: writeFile(`bin/${cmd}.cjs`, modified content)
* BuildScriptsCustom->>FileSystem: chmodSync(`bin/${cmd}.cjs`, "755")
* end
*/
async buildCommands() {
const commands = fs.readdirSync(path.join(process.cwd() + "/src/bin"));
for (const cmd of commands) {
if (!cmd.endsWith(".ts"))
continue;
await this.bundle(Modes.CJS, true, true, `src/bin/${cmd}`, cmd);
let data = readFile(`bin/${cmd}.cjs`);
data = "#!/usr/bin/env node\n" + data;
writeFile(`bin/${cmd}.cjs`, data);
fs.chmodSync(`bin/${cmd}.cjs`, "755");
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy1vbGQvYnVpbGQtc2NyaXB0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4Qjs7Ozs7O0dBTUc7QUFDSCxJQUFLLEtBS0o7QUFMRCxXQUFLLEtBQUs7SUFDUiw2QkFBNkI7SUFDN0IseUJBQWdCLENBQUE7SUFDaEIsd0NBQXdDO0lBQ3hDLHVCQUFjLENBQUE7QUFDaEIsQ0FBQyxFQUxJLEtBQUssS0FBTCxLQUFLLFFBS1Q7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxZQUFZO0lBQ2xEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLFNBQVM7WUFFbkMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHLHVCQUF1QixHQUFHLElBQUksQ0FBQztZQUN0QyxTQUFTLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBidWlsZC1zY3JpcHRzXG4gKiBAZGVzY3JpcHRpb24gQ3VzdG9tIGJ1aWxkIHNjcmlwdHMgZm9yIHRoZSBmYWJyaWMtd2VhdmVyIHByb2plY3QuXG4gKiBAc3VtbWFyeSBUaGlzIG1vZHVsZSBleHRlbmRzIHRoZSBCdWlsZFNjcmlwdHMgY2xhc3MgZnJvbSBAZGVjYWYtdHMvdXRpbHMgdG8gcHJvdmlkZSBjdXN0b20gYnVpbGQgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGZhYnJpYy13ZWF2ZXIgcHJvamVjdC4gSXQgaW5jbHVkZXMgdXRpbGl0aWVzIGZvciBidWlsZGluZyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlcyBhbmQgaGFuZGxpbmcgZGlmZmVyZW50IG1vZHVsZSBmb3JtYXRzIChDb21tb25KUyBhbmQgRVMgTW9kdWxlcykuXG4gKi9cblxuaW1wb3J0IHsgQnVpbGRTY3JpcHRzLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcIkBkZWNhZi10cy91dGlsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bWVyYXRpb24gb2YgbW9kdWxlIG1vZGVzLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGlmZmVyZW50IG1vZHVsZSBmb3JtYXRzIHN1cHBvcnRlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6YnVpbGQtc2NyaXB0c1xuICovXG5lbnVtIE1vZGVzIHtcbiAgLyoqIENvbW1vbkpTIG1vZHVsZSBmb3JtYXQgKi9cbiAgQ0pTID0gXCJjb21tb25qc1wiLFxuICAvKiogRUNNQVNjcmlwdCBtb2R1bGUgZm9ybWF0IChFUzIwMjIpICovXG4gIEVTTSA9IFwiZXMyMDIyXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1c3RvbSBidWlsZCBzY3JpcHRzIGZvciB0aGUgZmFicmljLXdlYXZlciBwcm9qZWN0LlxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgQnVpbGRTY3JpcHRzIGNsYXNzIHRvIHByb3ZpZGUgcHJvamVjdC1zcGVjaWZpYyBidWlsZCBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgY29tbWFuZCBidW5kbGluZyBhbmQgZmlsZSBtYW5pcHVsYXRpb24uXG4gKiBAY2xhc3MgQnVpbGRTY3JpcHRzQ3VzdG9tXG4gKiBAZXh0ZW5kcyBCdWlsZFNjcmlwdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkU2NyaXB0c0N1c3RvbSBleHRlbmRzIEJ1aWxkU2NyaXB0cyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGNvbW1hbmQtbGluZSBpbnRlcmZhY2VzIGZvciB0aGUgcHJvamVjdC5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGVhY2ggY29tbWFuZCBpbiB0aGUgQ29tbWFuZHMgYXJyYXksIGJ1bmRsaW5nIHRoZSBUeXBlU2NyaXB0IGZpbGVzLCBhZGRpbmcgYSBzaGViYW5nIGxpbmUsIGFuZCBzZXR0aW5nIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBCdWlsZFNjcmlwdHNDdXN0b21cbiAgICogICBwYXJ0aWNpcGFudCBGaWxlU3lzdGVtXG4gICAqICAgbG9vcCBGb3IgZWFjaCBjb21tYW5kXG4gICAqICAgICBCdWlsZFNjcmlwdHNDdXN0b20tPj5CdWlsZFNjcmlwdHNDdXN0b206IGJ1bmRsZShNb2Rlcy5DSlMsIHRydWUsIHRydWUsIGBzcmMvYmluLyR7Y21kfS50c2AsIGNtZClcbiAgICogICAgIEJ1aWxkU2NyaXB0c0N1c3RvbS0+PkZpbGVTeXN0ZW06IHJlYWRGaWxlKGBiaW4vJHtjbWR9LmNqc2ApXG4gICAqICAgICBGaWxlU3lzdGVtLS0+PkJ1aWxkU2NyaXB0c0N1c3RvbTogZmlsZSBjb250ZW50XG4gICAqICAgICBCdWlsZFNjcmlwdHNDdXN0b20tPj5CdWlsZFNjcmlwdHNDdXN0b206IEFkZCBzaGViYW5nIHRvIGZpbGUgY29udGVudFxuICAgKiAgICAgQnVpbGRTY3JpcHRzQ3VzdG9tLT4+RmlsZVN5c3RlbTogd3JpdGVGaWxlKGBiaW4vJHtjbWR9LmNqc2AsIG1vZGlmaWVkIGNvbnRlbnQpXG4gICAqICAgICBCdWlsZFNjcmlwdHNDdXN0b20tPj5GaWxlU3lzdGVtOiBjaG1vZFN5bmMoYGJpbi8ke2NtZH0uY2pzYCwgXCI3NTVcIilcbiAgICogICBlbmRcbiAgICovXG4gIGFzeW5jIGJ1aWxkQ29tbWFuZHMoKSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBmcy5yZWFkZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSArIFwiL3NyYy9iaW5cIikpO1xuICAgIGZvciAoY29uc3QgY21kIG9mIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoIWNtZC5lbmRzV2l0aChcIi50c1wiKSkgY29udGludWU7XG5cbiAgICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgdHJ1ZSwgYHNyYy9iaW4vJHtjbWR9YCwgY21kKTtcbiAgICAgIGxldCBkYXRhID0gcmVhZEZpbGUoYGJpbi8ke2NtZH0uY2pzYCk7XG4gICAgICBkYXRhID0gXCIjIS91c3IvYmluL2VudiBub2RlXFxuXCIgKyBkYXRhO1xuICAgICAgd3JpdGVGaWxlKGBiaW4vJHtjbWR9LmNqc2AsIGRhdGEpO1xuICAgICAgZnMuY2htb2RTeW5jKGBiaW4vJHtjbWR9LmNqc2AsIFwiNzU1XCIpO1xuICAgIH1cbiAgfVxufVxuIl19