presetter 4.5.0 → 4.7.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.
Files changed (68) hide show
  1. package/lib/content.d.ts +77 -0
  2. package/lib/content.d.ts.map +1 -1
  3. package/lib/content.js +126 -1
  4. package/lib/directive.d.ts +23 -0
  5. package/lib/directive.d.ts.map +1 -1
  6. package/lib/directive.js +85 -1
  7. package/lib/error.d.ts +6 -0
  8. package/lib/error.d.ts.map +1 -1
  9. package/lib/error.js +21 -1
  10. package/lib/executable/entry.d.ts +5 -0
  11. package/lib/executable/entry.d.ts.map +1 -1
  12. package/lib/executable/entry.js +24 -1
  13. package/lib/executable/error.d.ts +4 -0
  14. package/lib/executable/error.d.ts.map +1 -1
  15. package/lib/executable/error.js +23 -1
  16. package/lib/executable/index.js +16 -1
  17. package/lib/index.js +16 -1
  18. package/lib/io.d.ts +39 -0
  19. package/lib/io.d.ts.map +1 -1
  20. package/lib/io.js +96 -11
  21. package/lib/package.d.ts +22 -0
  22. package/lib/package.d.ts.map +1 -1
  23. package/lib/package.js +53 -3
  24. package/lib/preset/content.d.ts +7 -0
  25. package/lib/preset/content.d.ts.map +1 -1
  26. package/lib/preset/content.js +20 -1
  27. package/lib/preset/context.d.ts +4 -0
  28. package/lib/preset/context.d.ts.map +1 -1
  29. package/lib/preset/context.js +19 -1
  30. package/lib/preset/graph.d.ts +17 -0
  31. package/lib/preset/graph.d.ts.map +1 -1
  32. package/lib/preset/graph.js +34 -1
  33. package/lib/preset/index.js +25 -1
  34. package/lib/preset/mapping.d.ts +6 -0
  35. package/lib/preset/mapping.d.ts.map +1 -1
  36. package/lib/preset/mapping.js +25 -2
  37. package/lib/preset/presetterRC.d.ts +19 -0
  38. package/lib/preset/presetterRC.d.ts.map +1 -1
  39. package/lib/preset/presetterRC.js +37 -1
  40. package/lib/preset/scripts.d.ts +4 -0
  41. package/lib/preset/scripts.d.ts.map +1 -1
  42. package/lib/preset/scripts.js +19 -1
  43. package/lib/preset/setup.d.ts +10 -0
  44. package/lib/preset/setup.d.ts.map +1 -1
  45. package/lib/preset/setup.js +38 -1
  46. package/lib/preset/unset.d.ts +3 -0
  47. package/lib/preset/unset.d.ts.map +1 -1
  48. package/lib/preset/unset.js +18 -1
  49. package/lib/resolution.d.ts +17 -0
  50. package/lib/resolution.d.ts.map +1 -1
  51. package/lib/resolution.js +33 -1
  52. package/lib/run.d.ts +7 -0
  53. package/lib/run.d.ts.map +1 -1
  54. package/lib/run.js +77 -1
  55. package/lib/scripts.d.ts +12 -0
  56. package/lib/scripts.d.ts.map +1 -1
  57. package/lib/scripts.js +50 -1
  58. package/lib/task.d.ts +18 -0
  59. package/lib/task.d.ts.map +1 -1
  60. package/lib/task.js +40 -2
  61. package/lib/template.d.ts +47 -0
  62. package/lib/template.d.ts.map +1 -1
  63. package/lib/template.js +96 -2
  64. package/lib/utilities/index.js +16 -1
  65. package/lib/utilities/mapValues.d.ts +6 -0
  66. package/lib/utilities/mapValues.d.ts.map +1 -1
  67. package/lib/utilities/mapValues.js +21 -1
  68. package/package.json +3 -3
package/lib/resolution.js CHANGED
@@ -1,13 +1,39 @@
1
+ /*
2
+ * *** MIT LICENSE ***
3
+ * -------------------------------------------------------------------------
4
+ * This code may be modified and distributed under the MIT license.
5
+ * See the LICENSE file for details.
6
+ * -------------------------------------------------------------------------
7
+ *
8
+ * @summary Collection of helpers for resolving content
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2022 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
1
15
  import { existsSync } from 'node:fs';
2
16
  import { basename, extname } from 'node:path';
3
17
  import { loadFile } from './io.js';
18
+ /**
19
+ * compute the corresponding field within the config field of .presetterrc
20
+ * @param filename link name
21
+ * @returns field name in config
22
+ */
4
23
  export function getConfigKey(filename) {
5
24
  return basename(filename, extname(filename))
6
25
  .replace(/^\./, '')
7
26
  .replace(/rc$/, '')
8
27
  .replace(/\.config$/, '');
9
28
  }
29
+ /**
30
+ * resolve a dynamic asset content
31
+ * @param map a dynamic map to be resolved
32
+ * @param context arguments to be passed to the generator function
33
+ * @returns content of the resolved field
34
+ */
10
35
  export async function loadDynamicMap(map, context) {
36
+ // load templated configuration from presets
11
37
  return Object.fromEntries(await Promise.all(Object.entries(map instanceof Function
12
38
  ? await map(context)
13
39
  : { ...map }).map(async ([relativePath, value]) => [
@@ -15,6 +41,12 @@ export async function loadDynamicMap(map, context) {
15
41
  await loadDynamic(value, context),
16
42
  ])));
17
43
  }
44
+ /**
45
+ * load a potentially dynamic content
46
+ * @param value content to be loaded
47
+ * @param context context to be supplied to the generator
48
+ * @returns resolved content
49
+ */
18
50
  export async function loadDynamic(value, context) {
19
51
  if (typeof value === 'function') {
20
52
  return value(context);
@@ -26,4 +58,4 @@ export async function loadDynamic(value, context) {
26
58
  return value;
27
59
  }
28
60
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWtCaEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFnQjtJQUMzQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVFELE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxHQUFtQixFQUNuQixPQUFxRDtJQUdyRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQUcsWUFBWSxRQUFRO1FBQ3JCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFnQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQ2YsQ0FBQyxHQUFHLENBQ0gsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUEwQixFQUFFLENBQUM7UUFDdkQsWUFBWTtRQUNaLE1BQU0sV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFnQyxDQUFDO0tBQzNELENBQ0YsQ0FDRixDQUNGLENBQUM7QUFDSixDQUFDO0FBUUQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBSS9CLEtBR21CLEVBQ25CLE9BQWlDO0lBRWpDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBTSxDQUFDO0tBQzdCO1NBQU07UUFDTCxPQUFPLEtBQVUsQ0FBQztLQUNuQjtBQUNILENBQUMifQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFhaEM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBZ0I7SUFDM0MsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUNsQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztTQUNsQixPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxHQUFtQixFQUNuQixPQUFxRDtJQUVyRCw0Q0FBNEM7SUFDNUMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFHLFlBQVksUUFBUTtRQUNyQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBZ0MsQ0FBQztRQUM3QyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUNmLENBQUMsR0FBRyxDQUNILEtBQUssRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBMEIsRUFBRSxDQUFDO1FBQ3ZELFlBQVk7UUFDWixNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBZ0MsQ0FBQztLQUMzRCxDQUNGLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBSS9CLEtBR21CLEVBQ25CLE9BQWlDO0lBRWpDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBTSxDQUFDO0tBQzdCO1NBQU07UUFDTCxPQUFPLEtBQVUsQ0FBQztLQUNuQjtBQUNILENBQUMifQ==
package/lib/run.d.ts CHANGED
@@ -1,4 +1,11 @@
1
1
  import type { Task } from './task.js';
2
+ /**
3
+ * run a task defined in the combined script definitions.
4
+ * @param tasks array of objects containing the selector and args for the task
5
+ * @param options collection of options
6
+ * @param options.parallel whether to run tasks concurrently
7
+ * @param options.templateOnly whether to resolve the task from the template only
8
+ */
2
9
  export declare function run(tasks: Task[], options?: {
3
10
  parallel?: boolean;
4
11
  templateOnly?: boolean;
package/lib/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../source/run.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuJnC,wBAAsB,GAAG,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../source/run.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAgJnC;;;;;;GAMG;AACH,wBAAsB,GAAG,CACvB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
package/lib/run.js CHANGED
@@ -1,3 +1,17 @@
1
+ /*
2
+ * *** MIT LICENSE ***
3
+ * -------------------------------------------------------------------------
4
+ * This code may be modified and distributed under the MIT license.
5
+ * See the LICENSE file for details.
6
+ * -------------------------------------------------------------------------
7
+ *
8
+ * @summary Run a task
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2019 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
1
15
  import { dirname } from 'node:path';
2
16
  import npmRunScript from '@npmcli/run-script';
3
17
  import { Listr } from 'listr2';
@@ -6,31 +20,57 @@ import { getPackage } from './package.js';
6
20
  import { getScripts } from './preset/index.js';
7
21
  import { composeScripts } from './scripts.js';
8
22
  import { parseGlobalArgs, parseTaskSpec, selectTasks } from './task.js';
23
+ /**
24
+ * create an array of Listr tasks based on the provided inputs
25
+ * @param _ collection of arguments
26
+ * @param _.composed composed script object containing script definitions
27
+ * @param _.template template object containing script definitions
28
+ * @param _.pkg detail of package.json
29
+ * @param _.task task name
30
+ * @param _.args array of arguments
31
+ * @returns array of Listr tasks
32
+ */
9
33
  function createListrTask(_) {
10
34
  const { composed, template, task, args, pkg } = _;
11
35
  return {
12
36
  title: `Running ${task}...`,
13
37
  task: async (_, taskControl) => {
14
38
  const command = composed[task];
39
+ // parse the command and extract the executable and task specifications
15
40
  const argv = parse(command, {
41
+ // eslint-disable-next-line @typescript-eslint/naming-convention
16
42
  configuration: { 'populate--': true, 'unknown-options-as-args': true },
17
43
  });
18
44
  const [executable, ...taskSpecs] = argv._.map((arg) => arg.toString());
45
+ // check if the executable is 'run-s' or 'run-p'
19
46
  if (['run-s', 'run-p'].includes(executable)) {
20
47
  const globalArgs = [...parseGlobalArgs(argv), ...args];
48
+ // get subtasks based on the task specifications and global arguments
21
49
  const subTasks = taskSpecs.flatMap((taskSpec) => getListrTasksBySpec({ template, pkg, taskSpec, globalArgs }));
22
50
  const concurrent = executable === 'run-p';
23
51
  return taskControl.newListr(subTasks, { concurrent });
24
52
  }
25
53
  else {
54
+ // run the npm script with the provided arguments and package information
26
55
  return runWithNPM({ task, args, pkg, composedScript: composed });
27
56
  }
28
57
  },
29
58
  };
30
59
  }
60
+ /**
61
+ * get Listr tasks based on the task specification and global arguments
62
+ * @param _ collection of arguments
63
+ * @param _.template template object containing script definitions
64
+ * @param _.pkg detail of package.json
65
+ * @param _.taskSpec task specification string
66
+ * @param _.globalArgs array of global arguments
67
+ * @returns array of Listr tasks
68
+ */
31
69
  function getListrTasksBySpec(_) {
32
70
  const { template, pkg, taskSpec, globalArgs } = _;
71
+ // parse the task specification and remove any quotes
33
72
  const task = parseTaskSpec(taskSpec.toString().replace(/^(['"])([^]*?)\1$/, '$2'), globalArgs);
73
+ // get Listr tasks based on the provided inputs
34
74
  return getListrTasks({
35
75
  template,
36
76
  pkg,
@@ -38,15 +78,38 @@ function getListrTasksBySpec(_) {
38
78
  args: task.args,
39
79
  });
40
80
  }
81
+ /**
82
+ * create an array of Listr tasks based on the provided inputs
83
+ * @param _ collection of arguments
84
+ * @param _.template template object containing script definitions
85
+ * @param _.pkg detail of package.json
86
+ * @param _.selector task selector string
87
+ * @param _.args array of arguments
88
+ * @returns array of Listr tasks
89
+ */
41
90
  function getListrTasks(_) {
42
91
  const { template, pkg, selector, args } = _;
92
+ // clone the content for immutability
43
93
  const target = { ...pkg.json.scripts };
94
+ // compose the script using the provided template and target
44
95
  const composed = composeScripts({ template, target });
96
+ // select tasks based on the composed script and selector
45
97
  const tasks = selectTasks(Object.keys(composed), selector);
98
+ // create Listr tasks based on the selected tasks
46
99
  return tasks.map((task) => createListrTask({ composed, template, pkg, task, args }));
47
100
  }
101
+ /**
102
+ * run a task defined in the combined script definitions using npm-run-script
103
+ * @param _ collection of arguments
104
+ * @param _.task task name
105
+ * @param _.args array of arguments
106
+ * @param _.pkg detail of package.json
107
+ * @param _.composedScript combined script definitions
108
+ * @returns a promise that will be resolved when the task is completed
109
+ */
48
110
  async function runWithNPM(_) {
49
111
  const { task, args, pkg, composedScript } = _;
112
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
50
113
  return npmRunScript({
51
114
  event: task,
52
115
  args,
@@ -55,19 +118,32 @@ async function runWithNPM(_) {
55
118
  stdio: 'inherit',
56
119
  });
57
120
  }
121
+ /**
122
+ * run a task defined in the combined script definitions.
123
+ * @param tasks array of objects containing the selector and args for the task
124
+ * @param options collection of options
125
+ * @param options.parallel whether to run tasks concurrently
126
+ * @param options.templateOnly whether to resolve the task from the template only
127
+ */
58
128
  export async function run(tasks, options) {
59
129
  const { parallel = false, templateOnly = false } = { ...options };
130
+ // find the target project's package.json information
60
131
  const pkg = await getPackage();
61
132
  if (templateOnly) {
133
+ // remove all scripts from the package.json
62
134
  pkg.json.scripts = {};
63
135
  }
136
+ // get the merged script definitions
64
137
  const template = await getScripts();
138
+ // get Listr tasks based on the provided tasks and package information
65
139
  const listTasks = tasks.flatMap((task) => getListrTasks({ template, pkg, ...task }));
140
+ // create a Listr instance with the list of tasks and configuration options
66
141
  const listr = new Listr(listTasks, {
67
142
  concurrent: parallel,
68
143
  exitOnError: true,
69
144
  renderer: 'simple',
70
145
  });
146
+ // run the Listr tasks
71
147
  try {
72
148
  await listr.run();
73
149
  }
@@ -75,4 +151,4 @@ export async function run(tasks, options) {
75
151
  process.exit(1);
76
152
  }
77
153
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0IsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWlCckUsU0FBUyxlQUFlLENBQUMsQ0FNeEI7SUFDQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRCxPQUFPO1FBQ0wsS0FBSyxFQUFFLFdBQVcsSUFBSSxLQUFLO1FBQzNCLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUcvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUUxQixhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRTthQUN2RSxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcs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
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9CLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFPckU7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxlQUFlLENBQUMsQ0FNeEI7SUFDQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRCxPQUFPO1FBQ0wsS0FBSyxFQUFFLFdBQVcsSUFBSSxLQUFLO1FBQzNCLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUvQix1RUFBdUU7WUFDdkUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsZ0VBQWdFO2dCQUNoRSxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRTthQUN2RSxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFD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
package/lib/scripts.d.ts CHANGED
@@ -1,8 +1,20 @@
1
+ /** pseudo type for representing the name of a script */
1
2
  type ScriptName = string;
3
+ /** pseudo type for representing the command */
2
4
  type Command = string;
5
+ /** collection of scripts */
3
6
  export type Script = Record<ScriptName, Command>;
7
+ /**
8
+ * merge the script definitions from the template and the target package.json
9
+ * @param args template and customized scripts to be merged
10
+ * @param args.template scripts defined from the template
11
+ * @param args.target scripts defined from target's package.json
12
+ * @returns a dictionary of merged definitions
13
+ */
4
14
  export declare function composeScripts(args: {
15
+ /** scripts defined from the template */
5
16
  template: Script;
17
+ /** scripts defined from target's package.json */
6
18
  target: Script;
7
19
  }): Script;
8
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../source/scripts.ts"],"names":[],"mappings":"AAyBA,KAAK,UAAU,GAAG,MAAM,CAAC;AAGzB,KAAK,OAAO,GAAG,MAAM,CAAC;AAGtB,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAyBjD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAEnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CA4BT"}
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../source/scripts.ts"],"names":[],"mappings":"AAwBA,wDAAwD;AACxD,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,+CAA+C;AAC/C,KAAK,OAAO,GAAG,MAAM,CAAC;AAEtB,4BAA4B;AAC5B,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAkBjD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CA4BT"}
package/lib/scripts.js CHANGED
@@ -1,20 +1,47 @@
1
+ /*
2
+ * *** MIT LICENSE ***
3
+ * -------------------------------------------------------------------------
4
+ * This code may be modified and distributed under the MIT license.
5
+ * See the LICENSE file for details.
6
+ * -------------------------------------------------------------------------
7
+ *
8
+ * @summary Handle script merging
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2019 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
1
15
  import { basename } from 'node:path';
2
16
  import mvdan from 'mvdan-sh';
3
17
  import parse from 'yargs-parser';
4
18
  import { mapValues } from './utilities/index.js';
5
19
  const { syntax } = mvdan;
20
+ // shell command parser
6
21
  const parser = syntax.NewParser();
22
+ // shell command generator
7
23
  const printer = syntax.NewPrinter();
24
+ /**
25
+ * merge the script definitions from the template and the target package.json
26
+ * @param args template and customized scripts to be merged
27
+ * @param args.template scripts defined from the template
28
+ * @param args.target scripts defined from target's package.json
29
+ * @returns a dictionary of merged definitions
30
+ */
8
31
  export function composeScripts(args) {
9
32
  const { template, target } = args;
10
33
  return mapValues({ ...template, ...target }, (command) => {
11
34
  try {
35
+ // parse the shell command into its ast
12
36
  const ast = parser.Parse(command);
37
+ // walk through the tree and replace any call to the runner e.g. preset task1 task2 -- --help
13
38
  syntax.Walk(ast, (node) => replaceRunnerNode(node, { template, target }));
39
+ // remove any unnecessary subshell
14
40
  const [statement] = ast.Stmts;
15
41
  if (isNodeType(statement.Cmd, 'Subshell')) {
16
42
  statement.Cmd = statement.Cmd.Stmts[0].Cmd;
17
43
  }
44
+ // generate the code from ast
18
45
  return printer.Print(ast).trim();
19
46
  }
20
47
  catch (error) {
@@ -22,6 +49,7 @@ export function composeScripts(args) {
22
49
  throw error;
23
50
  }
24
51
  else {
52
+ // parser.Parse may throw an empty object as an error, catch here
25
53
  throw new Error(`failed to parse command: ${command}`);
26
54
  }
27
55
  }
@@ -30,12 +58,21 @@ export function composeScripts(args) {
30
58
  function isNodeType(node, type) {
31
59
  return syntax.NodeType(node) === type;
32
60
  }
61
+ /**
62
+ * resolve a runner command
63
+ * @param command the command to be replaced
64
+ * @param context resource context
65
+ * @returns the resolved command
66
+ */
33
67
  function resolveRunner(command, context) {
34
68
  const arg = parse(command, {
69
+ // eslint-disable-next-line @typescript-eslint/naming-convention
35
70
  configuration: { 'populate--': true, 'unknown-options-as-args': true },
36
71
  });
72
+ // extract tasks and their arguments
37
73
  const destinations = arg['_'].slice(1);
38
74
  const destinationArgs = arg['--'] ?? [];
75
+ // resolve tasks into its full form e.g. task1 task2
39
76
  return destinations
40
77
  .map((destination) => {
41
78
  const expandedCommand = context.template[destination] ||
@@ -49,15 +86,27 @@ function resolveRunner(command, context) {
49
86
  })
50
87
  .join(' && ');
51
88
  }
89
+ /**
90
+ * replace a runner node with the actual command
91
+ * @param node an expression node
92
+ * @param context resource context
93
+ * @returns boolean true for no error
94
+ */
52
95
  function replaceRunnerNode(node, context) {
96
+ // replace only it's a runner call, not anything else
53
97
  if (isNodeType(node, 'Stmt') && isNodeType(node.Cmd, 'CallExpr')) {
98
+ // parse assigned arguments e.g. task1 args --help
54
99
  const parts = node.Cmd.Args.map((part) => part.Lit());
100
+ // only resolve if the `run` cli shipped in this package is invoke
55
101
  if (parts.length && basename(parts[0]) === 'run') {
102
+ // resolve tasks into its full form e.g. task1 task2
56
103
  const resolvedCommand = resolveRunner(parts.join(' '), context);
104
+ // replace the task definition with its expanded statement
57
105
  node.Cmd = parser.Parse(`(${resolvedCommand})`).Stmts[0].Cmd;
106
+ // recursively replace any runner call in the expanded statement
58
107
  replaceRunnerNode(node.Cmd, context);
59
108
  }
60
109
  }
61
110
  return true;
62
111
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9zY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYXhDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFHekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBR2xDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQWlCcEMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUs5QjtJQUNDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRWxDLE9BQU8sU0FBUyxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBVSxFQUFFO1FBQy9ELElBQUk7WUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBR2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRzFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzlCLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMs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
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9zY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJDLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFFakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWF4QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBRXpCLHVCQUF1QjtBQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFFbEMsMEJBQTBCO0FBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQVVwQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBSzlCO0lBQ0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFbEMsT0FBTyxTQUFTLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFVLEVBQUU7UUFDL0QsSUFBSTtZQUNGLHVDQUF1QztZQUN2QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxDLDZGQUE2RjtZQUM3RixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUxRSxrQ0FBa0M7WUFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDOUIsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDekMsU0FBUyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7YUFDNUM7WUFFRCw2QkFBNkI7WUFDN0IsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2xDO1FBQUMsT0FBTyxLQUFjLEVBQUU7WUFDdkIsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO2dCQUMxQixNQUFNLEtBQUssQ0FBQzthQUNiO2lCQUFNO2dCQUNMLGlFQUFpRTtnQkFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUN4RDtTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBV0QsU0FBUyxVQUFVLENBQUMsSUFBVSxFQUFFLElBQVk7SUFDMUMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFlLEVBQUUsT0FBc0I7SUFDNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUN6QixnRUFBZ0U7UUFDaEUsYUFBYSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUU7S0FDdkUsQ0FBQyxDQUFDO0lBRUgsb0NBQW9DO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUV4QyxvREFBb0Q7SUFDcEQsT0FBTyxZQUFZO1NBQ2hCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ25CLE1BQU0sZUFBZSxHQUNuQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM3QixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTztnQkFDdEMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVuQyxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLFdBQVcsNEJBQTRCLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDeEU7UUFFRCxPQUFPLENBQUMsZUFBZSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQVUsRUFBRSxPQUFzQjtJQUMzRCxxREFBcUQ7SUFDckQsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2hFLGtEQUFrRDtRQUNsRCxNQUFNLEtBQUssR0FBYSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLGtFQUFrRTtRQUNsRSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUNoRCxvREFBb0Q7WUFDcEQsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFaEUsMERBQTBEO1lBQzFELElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUU3RCxnRUFBZ0U7WUFDaEUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN0QztLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
package/lib/task.d.ts CHANGED
@@ -1,9 +1,27 @@
1
1
  import type { Arguments } from 'yargs-parser';
2
+ /** parsed task object with selector and args */
2
3
  export interface Task {
3
4
  selector: string;
4
5
  args: string[];
5
6
  }
7
+ /**
8
+ * parse global arguments from an argv object
9
+ * @param argv - an arguments object containing the command line arguments
10
+ * @returns an array of cleaned up global arguments as strings
11
+ */
6
12
  export declare function parseGlobalArgs(argv: Arguments): string[];
13
+ /**
14
+ * parse task string and return a parsed task object with selector and args
15
+ * @param spec - the task string to parse
16
+ * @param globalArgs - the global arguments to be added to each task
17
+ * @returns parsed task object with selector and args
18
+ */
7
19
  export declare function parseTaskSpec(spec: string, globalArgs: string[]): Task;
20
+ /**
21
+ * select tasks based on a pattern
22
+ * @param tasks array of available tasks in the format 'task:subtask:subsubtask'
23
+ * @param pattern pattern to match tasks ('*' wildcard for single level and '**' wildcard for multiple levels)
24
+ * @returns array of tasks that match the pattern
25
+ */
8
26
  export declare function selectTasks(tasks: string[], pattern: string): string[];
9
27
  //# sourceMappingURL=task.d.ts.map
package/lib/task.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../source/task.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAWzD;AAQD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBtE;AAQD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBtE"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../source/task.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,gDAAgD;AAChD,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAWzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBtE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBtE"}
package/lib/task.js CHANGED
@@ -1,15 +1,47 @@
1
+ /*
2
+ * *** MIT LICENSE ***
3
+ * -------------------------------------------------------------------------
4
+ * This code may be modified and distributed under the MIT license.
5
+ * See the LICENSE file for details.
6
+ * -------------------------------------------------------------------------
7
+ *
8
+ * @summary Helper functions for parsing task strings
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2019 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
1
15
  import parse from 'yargs-parser';
16
+ /**
17
+ * parse global arguments from an argv object
18
+ * @param argv - an arguments object containing the command line arguments
19
+ * @returns an array of cleaned up global arguments as strings
20
+ */
2
21
  export function parseGlobalArgs(argv) {
22
+ // get the global arguments as an array of strings or numbers, or undefined if not present
3
23
  const globalArgs = argv['--'];
4
- return (globalArgs?.map((arg) => arg.toString().replace(/^(['"])([^]*?)\1$/, '$2')) ?? []);
24
+ // if global arguments are present, map them to strings and clean up the quotes
25
+ return (globalArgs?.map((arg) =>
26
+ // replace the single or double quotes that wrap the argument
27
+ arg.toString().replace(/^(['"])([^]*?)\1$/, '$2')) ?? [] // if no global arguments are present, return an empty array
28
+ );
5
29
  }
30
+ /**
31
+ * parse task string and return a parsed task object with selector and args
32
+ * @param spec - the task string to parse
33
+ * @param globalArgs - the global arguments to be added to each task
34
+ * @returns parsed task object with selector and args
35
+ */
6
36
  export function parseTaskSpec(spec, globalArgs) {
7
37
  const argv = parse(spec, {
38
+ // eslint-disable-next-line @typescript-eslint/naming-convention
8
39
  configuration: { 'populate--': true },
9
40
  });
10
41
  const selector = argv._[0];
11
42
  const args = parseGlobalArgs(argv).reduce((processedArgs, arg) => {
12
43
  if (arg === '{@}') {
44
+ // replace {@} with globalArgs
13
45
  return [...processedArgs, ...globalArgs];
14
46
  }
15
47
  else {
@@ -18,6 +50,12 @@ export function parseTaskSpec(spec, globalArgs) {
18
50
  }, []);
19
51
  return { selector, args };
20
52
  }
53
+ /**
54
+ * select tasks based on a pattern
55
+ * @param tasks array of available tasks in the format 'task:subtask:subsubtask'
56
+ * @param pattern pattern to match tasks ('*' wildcard for single level and '**' wildcard for multiple levels)
57
+ * @returns array of tasks that match the pattern
58
+ */
21
59
  export function selectTasks(tasks, pattern) {
22
60
  const regexPattern = pattern
23
61
  .split(':')
@@ -34,4 +72,4 @@ export function selectTasks(tasks, pattern) {
34
72
  const regex = new RegExp(`^${regexPattern}$`);
35
73
  return tasks.filter((task) => regex.test(task));
36
74
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQWVqQyxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWU7SUFFN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRzlCLE9BQU8sQ0FDTCxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FFdEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FDbEQsSUFBSSxFQUFFLENBQ1IsQ0FBQztBQUNKLENBQUM7QUFRRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVksRUFBRSxVQUFvQjtJQUM5RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBRXZCLGFBQWEsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQy9ELElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtZQUVqQixPQUFPLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsT0FBTyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQyxFQUFFLEVBQWMsQ0FBQyxDQUFDO0lBRW5CLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQVFELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBZSxFQUFFLE9BQWU7SUFDMUQsTUFBTSxZQUFZLEdBQUcsT0FBTztTQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMifQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFVakM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBZTtJQUM3QywwRkFBMEY7SUFDMUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlCLCtFQUErRTtJQUMvRSxPQUFPLENBQ0wsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ3RCLDZEQUE2RDtJQUM3RCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUNsRCxJQUFJLEVBQUUsQ0FBQyw0REFBNEQ7S0FDckUsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWSxFQUFFLFVBQW9CO0lBQzlELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDdkIsZ0VBQWdFO1FBQ2hFLGFBQWEsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQy9ELElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtZQUNqQiw4QkFBOEI7WUFDOUIsT0FBTyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUMsRUFBRSxFQUFjLENBQUMsQ0FBQztJQUVuQixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBZSxFQUFFLE9BQWU7SUFDMUQsTUFBTSxZQUFZLEdBQUcsT0FBTztTQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDaEIsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMifQ==
package/lib/template.d.ts CHANGED
@@ -2,14 +2,61 @@ import type { IgnoreRule, PrimitiveEntity } from 'presetter-types';
2
2
  import type { JsonObject, JsonValue } from 'type-fest';
3
3
  type MergedType<A, B> = A extends JsonObject ? B extends JsonObject ? A & B : MergedArray<A, B> : MergedArray<A, B>;
4
4
  type MergedArray<A, B> = A extends JsonValue[] ? B extends JsonValue[] ? Array<A[number] | B[number]> : keyof B extends `${number}` ? JsonValue[] : B : B;
5
+ /**
6
+ * remove part of the template content according to the given rules
7
+ * @param subject an object to be filtered
8
+ * @param ignores a list of ignore rules
9
+ * @returns filtered content
10
+ */
5
11
  export declare function filter<C extends Record<string, unknown>>(subject: C, ...ignores: IgnoreRule[]): C;
6
12
  export declare function filter(subject: unknown[], ...ignores: IgnoreRule[]): unknown[];
13
+ /**
14
+ * indicate whether the supplied value is a JSON object
15
+ * @param subject the subject to be tested
16
+ * @returns true if the subject is a JSON object
17
+ */
7
18
  export declare function isJSON(subject: unknown): subject is JsonObject;
19
+ /**
20
+ * deep merge an object
21
+ * @param source default object if no additional property is supplied
22
+ * @param target properties to be merged with the default
23
+ * @returns merged object
24
+ */
8
25
  export declare function merge<S extends JsonValue, T extends PrimitiveEntity>(source: S, target?: T): MergedType<S, T>;
26
+ /**
27
+ * merge an array with any value
28
+ * @param source the source array to be merged
29
+ * @param target new replacement
30
+ * @returns merged value
31
+ */
9
32
  export declare function mergeArray<S extends JsonValue, T extends PrimitiveEntity>(source: S[], target?: T): MergedArray<S[], T>;
33
+ /**
34
+ * merge two arrays
35
+ * @param source the source array to be merged
36
+ * @param target new replacement
37
+ * @returns merged array
38
+ */
10
39
  export declare function mergeArrays<S extends JsonValue, T extends JsonValue>(source: S[], target: T[]): MergedArray<S[], T[]>;
40
+ /**
41
+ * merge an object with any value
42
+ * @param source the source object to be merged
43
+ * @param target new replacement
44
+ * @returns merged value
45
+ */
11
46
  export declare function mergeObject<S extends JsonObject, T extends PrimitiveEntity>(source: S, target?: T): MergedType<S, T>;
47
+ /**
48
+ * merge templates
49
+ * @param source current template
50
+ * @param target new template content
51
+ * @returns customized configuration
52
+ */
12
53
  export declare function mergeTemplate(source: Record<string, JsonObject | string>, target: Record<string, JsonObject | string>): Record<string, JsonObject | string>;
54
+ /**
55
+ * replace parameters in the template
56
+ * @param content template content
57
+ * @param parameter variables to be substituted in the template
58
+ * @returns customized configuration
59
+ */
13
60
  export declare function template(content: string, parameter: Record<string, string>): string;
14
61
  export declare function template<Content extends Record<string, unknown> | unknown[]>(content: Content, parameter: Record<string, string>): Content;
15
62
  export declare function template(content: unknown, parameter: Record<string, string>): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../source/template.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAc,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEvD,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,UAAU,GACxC,CAAC,SAAS,UAAU,GAClB,CAAC,GAAG,CAAC,GACL,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtB,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE,GAC1C,CAAC,SAAS,SAAS,EAAE,GACnB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAC5B,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE,GAC3B,SAAS,EAAE,GACX,CAAC,GACH,CAAC,CAAC;AAQN,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,OAAO,EAAE,CAAC,EACV,GAAG,OAAO,EAAE,UAAU,EAAE,GACvB,CAAC,CAAC;AACL,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;AAgEhF,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,UAAU,CAM9D;AAUD,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,eAAe,EAClE,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,CAAC,GACT,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAclB;AAQD,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,eAAe,EACvE,MAAM,EAAE,CAAC,EAAE,EACX,MAAM,CAAC,EAAE,CAAC,GACT,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAmBrB;AAQD,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAClE,MAAM,EAAE,CAAC,EAAE,EACX,MAAM,EAAE,CAAC,EAAE,GACV,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAuBvB;AAQD,wBAAgB,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,eAAe,EACzE,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,CAAC,GACT,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAmBlB;AAQD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,EAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,CAgCrC;AAQD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAAC;AACV,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,EAC1E,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC;AACX,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../source/template.ts"],"names":[],"mappings":"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"}