@plugjs/plug 0.3.5 → 0.4.1

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.
Files changed (119) hide show
  1. package/dist/asserts.cjs +10 -12
  2. package/dist/asserts.cjs.map +1 -1
  3. package/dist/asserts.d.ts +1 -2
  4. package/dist/asserts.mjs +9 -10
  5. package/dist/asserts.mjs.map +1 -1
  6. package/dist/async.cjs +5 -20
  7. package/dist/async.cjs.map +2 -2
  8. package/dist/async.mjs +5 -20
  9. package/dist/async.mjs.map +2 -2
  10. package/dist/build.cjs +113 -64
  11. package/dist/build.cjs.map +2 -2
  12. package/dist/build.d.ts +9 -7
  13. package/dist/build.mjs +110 -63
  14. package/dist/build.mjs.map +2 -2
  15. package/dist/cli.d.mts +12 -0
  16. package/dist/cli.mjs +266 -0
  17. package/dist/cli.mjs.map +6 -0
  18. package/dist/files.cjs +5 -3
  19. package/dist/files.cjs.map +1 -1
  20. package/dist/files.d.ts +2 -1
  21. package/dist/files.mjs +11 -4
  22. package/dist/files.mjs.map +1 -1
  23. package/dist/fork.cjs +30 -12
  24. package/dist/fork.cjs.map +1 -1
  25. package/dist/fork.d.ts +10 -0
  26. package/dist/fork.mjs +31 -13
  27. package/dist/fork.mjs.map +1 -1
  28. package/dist/helpers.cjs +32 -13
  29. package/dist/helpers.cjs.map +2 -2
  30. package/dist/helpers.d.ts +12 -0
  31. package/dist/helpers.mjs +37 -14
  32. package/dist/helpers.mjs.map +2 -2
  33. package/dist/index.cjs +5 -0
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +2 -1
  36. package/dist/index.mjs +4 -1
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/logging/emit.cjs +4 -4
  39. package/dist/logging/emit.cjs.map +1 -1
  40. package/dist/logging/emit.mjs +4 -4
  41. package/dist/logging/emit.mjs.map +1 -1
  42. package/dist/logging/logger.cjs +43 -2
  43. package/dist/logging/logger.cjs.map +1 -1
  44. package/dist/logging/logger.d.ts +36 -3
  45. package/dist/logging/logger.mjs +43 -3
  46. package/dist/logging/logger.mjs.map +1 -1
  47. package/dist/logging/options.cjs +8 -12
  48. package/dist/logging/options.cjs.map +1 -1
  49. package/dist/logging/options.d.ts +44 -1
  50. package/dist/logging/options.mjs +8 -12
  51. package/dist/logging/options.mjs.map +1 -1
  52. package/dist/logging.cjs +14 -3
  53. package/dist/logging.cjs.map +1 -1
  54. package/dist/logging.d.ts +2 -0
  55. package/dist/logging.mjs +13 -3
  56. package/dist/logging.mjs.map +1 -1
  57. package/dist/plugs/build.cjs +63 -0
  58. package/dist/plugs/build.cjs.map +6 -0
  59. package/dist/plugs/build.d.ts +13 -0
  60. package/dist/plugs/build.mjs +37 -0
  61. package/dist/plugs/build.mjs.map +6 -0
  62. package/dist/plugs/debug.cjs +7 -9
  63. package/dist/plugs/debug.cjs.map +1 -1
  64. package/dist/plugs/debug.mjs +8 -10
  65. package/dist/plugs/debug.mjs.map +1 -1
  66. package/dist/types.cjs +12 -0
  67. package/dist/types.cjs.map +1 -1
  68. package/dist/types.d.ts +35 -9
  69. package/dist/types.mjs +5 -0
  70. package/dist/types.mjs.map +2 -2
  71. package/dist/utils/diff.cjs +1 -4
  72. package/dist/utils/diff.cjs.map +1 -1
  73. package/dist/utils/diff.mjs +1 -4
  74. package/dist/utils/diff.mjs.map +1 -1
  75. package/dist/utils/exec.cjs +5 -12
  76. package/dist/utils/exec.cjs.map +2 -2
  77. package/dist/utils/exec.d.ts +0 -2
  78. package/dist/utils/exec.mjs +6 -13
  79. package/dist/utils/exec.mjs.map +1 -1
  80. package/dist/utils/{types.cjs → singleton.cjs} +14 -13
  81. package/dist/utils/singleton.cjs.map +6 -0
  82. package/dist/utils/singleton.d.ts +12 -0
  83. package/dist/utils/singleton.mjs +13 -0
  84. package/dist/utils/singleton.mjs.map +6 -0
  85. package/dist/utils.cjs +2 -2
  86. package/dist/utils.cjs.map +1 -1
  87. package/dist/utils.d.ts +1 -1
  88. package/dist/utils.mjs +1 -1
  89. package/package.json +7 -9
  90. package/src/asserts.ts +10 -12
  91. package/src/async.ts +6 -29
  92. package/src/build.ts +169 -106
  93. package/{extra/plug.mts → src/cli.mts} +115 -141
  94. package/src/files.ts +14 -6
  95. package/src/fork.ts +42 -16
  96. package/src/helpers.ts +56 -5
  97. package/src/index.ts +2 -1
  98. package/src/logging/emit.ts +4 -4
  99. package/src/logging/logger.ts +60 -7
  100. package/src/logging/options.ts +9 -14
  101. package/src/logging.ts +20 -5
  102. package/src/plugs/build.ts +45 -0
  103. package/src/plugs/debug.ts +10 -9
  104. package/src/types.ts +54 -23
  105. package/src/utils/diff.ts +1 -6
  106. package/src/utils/exec.ts +6 -20
  107. package/src/utils/singleton.ts +19 -0
  108. package/src/utils.ts +1 -1
  109. package/cli/plug.mjs +0 -1385
  110. package/cli/ts-loader.mjs +0 -275
  111. package/cli/tsrun.mjs +0 -1204
  112. package/dist/utils/types.cjs.map +0 -6
  113. package/dist/utils/types.d.ts +0 -4
  114. package/dist/utils/types.mjs +0 -12
  115. package/dist/utils/types.mjs.map +0 -6
  116. package/extra/ts-loader.mts +0 -546
  117. package/extra/tsrun.mts +0 -127
  118. package/extra/utils.ts +0 -150
  119. package/src/utils/types.ts +0 -11
package/dist/build.mjs CHANGED
@@ -1,141 +1,188 @@
1
1
  // build.ts
2
2
  import { assert } from "./asserts.mjs";
3
3
  import { runAsync } from "./async.mjs";
4
- import { $ms, $p, $t, getLogger, logOptions } from "./logging.mjs";
4
+ import { $gry, $ms, $p, $t, getLogger, logOptions } from "./logging.mjs";
5
5
  import { Context, ContextPromises, PipeImpl } from "./pipe.mjs";
6
6
  import { findCaller } from "./utils/caller.mjs";
7
- var taskMarker = Symbol.for("plugjs:isTask");
8
- function isTask(something) {
9
- return something[taskMarker] === true;
7
+ import { getSingleton } from "./utils/singleton.mjs";
8
+ import { buildMarker } from "./types.mjs";
9
+ var taskCallMarker = Symbol.for("plugjs:plug:types:TaskCall");
10
+ function isTaskCall(something) {
11
+ return something[taskCallMarker] === taskCallMarker;
10
12
  }
11
- function makeTask(buildFile, tasks, props, _def, _name) {
12
- async function invoke(state, taskName) {
13
- assert(!state.stack.includes(task), `Recursion detected calling ${$t(taskName)}`);
14
- const cached = state.cache.get(task);
13
+ function merge(a, b) {
14
+ return Object.assign(/* @__PURE__ */ Object.create(null), a, b);
15
+ }
16
+ function makeState(state) {
17
+ const {
18
+ cache = /* @__PURE__ */ new Map(),
19
+ fails = /* @__PURE__ */ new Set(),
20
+ stack = [],
21
+ tasks = {},
22
+ props = {}
23
+ } = state;
24
+ return { cache, fails, stack, tasks, props };
25
+ }
26
+ var lastIdKey = Symbol.for("plugjs:plug:singleton:taskId");
27
+ var taskId = getSingleton(lastIdKey, () => ({ id: 0 }));
28
+ var TaskImpl = class {
29
+ constructor(name, buildFile, _def, _tasks, _props) {
30
+ this.name = name;
31
+ this.buildFile = buildFile;
32
+ this._def = _def;
33
+ this.tasks = _tasks;
34
+ this.props = _props;
35
+ }
36
+ before = [];
37
+ after = [];
38
+ id = ++taskId.id;
39
+ props;
40
+ tasks;
41
+ async invoke(state, taskName) {
42
+ assert(!state.stack.includes(this), `Recursion detected calling ${$t(taskName)}`);
43
+ const cached = state.cache.get(this);
15
44
  if (cached)
16
45
  return cached;
17
- const props2 = Object.assign({}, task.props, state.props);
18
- const tasks2 = Object.assign({}, task.tasks, state.tasks);
19
- const stack = [...state.stack, task];
20
- const cache = state.cache;
21
- state = { stack, cache, tasks: tasks2, props: props2 };
22
- const context = new Context(task.buildFile, taskName);
46
+ state = makeState({
47
+ props: merge(this.props, state.props),
48
+ tasks: merge(this.tasks, state.tasks),
49
+ stack: [...state.stack, this],
50
+ cache: state.cache,
51
+ fails: state.fails
52
+ });
53
+ const context = new Context(this.buildFile, taskName);
23
54
  const build2 = new Proxy({}, {
24
- get(_, name) {
25
- if (name in tasks2) {
55
+ get: (_, name) => {
56
+ if (name in state.tasks) {
26
57
  return () => {
27
- const promise2 = tasks2[name].invoke(state, name);
58
+ const promise2 = state.tasks[name].invoke(state, name);
28
59
  return new PipeImpl(context, promise2);
29
60
  };
30
- } else if (name in props2) {
31
- return props2[name];
61
+ } else if (name in state.props) {
62
+ return state.props[name];
32
63
  }
33
64
  }
34
65
  });
35
- for (const before of task.before)
66
+ for (const before of this.before)
36
67
  await before.invoke(state, before.name);
37
68
  context.log.info("Running...");
38
69
  const now = Date.now();
39
70
  const promise = runAsync(context, taskName, async () => {
40
- return await _def.call(build2) || void 0;
71
+ return await this._def.call(build2) || void 0;
41
72
  }).then(async (result) => {
42
73
  const level = taskName.startsWith("_") ? "info" : "notice";
43
74
  context.log[level](`Success ${$ms(Date.now() - now)}`);
44
75
  return result;
45
76
  }).catch((error) => {
77
+ state.fails.add(this);
46
78
  throw context.log.fail(`Failure ${$ms(Date.now() - now)}`, error);
47
79
  }).finally(async () => {
48
80
  await ContextPromises.wait(context);
49
81
  }).then(async (result) => {
50
- for (const after of task.after)
82
+ for (const after of this.after)
51
83
  await after.invoke(state, after.name);
52
84
  return result;
53
85
  });
54
- cache.set(task, promise);
86
+ state.cache.set(this, promise);
55
87
  return promise;
56
88
  }
57
- const task = Object.assign((overrideProps = {}) => {
58
- const state = {
59
- cache: /* @__PURE__ */ new Map(),
60
- stack: [],
61
- props: Object.assign({}, props, overrideProps),
62
- tasks
63
- };
64
- return invoke(state, _name);
65
- }, { buildFile, tasks, props, invoke, before: [], after: [] });
66
- Object.defineProperty(task, taskMarker, { value: true });
67
- Object.defineProperty(task, "name", { value: _name });
68
- return task;
69
- }
70
- var buildMarker = Symbol.for("plugjs:isBuild");
89
+ };
71
90
  function build(def) {
72
91
  const buildFile = findCaller(build);
73
92
  const tasks = {};
74
93
  const props = {};
75
94
  for (const [key, val] of Object.entries(def)) {
76
95
  let len = 0;
77
- if (isTask(val)) {
78
- tasks[key] = val;
96
+ if (isTaskCall(val)) {
97
+ tasks[key] = val.task;
79
98
  len = key.length;
80
99
  } else if (typeof val === "string") {
81
100
  props[key] = val;
82
101
  } else if (typeof val === "function") {
83
- tasks[key] = makeTask(buildFile, tasks, props, val, key);
102
+ tasks[key] = new TaskImpl(key, buildFile, val, tasks, props);
84
103
  len = key.length;
85
104
  }
86
105
  if (len > logOptions.taskLength)
87
106
  logOptions.taskLength = len;
88
107
  }
89
- const invoke = async function invoke2(taskNames, overrideProps = {}) {
108
+ const start = async function start2(callback, overrideProps = {}) {
109
+ const state = makeState({ tasks, props: merge(props, overrideProps) });
90
110
  const logger = getLogger();
91
- const state = {
92
- cache: /* @__PURE__ */ new Map(),
93
- stack: [],
94
- props: Object.assign({}, props, overrideProps),
95
- tasks
96
- };
97
111
  logger.notice("Starting...");
98
112
  const now = Date.now();
99
113
  try {
114
+ const result = await callback(state);
115
+ logger.notice(`Build successful ${$ms(Date.now() - now)}`);
116
+ return result;
117
+ } catch (error) {
118
+ if (state.fails.size) {
119
+ logger.error("");
120
+ logger.error(state.fails.size, state.fails.size === 1 ? "task" : "tasks", "failed:");
121
+ state.fails.forEach((task) => logger.error($gry("*"), $t(task.name)));
122
+ logger.error("");
123
+ }
124
+ throw logger.fail(`Build failed ${$ms(Date.now() - now)}`, error);
125
+ }
126
+ };
127
+ const invoke = async function invoke2(taskNames, overrideProps = {}) {
128
+ await start(async (state) => {
100
129
  for (const name of taskNames) {
101
130
  const task = tasks[name];
102
131
  assert(task, `Task ${$t(name)} not found in build ${$p(buildFile)}`);
103
132
  await task.invoke(state, name);
104
133
  }
105
- logger.notice(`Build successful ${$ms(Date.now() - now)}`);
106
- } catch (error) {
107
- throw logger.fail(`Build failed ${$ms(Date.now() - now)}`, error);
108
- }
134
+ }, overrideProps);
109
135
  };
110
- const compiled = Object.assign({}, props, tasks);
136
+ const callables = {};
137
+ for (const [name, task] of Object.entries(tasks)) {
138
+ const callable = async (overrideProps) => start(async (state) => task.invoke(state, name), overrideProps);
139
+ callables[name] = Object.defineProperties(callable, {
140
+ [taskCallMarker]: { value: taskCallMarker },
141
+ "task": { value: task },
142
+ "name": { value: name }
143
+ });
144
+ }
145
+ const compiled = merge(props, callables);
111
146
  Object.defineProperty(compiled, buildMarker, { value: invoke });
112
147
  return compiled;
113
148
  }
149
+ function isBuild(build2) {
150
+ return build2 && typeof build2[buildMarker] === "function";
151
+ }
152
+ function invokeTasks(build2, tasks, props) {
153
+ if (isBuild(build2)) {
154
+ return build2[buildMarker](tasks, props);
155
+ } else {
156
+ throw new TypeError("Invalid build instance");
157
+ }
158
+ }
114
159
  function hookBefore(build2, taskName, hooks) {
115
- const task = build2[taskName];
116
- assert(isTask(task), `Task "${$t(taskName)}" not found in build`);
160
+ const taskCall = build2[taskName];
161
+ assert(isTaskCall(taskCall), `Task "${$t(taskName)}" not found in build`);
117
162
  for (const hook of hooks) {
118
163
  const beforeHook = build2[hook];
119
- assert(isTask(beforeHook), `Task "${$t(hook)}" to hook before "${$t(taskName)}" not found in build`);
120
- if (task.before.includes(beforeHook))
164
+ assert(isTaskCall(beforeHook), `Task "${$t(hook)}" to hook before "${$t(taskName)}" not found in build`);
165
+ if (taskCall.task.before.includes(beforeHook.task))
121
166
  continue;
122
- task.before.push(beforeHook);
167
+ taskCall.task.before.push(beforeHook.task);
123
168
  }
124
169
  }
125
170
  function hookAfter(build2, taskName, hooks) {
126
- const task = build2[taskName];
127
- assert(isTask(task), `Task "${$t(taskName)}" not found in build`);
171
+ const taskCall = build2[taskName];
172
+ assert(isTaskCall(taskCall), `Task "${$t(taskName)}" not found in build`);
128
173
  for (const hook of hooks) {
129
174
  const afterHook = build2[hook];
130
- assert(isTask(afterHook), `Task "${$t(hook)}" to hook after "${$t(taskName)}" not found in build`);
131
- if (task.after.includes(afterHook))
175
+ assert(isTaskCall(afterHook), `Task "${$t(hook)}" to hook after "${$t(taskName)}" not found in build`);
176
+ if (taskCall.task.after.includes(afterHook.task))
132
177
  continue;
133
- task.after.push(afterHook);
178
+ taskCall.task.after.push(afterHook.task);
134
179
  }
135
180
  }
136
181
  export {
137
182
  build,
138
183
  hookAfter,
139
- hookBefore
184
+ hookBefore,
185
+ invokeTasks,
186
+ isBuild
140
187
  };
141
188
  //# sourceMappingURL=build.mjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/build.ts"],
4
- "mappings": "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",
5
- "names": ["props", "tasks", "build", "promise", "invoke"]
4
+ "mappings": "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",
5
+ "names": ["build", "promise", "start", "invoke"]
6
6
  }
package/dist/cli.d.mts ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import type { AbsolutePath } from './paths';
3
+ interface CommandLineOptions {
4
+ buildFile: AbsolutePath;
5
+ watchDirs: string[];
6
+ tasks: string[];
7
+ props: Record<string, string>;
8
+ listOnly: boolean;
9
+ }
10
+ /** Parse `perocess.argv` and return our normalised command line options */
11
+ export declare function parseCommandLine(args: string[]): CommandLineOptions;
12
+ export {};
package/dist/cli.mjs ADDED
@@ -0,0 +1,266 @@
1
+ #!/usr/bin/env node
2
+
3
+ // cli.mts
4
+ import _fs from "node:fs";
5
+ import { main, yargsParser } from "@plugjs/tsrun";
6
+ import { BuildFailure } from "./asserts.mjs";
7
+ import { invokeTasks, isBuild } from "./build.mjs";
8
+ import { $blu, $gry, $p, $red, $t, $und, $wht } from "./logging/colors.mjs";
9
+ import { getCurrentWorkingDirectory, resolveDirectory, resolveFile, resolveAbsolutePath } from "./paths.mjs";
10
+ var $bnd = (s) => $blu($und(s));
11
+ var $gnd = (s) => $gry($und(s));
12
+ var $wnd = (s) => $wht($und(s));
13
+ var version = true ? "0.4.1" : "0.0.0-dev";
14
+ function help() {
15
+ console.log(`${$bnd("Usage:")}
16
+
17
+ ${$wht("plugjs")} ${$gry("[")}--options${$gry("] [... ")}prop=val${$gry(" ...] [... ")}task${$gry(" ...]")}
18
+
19
+ ${$bnd("Options:")}
20
+
21
+ ${$wht(`-f --file ${$gnd("file")}`)} Specify the build file to use (default ${$wnd("./build.ts")})
22
+ ${$wht(`-w --watch ${$gnd("dir")}`)} Watch for changes on the specified directory and run
23
+ ${$wht("-v --verbose")} Increase logging verbosity
24
+ ${$wht("-q --quiet")} Decrease logging verbosity
25
+ ${$wht("-c --colors")} Force colorful output (use ${$wnd("--no-colors")} to force plain text)
26
+ ${$wht("-l --list")} Only list the tasks defined by the build, nothing more!
27
+ ${$wht("-h --help")} Help! You're reading it now!
28
+ ${$wht(" --version")} Version! This one: ${version}!
29
+
30
+ ${$bnd("Properties:")}
31
+
32
+ Any argument in the format ${$wnd("key=value")} will be interpeted as a property to
33
+ be injected in the build process (e.g. ${$wnd("mode=production")}).
34
+
35
+ ${$bnd("Tasks:")}
36
+
37
+ Any other argument will be treated as a task name. If no task names are
38
+ specified, the ${$t("default")} task will be executed.
39
+
40
+ ${$bnd("Watch Mode:")}
41
+
42
+ The ${$wnd("--watch")} option can be specified multiple times, and each single
43
+ directory specified will be watched for changes. Note that Plug's own
44
+ watch mode is incredibly basic, for more complex scenarios use something
45
+ more advanced like nodemon ${$gry("(")}${$gnd("https://www.npmjs.com/package/nodemon")}${$gry(")")}.
46
+
47
+ ${$bnd("TypeScript module format:")}
48
+
49
+ Normally our TypeScript loader will transpile ${$wnd(".ts")} files to the type
50
+ specified in ${$wnd("package.json")}, either ${$wnd("commonjs")} (the default) or ${$wnd("module")}.
51
+
52
+ To force a specific module format use one of the following flags:
53
+
54
+ ${$wht("--force-esm")} Force transpilation of ${$wnd(".ts")} files to EcmaScript modules
55
+ ${$wht("--force-cjs")} Force transpilation of ${$wnd(".ts")} files to CommonJS modules
56
+ `);
57
+ }
58
+ function parseCommandLine(args) {
59
+ const parsed = yargsParser(args, {
60
+ configuration: {
61
+ "camel-case-expansion": false,
62
+ "strip-aliased": true,
63
+ "strip-dashed": true
64
+ },
65
+ alias: {
66
+ "verbose": ["v"],
67
+ "quiet": ["q"],
68
+ "colors": ["c"],
69
+ "file": ["f"],
70
+ "list": ["l"],
71
+ "watch": ["w"],
72
+ "help": ["h"]
73
+ },
74
+ string: ["file", "watch"],
75
+ boolean: ["help", "colors", "list", "force-esm", "force-cjs", "version"],
76
+ count: ["verbose", "quiet"]
77
+ });
78
+ const tasks = [];
79
+ const props = {};
80
+ const watchDirs = [];
81
+ let verbosity = 0;
82
+ let colors = void 0;
83
+ let file = void 0;
84
+ let listOnly = false;
85
+ for (const [key, value] of Object.entries(parsed)) {
86
+ switch (key) {
87
+ case "_":
88
+ value.forEach((current) => {
89
+ const [key2, val] = current.split(/=(.*)/, 2);
90
+ if (key2 && val)
91
+ props[key2] = val;
92
+ else
93
+ tasks.push(current);
94
+ });
95
+ break;
96
+ case "verbose":
97
+ verbosity = verbosity + value;
98
+ break;
99
+ case "quiet":
100
+ verbosity = verbosity - value;
101
+ break;
102
+ case "file":
103
+ file = value;
104
+ break;
105
+ case "watch":
106
+ if (Array.isArray(value))
107
+ watchDirs.push(...value);
108
+ else if (value)
109
+ watchDirs.push(value);
110
+ break;
111
+ case "colors":
112
+ colors = !!value;
113
+ break;
114
+ case "list":
115
+ listOnly = !!value;
116
+ break;
117
+ case "help":
118
+ help();
119
+ process.exit(0);
120
+ break;
121
+ case "version":
122
+ console.log(`PlugJS ${$gry("ver.")} ${$wnd(version)}`);
123
+ process.exit(0);
124
+ break;
125
+ default:
126
+ console.log(`Unsupported option ${$wnd(key)} (try ${$wnd("--help")})`);
127
+ process.exit(1);
128
+ }
129
+ }
130
+ if (colors !== void 0)
131
+ process.env.LOG_COLORS = `${colors}`;
132
+ if (verbosity) {
133
+ const levels = ["TRACE", "DEBUG", "INFO", "NOTICE", "WARN", "ERROR", "OFF"];
134
+ let level = levels.indexOf("NOTICE") - verbosity;
135
+ if (level >= levels.length)
136
+ level = levels.length - 1;
137
+ else if (level < 0)
138
+ level = 0;
139
+ process.env.LOG_LEVEL = levels[level];
140
+ }
141
+ const cwd = getCurrentWorkingDirectory();
142
+ const exts = ["ts", "mts", "mjs", "js", "mjs", "cjs"];
143
+ let buildFile = void 0;
144
+ if (file) {
145
+ const absolute = resolveFile(cwd, file);
146
+ if (!absolute) {
147
+ console.log(`Specified build file "${file}" was not found`);
148
+ process.exit(1);
149
+ } else {
150
+ buildFile = absolute;
151
+ }
152
+ } else {
153
+ for (const ext of exts) {
154
+ const absolute = resolveFile(cwd, `build.${ext}`);
155
+ if (!absolute)
156
+ continue;
157
+ buildFile = absolute;
158
+ break;
159
+ }
160
+ }
161
+ if (!buildFile) {
162
+ console.log(`${$red("Unable to find build file")} ${$wht(`./build.[${exts.join("|")}]`)}`);
163
+ process.exit(1);
164
+ }
165
+ watchDirs.forEach((watchDir) => {
166
+ const absolute = resolveDirectory(cwd, watchDir);
167
+ if (!absolute) {
168
+ const path = resolveAbsolutePath(cwd, watchDir);
169
+ console.log(`Specified watch directory "${$p(path)}" was not found`);
170
+ process.exit(1);
171
+ } else {
172
+ watchDir = absolute;
173
+ }
174
+ });
175
+ return { buildFile, watchDirs, tasks, props, listOnly };
176
+ }
177
+ main(import.meta.url, async (args) => {
178
+ const {
179
+ buildFile,
180
+ watchDirs,
181
+ tasks,
182
+ props,
183
+ listOnly
184
+ } = parseCommandLine(args);
185
+ if (tasks.length === 0)
186
+ tasks.push("default");
187
+ let maybeBuild = await import(buildFile);
188
+ while (maybeBuild) {
189
+ if (isBuild(maybeBuild))
190
+ break;
191
+ maybeBuild = maybeBuild.default;
192
+ }
193
+ if (!isBuild(maybeBuild)) {
194
+ console.log($red("Build file did not export a proper build"));
195
+ console.log();
196
+ console.log('- If using CommonJS export your build as "module.exports"');
197
+ console.log(` e.g.: ${$wht("module.exports = build({ ... })")}`);
198
+ console.log();
199
+ console.log('- If using ESM modules export your build as "default"');
200
+ console.log(` e.g.: ${$wht("export default build({ ... })")}`);
201
+ console.log();
202
+ process.exit(1);
203
+ }
204
+ const build = maybeBuild;
205
+ if (listOnly) {
206
+ const taskNames = [];
207
+ const propNames = [];
208
+ for (const [key, value] of Object.entries(build)) {
209
+ (typeof value === "string" ? propNames : taskNames).push(key);
210
+ }
211
+ console.log(`
212
+ ${$gry("Outline of")} ${$p(buildFile)}`);
213
+ console.log("\nKnown tasks:\n");
214
+ for (const taskName of taskNames.sort()) {
215
+ console.log(` ${$gry("\u25A0")} ${$t(taskName)}`);
216
+ }
217
+ console.log("\nKnown properties:\n");
218
+ for (const propName of propNames.sort()) {
219
+ const value = build[propName] ? ` ${$gry("(default")} ${$und(build[propName])}${$gry(")")}` : "";
220
+ console.log(` ${$gry("\u25A1")} ${$blu(propName)}${value}`);
221
+ }
222
+ console.log();
223
+ return;
224
+ }
225
+ if (watchDirs.length) {
226
+ return new Promise((_, reject) => {
227
+ let timeout = void 0;
228
+ const runme = () => {
229
+ invokeTasks(build, tasks, props).then(() => {
230
+ console.log(`
231
+ ${$gry("Watching for files change...")}
232
+ `);
233
+ }, (error) => {
234
+ if (error instanceof BuildFailure) {
235
+ console.log(`
236
+ ${$gry("Watching for files change...")}
237
+ `);
238
+ } else {
239
+ watchers.forEach((watcher) => watcher.close());
240
+ reject(error);
241
+ }
242
+ }).finally(() => {
243
+ timeout = void 0;
244
+ });
245
+ };
246
+ const watchers = watchDirs.map((watchDir) => {
247
+ return _fs.watch(watchDir, { recursive: true }, () => {
248
+ if (!timeout)
249
+ timeout = setTimeout(runme, 250);
250
+ });
251
+ });
252
+ runme();
253
+ });
254
+ }
255
+ try {
256
+ await invokeTasks(build, tasks, props);
257
+ } catch (error) {
258
+ if (!(error instanceof BuildFailure))
259
+ console.log(error);
260
+ process.exitCode = 1;
261
+ }
262
+ });
263
+ export {
264
+ parseCommandLine
265
+ };
266
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli.mts"],
4
+ "mappings": "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",
5
+ "names": ["key"]
6
+ }
package/dist/files.cjs CHANGED
@@ -23,6 +23,7 @@ __export(files_exports, {
23
23
  Files: () => Files
24
24
  });
25
25
  module.exports = __toCommonJS(files_exports);
26
+ var import_node_util = require("node:util");
26
27
  var import_asserts = require("./asserts.cjs");
27
28
  var import_fs = require("./fs.cjs");
28
29
  var import_paths = require("./paths.cjs");
@@ -34,10 +35,9 @@ var Files = class {
34
35
  * relative to the specified {@link Run}'s directory.
35
36
  */
36
37
  constructor(directory) {
37
- this._directory = directory;
38
+ this._directory = directory || (0, import_paths.getCurrentWorkingDirectory)();
38
39
  this._files = [];
39
- const inspect = Symbol.for("nodejs.util.inspect.custom");
40
- Object.defineProperty(this, inspect, { value: () => ({
40
+ Object.defineProperty(this, import_node_util.inspect.custom, { value: () => ({
41
41
  directory: this._directory,
42
42
  files: [...this._files]
43
43
  }) });
@@ -66,6 +66,8 @@ var Files = class {
66
66
  yield [file, (0, import_paths.resolveAbsolutePath)(this._directory, file)];
67
67
  }
68
68
  static builder(arg) {
69
+ if (!arg)
70
+ arg = (0, import_paths.getCurrentWorkingDirectory)();
69
71
  const directory = typeof arg === "string" ? arg : arg.directory;
70
72
  const set = typeof arg === "string" ? /* @__PURE__ */ new Set() : new Set(arg._files);
71
73
  const instance = new Files(directory);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/files.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAuB;AACvB,gBAAiC;AACjC,mBAAgF;AA8BzE,IAAM,QAAN,MAAY;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,YAAY,WAAyB;AACnC,SAAK,aAAa;AAClB,SAAK,SAAS,CAAC;AAGf,UAAM,UAAU,OAAO,IAAI,4BAA4B;AACvD,WAAO,eAAe,MAAM,SAAS,EAAE,OAAO,OAAO;AAAA,MACnD,WAAW,KAAK;AAAA,MAChB,OAAO,CAAE,GAAG,KAAK,MAAO;AAAA,IAC1B,GAAG,CAAC;AAAA,EACN;AAAA;AAAA,EAGA,IAAI,YAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,SAAiB;AACnB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA,EAGA,EAAG,OAAO,QAAQ,IAAuB;AACvC,eAAW,QAAQ,KAAK;AAAQ,YAAM;AAAA,EACxC;AAAA;AAAA,EAGA,CAAE,gBAAyC;AACzC,eAAW,QAAQ;AAAM,gBAAM,kCAAoB,KAAK,YAAY,IAAI;AAAA,EAC1E;AAAA;AAAA,EAGA,CAAE,eAAwE;AACxE,eAAW,QAAQ;AAAM,YAAM,CAAE,UAAM,kCAAoB,KAAK,YAAY,IAAI,CAAE;AAAA,EACpF;AAAA,EAKA,OAAO,QAAQ,KAAyC;AACtD,UAAM,YAAY,OAAO,QAAQ,WAAW,MAAM,IAAI;AACtD,UAAM,MAAM,OAAO,QAAQ,WAAW,oBAAI,IAAY,IAAI,IAAI,IAAI,IAAI,MAAM;AAE5E,UAAM,WAAW,IAAI,MAAM,SAAS;AACpC,QAAI,QAAQ;AAEZ,WAAO;AAAA,MACL,WAAW,SAAS;AAAA,MAEpB,OAAO,OAA+B;AACpC,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,mBAAW,QAAQ,OAAO;AACxB,gBAAM,eAAW,sCAAwB,SAAS,WAAW,IAAI;AACjE,cAAI,IAAI,QAAQ;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,MAA6B;AACpC,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,mBAAW,SAAS,MAAM;AACxB,qBAAW,QAAQ,MAAM,cAAc,GAAG;AACxC,iBAAK,IAAI,IAAI;AAAA,UACf;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,MAAM,MAAc,SAAqD;AAC7E,cAAM,eAAW,sCAAwB,SAAS,WAAW,IAAI;AACjE,cAAM,eAAW,kCAAoB,SAAS,WAAW,QAAQ;AACjE,cAAMA,iBAAY,gCAAkB,QAAQ;AAE5C,kBAAM,iBAAMA,YAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,kBAAM,qBAAU,UAAU,OAAO;AACjC,aAAK,IAAI,QAAQ;AAEjB,eAAO;AAAA,MACT;AAAA,MAEA,QAAe;AACb,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,gBAAQ;AACR,iBAAS,OAAO,KAAK,GAAG,GAAG;AAC3B,iBAAS,OAAO,KAAK;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAwB;AAExB,qBAAuB;AACvB,gBAAiC;AACjC,mBAKO;AA8BA,IAAM,QAAN,MAAY;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,YAAY,WAA0B;AACpC,SAAK,aAAa,iBAAa,yCAA2B;AAC1D,SAAK,SAAS,CAAC;AAGf,WAAO,eAAe,MAAM,yBAAQ,QAAQ,EAAE,OAAO,OAAO;AAAA,MAC1D,WAAW,KAAK;AAAA,MAChB,OAAO,CAAE,GAAG,KAAK,MAAO;AAAA,IAC1B,GAAG,CAAC;AAAA,EACN;AAAA;AAAA,EAGA,IAAI,YAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,SAAiB;AACnB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA,EAGA,EAAG,OAAO,QAAQ,IAAuB;AACvC,eAAW,QAAQ,KAAK;AAAQ,YAAM;AAAA,EACxC;AAAA;AAAA,EAGA,CAAE,gBAAyC;AACzC,eAAW,QAAQ;AAAM,gBAAM,kCAAoB,KAAK,YAAY,IAAI;AAAA,EAC1E;AAAA;AAAA,EAGA,CAAE,eAAwE;AACxE,eAAW,QAAQ;AAAM,YAAM,CAAE,UAAM,kCAAoB,KAAK,YAAY,IAAI,CAAE;AAAA,EACpF;AAAA,EAMA,OAAO,QAAQ,KAA0C;AACvD,QAAI,CAAE;AAAK,gBAAM,yCAA2B;AAC5C,UAAM,YAAY,OAAO,QAAQ,WAAW,MAAM,IAAI;AACtD,UAAM,MAAM,OAAO,QAAQ,WAAW,oBAAI,IAAY,IAAI,IAAI,IAAI,IAAI,MAAM;AAE5E,UAAM,WAAW,IAAI,MAAM,SAAS;AACpC,QAAI,QAAQ;AAEZ,WAAO;AAAA,MACL,WAAW,SAAS;AAAA,MAEpB,OAAO,OAA+B;AACpC,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,mBAAW,QAAQ,OAAO;AACxB,gBAAM,eAAW,sCAAwB,SAAS,WAAW,IAAI;AACjE,cAAI,IAAI,QAAQ;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,MAA6B;AACpC,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,mBAAW,SAAS,MAAM;AACxB,qBAAW,QAAQ,MAAM,cAAc,GAAG;AACxC,iBAAK,IAAI,IAAI;AAAA,UACf;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,MAAM,MAAc,SAAqD;AAC7E,cAAM,eAAW,sCAAwB,SAAS,WAAW,IAAI;AACjE,cAAM,eAAW,kCAAoB,SAAS,WAAW,QAAQ;AACjE,cAAMA,iBAAY,gCAAkB,QAAQ;AAE5C,kBAAM,iBAAMA,YAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,kBAAM,qBAAU,UAAU,OAAO;AACjC,aAAK,IAAI,QAAQ;AAEjB,eAAO;AAAA,MACT;AAAA,MAEA,QAAe;AACb,mCAAO,CAAE,OAAO,sCAAsC;AAEtD,gBAAQ;AACR,iBAAS,OAAO,KAAK,GAAG,GAAG;AAC3B,iBAAS,OAAO,KAAK;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;",
5
5
  "names": ["directory"]
6
6
  }
package/dist/files.d.ts CHANGED
@@ -27,7 +27,7 @@ export declare class Files {
27
27
  * Create a new {@link Files} instance rooted in the specified `directory`
28
28
  * relative to the specified {@link Run}'s directory.
29
29
  */
30
- constructor(directory: AbsolutePath);
30
+ constructor(directory?: AbsolutePath);
31
31
  /** Return the _directory_ where this {@link Files} is rooted */
32
32
  get directory(): AbsolutePath;
33
33
  /** Return the number of files tracked by this instance. */
@@ -39,6 +39,7 @@ export declare class Files {
39
39
  /** Return an iterator over all _relative_ to _absolute_ mappings */
40
40
  pathMappings(): Generator<[relative: string, absolute: AbsolutePath]>;
41
41
  /** Create a new {@link FilesBuilder} creating {@link Files} instances. */
42
+ static builder(): FilesBuilder;
42
43
  static builder(files: Files): FilesBuilder;
43
44
  static builder(directory: AbsolutePath): FilesBuilder;
44
45
  }