presetter 4.5.0 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,2 +1,7 @@
1
+ /**
2
+ * provide a command line interface
3
+ * @param args command line arguments
4
+ * @returns the command entered together with its options
5
+ */
1
6
  export declare function entry(args: string[]): Promise<void>;
2
7
  //# sourceMappingURL=entry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../source/executable/entry.ts"],"names":[],"mappings":"AAoIA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzD"}
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../source/executable/entry.ts"],"names":[],"mappings":"AA+HA;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzD"}
@@ -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 Entry point for the command line interface (CLI)
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 { existsSync } from 'node:fs';
2
16
  import yargs from 'yargs';
3
17
  import { bootstrapPreset, setupPreset, unsetPreset } from '../preset/index.js';
@@ -31,6 +45,7 @@ const bootstrapCommand = {
31
45
  .help(),
32
46
  handler: async (argv) => {
33
47
  const { force, only } = argv;
48
+ // only proceed if the specified file exists
34
49
  if (!only || existsSync(only)) {
35
50
  await bootstrapPreset({ force });
36
51
  }
@@ -48,6 +63,7 @@ const runCommand = {
48
63
  .usage('run <task>')
49
64
  .demandCommand(),
50
65
  handler: async (argv) => {
66
+ // get the options
51
67
  const [, selector] = argv._.map((arg) => arg.toString());
52
68
  const args = parseGlobalArgs(argv);
53
69
  await run([{ selector, args }], { templateOnly: argv.template });
@@ -80,9 +96,16 @@ const unsetCommand = {
80
96
  describe: 'remove all artifacts created by the preset',
81
97
  handler: async () => unsetPreset(),
82
98
  };
99
+ /**
100
+ * provide a command line interface
101
+ * @param args command line arguments
102
+ * @returns the command entered together with its options
103
+ */
83
104
  export async function entry(args) {
84
105
  await yargs()
85
106
  .parserConfiguration({
107
+ // make sure flags after end-of-options flag `--` are stored under `--`, not `_`
108
+ // eslint-disable-next-line @typescript-eslint/naming-convention
86
109
  'populate--': true,
87
110
  })
88
111
  .usage('⚙ presetter: your preset configurator')
@@ -96,4 +119,4 @@ export async function entry(args) {
96
119
  .demandCommand()
97
120
  .parse(args);
98
121
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9lbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUl6RCxNQUFNLFVBQVUsR0FBK0Q7SUFDN0UsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixRQUFRLEVBQUUsMkNBQTJDO0lBQ3JELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2pCLEtBQUs7U0FDRixVQUFVLENBQUMsUUFBUSxFQUFFO1FBQ3BCLFFBQVEsRUFBRSxJQUFhO1FBQ3ZCLElBQUksRUFBRSxRQUFRO1FBQ2QsV0FBVyxFQUFFLG1DQUFtQztLQUNqRCxDQUFDO1NBQ0QsSUFBSSxFQUFFO0lBQ1gsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDckQsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBR2xCO0lBQ0YsT0FBTyxFQUFFLFdBQVc7SUFDcEIsUUFBUSxFQUFFLHFEQUFxRDtJQUMvRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixLQUFLO1NBQ0YsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxXQUFXLEVBQUUsMEJBQTBCO0tBQ3hDLENBQUM7U0FDRCxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2QsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsMkNBQTJDO0tBQ3pELENBQUM7U0FDRCxJQUFJLEVBQUU7SUFDWCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRzdCLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLE1BQU0sZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLEdBR1o7SUFDRixPQUFPLEVBQUUsS0FBSztJQUNkLFFBQVEsRUFBRSx1QkFBdUI7SUFDakMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsS0FBSztTQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFdBQVcsRUFBRSw4QkFBOEI7S0FDNUMsQ0FBQztTQUNELEtBQUssQ0FBQyxZQUFZLENBQUM7U0FDbkIsYUFBYSxFQUFFO0lBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFFdEIsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBa0I7SUFDakMsT0FBTyxFQUFFLE9BQU87SUFDaEIsUUFBUSxFQUFFLHlCQUF5QjtJQUNuQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxFQUFFO0lBQy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdEIsTUFBTSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFrQjtJQUNqQyxPQUFPLEVBQUUsT0FBTztJQUNoQixRQUFRLEVBQUUseUJBQXlCO0lBQ25DLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxhQUFhLEVBQUU7SUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN0QixNQUFNLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM3QixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FDM0QsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbkUsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLFlBQVksR0FBa0I7SUFDbEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsUUFBUSxFQUFFLDRDQUE0QztJQUN0RCxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Q0FDbkMsQ0FBQztBQU9GLE1BQU0sQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUFDLElBQWM7SUFDeEMsTUFBTSxLQUFLLEVBQUU7U0FDVixtQkFBbUIsQ0FBQztRQUduQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDO1NBQ0QsS0FBSyxDQUFDLHVDQUF1QyxDQUFDO1NBQzlDLGNBQWMsQ0FBQyxJQUFJLENBQUM7U0FDcEIsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDekIsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ3BCLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUNyQixhQUFhLEVBQUU7U0FDZixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsQ0FBQyJ9
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9lbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJekQsTUFBTSxVQUFVLEdBQStEO0lBQzdFLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsUUFBUSxFQUFFLDJDQUEyQztJQUNyRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixLQUFLO1NBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtRQUNwQixRQUFRLEVBQUUsSUFBYTtRQUN2QixJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRSxtQ0FBbUM7S0FDakQsQ0FBQztTQUNELElBQUksRUFBRTtJQUNYLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3JELENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUdsQjtJQUNGLE9BQU8sRUFBRSxXQUFXO0lBQ3BCLFFBQVEsRUFBRSxxREFBcUQ7SUFDL0QsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsS0FBSztTQUNGLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxLQUFLO1FBQ2QsV0FBVyxFQUFFLDBCQUEwQjtLQUN4QyxDQUFDO1NBQ0Qs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
@@ -1,2 +1,6 @@
1
+ /**
2
+ * print error nicely on console
3
+ * @param error the error to be reported
4
+ */
1
5
  export declare function handleError(error: Error): Promise<void>;
2
6
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../source/executable/error.ts"],"names":[],"mappings":"AA0BA,wBAAsB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7D"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../source/executable/error.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7D"}
@@ -1,14 +1,36 @@
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 Helpers for handling error
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2019 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
15
+ /* istanbul ignore file */
1
16
  import { warn } from 'node:console';
2
17
  import createCallsiteRecord from 'callsite-record';
3
18
  import chalk from 'chalk';
19
+ /**
20
+ * print error nicely on console
21
+ * @param error the error to be reported
22
+ */
4
23
  export async function handleError(error) {
5
24
  if (!process.stdout.isTTY) {
25
+ // don't print formatted error message if the process is not run on TTY
6
26
  warn(error);
7
27
  }
8
28
  else {
29
+ // print the error message
9
30
  const type = chalk.red.bold(`[${error.name}]`);
10
31
  const message = chalk.white.bold(error.message.trim());
11
32
  warn(`${type} ${message}`);
33
+ // print the callsite record
12
34
  const record = createCallsiteRecord({
13
35
  forError: error,
14
36
  });
@@ -18,4 +40,4 @@ export async function handleError(error) {
18
40
  }
19
41
  }
20
42
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwQyxPQUFPLG9CQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQU0xQixNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxLQUFZO0lBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUV6QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDYjtTQUFNO1FBRUwsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHM0IsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUM7WUFDbEMsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvQjtLQUNGO0FBQ0gsQ0FBQyJ9
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsMEJBQTBCO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEMsT0FBTyxvQkFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBWTtJQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDekIsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNiO1NBQU07UUFDTCwwQkFBMEI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFM0IsNEJBQTRCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDO1lBQ2xDLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0I7S0FDRjtBQUNILENBQUMifQ==
@@ -1,5 +1,20 @@
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 A command line interface for presetter
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2019 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
15
+ /* istanbul ignore file */
1
16
  import { entry } from './entry.js';
2
17
  import { handleError } from './error.js';
3
18
  const [, , ...args] = process.argv;
4
19
  entry(args).catch(handleError);
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyJ9
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsMEJBQTBCO0FBRTFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBRW5DLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMifQ==
package/lib/index.js CHANGED
@@ -1,7 +1,22 @@
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 public types
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2020 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
15
+ /* istanbul ignore file */
1
16
  export * from 'presetter-types';
2
17
  export * from './content.js';
3
18
  export * from './directive.js';
4
19
  export * from './io.js';
5
20
  export * from './resolution.js';
6
21
  export * from './template.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLGNBQWMsaUJBQWlCLENBQUM7QUFFaEMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUMifQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILDBCQUEwQjtBQUUxQixjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsTUFBTSxDQUFDO0FBQ3JCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDIn0=
package/lib/io.d.ts CHANGED
@@ -1,11 +1,50 @@
1
1
  import type { Template } from 'presetter-types';
2
+ /** collection of options for file ios */
2
3
  export interface IOOptions {
4
+ /** whether to overwrite existing files */
3
5
  force?: boolean;
4
6
  }
7
+ /**
8
+ * check if a path is either a link or a file with multiple hard links
9
+ * @param path path to be checked
10
+ * @returns true if the path is a link or a file with multiple hard links
11
+ */
12
+ export declare function islink(path: string): boolean;
13
+ /**
14
+ * load the content of a file
15
+ * @param path file path to be loaded
16
+ * @param defaultFormat default format of the file
17
+ * @returns content of the file
18
+ */
5
19
  export declare function loadFile(path: string, defaultFormat?: 'json' | 'yaml'): Record<string, unknown>;
6
20
  export declare function loadFile(path: string, defaultFormat?: 'text'): string;
21
+ /**
22
+ * serialize a configuration content to the right format according to its destination
23
+ * @param destination the path to which the content will be written
24
+ * @param content configuration content
25
+ * @returns serialized content
26
+ */
7
27
  export declare function serializeContent(destination: string, content: Template): string;
28
+ /**
29
+ * write all generated configuration to their destination
30
+ * @param root path to the target project root
31
+ * @param config a map of configuration content and its path to be written
32
+ * @param pathMap a map of keys in the config map and their destination path
33
+ * @param options collection of options
34
+ */
8
35
  export declare function writeFiles(root: string, config: Record<string, Template>, pathMap: Record<string, string>, options?: IOOptions): void;
36
+ /**
37
+ * link generated files to the project root
38
+ * @param root path to the target project root
39
+ * @param configurationLink map of symlinks to its real path
40
+ * @param options collection of options
41
+ */
9
42
  export declare function linkFiles(root: string, configurationLink: Record<string, string>, options?: IOOptions): void;
43
+ /**
44
+ * unlink generated files from the project root
45
+ * @param root path to the target project root
46
+ * @param configurationLink map of symlinks to its real path
47
+ * @param options collection of options
48
+ */
10
49
  export declare function unlinkFiles(root: string, configurationLink: Record<string, string>, options?: IOOptions): void;
11
50
  //# sourceMappingURL=io.d.ts.map
package/lib/io.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../source/io.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,SAAS;IAExB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;AAyBvE,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,QAAQ,GAChB,MAAM,CAaR;AASD,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAsBN;AAQD,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAkBN;AAQD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAeN"}
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../source/io.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ5C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;AAmBvE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,QAAQ,GAChB,MAAM,CAaR;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAsBN;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAoBN;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,OAAO,CAAC,EAAE,SAAS,GAClB,IAAI,CAeN"}
package/lib/io.js CHANGED
@@ -1,10 +1,37 @@
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 io helpers
9
+ *
10
+ * @author Alvis HT Tang <alvis@hilbert.space>
11
+ * @license MIT
12
+ * @copyright Copyright (c) 2020 - All Rights Reserved.
13
+ * -------------------------------------------------------------------------
14
+ */
1
15
  import { info } from 'node:console';
2
- import { lstatSync, mkdirSync, readFileSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync, } from 'node:fs';
16
+ import { linkSync, lstatSync, mkdirSync, readFileSync, readlinkSync, statSync, symlinkSync, unlinkSync, writeFileSync, } from 'node:fs';
3
17
  import { basename, dirname, extname, relative, resolve } from 'node:path';
4
18
  import { dump, load } from 'js-yaml';
19
+ // JSON format
5
20
  const INDENT = 2;
21
+ /**
22
+ * check if a path is either a link or a file with multiple hard links
23
+ * @param path path to be checked
24
+ * @returns true if the path is a link or a file with multiple hard links
25
+ */
26
+ export function islink(path) {
27
+ const pathLinkStat = lstatSync(path, { throwIfNoEntry: false });
28
+ const pathStat = statSync(path, { throwIfNoEntry: false });
29
+ return (!!pathLinkStat?.isSymbolicLink() ||
30
+ (!!pathStat?.nlink && pathStat.nlink > 1));
31
+ }
6
32
  export function loadFile(path, defaultFormat = 'text') {
7
33
  const content = readFileSync(path).toString();
34
+ // parse the content depending on the extension
8
35
  switch (extname(path) || `.${defaultFormat}`) {
9
36
  case '.json':
10
37
  return JSON.parse(content);
@@ -15,6 +42,12 @@ export function loadFile(path, defaultFormat = 'text') {
15
42
  return content;
16
43
  }
17
44
  }
45
+ /**
46
+ * serialize a configuration content to the right format according to its destination
47
+ * @param destination the path to which the content will be written
48
+ * @param content configuration content
49
+ * @returns serialized content
50
+ */
18
51
  export function serializeContent(destination, content) {
19
52
  if (typeof content === 'string') {
20
53
  return content;
@@ -28,12 +61,24 @@ export function serializeContent(destination, content) {
28
61
  return JSON.stringify(content, null, INDENT);
29
62
  }
30
63
  }
64
+ /**
65
+ * write all generated configuration to their destination
66
+ * @param root path to the target project root
67
+ * @param config a map of configuration content and its path to be written
68
+ * @param pathMap a map of keys in the config map and their destination path
69
+ * @param options collection of options
70
+ */
31
71
  export function writeFiles(root, config, pathMap, options) {
32
72
  const { force = false } = { ...options };
33
73
  for (const [key, content] of Object.entries(config)) {
34
74
  const destination = pathMap[key];
35
- if (force ||
75
+ // write content to the destination path
76
+ if (
77
+ // force overwrite
78
+ force ||
79
+ // file don't exist
36
80
  !lstatSync(destination, { throwIfNoEntry: false }) ||
81
+ // content to be written under the configurations folder
37
82
  destination !== resolve(root, key)) {
38
83
  info(`Generating ${key}`);
39
84
  ensureFile(destination, serializeContent(destination, content));
@@ -43,23 +88,39 @@ export function writeFiles(root, config, pathMap, options) {
43
88
  }
44
89
  }
45
90
  }
91
+ /**
92
+ * link generated files to the project root
93
+ * @param root path to the target project root
94
+ * @param configurationLink map of symlinks to its real path
95
+ * @param options collection of options
96
+ */
46
97
  export function linkFiles(root, configurationLink, options) {
47
98
  const { force = false } = { ...options };
48
99
  for (const [file, destination] of Object.entries(configurationLink)) {
49
100
  const path = resolve(root, file);
50
101
  const to = relative(dirname(path), destination);
51
102
  const pathStat = lstatSync(path, { throwIfNoEntry: false });
52
- if (to !== basename(to) &&
53
- (!pathStat || pathStat.isSymbolicLink() || force)) {
103
+ const linkDoesNotExist = !pathStat;
104
+ if (
105
+ // for files that mean to be created directly on the target project root, not via symlink
106
+ to !== basename(to) &&
107
+ // do not replace any user created files unless overwrite is set
108
+ (linkDoesNotExist || islink(path) || force)) {
54
109
  info(`Linking ${relative(root, path)} => ${to}`);
55
110
  ensureLink(path, to);
56
111
  }
57
112
  }
58
113
  }
114
+ /**
115
+ * unlink generated files from the project root
116
+ * @param root path to the target project root
117
+ * @param configurationLink map of symlinks to its real path
118
+ * @param options collection of options
119
+ */
59
120
  export function unlinkFiles(root, configurationLink, options) {
60
121
  const { force = false } = { ...options };
61
122
  for (const [name, destination] of Object.entries(configurationLink)) {
62
- const link = resolveLink(resolve(root, name));
123
+ const link = readLink(resolve(root, name));
63
124
  const to = relative(root, destination);
64
125
  if (link === to || force) {
65
126
  info(`Removing ${name}`);
@@ -69,22 +130,46 @@ export function unlinkFiles(root, configurationLink, options) {
69
130
  info(`Skipping ${name}`);
70
131
  }
71
132
  }
72
- function resolveLink(path) {
133
+ /**
134
+ * resolve a path and follow any symlink
135
+ * @param path path to be resolved
136
+ * @returns the target of the symlink or a resolved path if the path is not a symlink
137
+ */
138
+ function readLink(path) {
73
139
  const pathStat = lstatSync(path, { throwIfNoEntry: false });
74
140
  return pathStat?.isSymbolicLink() ? readlinkSync(path) : null;
75
141
  }
142
+ /**
143
+ * ensure that there is a symlink at the given path pointing to the target
144
+ * @param path path where the symlink should be created
145
+ * @param to target of the symlink
146
+ */
76
147
  function ensureLink(path, to) {
148
+ // create the parent directory if it doesn't exist
77
149
  mkdirSync(dirname(path), { recursive: true });
150
+ // remove any existing files or symlinks
78
151
  if (lstatSync(path, { throwIfNoEntry: false })) {
79
152
  unlinkSync(path);
80
153
  }
81
- symlinkSync(to, path);
154
+ // create a new link pointing to the target
155
+ try {
156
+ // try to create a hardlink
157
+ linkSync(to, path);
158
+ }
159
+ catch {
160
+ // if hard link creation failed (e.g. linking across disc boundary) create a symlink instead
161
+ symlinkSync(to, path);
162
+ }
82
163
  }
164
+ /**
165
+ * ensure that there is a file at the given path with the given content
166
+ * @param path path where the file should be created
167
+ * @param content content of the file
168
+ */
83
169
  function ensureFile(path, content) {
170
+ // ensure that all parent folders exist to avoid errors from writeFile
84
171
  mkdirSync(dirname(path), { recursive: true });
85
- if (lstatSync(path, { throwIfNoEntry: false })) {
86
- unlinkSync(path);
87
- }
172
+ // write content to the destination path
88
173
  writeFileSync(path, content);
89
174
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBV3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQWFqQixNQUFNLFVBQVUsUUFBUSxDQUN0QixJQUFZLEVBQ1osZ0JBQTBDLE1BQU07SUFFaEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRzlDLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLEVBQUU7UUFDNUMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBNEIsQ0FBQztRQUN4RCxLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBNEIsQ0FBQztRQUNsRDtZQUNFLE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQVFELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsV0FBbUIsRUFDbkIsT0FBaUI7SUFFakIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDL0IsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFFRCxRQUFRLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM1QixLQUFLLE9B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
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBVXJDLGNBQWM7QUFDZCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFakI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBWTtJQUNqQyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTNELE9BQU8sQ0FDTCxDQUFDLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRTtRQUNoQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQzFDLENBQUM7QUFDSixDQUFDO0FBYUQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsSUFBWSxFQUNaLGdCQUEwQyxNQUFNO0lBRWhELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU5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
package/lib/package.d.ts CHANGED
@@ -1,10 +1,32 @@
1
1
  import type { PackageJson } from 'type-fest';
2
+ /** package detail */
2
3
  export type Package = {
4
+ /** path to the package.json */
3
5
  path: string;
6
+ /** content of package.json */
4
7
  json: PackageJson;
5
8
  };
9
+ /**
10
+ * indicate whether peer packages would be installed automatically
11
+ * @returns true for npm v7+
12
+ */
6
13
  export declare function arePeerPackagesAutoInstalled(): boolean;
14
+ /**
15
+ * get scripts from the targeted project's package.json
16
+ * @param root path to the project's root folder
17
+ * @returns package detail
18
+ */
7
19
  export declare function getPackage(root?: string): Promise<Package>;
20
+ /**
21
+ * reify packages for the target project
22
+ * @param args list of packages and other options
23
+ * @param args.root directory of the project package.json
24
+ * @param args.add list of packages to be added
25
+ * @param args.remove list of packages to be removed
26
+ * @param args.saveAs type of dependency
27
+ * @param args.lockFile indicate whether package-lock.json should be produced
28
+ * @returns list of installed packages
29
+ */
8
30
  export declare function reifyDependencies(args: {
9
31
  root: string;
10
32
  add?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../source/package.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C,MAAM,MAAM,OAAO,GAAG;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAMF,wBAAgB,4BAA4B,IAAI,OAAO,CAuBtD;AAOD,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAahE;AAYD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA2BjD"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../source/package.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,qBAAqB;AACrB,MAAM,MAAM,OAAO,GAAG;IACpB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAuBtD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAahE;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA2BjD"}
package/lib/package.js CHANGED
@@ -1,22 +1,53 @@
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 Helpers for handling a package
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 { homedir } from 'node:os';
2
16
  import { resolve } from 'node:path';
3
17
  import { Arborist } from '@npmcli/arborist';
4
18
  import Config from '@npmcli/config';
5
19
  import { readPackageUp } from 'read-pkg-up';
6
20
  const NPM_VERSION_FOR_PEER_INSTALLATION = 7;
21
+ /**
22
+ * indicate whether peer packages would be installed automatically
23
+ * @returns true for npm v7+
24
+ */
7
25
  export function arePeerPackagesAutoInstalled() {
26
+ // NOTE npm_config_user_agent should be in the form of 'npm/7.3.0 node/v15.5.0 darwin x64'
27
+ /* istanbul ignore next */
8
28
  const [clientID] = process.env['npm_config_user_agent']?.split(' ') ?? [];
29
+ /* istanbul ignore next */
9
30
  const [name, version] = clientID?.split('/') ?? [];
31
+ /* istanbul ignore next */
10
32
  const [major] = version?.split('.') ?? [];
11
33
  const isNPM = name === 'npm';
12
34
  const isNonNPM = name !== 'npm';
13
- return (isNonNPM ||
35
+ return (
36
+ // assume peer packages would be installed automatically if the client is not npm
37
+ isNonNPM ||
14
38
  (isNPM &&
15
39
  major !== undefined &&
16
40
  parseInt(major) >= NPM_VERSION_FOR_PEER_INSTALLATION));
17
41
  }
42
+ /**
43
+ * get scripts from the targeted project's package.json
44
+ * @param root path to the project's root folder
45
+ * @returns package detail
46
+ */
18
47
  export async function getPackage(root) {
48
+ // try to find the target project's package.json
19
49
  const detail = await readPackageUp({ cwd: root, normalize: true });
50
+ // throw an error if there's no package.json found
20
51
  if (!detail) {
21
52
  throw new Error("failed to find target's package.json");
22
53
  }
@@ -24,11 +55,23 @@ export async function getPackage(root) {
24
55
  const json = detail.packageJson;
25
56
  return { path, json };
26
57
  }
58
+ /**
59
+ * reify packages for the target project
60
+ * @param args list of packages and other options
61
+ * @param args.root directory of the project package.json
62
+ * @param args.add list of packages to be added
63
+ * @param args.remove list of packages to be removed
64
+ * @param args.saveAs type of dependency
65
+ * @param args.lockFile indicate whether package-lock.json should be produced
66
+ * @returns list of installed packages
67
+ */
27
68
  export async function reifyDependencies(args) {
28
69
  const { root, add = [], remove = [], saveAs = 'prod', lockFile = false, } = { ...args };
70
+ // use arborist to install peer dependencies
29
71
  const config = await getNPMConfig();
30
- const workspacesEnabled = arePeerPackagesAutoInstalled();
72
+ const workspacesEnabled = arePeerPackagesAutoInstalled(); // no workspace before npm 7
31
73
  const arborist = new Arborist({ path: root, workspacesEnabled, ...config });
74
+ // don't write to the lockfile
32
75
  const actualTree = await arborist.reify({
33
76
  add,
34
77
  rm: remove,
@@ -41,7 +84,12 @@ export async function reifyDependencies(args) {
41
84
  spec: edge.spec,
42
85
  }));
43
86
  }
87
+ /**
88
+ * get the url of the package registry of the target project
89
+ * @returns url of the registry
90
+ */
44
91
  async function getNPMConfig() {
92
+ // get npm config
45
93
  const config = new Config({
46
94
  definitions: {
47
95
  userconfig: { default: resolve(homedir(), '.npmrc'), type: String },
@@ -49,10 +97,12 @@ async function getNPMConfig() {
49
97
  },
50
98
  npmPath: '.',
51
99
  flatten: (config, flattenedConfig) => {
100
+ // NOTE: this function is called multiple time for flattening the configs at multiple levels, user, project, cli etc.
101
+ // ensure that higher level configs are always in priority
52
102
  Object.assign(flattenedConfig, config);
53
103
  },
54
104
  });
55
105
  await config.load();
56
106
  return config.flat;
57
107
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9wYWNrYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk1QyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsQ0FBQztBQWM1QyxNQUFNLFVBQVUsNEJBQTRCO0lBSTFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQWtCLENBQUM7SUFHMUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQWtCLENBQUM7SUFHcEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUssRUFBa0IsQ0FBQztJQUUzRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxLQUFLLENBQUM7SUFFaEMsT0FBTyxDQUVMLFFBQVE7UUFDUixDQUFDLEtBQUs7WUFDSixLQUFLLEtBQUssU0FBUztZQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksaUNBQWlDLENBQUMsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFPRCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFhO0lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUduRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsV0FBMEIsQ0FBQztJQUUvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFZRCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLElBTXZDO0lBQ0MsTUFBTSxFQUNKLElBQUksRUFDSixHQUFHLEdBQUcsRUFBRSxFQUNSLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLE1BQU0sRUFDZixRQUFRLEdBQUcsS0FBSyxHQUNqQixHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUdoQixNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO0lBQ3BDLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRzVFLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN0QyxHQUFHO1FBQ0gsRUFBRSxFQUFFLE1BQU07UUFDVixRQUFRLEVBQUUsTUFBTTtRQUNoQixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7S0FDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBTUQsS0FBSyxVQUFVLFlBQVk7SUFFekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDeEIsV0FBVyxFQUFFO1lBQ1gsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ25FLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ2xFO1FBQ0QsT0FBTyxFQUFFLEdBQUc7UUFDWixPQUFPLEVBQUUsQ0FDUCxNQUE4QixFQUM5QixlQUF1QyxFQUNqQyxFQUFFO1lBSVIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXBCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDIn0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9wYWNrYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDO0FBRXBDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJNUMsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7QUFVNUM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQywwRkFBMEY7SUFFMUYsMEJBQTBCO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQWtCLENBQUM7SUFFMUUsMEJBQTBCO0lBQzFCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSyxFQUFrQixDQUFDO0lBRXBFLDBCQUEwQjtJQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSyxFQUFrQixDQUFDO0lBRTNELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQztJQUVoQyxPQUFPO0lBQ0wsaUZBQWlGO0lBQ2pGLFFBQVE7UUFDUixDQUFDLEtBQUs7WUFDSixLQUFLLEtBQUssU0FBUztZQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksaUNB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
@@ -1,7 +1,14 @@
1
1
  import type { PresetContext } from 'presetter-types';
2
+ /** collection of options for bootstrapping */
2
3
  interface BootstrapOptions {
4
+ /** whether to skip all checks */
3
5
  force?: boolean;
4
6
  }
7
+ /**
8
+ * generate files from templates and link them to the target project root
9
+ * @param context context about the target project and any customization in .presetterrc
10
+ * @param options collection of options
11
+ */
5
12
  export declare function bootstrapContent(context: PresetContext, options?: BootstrapOptions): Promise<void>;
6
13
  export {};
7
14
  //# sourceMappingURL=content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../source/preset/content.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,UAAU,gBAAgB;IAExB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAOD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../source/preset/content.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,8CAA8C;AAC9C,UAAU,gBAAgB;IACxB,iCAAiC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAUf"}