@haltcase/run 2.0.1 → 3.0.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 (52) hide show
  1. package/dist/cli/bin.js +0 -1
  2. package/dist/cli/handler.js +5 -7
  3. package/dist/cli/main.js +5 -1
  4. package/dist/cli/parseOptions.js +0 -1
  5. package/dist/config.js +0 -1
  6. package/dist/index.js +0 -1
  7. package/dist/tasks/executeTask.js +2 -4
  8. package/dist/tasks/guards.d.ts +1 -1
  9. package/dist/tasks/guards.js +0 -1
  10. package/dist/tasks/task.d.ts +11 -4
  11. package/dist/tasks/task.js +33 -27
  12. package/dist/tasks/types.d.ts +9 -16
  13. package/dist/tasks/types.js +0 -1
  14. package/dist/tsconfig.build.tsbuildinfo +1 -1
  15. package/dist/util/getSchemaProperties.d.ts +2 -2
  16. package/dist/util/getSchemaProperties.js +30 -9
  17. package/dist/util/loadTaskFile.js +0 -1
  18. package/dist/util/resolveTaskFile.d.ts +1 -1
  19. package/dist/util/resolveTaskFile.js +0 -1
  20. package/dist/util/result.d.ts +5 -5
  21. package/dist/util/result.js +0 -1
  22. package/package.json +76 -78
  23. package/readme.md +63 -31
  24. package/dist/cli/bin.js.map +0 -1
  25. package/dist/cli/handler.js.map +0 -1
  26. package/dist/cli/handler.test.d.ts +0 -1
  27. package/dist/cli/handler.test.js +0 -23
  28. package/dist/cli/handler.test.js.map +0 -1
  29. package/dist/cli/main.js.map +0 -1
  30. package/dist/cli/parseOptions.js.map +0 -1
  31. package/dist/cli/parseOptions.test.d.ts +0 -1
  32. package/dist/cli/parseOptions.test.js +0 -43
  33. package/dist/cli/parseOptions.test.js.map +0 -1
  34. package/dist/config.js.map +0 -1
  35. package/dist/index.js.map +0 -1
  36. package/dist/tasks/executeTask.js.map +0 -1
  37. package/dist/tasks/guards.js.map +0 -1
  38. package/dist/tasks/task.js.map +0 -1
  39. package/dist/tasks/task.test.d.ts +0 -1
  40. package/dist/tasks/task.test.js +0 -124
  41. package/dist/tasks/task.test.js.map +0 -1
  42. package/dist/tasks/types.js.map +0 -1
  43. package/dist/util/getSchemaProperties.js.map +0 -1
  44. package/dist/util/getSchemaProperties.test.d.ts +0 -1
  45. package/dist/util/getSchemaProperties.test.js +0 -16
  46. package/dist/util/getSchemaProperties.test.js.map +0 -1
  47. package/dist/util/loadTaskFile.js.map +0 -1
  48. package/dist/util/resolveTaskFile.js.map +0 -1
  49. package/dist/util/result.js.map +0 -1
  50. package/dist/util/types.d.ts +0 -4
  51. package/dist/util/types.js +0 -2
  52. package/dist/util/types.js.map +0 -1
package/package.json CHANGED
@@ -1,79 +1,77 @@
1
1
  {
2
- "name": "@haltcase/run",
3
- "version": "2.0.1",
4
- "description": "Flexible, function-based task runner where command line options are props",
5
- "keywords": [
6
- "task",
7
- "runner",
8
- "command",
9
- "function",
10
- "typescript",
11
- "execa",
12
- "zod"
13
- ],
14
- "homepage": "https://github.com/haltcase/run#readme",
15
- "bugs": "https://github.com/haltcase/run/issues",
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/haltcase/run.git"
19
- },
20
- "license": "MIT",
21
- "author": "Bo Lingen <bo@haltcase.dev> (https://haltcase.dev)",
22
- "type": "module",
23
- "exports": {
24
- ".": "./dist/index.js"
25
- },
26
- "main": "./dist/index.js",
27
- "types": "./dist/index.d.ts",
28
- "bin": {
29
- "hr": "./dist/cli/bin.js"
30
- },
31
- "files": [
32
- "dist"
33
- ],
34
- "scripts": {
35
- "build": "tsc -p tsconfig.build.json",
36
- "build:watch": "tsc -p tsconfig.build.json --watch",
37
- "eslint:check": "eslint src",
38
- "format": "eslint --fix src && prettier src --write",
39
- "prepack": "pnpm run build",
40
- "prepare": "husky",
41
- "prettier:check": "prettier --check src",
42
- "test": "vitest",
43
- "typescript:check": "tsc --noEmit && echo \"No errors reported by tsc.\""
44
- },
45
- "lint-staged": {
46
- "*.{js,jsx,ts,tsx,css,yml,yaml}": "pnpm prettier --write"
47
- },
48
- "prettier": "@haltcase/style/prettier",
49
- "dependencies": {
50
- "@favware/colorette-spinner": "^1.0.1",
51
- "@isaacs/cliui": "^8.0.2",
52
- "c12": "^2.0.1",
53
- "colorette": "^2.0.20",
54
- "execa": "^9.5.1",
55
- "zod": "^3.23.8",
56
- "zod-validation-error": "^3.4.0"
57
- },
58
- "devDependencies": {
59
- "@haltcase/style": "^6.2.1",
60
- "@types/node": "^22.8.6",
61
- "eslint": "^8.57.1",
62
- "husky": "^9.1.6",
63
- "lint-staged": "^15.2.10",
64
- "prettier": "^3.3.3",
65
- "typescript": "^5.6.3",
66
- "vitest": "^2.1.4"
67
- },
68
- "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee",
69
- "engines": {
70
- "node": ">=20"
71
- },
72
- "publishConfig": {
73
- "access": "public"
74
- },
75
- "haltcase.run": {
76
- "taskDirectory": "./scripts",
77
- "quiet": true
78
- }
79
- }
2
+ "name": "@haltcase/run",
3
+ "version": "3.0.1",
4
+ "description": "Flexible, function-based task runner where command line options are props",
5
+ "keywords": [
6
+ "task",
7
+ "runner",
8
+ "command",
9
+ "function",
10
+ "typescript",
11
+ "execa",
12
+ "arktype"
13
+ ],
14
+ "homepage": "https://github.com/haltcase/run#readme",
15
+ "bugs": "https://github.com/haltcase/run/issues",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/haltcase/run.git"
19
+ },
20
+ "license": "MIT",
21
+ "author": "Bo Lingen <bo@haltcase.dev> (https://haltcase.dev)",
22
+ "type": "module",
23
+ "exports": {
24
+ ".": "./dist/index.js"
25
+ },
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "bin": {
29
+ "hr": "./dist/cli/bin.js"
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "lint-staged": {
35
+ "*.{js,jsx,ts,tsx,css,yml,yaml}": "pnpm prettier --write"
36
+ },
37
+ "prettier": "@haltcase/style/prettier",
38
+ "dependencies": {
39
+ "@favware/colorette-spinner": "^1.0.1",
40
+ "arktype": "^2.1.17",
41
+ "c12": "^3.0.3",
42
+ "cliui": "^9.0.1",
43
+ "colorette": "^2.0.20",
44
+ "execa": "^9.5.1"
45
+ },
46
+ "devDependencies": {
47
+ "@haltcase/style": "^7.3.1",
48
+ "@types/node": "^22.8.6",
49
+ "eslint": "^9.24.0",
50
+ "husky": "^9.1.7",
51
+ "lint-staged": "^15.5.1",
52
+ "prettier": "^3.5.3",
53
+ "tsx": "^4.19.3",
54
+ "typescript": "^5.8.3",
55
+ "vitest": "^3.1.1"
56
+ },
57
+ "engines": {
58
+ "node": ">=20"
59
+ },
60
+ "publishConfig": {
61
+ "access": "public"
62
+ },
63
+ "haltcase.run": {
64
+ "taskDirectory": "./scripts",
65
+ "quiet": true
66
+ },
67
+ "scripts": {
68
+ "build": "tsc -p tsconfig.build.json",
69
+ "build:watch": "tsc -p tsconfig.build.json --watch",
70
+ "eslint:check": "eslint src",
71
+ "format": "eslint --fix src && prettier src --write",
72
+ "hr": "tsx ./src/cli/bin.ts",
73
+ "prettier:check": "prettier --check src",
74
+ "test": "vitest",
75
+ "typescript:check": "tsc --noEmit && echo \"No errors reported by tsc.\""
76
+ }
77
+ }
package/readme.md CHANGED
@@ -7,7 +7,7 @@
7
7
  - ✅ Write task files in TypeScript or plain JavaScript
8
8
  - ✅ [Execa] built in for shell command execution
9
9
  - ✅ Tasks are "just functions" exported from your script files
10
- - ✅ [Zod] schema support for stricter task execution
10
+ - ✅ Integrated [Arktype] schema support for stricter task execution
11
11
 
12
12
  ## Quick start
13
13
 
@@ -213,11 +213,13 @@ export const build = async ({ mode }, { $ }) => {
213
213
 
214
214
  See [API](#api) for full API details.
215
215
 
216
- ### Task option validation using Zod schemas
216
+ ### Task option validation using Arktype schemas
217
217
 
218
- Using [`task.strict`](#taskstrict), you can supply a [Zod] schema to move validations out of
219
- your task's logic. If you transform the input, your task function's TypeScript
220
- types will infer the output type.
218
+ Using `task.strict`, you can define an [Arktype] schema to move
219
+ validations out of your task's logic. If you transform the input (via [Morphs]),
220
+ your task function's TypeScript types will infer the output type of the morph and your task will receive the updated type.
221
+
222
+ See [`task.strict`](#taskstrict) for more.
221
223
 
222
224
  ## Configuration
223
225
 
@@ -290,11 +292,12 @@ pnpm hr greetings hello --name
290
292
 
291
293
  If you want to pass a boolean value for an option, pass `true`/`false` and
292
294
  parse it yourself or use [`task.strict`](#taskstrict), for example using the
293
- Zod schema: `z.string().transform(value => value === "true")`.
295
+ Arktype schema: `type("string").pipe((value) => value === "true")`.
294
296
 
295
297
  ### `task`
296
298
 
297
- `task` is a very light wrapper around a function that provides improved type inference.
299
+ `task` is a very light wrapper around a function that provides improved type
300
+ inference.
298
301
 
299
302
  ```ts
300
303
  task<TOptions>(fn: Task<T>): BrandedTask<T>
@@ -326,7 +329,7 @@ export const customOptions = task<CustomOptions>((options) => {
326
329
  > Because all command line arguments are strings, you should only use `string`
327
330
  > as the value type for options with this method. If you want to be stricter
328
331
  > about value types by validating or transforming them, implement the parsing
329
- > yourself or use [`task.strict`](#taskstrict) with a Zod schema.
332
+ > yourself or use [`task.strict`](#taskstrict) with an [Arktype] schema.
330
333
 
331
334
  ### `Task`
332
335
 
@@ -344,20 +347,19 @@ line options and a [`utilities`](#taskutilities) object providing tools for shel
344
347
 
345
348
  Properties:
346
349
 
347
- - `$` &ndash; Runa command using Execa's [script mode][execascript].
350
+ - `$` &ndash; Run a command using Execa's [script mode][execascript].
348
351
  - `command` &ndash; Run a command using [Execa] (e.g., shell command or script).
349
352
  - `exec` &ndash; Same as `command`, but inherits the parent process' stdio streams by default.
350
353
 
351
354
  ### `task.strict`
352
355
 
353
- Provide the shape for a Zod schema as the first argument and a task function as
354
- the second. The task function will receive the safely parsed and validated
355
- output of the Zod schema, and its types will be inferred automatically.
356
-
357
- Note that you supply a plain object for the shape rather than a full Zod schema.
356
+ Provide the shape for an [Arktype] schema as the first argument and a task
357
+ function as the second. The task function will receive the safely parsed and
358
+ validated output of the Arktype schema, and its types will be inferred
359
+ automatically.
358
360
 
359
361
  ```ts
360
- task.strict<TShape, TSchema?>(shape: TShape, fn: Task<z.infer<TSchema>>): BrandedTaskStrict<z.infer<TSchema>>
362
+ task.strict<TShape, TSchema?>(shape: TShape, fn: Task<TShape>): BrandedTaskStrict<TShape>
361
363
  ```
362
364
 
363
365
  Usage:
@@ -366,16 +368,18 @@ Usage:
366
368
  // scripts/strict-tasks.ts
367
369
 
368
370
  import { task } from "@haltcase/run";
369
- import { z } from "zod";
370
371
 
371
372
  export const printCharacter = task.strict(
372
373
  {
373
- // positional/unnamed arguments
374
- _: z.array(z.string()),
375
- // environment variables
376
- env: z.object({}).passthrough(),
377
- name: z.string(),
378
- armorClass: z.coerce.number()
374
+ // positional/unnamed arguments (default type, can be omitted)
375
+ _: "string[]",
376
+ // environment variables (default type, can be omitted)
377
+ env: "Record<string, string | undefined>",
378
+
379
+ // a simple type
380
+ name: "string",
381
+ // an input → output morph (transform string to number)
382
+ armorClass: "string.numeric.parse"
379
383
  },
380
384
  async ({ name, armorClass }) => {
381
385
  console.log(`🎲 ${name}\n🛡️ ${armorClass}`);
@@ -391,15 +395,16 @@ reference to Node's `process.env`. For instance:
391
395
  // scripts/extra.ts
392
396
 
393
397
  import { task } from "@haltcase/run";
394
- import { z } from "zod";
398
+ import { type } from "arktype";
395
399
 
396
400
  export const fun = task.strict(
397
401
  {
398
- _: z.array(z.string()).transform((values) => values.length),
399
- // note: `z.object` strips unspecified keys by default
400
- env: z.object({
401
- SECRET_KEY: z.string().min(8)
402
- })
402
+ _: type("string[]").pipe((values) => values.length),
403
+ env: {
404
+ // Arktype undeclared property handling (default is "ignore", aka passthrough)
405
+ "+": "delete",
406
+ SECRET_KEY: "string >= 8"
407
+ }
403
408
  },
404
409
  async ({ _, env }) => {
405
410
  console.log(`Positionals count (_) = ${_}`);
@@ -410,16 +415,43 @@ export const fun = task.strict(
410
415
 
411
416
  ```shell
412
417
  pnpm hr extra fun because there are more words
413
- # 5
414
- # → undefined
418
+ # Error: Environment variable 'SECRET_KEY': must be a string (was missing)
415
419
 
416
420
  SECRET_KEY=abcdefgh pnpm hr extra fun because there are more words
417
421
  # → 5
418
422
  # → abcdefgh
419
423
  ```
420
424
 
425
+ If you already have an Arktype type, you can pass it to `task.strict`:
426
+
427
+ ```ts
428
+ // scripts/extra.ts
429
+
430
+ import { task } from "@haltcase/run";
431
+ import { type } from "arktype";
432
+
433
+ const inputSchema = type({
434
+ _: type("string[]").pipe((values) => values.length),
435
+ env: {
436
+ // undeclared property handling (default is "ignore", aka passthrough)
437
+ "+": "delete",
438
+ SECRET_KEY: "string >= 8"
439
+ }
440
+ });
441
+
442
+ export const fun = task.strict(inputSchema, async ({ _, env }) => {
443
+ console.log(`Positionals count (_) = ${_}`);
444
+ console.log(`SECRET_KEY = ${env.SECRET_KEY}`);
445
+
446
+ // using "delete" for undeclared keys strips other properties:
447
+ console.log(Object.keys(env));
448
+ // ["SECRET_KEY"]
449
+ });
450
+ ```
451
+
421
452
  [execa]: https://github.com/sindresorhus/execa#readme
422
453
  [execascript]: https://github.com/sindresorhus/execa/blob/main/docs/scripts.md
423
- [zod]: https://zodjs.netlify.app/
454
+ [arktype]: https://arktype.io/
455
+ [morphs]: https://arktype.io/docs/intro/morphs-and-more
424
456
  [nodeparseargs]: https://nodejs.org/api/util.html#utilparseargsconfig
425
457
  [c12]: https://github.com/unjs/c12?tab=readme-ov-file#-features
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,KAAK,IAAI,CAAC;IACT,OAAO;CACP,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/cli/handler.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,23 +0,0 @@
1
- import { expect, test, vi } from "vitest";
2
- import { createHandler } from "./handler.js";
3
- const handler = createHandler();
4
- const stdoutSpy = vi.spyOn(globalThis.process.stdout, "write");
5
- const stderrSpy = vi.spyOn(globalThis.process.stderr, "write");
6
- const exitSpy = vi.spyOn(globalThis.process, "exit");
7
- test("handler: writes to stdout", () => {
8
- const stdout = stdoutSpy.mockImplementationOnce(() => true);
9
- const message = "Success";
10
- handler.write(message);
11
- expect(stdout).toHaveBeenCalledWith(`${message}\n`);
12
- });
13
- test("handler: writes to stderr and exits", () => {
14
- const stderr = stderrSpy.mockImplementationOnce(() => true);
15
- // @ts-expect-error we can't actually return never
16
- const exit = exitSpy.mockImplementationOnce(() => {
17
- // nothing
18
- });
19
- handler.failWith("Error message");
20
- expect(stderr).toHaveBeenCalled();
21
- expect(exit).toHaveBeenCalled();
22
- });
23
- //# sourceMappingURL=handler.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../../src/cli/handler.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAErD,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5D,kDAAkD;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG,EAAE;QAChD,UAAU;IACX,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElC,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAClC,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;AACjC,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBjD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,KAAgB,EAAE,EAAE;IAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IAExC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,CAAC,KAAK,CAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM;SACN,CAAC,CACF,CAAC;QAEF,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG;QACf,GAAG,KAAK;QACR,MAAM;QACN,QAAQ,EAAE;YACT,GAAG,KAAK,CAAC,YAAY,CAAC;YACtB,IAAI,EAAE,YAAY;SAClB;QACD,QAAQ;KACc,CAAC;IAExB,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACtB,4CAA4C,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG;YACpE,kEAAkE;YAClE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7C,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,eAAe,GAAG;QACvB,GAAG,OAAO;QACV,QAAQ,EAAE;YACT,GAAG,OAAO,CAAC,QAAQ;YACnB,IAAI,EAAE,cAAc,CAAC,KAAK;SAC1B;KAC6B,CAAC;IAEhC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,IAAI,EAAE,SAAS;aACf,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;AACF,CAAC,CAAC"}
@@ -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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { parseOptions } from "./parseOptions.js";
3
- test("parseOptions: parses options as key/value and returns positionals", () => {
4
- expect(parseOptions([
5
- "--file",
6
- "readme.md",
7
- "--dryRun",
8
- "true",
9
- "you",
10
- "spin",
11
- "me",
12
- "right",
13
- "round"
14
- ])).toStrictEqual({
15
- _: ["you", "spin", "me", "right", "round"],
16
- file: "readme.md",
17
- dryRun: "true"
18
- });
19
- });
20
- test("parseOptions: expects all options to have values", () => {
21
- expect(() => parseOptions(["--name"])).toThrow("Expected option --name to be followed by a value");
22
- });
23
- test("parseOptions: returns everything after terminator as positionals", () => {
24
- expect(parseOptions(["--color", "blue", "--", "--name", "-aBcDeF"]))
25
- .toMatchInlineSnapshot(`
26
- {
27
- "_": [
28
- "--name",
29
- "-aBcDeF",
30
- ],
31
- "color": "blue",
32
- }
33
- `);
34
- });
35
- test("parseOptions: use of reserved option names throws error", () => {
36
- expect(() => {
37
- parseOptions(["--env", "development"]);
38
- }).toThrow("Reserved name 'env' cannot be used as option");
39
- expect(() => {
40
- parseOptions(["--_", "development"]);
41
- }).toThrow("Reserved name '_' cannot be used as option");
42
- });
43
- //# sourceMappingURL=parseOptions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseOptions.test.js","sourceRoot":"","sources":["../../src/cli/parseOptions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;IAC9E,MAAM,CACL,YAAY,CAAC;QACZ,QAAQ;QACR,WAAW;QACX,UAAU;QACV,MAAM;QACN,KAAK;QACL,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACP,CAAC,CACF,CAAC,aAAa,CAAC;QACf,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;QAC1C,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,MAAM;KACd,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAC7C,kDAAkD,CAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC7E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;SAClE,qBAAqB,CAAC;;;;;;;;EAQvB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACpE,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAE3D,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC"}
@@ -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.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 +0,0 @@
1
- {"version":3,"file":"executeTask.js","sourceRoot":"","sources":["../../src/tasks/executeTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,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,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;SACnE,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"}
@@ -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,CAAC,IAAU,EAA6B,EAAE,CAC5E,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tasks/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAYpD,MAAM,iBAAiB,GAAmB,CAAC,MAAM,EAAE,EAAE,CACpD,MAAM;KACJ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACd,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,KAAK,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,UAAU,GACf,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;IAE5D,0DAA0D;IAC1D,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/C,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,IAAI,CAAC,MAAM,GAAG,CAMb,KAAa,EACb,EAA0B,EACG,EAAE;IAC/B,MAAM,iBAAiB,GAAG;QACzB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QACrB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;KAC/B,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,GAAG,iBAAiB;QACpB,GAAI,KAAyB;KAC7B,CAAC,CAAC;IAEH,MAAM,YAAY,GAA+B,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QACvE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,YAAY,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAClE;gBACC,KAAK,EAAE,KAAK;aACZ,CACD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC,IAAwB,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC;IACjC,YAAY,CAAC,MAAM,GAAG,MAA4B,CAAC;IAEnD,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,124 +0,0 @@
1
- import { red } from "colorette";
2
- import { expect, test } from "vitest";
3
- import { z } from "zod";
4
- import { taskUtilities } from "./executeTask.js";
5
- import { task } from "./task.js";
6
- test("task: returns a branded wrapper of the given function", () => {
7
- const fn = task(() => "ok");
8
- expect(fn.kind).toBe("task");
9
- expect(fn({ _: [], env: {} }, taskUtilities)).toBe("ok");
10
- });
11
- test("task: receives positional arguments as `_` property", () => {
12
- const fn = task(({ _ }) => {
13
- expect(_.join(".")).toBe("1.2.3");
14
- });
15
- fn({ _: ["1", "2", "3"], env: {}, irrelevant: "string" }, taskUtilities);
16
- });
17
- test("task: receives `env` property", () => {
18
- const fn = task(({ env }) => {
19
- expect(env).toMatchObject({
20
- PWD: "/home/sources",
21
- SHELL: "/bin/bash"
22
- });
23
- });
24
- fn({
25
- _: ["1", "2", "3"],
26
- env: {
27
- PWD: "/home/sources",
28
- SHELL: "/bin/bash"
29
- }
30
- }, taskUtilities);
31
- });
32
- test("task.strict: returns a branded wrapper of the given function", () => {
33
- const fn = task.strict({}, () => "ok");
34
- expect(fn.kind).toBe("strictTask");
35
- });
36
- test("task.strict: validates positionals with the given schema", () => {
37
- const fn = task.strict({
38
- _: z.array(z.string()).min(1).max(3)
39
- }, () => "ok");
40
- expect(() => fn({ _: ["1", "2"], env: {} }, taskUtilities)).not.toThrow();
41
- expect(fn({ _: ["1", "2"], env: {} }, taskUtilities)).toBe("ok");
42
- expect(() => {
43
- fn({ _: [], env: {} }, taskUtilities);
44
- }).toThrow("at least 1 element(s)");
45
- expect(() => {
46
- fn({ _: ["1", "2", "3", "4"], env: {} }, taskUtilities);
47
- }).toThrow("at most 3 element(s)");
48
- });
49
- test("task.strict: validates environment variables with the given schema", () => {
50
- const fn = task.strict({
51
- env: z.object({
52
- SOME_FLAG: z
53
- .string()
54
- .transform((value) => value.toLowerCase() === "true")
55
- })
56
- }, () => "ok");
57
- expect(fn({ _: ["1"], env: { SOME_FLAG: "true" } }, taskUtilities)).toBe("ok");
58
- expect(() => {
59
- fn({
60
- _: ["1"],
61
- // @ts-expect-error env.SOME_FLAG is required
62
- env: {}
63
- }, taskUtilities);
64
- }).toThrow(`${red("Environment variable 'SOME_FLAG'")}: Required`);
65
- });
66
- test("task.strict: validates options with the given schema", () => {
67
- const fn = task.strict({
68
- startDate: z.string().date(),
69
- logLevel: z.number().positive().default(6)
70
- }, ({ logLevel }) => logLevel);
71
- expect(fn({ _: [], env: {}, startDate: "2532-10-10", logLevel: 1 }, taskUtilities)).toBe(1);
72
- expect(fn({ _: [], env: {}, startDate: "2532-10-10" }, taskUtilities)).toBe(6);
73
- expect(() => {
74
- fn(
75
- // @ts-expect-error --startDate is required
76
- {
77
- _: [],
78
- env: {}
79
- }, taskUtilities);
80
- }).toThrow(`${red("--startDate")}: Required`);
81
- expect(() => {
82
- fn({
83
- _: [],
84
- env: {},
85
- startDate: "2532-10-10",
86
- logLevel: -1
87
- }, taskUtilities);
88
- }).toThrow(`${red("--logLevel")}: Number must be greater than 0`);
89
- });
90
- test("task.strict: exposes the given schema", () => {
91
- const fn = task.strict({
92
- startDate: z.string().date(),
93
- logLevel: z.number().positive().default(6)
94
- }, ({ logLevel }) => logLevel);
95
- expect(fn.schema.safeParse({
96
- _: [],
97
- env: {},
98
- startDate: "2532-10-10"
99
- }).data).toMatchObject({
100
- _: [],
101
- env: {},
102
- startDate: "2532-10-10",
103
- logLevel: 6
104
- });
105
- expect(fn.schema.safeParse({
106
- _: [],
107
- env: {},
108
- startDate: "2532-10-10",
109
- logLevel: 5
110
- }).data?.logLevel).toBe(5);
111
- expect(fn.schema.safeParse({
112
- _: [],
113
- env: {},
114
- startDate: "2532-10-10"
115
- }).data?.logLevel).toBe(6);
116
- expect(() => {
117
- fn.schema.parse({
118
- _: [],
119
- env: {},
120
- startDate: "not a date string"
121
- });
122
- }).toThrow();
123
- });
124
- //# sourceMappingURL=task.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../src/tasks/task.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tasks/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getSchemaProperties.js","sourceRoot":"","sources":["../../src/util/getSchemaProperties.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAoB,EAAU,EAAE;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAc,CAAC;IAEzC,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACxE,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAkC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/D,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,GAAG,GAAG,CAAC;QACnB,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- import { expect, test } from "vitest";
2
- import { z } from "zod";
3
- import { getSchemaProperties } from "./getSchemaProperties.js";
4
- test("getSchemaProperties: lists properties of the given zod schema", () => {
5
- expect(getSchemaProperties(z.object({}))).toBe("");
6
- expect(getSchemaProperties(z.object({
7
- optionName: z.string()
8
- }))).toBe("{ optionName }");
9
- });
10
- test("getSchemaProperties: wraps optional parameter names with []", () => {
11
- expect(getSchemaProperties(z.object({
12
- optionName: z.string(),
13
- maybeFlag: z.boolean().optional()
14
- }))).toBe("{ optionName, [maybeFlag] }");
15
- });
16
- //# sourceMappingURL=getSchemaProperties.test.js.map