@haltcase/run 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{readme.md → README.md} +1 -1
- package/dist/cli/bin.d.mts +1 -0
- package/dist/cli/bin.mjs +7 -0
- package/dist/cli/handler.mjs +110 -0
- package/dist/cli/main.mjs +56 -0
- package/dist/cli/parseOptions.d.mts +7 -0
- package/dist/cli/parseOptions.mjs +36 -0
- package/dist/config.d.mts +18 -0
- package/dist/config.mjs +19 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +2 -0
- package/dist/tasks/executeTask.mjs +34 -0
- package/dist/tasks/guards.mjs +4 -0
- package/dist/tasks/task.d.mts +10 -0
- package/dist/tasks/task.mjs +40 -0
- package/dist/tasks/types.d.mts +60 -0
- package/dist/util/getSchemaProperties.mjs +34 -0
- package/dist/util/loadTaskFile.mjs +30 -0
- package/dist/util/resolveTaskFile.mjs +13 -0
- package/package.json +42 -40
- package/dist/cli/bin.d.ts +0 -2
- package/dist/cli/bin.js +0 -7
- package/dist/cli/bin.js.map +0 -1
- package/dist/cli/handler.d.ts +0 -28
- package/dist/cli/handler.js +0 -106
- package/dist/cli/handler.js.map +0 -1
- package/dist/cli/main.d.ts +0 -21
- package/dist/cli/main.js +0 -64
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/parseOptions.d.ts +0 -13
- package/dist/cli/parseOptions.js +0 -48
- package/dist/cli/parseOptions.js.map +0 -1
- package/dist/config.d.ts +0 -16
- package/dist/config.js +0 -16
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tasks/executeTask.d.ts +0 -12
- package/dist/tasks/executeTask.js +0 -45
- package/dist/tasks/executeTask.js.map +0 -1
- package/dist/tasks/guards.d.ts +0 -3
- package/dist/tasks/guards.js +0 -2
- package/dist/tasks/guards.js.map +0 -1
- package/dist/tasks/task.d.ts +0 -14
- package/dist/tasks/task.js +0 -55
- package/dist/tasks/task.js.map +0 -1
- package/dist/tasks/types.d.ts +0 -58
- package/dist/tasks/types.js +0 -1
- package/dist/tasks/types.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/util/getSchemaProperties.d.ts +0 -2
- package/dist/util/getSchemaProperties.js +0 -40
- package/dist/util/getSchemaProperties.js.map +0 -1
- package/dist/util/loadTaskFile.d.ts +0 -8
- package/dist/util/loadTaskFile.js +0 -30
- package/dist/util/loadTaskFile.js.map +0 -1
- package/dist/util/resolveTaskFile.d.ts +0 -3
- package/dist/util/resolveTaskFile.js +0 -17
- package/dist/util/resolveTaskFile.js.map +0 -1
- package/dist/util/result.d.ts +0 -9
- package/dist/util/result.js +0 -1
- package/dist/util/result.js.map +0 -1
- /package/{license → LICENSE} +0 -0
package/dist/cli/handler.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Spinner } from "@favware/colorette-spinner";
|
|
2
|
-
import type { AppConfig } from "../config.js";
|
|
3
|
-
import type { MainContextWithData } from "./main.js";
|
|
4
|
-
export declare const failWith: (spinner: Spinner, message: unknown) => never;
|
|
5
|
-
export declare const write: (message: string) => void;
|
|
6
|
-
interface HelpContextCommand {
|
|
7
|
-
command: string;
|
|
8
|
-
}
|
|
9
|
-
interface HelpContextFile {
|
|
10
|
-
taskFileList: true;
|
|
11
|
-
config: AppConfig;
|
|
12
|
-
}
|
|
13
|
-
interface HelpContextScript extends MainContextWithData {
|
|
14
|
-
taskList: true;
|
|
15
|
-
}
|
|
16
|
-
type HelpContext = HelpContextCommand | HelpContextFile | HelpContextScript;
|
|
17
|
-
export declare const commandHandler: (_context: HelpContextCommand) => string;
|
|
18
|
-
export declare const taskFileListHandler: (context: HelpContextFile) => string;
|
|
19
|
-
export declare const taskListHandler: (context: HelpContextScript) => string;
|
|
20
|
-
export declare const help: (context: HelpContext) => string;
|
|
21
|
-
export interface Handler {
|
|
22
|
-
spinner: Spinner;
|
|
23
|
-
help: (context: HelpContext) => string;
|
|
24
|
-
write: (message: string) => void;
|
|
25
|
-
failWith: (message: unknown) => never;
|
|
26
|
-
}
|
|
27
|
-
export declare const createHandler: () => Handler;
|
|
28
|
-
export {};
|
package/dist/cli/handler.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { readdirSync } from "node:fs";
|
|
2
|
-
import { extname } from "node:path";
|
|
3
|
-
import { Spinner } from "@favware/colorette-spinner";
|
|
4
|
-
import cliuiCjs from "@isaacs/cliui";
|
|
5
|
-
import { bold, gray, yellow } from "colorette";
|
|
6
|
-
import { isBrandedTask } from "../tasks/guards.js";
|
|
7
|
-
import { getSchemaProperties } from "../util/getSchemaProperties.js";
|
|
8
|
-
import { extensions } from "../util/resolveTaskFile.js";
|
|
9
|
-
const cliui = cliuiCjs.default;
|
|
10
|
-
export const failWith = (spinner, message) => {
|
|
11
|
-
let text;
|
|
12
|
-
if (Array.isArray(message)) {
|
|
13
|
-
text = message.map(String).join("\n");
|
|
14
|
-
}
|
|
15
|
-
if (text == null || typeof text !== "string") {
|
|
16
|
-
text = String(message);
|
|
17
|
-
}
|
|
18
|
-
spinner.error({
|
|
19
|
-
text
|
|
20
|
-
});
|
|
21
|
-
process.exit(1);
|
|
22
|
-
};
|
|
23
|
-
export const write = (message) => {
|
|
24
|
-
process.stdout.write(`${message}\n`);
|
|
25
|
-
};
|
|
26
|
-
const usage = `Usage: ${yellow("hr")} <taskFile> [task]`;
|
|
27
|
-
export const commandHandler = (_context) => {
|
|
28
|
-
return usage;
|
|
29
|
-
};
|
|
30
|
-
export const taskFileListHandler = (context) => {
|
|
31
|
-
const fileList = readdirSync(context.config.taskDirectory).filter((file) => extensions.includes(extname(file)));
|
|
32
|
-
const content = [
|
|
33
|
-
usage,
|
|
34
|
-
"Available task files:",
|
|
35
|
-
fileList.map((it) => ` ${it}`).join("\n")
|
|
36
|
-
].join("\n\n");
|
|
37
|
-
return `${content}\n`;
|
|
38
|
-
};
|
|
39
|
-
export const taskListHandler = (context) => {
|
|
40
|
-
const ui = cliui({
|
|
41
|
-
width: Math.max(0, process.stdout.columns - 4),
|
|
42
|
-
wrap: true
|
|
43
|
-
});
|
|
44
|
-
const { config } = context.taskFile.data;
|
|
45
|
-
const baseUsage = usage.replace("<taskFile>", context.taskFile.name);
|
|
46
|
-
ui.div(`${baseUsage} <parameter> [...options]`);
|
|
47
|
-
ui.div({
|
|
48
|
-
text: "Available tasks:",
|
|
49
|
-
padding: [1, 0, 1, 0]
|
|
50
|
-
});
|
|
51
|
-
const taskListPaddingX = 2;
|
|
52
|
-
const nameColumnWidth = Object.keys(config).reduce((previous, current) => Math.max(previous, current.length), 1) +
|
|
53
|
-
2 +
|
|
54
|
-
taskListPaddingX * 2;
|
|
55
|
-
for (const [name, value] of Object.entries(config)) {
|
|
56
|
-
if (!value) {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
const formattedName = bold(name);
|
|
60
|
-
if (isBrandedTask(value)) {
|
|
61
|
-
if (value.kind === "strictTask") {
|
|
62
|
-
const properties = getSchemaProperties(value.schema) || gray("not available");
|
|
63
|
-
ui.div({
|
|
64
|
-
text: formattedName,
|
|
65
|
-
width: nameColumnWidth,
|
|
66
|
-
padding: [0, taskListPaddingX, 0, taskListPaddingX]
|
|
67
|
-
}, properties);
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
ui.div({
|
|
71
|
-
text: formattedName,
|
|
72
|
-
width: nameColumnWidth,
|
|
73
|
-
padding: [0, taskListPaddingX, 0, taskListPaddingX]
|
|
74
|
-
});
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
ui.div({
|
|
78
|
-
text: formattedName,
|
|
79
|
-
width: nameColumnWidth,
|
|
80
|
-
padding: [0, taskListPaddingX, 0, taskListPaddingX]
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
ui.div("");
|
|
84
|
-
return ui.toString();
|
|
85
|
-
};
|
|
86
|
-
export const help = (context) => {
|
|
87
|
-
if ("command" in context) {
|
|
88
|
-
return commandHandler(context);
|
|
89
|
-
}
|
|
90
|
-
if ("taskFileList" in context) {
|
|
91
|
-
return taskFileListHandler(context);
|
|
92
|
-
}
|
|
93
|
-
if ("taskList" in context) {
|
|
94
|
-
return taskListHandler(context);
|
|
95
|
-
}
|
|
96
|
-
return "";
|
|
97
|
-
};
|
|
98
|
-
export const createHandler = () => {
|
|
99
|
-
const spinner = new Spinner();
|
|
100
|
-
return {
|
|
101
|
-
spinner,
|
|
102
|
-
help,
|
|
103
|
-
write,
|
|
104
|
-
failWith: (message) => failWith(spinner, message)
|
|
105
|
-
};
|
|
106
|
-
};
|
package/dist/cli/handler.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/cli/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { ParsedPath } from "node:path";
|
|
2
|
-
import type { AppConfig } from "../config.js";
|
|
3
|
-
import type { TaskCollection } from "../tasks/types.js";
|
|
4
|
-
import type { ResolvedConfigWithFile } from "../util/loadTaskFile.js";
|
|
5
|
-
import type { Handler } from "./handler.js";
|
|
6
|
-
export interface MainProps {
|
|
7
|
-
handler: Handler;
|
|
8
|
-
}
|
|
9
|
-
export interface MainContext extends MainProps {
|
|
10
|
-
config: AppConfig;
|
|
11
|
-
taskFile: ParsedPath & {
|
|
12
|
-
path: string;
|
|
13
|
-
};
|
|
14
|
-
taskName: string;
|
|
15
|
-
}
|
|
16
|
-
export interface MainContextWithData extends MainContext {
|
|
17
|
-
taskFile: MainContext["taskFile"] & {
|
|
18
|
-
data: ResolvedConfigWithFile<TaskCollection>;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export declare const main: (props: MainProps) => Promise<void>;
|
package/dist/cli/main.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { parse, resolve } from "node:path";
|
|
2
|
-
import { getAppConfig } from "../config.js";
|
|
3
|
-
import { executeTask } from "../tasks/executeTask.js";
|
|
4
|
-
import { loadTaskFile } from "../util/loadTaskFile.js";
|
|
5
|
-
import { resolveTaskFile } from "../util/resolveTaskFile.js";
|
|
6
|
-
import { parseOptions } from "./parseOptions.js";
|
|
7
|
-
export const main = async (props) => {
|
|
8
|
-
const { config } = await getAppConfig();
|
|
9
|
-
const inputFileName = process.argv[2];
|
|
10
|
-
const taskName = process.argv[3] ?? "";
|
|
11
|
-
if (!inputFileName) {
|
|
12
|
-
props.handler.write(props.handler.help({
|
|
13
|
-
taskFileList: true,
|
|
14
|
-
config
|
|
15
|
-
}));
|
|
16
|
-
props.handler.failWith("Task file name is required");
|
|
17
|
-
}
|
|
18
|
-
const fullFilePath = resolve(config.taskDirectory, inputFileName);
|
|
19
|
-
const context = {
|
|
20
|
-
...props,
|
|
21
|
-
config,
|
|
22
|
-
taskFile: {
|
|
23
|
-
...parse(fullFilePath),
|
|
24
|
-
path: fullFilePath
|
|
25
|
-
},
|
|
26
|
-
taskName
|
|
27
|
-
};
|
|
28
|
-
const resolutions = resolveTaskFile(context);
|
|
29
|
-
if (Array.isArray(resolutions)) {
|
|
30
|
-
props.handler.failWith([
|
|
31
|
-
`Found multiple task files with the name '${context.taskFile.name}'`,
|
|
32
|
-
`Rename the ambiguous files or specify an extension and try again`,
|
|
33
|
-
resolutions.map((it) => ` ${it}`).join("\n")
|
|
34
|
-
]);
|
|
35
|
-
}
|
|
36
|
-
// update context with the fully resolved file path
|
|
37
|
-
context.taskFile = {
|
|
38
|
-
...parse(resolutions),
|
|
39
|
-
path: resolutions
|
|
40
|
-
};
|
|
41
|
-
const taskFileResult = await loadTaskFile(context);
|
|
42
|
-
if (!taskFileResult.ok) {
|
|
43
|
-
props.handler.failWith(taskFileResult.error);
|
|
44
|
-
}
|
|
45
|
-
const contextWithData = {
|
|
46
|
-
...context,
|
|
47
|
-
taskFile: {
|
|
48
|
-
...context.taskFile,
|
|
49
|
-
data: taskFileResult.value
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
try {
|
|
53
|
-
const options = parseOptions(process.argv.slice(4));
|
|
54
|
-
await executeTask(contextWithData, options);
|
|
55
|
-
if (!config.quiet) {
|
|
56
|
-
props.handler.spinner.success({
|
|
57
|
-
text: "Success"
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
props.handler.failWith([`Failed to execute task`, String(error)]);
|
|
63
|
-
}
|
|
64
|
-
};
|
package/dist/cli/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface ParsedOptions {
|
|
2
|
-
_: string[];
|
|
3
|
-
[key: string]: unknown;
|
|
4
|
-
}
|
|
5
|
-
export declare const reservedNames: Set<string>;
|
|
6
|
-
/**
|
|
7
|
-
* Wrapper around Node's {@link parseArgs} that treats options as strings
|
|
8
|
-
* by default, instead of boolean flags.
|
|
9
|
-
*
|
|
10
|
-
* @param args - argv-like string
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
export declare const parseOptions: (args: string[]) => ParsedOptions;
|
package/dist/cli/parseOptions.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { parseArgs } from "node:util";
|
|
2
|
-
export const reservedNames = new Set(["_", "env"]);
|
|
3
|
-
/**
|
|
4
|
-
* Wrapper around Node's {@link parseArgs} that treats options as strings
|
|
5
|
-
* by default, instead of boolean flags.
|
|
6
|
-
*
|
|
7
|
-
* @param args - argv-like string
|
|
8
|
-
* @returns
|
|
9
|
-
*/
|
|
10
|
-
export const parseOptions = (args) => {
|
|
11
|
-
const { tokens } = parseArgs({
|
|
12
|
-
args,
|
|
13
|
-
allowPositionals: true,
|
|
14
|
-
strict: false,
|
|
15
|
-
tokens: true
|
|
16
|
-
});
|
|
17
|
-
const options = {
|
|
18
|
-
_: []
|
|
19
|
-
};
|
|
20
|
-
for (let index = 0; index < tokens.length; index++) {
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
22
|
-
const token = tokens[index];
|
|
23
|
-
if (token.kind === "option-terminator") {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (token.kind === "option") {
|
|
27
|
-
if (reservedNames.has(token.name)) {
|
|
28
|
-
throw new Error(`Reserved name '${token.name}' cannot be used as option`);
|
|
29
|
-
}
|
|
30
|
-
if (index + 1 < tokens.length) {
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
32
|
-
const next = tokens[index + 1];
|
|
33
|
-
if (next.kind !== "positional") {
|
|
34
|
-
throw new Error(`Expected value for option ${token.rawName}`);
|
|
35
|
-
}
|
|
36
|
-
options[token.name] = next.value;
|
|
37
|
-
index++;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
throw new Error(`Expected option ${token.rawName} to be followed by a value`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (token.kind === "positional") {
|
|
44
|
-
options._.push(token.value);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return options;
|
|
48
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseOptions.js","sourceRoot":"","sources":["../../src/cli/parseOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAc,EAAiB,EAAE;IAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC5B,IAAI;QACJ,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,OAAO,GAAkB;QAC9B,CAAC,EAAE,EAAE;KACL,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,oEAAoE;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAE7B,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACxC,SAAS;QACV,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACd,kBAAkB,KAAK,CAAC,IAAI,4BAA4B,CACxD,CAAC;YACH,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC/B,oEAAoE;gBACpE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;gBAEhC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBACjC,KAAK,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CACd,mBAAmB,KAAK,CAAC,OAAO,4BAA4B,CAC5D,CAAC;YACH,CAAC;QACF,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/config.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface AppConfig {
|
|
2
|
-
/**
|
|
3
|
-
* Directory containing task files. Defaults to the `scripts` folder within
|
|
4
|
-
* the current working directory.
|
|
5
|
-
*
|
|
6
|
-
* @default `<cwd>/scripts`
|
|
7
|
-
*/
|
|
8
|
-
taskDirectory: string;
|
|
9
|
-
/**
|
|
10
|
-
* Print no output unless errors occur.
|
|
11
|
-
*
|
|
12
|
-
* @default false
|
|
13
|
-
*/
|
|
14
|
-
quiet: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare const getAppConfig: () => Promise<import("c12").ResolvedConfig<AppConfig, import("c12").ConfigLayerMeta>>;
|
package/dist/config.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { cwd } from "node:process";
|
|
3
|
-
import { loadConfig } from "c12";
|
|
4
|
-
export const getAppConfig = async () => {
|
|
5
|
-
const configName = "haltcase.run";
|
|
6
|
-
return loadConfig({
|
|
7
|
-
name: configName,
|
|
8
|
-
configFile: configName,
|
|
9
|
-
packageJson: configName,
|
|
10
|
-
rcFile: configName,
|
|
11
|
-
defaults: {
|
|
12
|
-
taskDirectory: join(cwd(), "scripts"),
|
|
13
|
-
quiet: false
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
};
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAmBjC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,UAAU,GAAG,cAAc,CAAC;IAElC,OAAO,UAAU,CAAY;QAC5B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,UAAU;QAElB,QAAQ,EAAE;YACT,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC;YACrC,KAAK,EAAE,KAAK;SACZ;KACD,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/index.d.ts
DELETED
package/dist/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { task } from "./tasks/task.js";
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { MainContextWithData } from "../cli/main.js";
|
|
2
|
-
import type { ParsedOptions } from "../cli/parseOptions.js";
|
|
3
|
-
export declare const taskUtilities: {
|
|
4
|
-
command: import("execa").ExecaMethod<{}>;
|
|
5
|
-
$: import("execa").ExecaScriptMethod<{}>;
|
|
6
|
-
exec: import("execa").ExecaMethod<{
|
|
7
|
-
stdin: "inherit";
|
|
8
|
-
stdout: "inherit";
|
|
9
|
-
stderr: "inherit";
|
|
10
|
-
}>;
|
|
11
|
-
};
|
|
12
|
-
export declare const executeTask: (context: MainContextWithData, options: ParsedOptions) => Promise<void>;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { $, execa } from "execa";
|
|
2
|
-
const execaInherited = execa({
|
|
3
|
-
stdin: "inherit",
|
|
4
|
-
stdout: "inherit",
|
|
5
|
-
stderr: "inherit"
|
|
6
|
-
});
|
|
7
|
-
export const taskUtilities = {
|
|
8
|
-
command: execa,
|
|
9
|
-
$,
|
|
10
|
-
exec: execaInherited
|
|
11
|
-
};
|
|
12
|
-
export const executeTask = async (context, options) => {
|
|
13
|
-
const taskFunction = context.taskFile.data.config[context.taskName];
|
|
14
|
-
const specifier = `${context.taskFile.name}::${context.taskName}`;
|
|
15
|
-
if (taskFunction == null) {
|
|
16
|
-
context.handler.write(context.handler.help({
|
|
17
|
-
taskList: true,
|
|
18
|
-
...context
|
|
19
|
-
}));
|
|
20
|
-
if (!context.taskName) {
|
|
21
|
-
context.handler.failWith(`Task name is required.`);
|
|
22
|
-
}
|
|
23
|
-
context.handler.failWith([
|
|
24
|
-
`Task file '${context.taskFile.name}' does not export '${context.taskName}'`,
|
|
25
|
-
`Resolved to: ${context.taskFile.path}`
|
|
26
|
-
]);
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const optionsWithEnvironment = {
|
|
30
|
-
...options,
|
|
31
|
-
env: process.env
|
|
32
|
-
};
|
|
33
|
-
await taskFunction(optionsWithEnvironment, taskUtilities);
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
-
if (message.includes("is not a function")) {
|
|
38
|
-
context.handler.failWith([
|
|
39
|
-
`Failed to execute ${specifier}`,
|
|
40
|
-
`Exported value '${context.taskName}' is not a function`
|
|
41
|
-
]);
|
|
42
|
-
}
|
|
43
|
-
context.handler.failWith([`Failed to execute ${specifier}`, message]);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executeTask.js","sourceRoot":"","sources":["../../src/tasks/executeTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,cAAc,GAAG,KAAK,CAAC;IAC5B,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CACjB,CAAiC,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,OAAO,EAAE,KAAK;IACd,CAAC;IACD,IAAI,EAAE,cAAc;CACI,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC/B,OAA4B,EAC5B,OAAsB,EACrB,EAAE;IACH,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;IAElE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,CACpB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,IAAI;YACd,GAAG,OAAO;SACV,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YACxB,cAAc,OAAO,CAAC,QAAQ,CAAC,IAAI,sBAAsB,OAAO,CAAC,QAAQ,GAAG;YAC5E,gBAAgB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;SACvC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,sBAAsB,GAAG;YAC9B,GAAG,OAAO;YACV,GAAG,EAAE,OAAO,CAAC,GAAG;SAChB,CAAC;QAEF,MAAM,YAAY,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxB,qBAAqB,SAAS,EAAE;gBAChC,mBAAmB,OAAO,CAAC,QAAQ,qBAAqB;aACxD,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,qBAAqB,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;AACF,CAAC,CAAC"}
|
package/dist/tasks/guards.d.ts
DELETED
package/dist/tasks/guards.js
DELETED
package/dist/tasks/guards.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/tasks/guards.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAU,EAAuB,EAAE,CAChE,MAAM,IAAI,IAAI,CAAC;AAEhB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,IAAa,EACkB,EAAE,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC"}
|
package/dist/tasks/task.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Type } from "arktype";
|
|
2
|
-
import { type } from "arktype";
|
|
3
|
-
import type { BrandedTask, BrandedTaskStrict, DefaultOptionsInput, Task } from "./types.js";
|
|
4
|
-
export declare const task: {
|
|
5
|
-
<T = DefaultOptionsInput>(fn: Task<T>): BrandedTask<T>;
|
|
6
|
-
strict<const TShape>(shape: type.validate<TShape>, fn: Task<NoInfer<Type<type.infer<TShape>>["infer"]>>): BrandedTaskStrict<Type<type.infer<TShape>>["inferIn"]>;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Default schema for the options received by a {@link task}.
|
|
10
|
-
*/
|
|
11
|
-
export declare const defaultOptionsInput: import("arktype/internal/methods/object.ts").ObjectType<{
|
|
12
|
-
_: string[];
|
|
13
|
-
env: Record<string, string | undefined>;
|
|
14
|
-
}, {}>;
|
package/dist/tasks/task.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { type } from "arktype";
|
|
2
|
-
import { red } from "colorette";
|
|
3
|
-
const formatValidationIssues = (errors) => errors
|
|
4
|
-
.map((error) => {
|
|
5
|
-
const propertyName = String(error.path[0]);
|
|
6
|
-
const dottedPath = error.path.join(".");
|
|
7
|
-
if (!propertyName) {
|
|
8
|
-
return error.message;
|
|
9
|
-
}
|
|
10
|
-
const messageWithoutProperty = error.message.startsWith(dottedPath)
|
|
11
|
-
? error.message.slice(dottedPath.length + 1)
|
|
12
|
-
: error.message;
|
|
13
|
-
if (propertyName === "env") {
|
|
14
|
-
const prefix = red(`Environment variable '${String(error.path[1])}'`);
|
|
15
|
-
return `${prefix}: ${messageWithoutProperty}`;
|
|
16
|
-
}
|
|
17
|
-
const optionText = propertyName === "_" ? "Positionals" : `--${propertyName}`;
|
|
18
|
-
if (error.code === "predicate" && error.expected === "removed") {
|
|
19
|
-
return `${red(optionText)}: unknown option`;
|
|
20
|
-
}
|
|
21
|
-
// we currently assume there is only ever one path segment
|
|
22
|
-
return `${red(optionText)}: ${messageWithoutProperty}`;
|
|
23
|
-
})
|
|
24
|
-
.join("\n");
|
|
25
|
-
export const task = (fn) => {
|
|
26
|
-
fn.kind = "task";
|
|
27
|
-
return fn;
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* Default schema for the options received by a {@link task}.
|
|
31
|
-
*/
|
|
32
|
-
export const defaultOptionsInput = type({
|
|
33
|
-
_: "string[]",
|
|
34
|
-
env: "Record<string, string | undefined>"
|
|
35
|
-
});
|
|
36
|
-
/**
|
|
37
|
-
* Create a task that validates its input against a schema.
|
|
38
|
-
*/
|
|
39
|
-
task.strict = (shape, fn) => {
|
|
40
|
-
const schema = defaultOptionsInput
|
|
41
|
-
.merge(type.raw(shape))
|
|
42
|
-
.onUndeclaredKey("reject");
|
|
43
|
-
const taskFunction = (options, utilities) => {
|
|
44
|
-
const validationResult = schema(options);
|
|
45
|
-
if (validationResult instanceof type.errors) {
|
|
46
|
-
throw new TypeError(formatValidationIssues(validationResult), {
|
|
47
|
-
cause: validationResult
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return fn(validationResult, utilities);
|
|
51
|
-
};
|
|
52
|
-
taskFunction.kind = "strictTask";
|
|
53
|
-
taskFunction.schema = schema;
|
|
54
|
-
return taskFunction;
|
|
55
|
-
};
|
package/dist/tasks/task.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tasks/task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAShC,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAU,EAAE,CAC5D,MAAM;KACJ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACd,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QAClE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAEjB,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,GAAG,MAAM,KAAK,sBAAsB,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GACf,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;IAE5D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED,0DAA0D;IAC1D,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,sBAAsB,EAAE,CAAC;AACxD,CAAC,CAAC;KACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,IAAI,GAAG,CAA0B,EAAW,EAAkB,EAAE;IAC3E,EAAqB,CAAC,IAAI,GAAG,MAAM,CAAC;IACrC,OAAO,EAAoB,CAAC;AAC7B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;IACvC,CAAC,EAAE,UAAU;IACb,GAAG,EAAE,oCAAoC;CACzC,CAAC,CAAC;AAEH;;GAEG;AACH,IAAI,CAAC,MAAM,GAAG,CACb,KAA4B,EAC5B,EAAoD,EACK,EAAE;IAC3D,MAAM,MAAM,GAAG,mBAAmB;SAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACtB,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE5B,MAAM,YAAY,GAA2C,CAC5D,OAAO,EACP,SAAS,EACR,EAAE;QACH,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,gBAAgB,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,EAAE;gBAC7D,KAAK,EAAE,gBAAgB;aACvB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC,gBAAyB,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC;IACjC,YAAY,CAAC,MAAM,GAAG,MAAe,CAAC;IAEtC,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC"}
|
package/dist/tasks/types.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { Type } from "arktype";
|
|
2
|
-
import type { ExecaMethod, ExecaScriptMethod } from "execa";
|
|
3
|
-
import type { ParsedOptions } from "../cli/parseOptions.js";
|
|
4
|
-
export interface TaskUtilities {
|
|
5
|
-
/**
|
|
6
|
-
* Run a command using Execa's
|
|
7
|
-
* {@link https://github.com/sindresorhus/execa/blob/main/docs/scripts.md|script mode}.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* const { stdout } = await $`echo ${"hello"}`;
|
|
12
|
-
* console.log(`stdout = ${stdout}`);
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* @see {@link https://github.com/sindresorhus/execa/blob/main/docs/execution.md#%EF%B8%8F-basic-execution|Execa docs}
|
|
16
|
-
*/
|
|
17
|
-
$: ExecaScriptMethod;
|
|
18
|
-
/**
|
|
19
|
-
* Run a command using {@link https://github.com/sindresorhus/execa|Execa}
|
|
20
|
-
* (e.g., shell command or script).
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```ts
|
|
24
|
-
* const { stdout } = await execa`echo 'hello'`;
|
|
25
|
-
* console.log(stdout);
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* @see {@link https://github.com/sindresorhus/execa/blob/main/docs/execution.md#%EF%B8%8F-basic-execution|Execa docs}
|
|
29
|
-
*/
|
|
30
|
-
command: ExecaMethod;
|
|
31
|
-
/**
|
|
32
|
-
* Same as `command`, but inherits the parent process' stdio streams by
|
|
33
|
-
* default, i.e., logs and errors will be sent directly to the terminal.
|
|
34
|
-
* Use `command` or `$` if you want to capture the output instead.
|
|
35
|
-
*/
|
|
36
|
-
exec: ExecaMethod<{
|
|
37
|
-
stdin: "inherit";
|
|
38
|
-
stdout: "inherit";
|
|
39
|
-
stderr: "inherit";
|
|
40
|
-
}>;
|
|
41
|
-
}
|
|
42
|
-
export type DefaultOptionsInput = ParsedOptions & {
|
|
43
|
-
env: Record<string, string | undefined>;
|
|
44
|
-
};
|
|
45
|
-
export type TaskCollection = Partial<Record<string, Task>>;
|
|
46
|
-
type MergePositionals<TOptions> = "_" extends keyof TOptions ? TOptions : TOptions & ParsedOptions;
|
|
47
|
-
type MergeEnvironment<TOptions> = "env" extends keyof TOptions ? TOptions : TOptions & Pick<DefaultOptionsInput, "env">;
|
|
48
|
-
export type Task<TOptions = unknown> = (options: MergePositionals<MergeEnvironment<TOptions>>, utilities: TaskUtilities) => unknown;
|
|
49
|
-
export type BrandedTaskStrict<TShape = DefaultOptionsInput> = Task<TShape> & {
|
|
50
|
-
kind: "strictTask";
|
|
51
|
-
schema: Type<TShape>;
|
|
52
|
-
};
|
|
53
|
-
export type BrandedTaskLoose<TOptions = unknown> = Task<TOptions> & {
|
|
54
|
-
kind: "task";
|
|
55
|
-
schema: never;
|
|
56
|
-
};
|
|
57
|
-
export type BrandedTask<TOptions = unknown> = BrandedTaskLoose<TOptions> | BrandedTaskStrict<TOptions>;
|
|
58
|
-
export {};
|
package/dist/tasks/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/tasks/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tasks/types.ts"],"names":[],"mappings":""}
|