Compare commits
19 Commits
c51ca65751
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ad5f5a3c15 | |||
| 8247860806 | |||
|
|
9c4fe7d3ea | ||
| ec24ba6c3e | |||
| d95a5533b1 | |||
| 302b8feee4 | |||
| 7df811852d | |||
| d249b02def | |||
| 5de6a97dbd | |||
| 7e67128abe | |||
| 806a82baae | |||
| ab8ef4ff5b | |||
| bf50d06d60 | |||
| 1b4cb233e5 | |||
| c9183d3022 | |||
| 7e24370186 | |||
| 83570d9535 | |||
| 29b40b4e43 | |||
| d00ddeb1e1 |
161
lib/build.js
161
lib/build.js
@@ -4,91 +4,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const esbuild_1 = require("esbuild");
|
||||
const fs_1 = require("fs");
|
||||
const paths_1 = require("./paths");
|
||||
const readmeta_1 = __importDefault(require("./readmeta"));
|
||||
const prettier_1 = require("prettier");
|
||||
function default_1(name, watchCallback, PrettierConfig, CLIArgs) {
|
||||
const main_1 = require("./main");
|
||||
const promises_1 = require("fs/promises");
|
||||
async function runBuild(name) {
|
||||
//read meta file
|
||||
let [metaJson, metaString] = (0, readmeta_1.default)(name);
|
||||
let pathDist = (0, paths_1.DistPath)(name);
|
||||
let result = runEsbuild({
|
||||
entryPoints: [(0, paths_1.ScriptPath)(name).main],
|
||||
outfile: pathDist,
|
||||
let { meta, metaString } = (0, readmeta_1.default)(name);
|
||||
let paths = main_1.AllPaths.script(name);
|
||||
let result = await runEsbuild({
|
||||
entryPoints: [paths.main],
|
||||
outfile: paths.dist,
|
||||
target: 'esnext',
|
||||
platform: 'node',
|
||||
format: 'esm',
|
||||
bundle: true,
|
||||
minify: CLIArgs.minify,
|
||||
minify: main_1.CLIArgs.minify,
|
||||
define: {
|
||||
UserScriptName: `'${metaJson.name}'`,
|
||||
UserScriptNamespace: `'${metaJson.namespace}'`,
|
||||
UserScriptVersion: `'${metaJson.version}'`,
|
||||
UserScriptDownloadURL: `'${metaJson.downloadURL}'`,
|
||||
UserScriptSupportURL: `'${metaJson.supportURL}'`,
|
||||
UserScriptHomepageURL: `'${metaJson.homepageURL}'`,
|
||||
UserScriptName: `'${meta.name}'`,
|
||||
UserScriptNamespace: `'${meta.namespace}'`,
|
||||
UserScriptVersion: `'${meta.version}'`,
|
||||
UserScriptDownloadURL: `'${meta.downloadURL}'`,
|
||||
UserScriptSupportURL: `'${meta.supportURL}'`,
|
||||
UserScriptHomepageURL: `'${meta.homepageURL}'`,
|
||||
},
|
||||
}, result => {
|
||||
let error = runPostEsbuild(name, result, metaString, CLIArgs, PrettierConfig);
|
||||
watchCallback(metaJson, error);
|
||||
}, CLIArgs);
|
||||
let error = runPostEsbuild(name, result, metaString, CLIArgs, PrettierConfig);
|
||||
return [metaJson, error];
|
||||
});
|
||||
let error = await postBuild(name, result, metaString);
|
||||
return {
|
||||
meta,
|
||||
error,
|
||||
};
|
||||
}
|
||||
exports.default = default_1;
|
||||
function doErrorFile(pathError, pathOutFile, error) {
|
||||
if (error !== null) {
|
||||
(0, fs_1.writeFileSync)(pathError, `${new Date().toISOString()}\n\n${error}`);
|
||||
if ((0, fs_1.existsSync)(pathOutFile)) {
|
||||
(0, fs_1.unlinkSync)(pathOutFile);
|
||||
}
|
||||
}
|
||||
else if ((0, fs_1.existsSync)(pathError)) {
|
||||
(0, fs_1.unlinkSync)(pathError);
|
||||
}
|
||||
}
|
||||
function runEsbuild(opts, watchCallback, CLIArgs) {
|
||||
exports.default = runBuild;
|
||||
async function runEsbuild(opts) {
|
||||
opts.write = false;
|
||||
if (CLIArgs.watch) {
|
||||
opts.watch = {
|
||||
onRebuild(err, res) {
|
||||
if (err) {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: err.message,
|
||||
errorRaw: err,
|
||||
});
|
||||
}
|
||||
else if (res) {
|
||||
let content = '';
|
||||
if (res.outputFiles && res.outputFiles.length > 0) {
|
||||
content = res.outputFiles[0].text;
|
||||
}
|
||||
if (content === '') {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: 'No output',
|
||||
});
|
||||
}
|
||||
watchCallback({
|
||||
content,
|
||||
error: null,
|
||||
});
|
||||
}
|
||||
else {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: 'No result',
|
||||
});
|
||||
}
|
||||
},
|
||||
try {
|
||||
let res = await (0, esbuild_1.build)(opts);
|
||||
return getResult(null, res);
|
||||
}
|
||||
catch (err) {
|
||||
return getResult(err, null);
|
||||
}
|
||||
}
|
||||
function getResult(error, result) {
|
||||
if (error) {
|
||||
return {
|
||||
content: null,
|
||||
error: error.message,
|
||||
errorRaw: error,
|
||||
};
|
||||
}
|
||||
try {
|
||||
let res = (0, esbuild_1.buildSync)(opts);
|
||||
else if (result) {
|
||||
let content = '';
|
||||
if (res.outputFiles && res.outputFiles.length > 0) {
|
||||
content = clearFilenameComments(res.outputFiles[0].text);
|
||||
if (result.outputFiles && result.outputFiles.length > 0) {
|
||||
content = result.outputFiles[0].text;
|
||||
if (!main_1.CLIArgs.srccomment)
|
||||
content = clearFilenameComments(content);
|
||||
}
|
||||
if (content === '') {
|
||||
return {
|
||||
@@ -101,37 +72,59 @@ function runEsbuild(opts, watchCallback, CLIArgs) {
|
||||
error: null,
|
||||
};
|
||||
}
|
||||
catch (err) {
|
||||
else {
|
||||
return {
|
||||
content: null,
|
||||
error: err.message,
|
||||
error: 'No result',
|
||||
};
|
||||
}
|
||||
}
|
||||
function runPostEsbuild(name, result, metaString, CLIArgs, PrettierConfig) {
|
||||
function clearFilenameComments(content) {
|
||||
let regexp = new RegExp(`//\\s*${main_1.AllPaths.base.in}/.*(?:\\n|$)`, 'g');
|
||||
return content.replace(regexp, '');
|
||||
}
|
||||
async function postBuild(name, result, metaString) {
|
||||
let error = null;
|
||||
let path = (0, paths_1.ScriptPath)(name);
|
||||
let pathDist = (0, paths_1.DistPath)(name);
|
||||
let paths = main_1.AllPaths.script(name);
|
||||
let PrettierConfig = (await (0, prettier_1.resolveConfig)(paths.dir)) ?? {};
|
||||
if (result.error) {
|
||||
console.error(name, result.errorRaw || result.error);
|
||||
error = result.error;
|
||||
}
|
||||
else if (result.content) {
|
||||
let content = metaString + result.content;
|
||||
if (CLIArgs.prettier) {
|
||||
content = (0, prettier_1.format)(content, PrettierConfig);
|
||||
if (main_1.CLIArgs.prettier) {
|
||||
content = await (0, prettier_1.format)(content, {
|
||||
...PrettierConfig,
|
||||
parser: 'babel',
|
||||
});
|
||||
}
|
||||
(0, fs_1.writeFileSync)(pathDist, content);
|
||||
await (0, promises_1.writeFile)(paths.dist, content);
|
||||
}
|
||||
else {
|
||||
console.error(name, 'No output');
|
||||
}
|
||||
doErrorFile(path.error, pathDist, error);
|
||||
await doErrorFile(name, error);
|
||||
return error;
|
||||
}
|
||||
//remove all filename comments
|
||||
function clearFilenameComments(content) {
|
||||
let regexp = new RegExp(`//\\s*${paths_1.ScriptBase}/.*(?:\\n|$)`, 'g');
|
||||
return content.replace(regexp, '');
|
||||
async function doErrorFile(name, error) {
|
||||
let paths = main_1.AllPaths.script(name);
|
||||
let content = `${new Date().toISOString()}\n\n${error}`;
|
||||
if (error !== null) {
|
||||
await (0, promises_1.writeFile)(paths.error, content);
|
||||
if (await existsFile(paths.dist)) {
|
||||
await (0, promises_1.unlink)(paths.dist);
|
||||
}
|
||||
}
|
||||
else if (await existsFile(paths.error)) {
|
||||
await (0, promises_1.unlink)(paths.error);
|
||||
}
|
||||
}
|
||||
function existsFile(path) {
|
||||
return new Promise(resolve => {
|
||||
(0, promises_1.stat)(path)
|
||||
.then(() => resolve(true))
|
||||
.catch(() => resolve(false));
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=build.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":";;;;;AAAA,qCAAwE;AAExE,0DAAiC;AACjC,uCAAgD;AAChD,iCAA0C;AAC1C,0CAAqD;AAOtC,KAAK,UAAU,QAAQ,CAAC,IAAY;IAC/C,gBAAgB;IAChB,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAA;IACzC,IAAI,KAAK,GAAG,eAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC;QAC1B,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,KAAK,CAAC,IAAI;QAEnB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,KAAK;QAEb,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,cAAO,CAAC,MAAM;QAEtB,MAAM,EAAE;YACJ,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG;YAChC,mBAAmB,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;YAC1C,iBAAiB,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG;YAEtC,qBAAqB,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;YAC9C,oBAAoB,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG;YAC5C,qBAAqB,EAAE,IAAI,IAAI,CAAC,WAAW,GAAG;SACjD;KACJ,CAAC,CAAA;IAEF,IAAI,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAErD,OAAO;QACH,IAAI;QACJ,KAAK;KACR,CAAA;AACL,CAAC;AAjCD,2BAiCC;AAQD,KAAK,UAAU,UAAU,CAAC,IAAkB;IACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAElB,IAAI,CAAC;QACD,IAAI,GAAG,GAAG,MAAM,IAAA,eAAK,EAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,SAAS,CAAC,GAAmB,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B,EAAE,MAA0B;IACrE,IAAI,KAAK,EAAE,CAAC;QACR,OAAO;YACH,OAAO,EAAE,IAAI;YACb,KAAK,EAAG,KAAsB,CAAC,OAAO;YACtC,QAAQ,EAAE,KAAK;SAClB,CAAA;IACL,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACpC,IAAI,CAAC,cAAO,CAAC,UAAU;gBAAE,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;QACrE,CAAC;QACD,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,WAAW;aACrB,CAAA;QACL,CAAC;QACD,OAAO;YACH,OAAO;YACP,KAAK,EAAE,IAAI;SACd,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,OAAO;YACH,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,WAAW;SACrB,CAAA;IACL,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC1C,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,eAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,CAAA;IACrE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,SAAS,CACpB,IAAY,EACZ,MAAwB,EACxB,UAAkB;IAElB,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,IAAI,KAAK,GAAG,eAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,cAAc,GAAG,CAAC,MAAM,IAAA,wBAAa,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAE3D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;QACpD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IACxB,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC,OAAO,CAAA;QACzC,IAAI,cAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,GAAG,MAAM,IAAA,iBAAM,EAAC,OAAO,EAAE;gBAC5B,GAAG,cAAc;gBACjB,MAAM,EAAE,OAAO;aAClB,CAAC,CAAA;QACN,CAAC;QACD,MAAM,IAAA,oBAAS,EAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAE9B,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,KAAoB;IACzD,IAAI,KAAK,GAAG,eAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,EAAE,CAAA;IAEvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAA,oBAAS,EAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACrC,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAA,iBAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAA,iBAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,IAAA,eAAI,EAAC,IAAI,CAAC;aACL,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACzB,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;AACN,CAAC"}
|
||||
190
lib/main.js
190
lib/main.js
@@ -1,55 +1,175 @@
|
||||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AllPaths = exports.CLIArgs = void 0;
|
||||
const fs_1 = require("fs");
|
||||
const command_line_args_1 = __importDefault(require("command-line-args"));
|
||||
const prettier_1 = require("prettier");
|
||||
const paths_1 = require("./paths");
|
||||
const readmefile_1 = require("./readmefile");
|
||||
const build_1 = __importDefault(require("./build"));
|
||||
const CLIArgs = (0, command_line_args_1.default)([
|
||||
const Path = __importStar(require("path"));
|
||||
const paths_1 = __importDefault(require("./paths"));
|
||||
const chokidar = __importStar(require("chokidar"));
|
||||
exports.CLIArgs = (0, command_line_args_1.default)([
|
||||
{ name: 'watch', alias: 'w', type: Boolean, defaultValue: false },
|
||||
{ name: 'minify', alias: 'm', type: Boolean, defaultValue: false },
|
||||
{ name: 'prettier', alias: 'p', type: Boolean, defaultValue: false },
|
||||
{ name: 'srccomment', alias: 'c', type: Boolean, defaultValue: false },
|
||||
{ name: 'readme', alias: 'r', type: Boolean, defaultValue: false },
|
||||
{ name: 'url', alias: 'u', type: String, defaultValue: '' },
|
||||
{ name: 'supporturl', alias: 's', type: String, defaultValue: '' },
|
||||
{ name: 'homepageurl', alias: 'U', type: String, defaultValue: '' },
|
||||
{ name: 'remotebranch', alias: 'b', type: String, defaultValue: '' },
|
||||
{ name: 'in', alias: 'i', type: String, defaultValue: 'scripts' },
|
||||
{ name: 'out', alias: 'o', type: String, defaultValue: 'dist' },
|
||||
{ name: 'help', alias: 'h', type: Boolean },
|
||||
]);
|
||||
exports.AllPaths = (0, paths_1.default)({
|
||||
baseUrl: exports.CLIArgs.url || '',
|
||||
supportUrl: exports.CLIArgs.supporturl || '',
|
||||
homepageUrl: exports.CLIArgs.homepageurl || '',
|
||||
remoteBranch: exports.CLIArgs.remotebranch || '',
|
||||
inBase: exports.CLIArgs.in || 'scripts',
|
||||
outBase: exports.CLIArgs.out || 'dist',
|
||||
});
|
||||
if (exports.CLIArgs.help) {
|
||||
let command = '<command>';
|
||||
if (process.argv.length > 0) {
|
||||
command = Path.parse(process.argv[0]).name;
|
||||
}
|
||||
if (command.toLowerCase() === 'node' && process.argv.length > 1) {
|
||||
let path = Path.relative(process.cwd(), process.argv[1]) || '.';
|
||||
command = `${command} ${path}`;
|
||||
}
|
||||
console.log(`
|
||||
Usage: ${command} [options]
|
||||
|
||||
options:
|
||||
--watch
|
||||
alias: -w
|
||||
default: false
|
||||
automatically recompile on save
|
||||
--minify
|
||||
alias: -m
|
||||
default: false
|
||||
minify output files
|
||||
--prettier
|
||||
alias: -p
|
||||
default: false
|
||||
prettify output files
|
||||
--srccomment
|
||||
alias: -c
|
||||
default: false
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--readme
|
||||
alias: -r
|
||||
default: false
|
||||
update the readme.md file in your directory to include links to each userscript
|
||||
|
||||
--url <url>
|
||||
alias: -u <url>
|
||||
default: ""
|
||||
the base for urls used in the meta comments for @downloadURL
|
||||
--supporturl <url>
|
||||
alias: -s <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @supportURL
|
||||
--homepageurl <url>
|
||||
alias: -U <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @homepageURL
|
||||
--remotebranch <name>
|
||||
alias: -b <name>
|
||||
default: ""
|
||||
if included, the included base url will be treated as a git repo, and the support url is not required
|
||||
--in
|
||||
alias: -i
|
||||
default: "scripts"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--out
|
||||
alias: -o
|
||||
default: "dist"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
|
||||
--help
|
||||
alias: -h
|
||||
show this help message
|
||||
`);
|
||||
process.exit(0);
|
||||
}
|
||||
//if package.json doesn't exist then there is no point in continuing
|
||||
if (!(0, fs_1.existsSync)('package.json') || !(0, fs_1.lstatSync)('package.json').isFile()) {
|
||||
console.error('package.json not found, unwilling to run');
|
||||
process.exit(1);
|
||||
}
|
||||
//delete compiled scripts
|
||||
(0, fs_1.readdirSync)(paths_1.DistBase).forEach(file => (0, fs_1.unlinkSync)(`${paths_1.DistBase}/${file}`));
|
||||
//read prettierrc file and make sure `babel` is the configured parser
|
||||
const PrettierConfig = (() => {
|
||||
let config = prettier_1.resolveConfig.sync(process.cwd()) || {};
|
||||
return {
|
||||
...config,
|
||||
parser: 'babel',
|
||||
};
|
||||
})();
|
||||
//compile scripts
|
||||
let scripts = (0, fs_1.readdirSync)(paths_1.ScriptBase);
|
||||
let scriptMeta = [];
|
||||
for (let name of scripts) {
|
||||
let path = (0, paths_1.ScriptPath)(name);
|
||||
if (!name.endsWith('_') &&
|
||||
(0, fs_1.existsSync)(path.dir) &&
|
||||
(0, fs_1.lstatSync)(path.dir).isDirectory() &&
|
||||
(0, fs_1.existsSync)(path.main) &&
|
||||
(0, fs_1.lstatSync)(path.main).isFile()) {
|
||||
let id = scriptMeta.length;
|
||||
function postWatchUpdate(meta, error) {
|
||||
scriptMeta[id] = { meta, error };
|
||||
console.log('WATCH', name, meta.version);
|
||||
(0, readmefile_1.updateReadmeFile)(scriptMeta);
|
||||
}
|
||||
let [meta, error] = (0, build_1.default)(name, postWatchUpdate, PrettierConfig, CLIArgs);
|
||||
scriptMeta[id] = { meta, error };
|
||||
console.log(name, meta.version);
|
||||
}
|
||||
//delete compiled scripts or create output folder if it doesnt exist
|
||||
if (!(0, fs_1.existsSync)(exports.AllPaths.base.out)) {
|
||||
(0, fs_1.mkdirSync)(exports.AllPaths.base.out);
|
||||
}
|
||||
(0, readmefile_1.updateReadmeFile)(scriptMeta);
|
||||
console.log(`\nFinished Compiling\n${CLIArgs.watch ? 'Listening for Changes\n' : ''}`);
|
||||
else {
|
||||
(0, fs_1.readdirSync)(exports.AllPaths.base.out).forEach(file => (0, fs_1.unlinkSync)(`${exports.AllPaths.base.out}/${file}`));
|
||||
}
|
||||
//compile scripts
|
||||
async function doCompile() {
|
||||
let scripts = (0, fs_1.readdirSync)(exports.AllPaths.base.in);
|
||||
let scriptMeta = [];
|
||||
for (let name of scripts) {
|
||||
let path = exports.AllPaths.script(name);
|
||||
if (!name.endsWith('_') &&
|
||||
(0, fs_1.existsSync)(path.dir) &&
|
||||
(0, fs_1.lstatSync)(path.dir).isDirectory() &&
|
||||
(0, fs_1.existsSync)(path.main) &&
|
||||
(0, fs_1.lstatSync)(path.main).isFile()) {
|
||||
let id = scriptMeta.length;
|
||||
scriptMeta[id] = await (0, build_1.default)(name);
|
||||
console.log(name, scriptMeta[id].meta.version);
|
||||
var running = false;
|
||||
async function update(eventName) {
|
||||
if (running) {
|
||||
return;
|
||||
}
|
||||
running = true;
|
||||
scriptMeta[id] = await (0, build_1.default)(name);
|
||||
console.log(`WATCH ${eventName}`, name, scriptMeta[id].meta.version);
|
||||
if (exports.CLIArgs.readme)
|
||||
(0, readmefile_1.updateReadmeFile)(scriptMeta);
|
||||
running = false;
|
||||
}
|
||||
if (exports.CLIArgs.watch) {
|
||||
chokidar.watch(path.dir).on('all', update);
|
||||
}
|
||||
}
|
||||
}
|
||||
return scriptMeta;
|
||||
}
|
||||
doCompile().then(scriptMeta => {
|
||||
if (exports.CLIArgs.readme)
|
||||
(0, readmefile_1.updateReadmeFile)(scriptMeta);
|
||||
console.log(`\nFinished Compiling\n${exports.CLIArgs.watch ? 'Listening for Changes\n' : ''}`);
|
||||
});
|
||||
//# sourceMappingURL=main.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
||||
49
lib/paths.js
49
lib/paths.js
@@ -1,20 +1,35 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.DistPath = exports.ScriptPath = exports.FileUrl = exports.SupportUrl = exports.DistBase = exports.ScriptBase = exports.RemoteBranch = exports.BaseUrl = void 0;
|
||||
exports.BaseUrl = `https://git.zomo.dev/zomo/browser-scripts`;
|
||||
exports.RemoteBranch = 'main';
|
||||
exports.ScriptBase = 'scripts';
|
||||
exports.DistBase = 'dist';
|
||||
exports.SupportUrl = `${exports.BaseUrl}/issues`;
|
||||
const FileUrl = (name) => `${exports.BaseUrl}/raw/branch/${exports.RemoteBranch}/${exports.DistBase}/${name}.user.js`;
|
||||
exports.FileUrl = FileUrl;
|
||||
const ScriptPath = (name) => ({
|
||||
dir: `${exports.ScriptBase}/${name}`,
|
||||
main: `${exports.ScriptBase}/${name}/main.ts`,
|
||||
meta: `${exports.ScriptBase}/${name}/meta.json`,
|
||||
error: `${exports.ScriptBase}/${name}/error.log`,
|
||||
});
|
||||
exports.ScriptPath = ScriptPath;
|
||||
const DistPath = (name) => `${exports.DistBase}/${name}.user.js`;
|
||||
exports.DistPath = DistPath;
|
||||
function getAllPaths({ baseUrl, supportUrl, homepageUrl, remoteBranch, inBase, outBase, }) {
|
||||
// generate links for remote git server
|
||||
if (baseUrl != '' && remoteBranch != '') {
|
||||
if (supportUrl == '') {
|
||||
supportUrl = `${baseUrl}/issues`;
|
||||
}
|
||||
if (homepageUrl == '') {
|
||||
homepageUrl = baseUrl;
|
||||
}
|
||||
baseUrl = `${baseUrl}/raw/branch/${remoteBranch}/${outBase}`;
|
||||
}
|
||||
return {
|
||||
base: {
|
||||
in: inBase,
|
||||
out: outBase,
|
||||
},
|
||||
url: {
|
||||
home: homepageUrl,
|
||||
base: baseUrl,
|
||||
support: supportUrl,
|
||||
},
|
||||
script: (name) => ({
|
||||
dir: `${inBase}/${name}`,
|
||||
main: `${inBase}/${name}/main.ts`,
|
||||
meta: `${inBase}/${name}/meta.json`,
|
||||
error: `${inBase}/${name}/error.log`,
|
||||
dist: `${outBase}/${name}.user.js`,
|
||||
url: `${baseUrl}/${name}.user.js`,
|
||||
}),
|
||||
};
|
||||
}
|
||||
exports.default = getAllPaths;
|
||||
//# sourceMappingURL=paths.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,2CAA2C,CAAA;AACrD,QAAA,YAAY,GAAG,MAAM,CAAA;AACrB,QAAA,UAAU,GAAG,SAAS,CAAA;AACtB,QAAA,QAAQ,GAAG,MAAM,CAAA;AAEjB,QAAA,UAAU,GAAG,GAAG,eAAO,SAAS,CAAA;AACtC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CACpC,GAAG,eAAO,eAAe,oBAAY,IAAI,gBAAQ,IAAI,IAAI,UAAU,CAAA;AAD1D,QAAA,OAAO,WACmD;AAEhE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;IACzC,GAAG,EAAE,GAAG,kBAAU,IAAI,IAAI,EAAE;IAC5B,IAAI,EAAE,GAAG,kBAAU,IAAI,IAAI,UAAU;IACrC,IAAI,EAAE,GAAG,kBAAU,IAAI,IAAI,YAAY;IACvC,KAAK,EAAE,GAAG,kBAAU,IAAI,IAAI,YAAY;CAC3C,CAAC,CAAA;AALW,QAAA,UAAU,cAKrB;AAEK,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,gBAAQ,IAAI,IAAI,UAAU,CAAA;AAA1D,QAAA,QAAQ,YAAkD"}
|
||||
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;AAkBA,SAAwB,WAAW,CAAC,EAChC,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACZ,MAAM,EACN,OAAO,GACM;IACb,uCAAuC;IACvC,IAAI,OAAO,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YACnB,UAAU,GAAG,GAAG,OAAO,SAAS,CAAA;QACpC,CAAC;QAED,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;YACpB,WAAW,GAAG,OAAO,CAAA;QACzB,CAAC;QACD,OAAO,GAAG,GAAG,OAAO,eAAe,YAAY,IAAI,OAAO,EAAE,CAAA;IAChE,CAAC;IAED,OAAO;QACH,IAAI,EAAE;YACF,EAAE,EAAE,MAAM;YACV,GAAG,EAAE,OAAO;SACf;QACD,GAAG,EAAE;YACD,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,UAAU;SACtB;QACD,MAAM,EAAE,CAAC,IAAY,EAAe,EAAE,CAAC,CAAC;YACpC,GAAG,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE;YACxB,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,UAAU;YACjC,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,YAAY;YACnC,KAAK,EAAE,GAAG,MAAM,IAAI,IAAI,YAAY;YACpC,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,UAAU;YAClC,GAAG,EAAE,GAAG,OAAO,IAAI,IAAI,UAAU;SACpC,CAAC;KACL,CAAA;AACL,CAAC;AAvCD,8BAuCC"}
|
||||
@@ -26,11 +26,15 @@ function readmeDataErrorString(error) {
|
||||
.join('\n');
|
||||
return `\n\n${error}`;
|
||||
}
|
||||
function readmeDataToString(readmeData) {
|
||||
let { meta, error } = readmeData;
|
||||
function readmeDataToString(results) {
|
||||
let { meta, error } = results;
|
||||
let errStr = error !== null ? '~~' : '';
|
||||
let errMsg = readmeDataErrorString(error);
|
||||
return `- ${errStr}[${meta.name}](${meta.downloadURL})${errStr}${errMsg}`;
|
||||
return `
|
||||
- ${errStr}[${meta.name}](${meta.downloadURL})${errStr}${errMsg}
|
||||
- ${meta.namespace} ${meta.version}
|
||||
- ${meta.description}
|
||||
`.trim();
|
||||
}
|
||||
function getReadmeFileName() {
|
||||
let files = (0, fs_1.readdirSync)('.');
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"readmefile.js","sourceRoot":"","sources":["../src/readmefile.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"readmefile.js","sourceRoot":"","sources":["../src/readmefile.ts"],"names":[],"mappings":"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"}
|
||||
@@ -1,8 +1,10 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const fs_1 = require("fs");
|
||||
const paths_1 = require("./paths");
|
||||
function default_1(name) {
|
||||
const main_1 = require("./main");
|
||||
function readMeta(name) {
|
||||
let paths = main_1.AllPaths.script(name);
|
||||
let urls = main_1.AllPaths.url;
|
||||
var meta = {
|
||||
name: name,
|
||||
namespace: 'zomo.dev',
|
||||
@@ -17,12 +19,12 @@ function default_1(name) {
|
||||
noframes: false,
|
||||
grant: '',
|
||||
injectinto: '',
|
||||
downloadURL: (0, paths_1.FileUrl)(name),
|
||||
supportURL: paths_1.SupportUrl,
|
||||
homepageURL: paths_1.BaseUrl,
|
||||
downloadURL: paths.url,
|
||||
supportURL: urls.support,
|
||||
homepageURL: urls.home,
|
||||
unwrap: false,
|
||||
};
|
||||
let metaPath = (0, paths_1.ScriptPath)(name).meta;
|
||||
let metaPath = paths.meta;
|
||||
if ((0, fs_1.existsSync)(metaPath) && (0, fs_1.lstatSync)(metaPath).isFile()) {
|
||||
try {
|
||||
let args = JSON.parse((0, fs_1.readFileSync)(metaPath).toString());
|
||||
@@ -50,9 +52,9 @@ function default_1(name) {
|
||||
injectinto: 'inject-into',
|
||||
excludematch: 'exclude-match',
|
||||
};
|
||||
return [
|
||||
return {
|
||||
meta,
|
||||
`// ==UserScript==
|
||||
metaString: `// ==UserScript==
|
||||
${Object.keys(meta)
|
||||
.filter(key => {
|
||||
let val = meta[key];
|
||||
@@ -99,7 +101,7 @@ ${Object.keys(meta)
|
||||
.join('\n')}
|
||||
// ==/UserScript==
|
||||
`,
|
||||
];
|
||||
};
|
||||
}
|
||||
exports.default = default_1;
|
||||
exports.default = readMeta;
|
||||
//# sourceMappingURL=readmeta.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"readmeta.js","sourceRoot":"","sources":["../src/readmeta.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"readmeta.js","sourceRoot":"","sources":["../src/readmeta.ts"],"names":[],"mappings":"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"}
|
||||
@@ -29,7 +29,6 @@
|
||||
"match": {
|
||||
"description": "Define rules to decide whether a script should be executed",
|
||||
"type": ["string", "array"],
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string"
|
||||
@@ -38,7 +37,6 @@
|
||||
"excludematch": {
|
||||
"description": "Define rules to decide whether a script should be executed",
|
||||
"type": ["string", "array"],
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string"
|
||||
@@ -68,7 +66,6 @@
|
||||
"require": {
|
||||
"description": "Require another script to execute before the current one\n\nThe value is the URL to the required script, which may be relative to the URL the script is being installed from",
|
||||
"type": ["string", "array"],
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string"
|
||||
@@ -77,7 +74,6 @@
|
||||
"resource": {
|
||||
"description": "Static resources that can be accessed in the script by GM_getResourceText and GM_getResourceURL\n\nThe value is composed of two parts, joined with one or more white spaces\n\nThe first part is the name of the resource, no white space is allowed in it\n\nThe second part is the URL to the resource, which may be relative to the URL the script is being installed from",
|
||||
"type": ["string", "array"],
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string"
|
||||
@@ -95,7 +91,6 @@
|
||||
"grant": {
|
||||
"description": "Specify which special APIs should be granted and can be used when the script executes\n\nIf nothing is present, \"none\" is assumed\n\nAny GM_ or GM. function used, including window.close and window.focus",
|
||||
"type": ["string", "array"],
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string"
|
||||
|
||||
19
package.json
19
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "browser-scripts-builder",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.6",
|
||||
"description": "",
|
||||
"main": "./lib/main.js",
|
||||
"module": "./lib/main.js",
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"prettier": "prettier --write .",
|
||||
"build": "npm run prettier && tsc",
|
||||
"build": "npm run prettier && tsc && node -e \"(async () => { const p = 'lib/main.js'; await fs.promises.writeFile(p, '#!/usr/bin/env node\\n' + await fs.promises.readFile(p)); await fs.promises.chmod(p, 754); })()\"",
|
||||
"test": "node ./test/test.mjs"
|
||||
},
|
||||
"repository": {
|
||||
@@ -19,15 +19,16 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chokidar": "^3.6.0",
|
||||
"command-line-args": "^5.2.1",
|
||||
"esbuild": "^0.14.42",
|
||||
"typescript": "^4.7.3",
|
||||
"prettier": "^2.6.2"
|
||||
"esbuild": "^0.21.5",
|
||||
"prettier": "^3.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/command-line-args": "^5.2.0",
|
||||
"@types/node": "^17.0.40",
|
||||
"@types/prettier": "^2.6.3",
|
||||
"eslint": "^8.17.0"
|
||||
"@types/command-line-args": "^5.2.3",
|
||||
"@types/node": "^20.14.5",
|
||||
"@types/prettier": "^2.7.3",
|
||||
"eslint": "^9.5.0",
|
||||
"typescript": "^5.4.5"
|
||||
}
|
||||
}
|
||||
|
||||
1561
pnpm-lock.yaml
generated
1561
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
42
readme.md
42
readme.md
@@ -4,6 +4,8 @@ builder for [browser-scripts](https://git.zomo.dev/zomo/browser-scripts)
|
||||
|
||||
## Source File Structure
|
||||
|
||||
note: if `package.json` is not present, running the command is presumed to be a mistake and will refuse to run
|
||||
|
||||
```text
|
||||
Root
|
||||
├───<package.json/etc>
|
||||
@@ -39,11 +41,51 @@ Root
|
||||
```text
|
||||
--watch
|
||||
alias: -w
|
||||
default: false
|
||||
automatically recompile on save
|
||||
--minify
|
||||
alias: -m
|
||||
default: false
|
||||
minify output files
|
||||
--prettier
|
||||
alias: -p
|
||||
default: false
|
||||
prettify output files
|
||||
--srccomment
|
||||
alias: -c
|
||||
default: false
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--readme
|
||||
alias: -r
|
||||
default: false
|
||||
update the readme.md file in your directory to include links to each userscript
|
||||
|
||||
--url <url>
|
||||
alias: -u <url>
|
||||
default: ""
|
||||
the base for urls used in the meta comments for @downloadURL
|
||||
--supporturl <url>
|
||||
alias: -s <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @supportURL
|
||||
--homepageurl <url>
|
||||
alias: -U <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @homepageURL
|
||||
--remotebranch <name>
|
||||
alias: -b <name>
|
||||
default: ""
|
||||
if included, the included base url will be treated as a git repo, and the support url is not required
|
||||
--in
|
||||
alias: -i
|
||||
default: "scripts"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--out
|
||||
alias: -o
|
||||
default: "dist"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
|
||||
--help
|
||||
alias: -h
|
||||
show this help message
|
||||
```
|
||||
|
||||
223
src/build.ts
223
src/build.ts
@@ -1,80 +1,47 @@
|
||||
import { buildSync, BuildFailure, BuildOptions } from 'esbuild'
|
||||
import { existsSync, writeFileSync, unlinkSync } from 'fs'
|
||||
import { DistPath, ScriptBase, ScriptPath } from './paths'
|
||||
import { BuildFailure, BuildOptions, BuildResult, build } from 'esbuild'
|
||||
import { UserScriptMetaFull } from './types'
|
||||
import readMeta from './readmeta'
|
||||
import { format, Options } from 'prettier'
|
||||
import { CLIArgs } from './main'
|
||||
import { format, resolveConfig } from 'prettier'
|
||||
import { AllPaths, CLIArgs } from './main'
|
||||
import { writeFile, stat, unlink } from 'fs/promises'
|
||||
|
||||
export default function (
|
||||
name: string,
|
||||
watchCallback: (meta: UserScriptMetaFull, error: string | null) => void,
|
||||
PrettierConfig: Options,
|
||||
CLIArgs: CLIArgs
|
||||
): [UserScriptMetaFull, string | null] {
|
||||
//read meta file
|
||||
let [metaJson, metaString] = readMeta(name)
|
||||
let pathDist = DistPath(name)
|
||||
|
||||
let result = runEsbuild(
|
||||
{
|
||||
entryPoints: [ScriptPath(name).main],
|
||||
outfile: pathDist,
|
||||
|
||||
target: 'esnext',
|
||||
platform: 'node',
|
||||
format: 'esm',
|
||||
|
||||
bundle: true,
|
||||
minify: CLIArgs.minify,
|
||||
|
||||
define: {
|
||||
UserScriptName: `'${metaJson.name}'`,
|
||||
UserScriptNamespace: `'${metaJson.namespace}'`,
|
||||
UserScriptVersion: `'${metaJson.version}'`,
|
||||
|
||||
UserScriptDownloadURL: `'${metaJson.downloadURL}'`,
|
||||
UserScriptSupportURL: `'${metaJson.supportURL}'`,
|
||||
UserScriptHomepageURL: `'${metaJson.homepageURL}'`,
|
||||
},
|
||||
},
|
||||
result => {
|
||||
let error = runPostEsbuild(
|
||||
name,
|
||||
result,
|
||||
metaString,
|
||||
CLIArgs,
|
||||
PrettierConfig
|
||||
)
|
||||
watchCallback(metaJson, error)
|
||||
},
|
||||
CLIArgs
|
||||
)
|
||||
|
||||
let error = runPostEsbuild(
|
||||
name,
|
||||
result,
|
||||
metaString,
|
||||
CLIArgs,
|
||||
PrettierConfig
|
||||
)
|
||||
|
||||
return [metaJson, error]
|
||||
export interface runBuildResult {
|
||||
meta: UserScriptMetaFull
|
||||
error: string | null
|
||||
}
|
||||
|
||||
function doErrorFile(
|
||||
pathError: string,
|
||||
pathOutFile: string,
|
||||
error: string | null
|
||||
) {
|
||||
if (error !== null) {
|
||||
writeFileSync(pathError, `${new Date().toISOString()}\n\n${error}`)
|
||||
export default async function runBuild(name: string) {
|
||||
//read meta file
|
||||
let { meta, metaString } = readMeta(name)
|
||||
let paths = AllPaths.script(name)
|
||||
|
||||
if (existsSync(pathOutFile)) {
|
||||
unlinkSync(pathOutFile)
|
||||
}
|
||||
} else if (existsSync(pathError)) {
|
||||
unlinkSync(pathError)
|
||||
let result = await runEsbuild({
|
||||
entryPoints: [paths.main],
|
||||
outfile: paths.dist,
|
||||
|
||||
target: 'esnext',
|
||||
platform: 'node',
|
||||
format: 'esm',
|
||||
|
||||
bundle: true,
|
||||
minify: CLIArgs.minify,
|
||||
|
||||
define: {
|
||||
UserScriptName: `'${meta.name}'`,
|
||||
UserScriptNamespace: `'${meta.namespace}'`,
|
||||
UserScriptVersion: `'${meta.version}'`,
|
||||
|
||||
UserScriptDownloadURL: `'${meta.downloadURL}'`,
|
||||
UserScriptSupportURL: `'${meta.supportURL}'`,
|
||||
UserScriptHomepageURL: `'${meta.homepageURL}'`,
|
||||
},
|
||||
})
|
||||
|
||||
let error = await postBuild(name, result, metaString)
|
||||
|
||||
return {
|
||||
meta,
|
||||
error,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,51 +51,29 @@ interface RunEsbuildResult {
|
||||
errorRaw?: BuildFailure
|
||||
}
|
||||
|
||||
function runEsbuild(
|
||||
opts: BuildOptions,
|
||||
watchCallback: (result: RunEsbuildResult) => void,
|
||||
CLIArgs: CLIArgs
|
||||
): RunEsbuildResult {
|
||||
async function runEsbuild(opts: BuildOptions): Promise<RunEsbuildResult> {
|
||||
opts.write = false
|
||||
if (CLIArgs.watch) {
|
||||
opts.watch = {
|
||||
onRebuild(err, res) {
|
||||
if (err) {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: (err as BuildFailure).message,
|
||||
errorRaw: err,
|
||||
})
|
||||
} else if (res) {
|
||||
let content = ''
|
||||
if (res.outputFiles && res.outputFiles.length > 0) {
|
||||
content = res.outputFiles[0].text
|
||||
}
|
||||
if (content === '') {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: 'No output',
|
||||
})
|
||||
}
|
||||
watchCallback({
|
||||
content,
|
||||
error: null,
|
||||
})
|
||||
} else {
|
||||
watchCallback({
|
||||
content: null,
|
||||
error: 'No result',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
let res = buildSync(opts)
|
||||
let res = await build(opts)
|
||||
return getResult(null, res)
|
||||
} catch (err) {
|
||||
return getResult(err as BuildFailure, null)
|
||||
}
|
||||
}
|
||||
|
||||
function getResult(error: BuildFailure | null, result: BuildResult | null) {
|
||||
if (error) {
|
||||
return {
|
||||
content: null,
|
||||
error: (error as BuildFailure).message,
|
||||
errorRaw: error,
|
||||
}
|
||||
} else if (result) {
|
||||
let content = ''
|
||||
if (res.outputFiles && res.outputFiles.length > 0) {
|
||||
content = clearFilenameComments(res.outputFiles[0].text)
|
||||
if (result.outputFiles && result.outputFiles.length > 0) {
|
||||
content = result.outputFiles[0].text
|
||||
if (!CLIArgs.srccomment) content = clearFilenameComments(content)
|
||||
}
|
||||
if (content === '') {
|
||||
return {
|
||||
@@ -140,24 +85,28 @@ function runEsbuild(
|
||||
content,
|
||||
error: null,
|
||||
}
|
||||
} catch (err) {
|
||||
} else {
|
||||
return {
|
||||
content: null,
|
||||
error: (err as BuildFailure).message,
|
||||
error: 'No result',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function runPostEsbuild(
|
||||
function clearFilenameComments(content: string): string {
|
||||
let regexp = new RegExp(`//\\s*${AllPaths.base.in}/.*(?:\\n|$)`, 'g')
|
||||
return content.replace(regexp, '')
|
||||
}
|
||||
|
||||
async function postBuild(
|
||||
name: string,
|
||||
result: RunEsbuildResult,
|
||||
metaString: string,
|
||||
CLIArgs: CLIArgs,
|
||||
PrettierConfig: Options
|
||||
metaString: string
|
||||
) {
|
||||
let error: string | null = null
|
||||
let path = ScriptPath(name)
|
||||
let pathDist = DistPath(name)
|
||||
let paths = AllPaths.script(name)
|
||||
|
||||
let PrettierConfig = (await resolveConfig(paths.dir)) ?? {}
|
||||
|
||||
if (result.error) {
|
||||
console.error(name, result.errorRaw || result.error)
|
||||
@@ -165,20 +114,40 @@ function runPostEsbuild(
|
||||
} else if (result.content) {
|
||||
let content = metaString + result.content
|
||||
if (CLIArgs.prettier) {
|
||||
content = format(content, PrettierConfig)
|
||||
content = await format(content, {
|
||||
...PrettierConfig,
|
||||
parser: 'babel',
|
||||
})
|
||||
}
|
||||
writeFileSync(pathDist, content)
|
||||
await writeFile(paths.dist, content)
|
||||
} else {
|
||||
console.error(name, 'No output')
|
||||
}
|
||||
|
||||
doErrorFile(path.error, pathDist, error)
|
||||
await doErrorFile(name, error)
|
||||
|
||||
return error
|
||||
}
|
||||
|
||||
//remove all filename comments
|
||||
function clearFilenameComments(content: string): string {
|
||||
let regexp = new RegExp(`//\\s*${ScriptBase}/.*(?:\\n|$)`, 'g')
|
||||
return content.replace(regexp, '')
|
||||
async function doErrorFile(name: string, error: string | null) {
|
||||
let paths = AllPaths.script(name)
|
||||
|
||||
let content = `${new Date().toISOString()}\n\n${error}`
|
||||
|
||||
if (error !== null) {
|
||||
await writeFile(paths.error, content)
|
||||
if (await existsFile(paths.dist)) {
|
||||
await unlink(paths.dist)
|
||||
}
|
||||
} else if (await existsFile(paths.error)) {
|
||||
await unlink(paths.error)
|
||||
}
|
||||
}
|
||||
|
||||
function existsFile(path: string): Promise<boolean> {
|
||||
return new Promise(resolve => {
|
||||
stat(path)
|
||||
.then(() => resolve(true))
|
||||
.catch(() => resolve(false))
|
||||
})
|
||||
}
|
||||
|
||||
230
src/main.ts
230
src/main.ts
@@ -1,22 +1,122 @@
|
||||
import { existsSync, lstatSync, readdirSync, unlinkSync } from 'fs'
|
||||
import { existsSync, lstatSync, mkdirSync, readdirSync, unlinkSync } from 'fs'
|
||||
import commandLineArgs from 'command-line-args'
|
||||
import { resolveConfig } from 'prettier'
|
||||
import { DistBase, ScriptBase, ScriptPath } from './paths'
|
||||
import { readmeData, updateReadmeFile } from './readmefile'
|
||||
import runBuild from './build'
|
||||
import { UserScriptMetaFull } from './types'
|
||||
import { updateReadmeFile } from './readmefile'
|
||||
import runBuild, { runBuildResult } from './build'
|
||||
import * as Path from 'path'
|
||||
import getAllPaths from './paths'
|
||||
import * as chokidar from 'chokidar'
|
||||
|
||||
export interface CLIArgs {
|
||||
export interface CLIArgsT {
|
||||
watch: boolean
|
||||
minify: boolean
|
||||
prettier: boolean
|
||||
srccomment: boolean
|
||||
readme: boolean
|
||||
|
||||
url?: string
|
||||
supporturl?: string
|
||||
homepageurl?: string
|
||||
remotebranch?: string
|
||||
in?: string
|
||||
out?: string
|
||||
|
||||
help?: boolean
|
||||
|
||||
src?: string
|
||||
}
|
||||
|
||||
const CLIArgs = commandLineArgs([
|
||||
export const CLIArgs = commandLineArgs([
|
||||
{ name: 'watch', alias: 'w', type: Boolean, defaultValue: false },
|
||||
{ name: 'minify', alias: 'm', type: Boolean, defaultValue: false },
|
||||
{ name: 'prettier', alias: 'p', type: Boolean, defaultValue: false },
|
||||
]) as CLIArgs
|
||||
{ name: 'srccomment', alias: 'c', type: Boolean, defaultValue: false },
|
||||
{ name: 'readme', alias: 'r', type: Boolean, defaultValue: false },
|
||||
|
||||
{ name: 'url', alias: 'u', type: String, defaultValue: '' },
|
||||
{ name: 'supporturl', alias: 's', type: String, defaultValue: '' },
|
||||
{ name: 'homepageurl', alias: 'U', type: String, defaultValue: '' },
|
||||
{ name: 'remotebranch', alias: 'b', type: String, defaultValue: '' },
|
||||
{ name: 'in', alias: 'i', type: String, defaultValue: 'scripts' },
|
||||
{ name: 'out', alias: 'o', type: String, defaultValue: 'dist' },
|
||||
|
||||
{ name: 'help', alias: 'h', type: Boolean },
|
||||
]) as CLIArgsT
|
||||
|
||||
export const AllPaths = getAllPaths({
|
||||
baseUrl: CLIArgs.url || '',
|
||||
supportUrl: CLIArgs.supporturl || '',
|
||||
homepageUrl: CLIArgs.homepageurl || '',
|
||||
remoteBranch: CLIArgs.remotebranch || '',
|
||||
inBase: CLIArgs.in || 'scripts',
|
||||
outBase: CLIArgs.out || 'dist',
|
||||
})
|
||||
|
||||
if (CLIArgs.help) {
|
||||
let command = '<command>'
|
||||
if (process.argv.length > 0) {
|
||||
command = Path.parse(process.argv[0]).name
|
||||
}
|
||||
if (command.toLowerCase() === 'node' && process.argv.length > 1) {
|
||||
let path = Path.relative(process.cwd(), process.argv[1]) || '.'
|
||||
command = `${command} ${path}`
|
||||
}
|
||||
|
||||
console.log(`
|
||||
Usage: ${command} [options]
|
||||
|
||||
options:
|
||||
--watch
|
||||
alias: -w
|
||||
default: false
|
||||
automatically recompile on save
|
||||
--minify
|
||||
alias: -m
|
||||
default: false
|
||||
minify output files
|
||||
--prettier
|
||||
alias: -p
|
||||
default: false
|
||||
prettify output files
|
||||
--srccomment
|
||||
alias: -c
|
||||
default: false
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--readme
|
||||
alias: -r
|
||||
default: false
|
||||
update the readme.md file in your directory to include links to each userscript
|
||||
|
||||
--url <url>
|
||||
alias: -u <url>
|
||||
default: ""
|
||||
the base for urls used in the meta comments for @downloadURL
|
||||
--supporturl <url>
|
||||
alias: -s <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @supportURL
|
||||
--homepageurl <url>
|
||||
alias: -U <url>
|
||||
default: ""
|
||||
the support url used in the meta comments for @homepageURL
|
||||
--remotebranch <name>
|
||||
alias: -b <name>
|
||||
default: ""
|
||||
if included, the included base url will be treated as a git repo, and the support url is not required
|
||||
--in
|
||||
alias: -i
|
||||
default: "scripts"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
--out
|
||||
alias: -o
|
||||
default: "dist"
|
||||
include src file path comments in the output files, i.e. // scripts/example/main.ts
|
||||
|
||||
--help
|
||||
alias: -h
|
||||
show this help message
|
||||
`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
//if package.json doesn't exist then there is no point in continuing
|
||||
if (!existsSync('package.json') || !lstatSync('package.json').isFile()) {
|
||||
@@ -24,57 +124,67 @@ if (!existsSync('package.json') || !lstatSync('package.json').isFile()) {
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
//delete compiled scripts
|
||||
readdirSync(DistBase).forEach(file => unlinkSync(`${DistBase}/${file}`))
|
||||
|
||||
//read prettierrc file and make sure `babel` is the configured parser
|
||||
const PrettierConfig = (() => {
|
||||
let config = resolveConfig.sync(process.cwd()) || {}
|
||||
return {
|
||||
...config,
|
||||
parser: 'babel',
|
||||
}
|
||||
})()
|
||||
|
||||
//compile scripts
|
||||
let scripts = readdirSync(ScriptBase)
|
||||
let scriptMeta: readmeData[] = []
|
||||
|
||||
for (let name of scripts) {
|
||||
let path = ScriptPath(name)
|
||||
|
||||
if (
|
||||
!name.endsWith('_') &&
|
||||
existsSync(path.dir) &&
|
||||
lstatSync(path.dir).isDirectory() &&
|
||||
existsSync(path.main) &&
|
||||
lstatSync(path.main).isFile()
|
||||
) {
|
||||
let id = scriptMeta.length
|
||||
|
||||
function postWatchUpdate(
|
||||
meta: UserScriptMetaFull,
|
||||
error: string | null
|
||||
) {
|
||||
scriptMeta[id] = { meta, error }
|
||||
console.log('WATCH', name, meta.version)
|
||||
updateReadmeFile(scriptMeta)
|
||||
}
|
||||
|
||||
let [meta, error] = runBuild(
|
||||
name,
|
||||
postWatchUpdate,
|
||||
PrettierConfig,
|
||||
CLIArgs
|
||||
)
|
||||
scriptMeta[id] = { meta, error }
|
||||
|
||||
console.log(name, meta.version)
|
||||
}
|
||||
//delete compiled scripts or create output folder if it doesnt exist
|
||||
if (!existsSync(AllPaths.base.out)) {
|
||||
mkdirSync(AllPaths.base.out)
|
||||
} else {
|
||||
readdirSync(AllPaths.base.out).forEach(file =>
|
||||
unlinkSync(`${AllPaths.base.out}/${file}`)
|
||||
)
|
||||
}
|
||||
|
||||
updateReadmeFile(scriptMeta)
|
||||
//compile scripts
|
||||
async function doCompile() {
|
||||
let scripts = readdirSync(AllPaths.base.in)
|
||||
let scriptMeta: runBuildResult[] = []
|
||||
|
||||
console.log(
|
||||
`\nFinished Compiling\n${CLIArgs.watch ? 'Listening for Changes\n' : ''}`
|
||||
)
|
||||
for (let name of scripts) {
|
||||
let path = AllPaths.script(name)
|
||||
|
||||
if (
|
||||
!name.endsWith('_') &&
|
||||
existsSync(path.dir) &&
|
||||
lstatSync(path.dir).isDirectory() &&
|
||||
existsSync(path.main) &&
|
||||
lstatSync(path.main).isFile()
|
||||
) {
|
||||
let id = scriptMeta.length
|
||||
|
||||
scriptMeta[id] = await runBuild(name)
|
||||
console.log(name, scriptMeta[id].meta.version)
|
||||
|
||||
var running = false
|
||||
async function update(eventName: string) {
|
||||
if (running) {
|
||||
return
|
||||
}
|
||||
running = true
|
||||
|
||||
scriptMeta[id] = await runBuild(name)
|
||||
console.log(
|
||||
`WATCH ${eventName}`,
|
||||
name,
|
||||
scriptMeta[id].meta.version
|
||||
)
|
||||
|
||||
if (CLIArgs.readme) updateReadmeFile(scriptMeta)
|
||||
running = false
|
||||
}
|
||||
|
||||
if (CLIArgs.watch) {
|
||||
chokidar.watch(path.dir).on('all', update)
|
||||
}
|
||||
}
|
||||
}
|
||||
return scriptMeta
|
||||
}
|
||||
|
||||
doCompile().then(scriptMeta => {
|
||||
if (CLIArgs.readme) updateReadmeFile(scriptMeta)
|
||||
|
||||
console.log(
|
||||
`\nFinished Compiling\n${
|
||||
CLIArgs.watch ? 'Listening for Changes\n' : ''
|
||||
}`
|
||||
)
|
||||
})
|
||||
|
||||
69
src/paths.ts
69
src/paths.ts
@@ -1,17 +1,58 @@
|
||||
export const BaseUrl = `https://git.zomo.dev/zomo/browser-scripts`
|
||||
export const RemoteBranch = 'main'
|
||||
export const ScriptBase = 'scripts'
|
||||
export const DistBase = 'dist'
|
||||
export interface ScriptPathT {
|
||||
dir: `${string}/${string}`
|
||||
main: `${string}/${string}/main.ts`
|
||||
meta: `${string}/${string}/meta.json`
|
||||
error: `${string}/${string}/error.log`
|
||||
dist: `${string}/${string}.user.js`
|
||||
url: `${string}/${string}.user.js`
|
||||
}
|
||||
|
||||
export const SupportUrl = `${BaseUrl}/issues`
|
||||
export const FileUrl = (name: string) =>
|
||||
`${BaseUrl}/raw/branch/${RemoteBranch}/${DistBase}/${name}.user.js`
|
||||
export interface getAllPathsOps {
|
||||
baseUrl: string
|
||||
supportUrl: string
|
||||
homepageUrl: string
|
||||
remoteBranch: string
|
||||
inBase: string
|
||||
outBase: string
|
||||
}
|
||||
|
||||
export const ScriptPath = (name: string) => ({
|
||||
dir: `${ScriptBase}/${name}`,
|
||||
main: `${ScriptBase}/${name}/main.ts`,
|
||||
meta: `${ScriptBase}/${name}/meta.json`,
|
||||
error: `${ScriptBase}/${name}/error.log`,
|
||||
})
|
||||
export default function getAllPaths({
|
||||
baseUrl,
|
||||
supportUrl,
|
||||
homepageUrl,
|
||||
remoteBranch,
|
||||
inBase,
|
||||
outBase,
|
||||
}: getAllPathsOps) {
|
||||
// generate links for remote git server
|
||||
if (baseUrl != '' && remoteBranch != '') {
|
||||
if (supportUrl == '') {
|
||||
supportUrl = `${baseUrl}/issues`
|
||||
}
|
||||
|
||||
export const DistPath = (name: string) => `${DistBase}/${name}.user.js`
|
||||
if (homepageUrl == '') {
|
||||
homepageUrl = baseUrl
|
||||
}
|
||||
baseUrl = `${baseUrl}/raw/branch/${remoteBranch}/${outBase}`
|
||||
}
|
||||
|
||||
return {
|
||||
base: {
|
||||
in: inBase,
|
||||
out: outBase,
|
||||
},
|
||||
url: {
|
||||
home: homepageUrl,
|
||||
base: baseUrl,
|
||||
support: supportUrl,
|
||||
},
|
||||
script: (name: string): ScriptPathT => ({
|
||||
dir: `${inBase}/${name}`,
|
||||
main: `${inBase}/${name}/main.ts`,
|
||||
meta: `${inBase}/${name}/meta.json`,
|
||||
error: `${inBase}/${name}/error.log`,
|
||||
dist: `${outBase}/${name}.user.js`,
|
||||
url: `${baseUrl}/${name}.user.js`,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
import { readdirSync, readFileSync, writeFileSync } from 'fs'
|
||||
import { UserScriptMetaFull } from './types'
|
||||
import { runBuildResult } from './build'
|
||||
|
||||
export interface readmeData {
|
||||
meta: UserScriptMetaFull
|
||||
error: string | null
|
||||
}
|
||||
|
||||
export function updateReadmeFile(fileList: readmeData[]) {
|
||||
export function updateReadmeFile(fileList: runBuildResult[]) {
|
||||
let readmeFile = getReadmeFileName()
|
||||
if (readmeFile !== null) {
|
||||
let [readmeStart, readmeEnd] = readReadmeFile(readmeFile)
|
||||
@@ -33,11 +28,15 @@ function readmeDataErrorString(error: string | null): string {
|
||||
return `\n\n${error}`
|
||||
}
|
||||
|
||||
function readmeDataToString(readmeData: readmeData): string {
|
||||
let { meta, error } = readmeData
|
||||
function readmeDataToString(results: runBuildResult): string {
|
||||
let { meta, error } = results
|
||||
let errStr = error !== null ? '~~' : ''
|
||||
let errMsg = readmeDataErrorString(error)
|
||||
return `- ${errStr}[${meta.name}](${meta.downloadURL})${errStr}${errMsg}`
|
||||
return `
|
||||
- ${errStr}[${meta.name}](${meta.downloadURL})${errStr}${errMsg}
|
||||
- ${meta.namespace} ${meta.version}
|
||||
- ${meta.description}
|
||||
`.trim()
|
||||
}
|
||||
|
||||
function getReadmeFileName(): string | null {
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
import { existsSync, lstatSync, readFileSync } from 'fs'
|
||||
import { BaseUrl, FileUrl, ScriptPath, SupportUrl } from './paths'
|
||||
import { AllPaths } from './main'
|
||||
import {
|
||||
UserScriptMeta,
|
||||
UserScriptMetaFull,
|
||||
UserScriptMetaPartial,
|
||||
} from './types'
|
||||
|
||||
export default function (name: string): [UserScriptMetaFull, string] {
|
||||
export default interface readMeta {
|
||||
meta: UserScriptMetaFull
|
||||
metaString: string
|
||||
}
|
||||
|
||||
export default function readMeta(name: string) {
|
||||
let paths = AllPaths.script(name)
|
||||
let urls = AllPaths.url
|
||||
|
||||
var meta: UserScriptMetaFull = {
|
||||
name: name,
|
||||
namespace: 'zomo.dev',
|
||||
@@ -21,13 +29,13 @@ export default function (name: string): [UserScriptMetaFull, string] {
|
||||
noframes: false,
|
||||
grant: '',
|
||||
injectinto: '',
|
||||
downloadURL: FileUrl(name),
|
||||
supportURL: SupportUrl,
|
||||
homepageURL: BaseUrl,
|
||||
downloadURL: paths.url,
|
||||
supportURL: urls.support,
|
||||
homepageURL: urls.home,
|
||||
unwrap: false,
|
||||
}
|
||||
|
||||
let metaPath = ScriptPath(name).meta
|
||||
let metaPath = paths.meta
|
||||
|
||||
if (existsSync(metaPath) && lstatSync(metaPath).isFile()) {
|
||||
try {
|
||||
@@ -60,9 +68,9 @@ export default function (name: string): [UserScriptMetaFull, string] {
|
||||
excludematch: 'exclude-match',
|
||||
}
|
||||
|
||||
return [
|
||||
return {
|
||||
meta,
|
||||
`// ==UserScript==
|
||||
metaString: `// ==UserScript==
|
||||
${(Object.keys(meta) as Array<keyof UserScriptMetaFull>)
|
||||
.filter(key => {
|
||||
let val = meta[key]
|
||||
@@ -105,5 +113,5 @@ ${(Object.keys(meta) as Array<keyof UserScriptMetaFull>)
|
||||
.join('\n')}
|
||||
// ==/UserScript==
|
||||
`,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
// TODO add tests
|
||||
|
||||
Reference in New Issue
Block a user