presetter 3.5.4 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -3
  3. package/bin/cli.js +5 -0
  4. package/bin/run-p.js +6 -0
  5. package/bin/run-s.js +6 -0
  6. package/bin/{run → run.js} +4 -2
  7. package/lib/content.d.ts +1 -1
  8. package/lib/content.js +58 -66
  9. package/lib/directive.d.ts +3 -3
  10. package/lib/directive.js +12 -17
  11. package/lib/error.js +2 -6
  12. package/lib/executable/entry.d.ts +1 -1
  13. package/lib/executable/entry.js +57 -24
  14. package/lib/executable/error.js +12 -19
  15. package/lib/executable/index.js +5 -6
  16. package/lib/index.d.ts +6 -6
  17. package/lib/index.js +7 -23
  18. package/lib/io.d.ts +7 -4
  19. package/lib/io.js +53 -57
  20. package/lib/package.d.ts +3 -5
  21. package/lib/package.js +18 -31
  22. package/lib/preset/content.d.ts +6 -0
  23. package/lib/preset/content.js +13 -0
  24. package/lib/preset/context.d.ts +2 -0
  25. package/lib/preset/context.js +14 -0
  26. package/lib/preset/graph.d.ts +4 -0
  27. package/lib/preset/graph.js +20 -0
  28. package/lib/preset/index.d.ts +3 -0
  29. package/lib/preset/index.js +4 -0
  30. package/lib/preset/mapping.d.ts +2 -0
  31. package/lib/preset/mapping.js +15 -0
  32. package/lib/preset/presetterRC.d.ts +5 -0
  33. package/lib/preset/presetterRC.js +38 -0
  34. package/lib/preset/scripts.d.ts +1 -0
  35. package/lib/preset/scripts.js +10 -0
  36. package/lib/preset/setup.d.ts +6 -0
  37. package/lib/preset/setup.js +43 -0
  38. package/lib/preset/unset.d.ts +1 -0
  39. package/lib/preset/unset.js +14 -0
  40. package/lib/resolution.d.ts +1 -1
  41. package/lib/resolution.js +11 -17
  42. package/lib/run.d.ts +5 -1
  43. package/lib/run.js +68 -74
  44. package/lib/scripts.d.ts +3 -3
  45. package/lib/scripts.js +13 -15
  46. package/lib/task.d.ts +8 -0
  47. package/lib/task.js +37 -0
  48. package/lib/template.d.ts +6 -6
  49. package/lib/template.js +25 -35
  50. package/lib/utilities/index.d.ts +1 -0
  51. package/lib/utilities/index.js +2 -0
  52. package/lib/utilities/mapValues.d.ts +1 -0
  53. package/lib/utilities/mapValues.js +4 -0
  54. package/package.json +35 -43
  55. package/bin/cli +0 -3
  56. package/lib/preset.d.ts +0 -15
  57. package/lib/preset.js +0 -188
  58. package/lib/types.d.ts +0 -73
  59. package/lib/types.js +0 -3
@@ -1,6 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const entry_1 = require("./entry");
4
- const error_1 = require("./error");
5
- (0, entry_1.entry)().catch(error_1.handleError);
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxtQ0FBZ0M7QUFDaEMsbUNBQXNDO0FBRXRDLElBQUEsYUFBSyxHQUFFLENBQUMsS0FBSyxDQUFDLG1CQUFXLENBQUMsQ0FBQyJ9
1
+ import { entry } from './entry.js';
2
+ import { handleError } from './error.js';
3
+ const [, , ...args] = process.argv;
4
+ entry(args).catch(handleError);
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvZXhlY3V0YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyJ9
package/lib/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export * from './content';
2
- export * from './directive';
3
- export * from './io';
4
- export * from './resolution';
5
- export * from './template';
6
- export * from './types';
1
+ export * from 'presetter-types';
2
+ export * from './content.js';
3
+ export * from './directive.js';
4
+ export * from './io.js';
5
+ export * from './resolution.js';
6
+ export * from './template.js';
package/lib/index.js CHANGED
@@ -1,23 +1,7 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./content"), exports);
18
- __exportStar(require("./directive"), exports);
19
- __exportStar(require("./io"), exports);
20
- __exportStar(require("./resolution"), exports);
21
- __exportStar(require("./template"), exports);
22
- __exportStar(require("./types"), exports);
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSwyQ0FBeUI7QUFDekIsNkNBQTJCO0FBQzNCLHNDQUFvQjtBQUNwQiw4Q0FBNEI7QUFDNUIsNENBQTBCO0FBRTFCLHlDQUF1QiJ9
1
+ export * from 'presetter-types';
2
+ export * from './content.js';
3
+ export * from './directive.js';
4
+ export * from './io.js';
5
+ export * from './resolution.js';
6
+ export * from './template.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLGNBQWMsaUJBQWlCLENBQUM7QUFFaEMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxNQUFNLENBQUM7QUFDckIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUMifQ==
package/lib/io.d.ts CHANGED
@@ -1,7 +1,10 @@
1
- import type { Template } from './types';
1
+ import type { Template } from 'presetter-types';
2
+ export interface IOOptions {
3
+ force?: boolean;
4
+ }
2
5
  export declare function loadFile(path: string, defaultFormat?: 'json' | 'yaml'): Record<string, unknown>;
3
6
  export declare function loadFile(path: string, defaultFormat?: 'text'): string;
4
7
  export declare function serializeContent(destination: string, content: Template): string;
5
- export declare function writeFiles(root: string, config: Record<string, Template>, pathMap: Record<string, string>): void;
6
- export declare function linkFiles(root: string, configurationLink: Record<string, string>): void;
7
- export declare function unlinkFiles(root: string, configurationLink: Record<string, string>): void;
8
+ export declare function writeFiles(root: string, config: Record<string, Template>, pathMap: Record<string, string>, options?: IOOptions): void;
9
+ export declare function linkFiles(root: string, configurationLink: Record<string, string>, options?: IOOptions): void;
10
+ export declare function unlinkFiles(root: string, configurationLink: Record<string, string>, options?: IOOptions): void;
package/lib/io.js CHANGED
@@ -1,94 +1,90 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unlinkFiles = exports.linkFiles = exports.writeFiles = exports.serializeContent = exports.loadFile = void 0;
4
- const console_1 = require("console");
5
- const fs_1 = require("fs");
6
- const js_yaml_1 = require("js-yaml");
7
- const path_1 = require("path");
1
+ import { info } from 'node:console';
2
+ import { lstatSync, mkdirSync, readFileSync, readlinkSync, symlinkSync, unlinkSync, writeFileSync, } from 'node:fs';
3
+ import { basename, dirname, extname, relative, resolve } from 'node:path';
4
+ import { dump, load } from 'js-yaml';
8
5
  const INDENT = 2;
9
- function loadFile(path, defaultFormat = 'text') {
10
- const content = (0, fs_1.readFileSync)(path).toString();
11
- switch ((0, path_1.extname)(path) || `.${defaultFormat}`) {
6
+ export function loadFile(path, defaultFormat = 'text') {
7
+ const content = readFileSync(path).toString();
8
+ switch (extname(path) || `.${defaultFormat}`) {
12
9
  case '.json':
13
10
  return JSON.parse(content);
14
11
  case '.yaml':
15
12
  case '.yml':
16
- return (0, js_yaml_1.load)(content);
13
+ return load(content);
17
14
  default:
18
15
  return content;
19
16
  }
20
17
  }
21
- exports.loadFile = loadFile;
22
- function serializeContent(destination, content) {
18
+ export function serializeContent(destination, content) {
23
19
  if (typeof content === 'string') {
24
20
  return content;
25
21
  }
26
- switch ((0, path_1.extname)(destination)) {
22
+ switch (extname(destination)) {
27
23
  case '.yaml':
28
24
  case '.yml':
29
- return (0, js_yaml_1.dump)(content);
25
+ return dump(content);
30
26
  case '.json':
31
27
  default:
32
28
  return JSON.stringify(content, null, INDENT);
33
29
  }
34
30
  }
35
- exports.serializeContent = serializeContent;
36
- function writeFiles(root, config, pathMap) {
31
+ export function writeFiles(root, config, pathMap, options) {
32
+ const { force = false } = { ...options };
37
33
  for (const [key, content] of Object.entries(config)) {
38
34
  const destination = pathMap[key];
39
- if (!(0, fs_1.existsSync)(destination) ||
40
- destination !== (0, path_1.resolve)(root, key)) {
41
- (0, console_1.info)(`Generating ${key}`);
42
- (0, fs_1.mkdirSync)((0, path_1.dirname)(destination), { recursive: true });
43
- (0, fs_1.writeFileSync)(destination, serializeContent(destination, content));
35
+ if (force ||
36
+ !lstatSync(destination, { throwIfNoEntry: false }) ||
37
+ destination !== resolve(root, key)) {
38
+ info(`Generating ${key}`);
39
+ ensureFile(destination, serializeContent(destination, content));
44
40
  }
45
41
  else {
46
- (0, console_1.info)(`Skipping ${key}`);
42
+ info(`Skipping ${key}`);
47
43
  }
48
44
  }
49
45
  }
50
- exports.writeFiles = writeFiles;
51
- function linkFiles(root, configurationLink) {
46
+ export function linkFiles(root, configurationLink, options) {
47
+ const { force = false } = { ...options };
52
48
  for (const [file, destination] of Object.entries(configurationLink)) {
53
- const link = (0, path_1.resolve)(root, file);
54
- const to = (0, path_1.relative)((0, path_1.dirname)(link), destination);
55
- if (!linkExists(link) &&
56
- !(0, fs_1.existsSync)(link) &&
57
- to !== (0, path_1.basename)(to)) {
58
- (0, console_1.info)(`Linking ${(0, path_1.relative)(root, link)} => ${to}`);
59
- (0, fs_1.mkdirSync)((0, path_1.dirname)(link), { recursive: true });
60
- (0, fs_1.symlinkSync)(to, link);
61
- }
62
- else if (to !== (0, path_1.basename)(to)) {
63
- (0, console_1.info)(`Skipping ${(0, path_1.relative)(root, link)} => ${to}`);
49
+ const path = resolve(root, file);
50
+ const to = relative(dirname(path), destination);
51
+ const pathStat = lstatSync(path, { throwIfNoEntry: false });
52
+ if (to !== basename(to) &&
53
+ (!pathStat || pathStat.isSymbolicLink() || force)) {
54
+ info(`Linking ${relative(root, path)} => ${to}`);
55
+ ensureLink(path, to);
64
56
  }
65
57
  }
66
58
  }
67
- exports.linkFiles = linkFiles;
68
- function unlinkFiles(root, configurationLink) {
59
+ export function unlinkFiles(root, configurationLink, options) {
60
+ const { force = false } = { ...options };
69
61
  for (const [name, destination] of Object.entries(configurationLink)) {
70
- try {
71
- const link = (0, fs_1.readlinkSync)((0, path_1.resolve)(root, name));
72
- const to = (0, path_1.relative)(root, destination);
73
- if (link === to) {
74
- (0, console_1.info)(`Removing ${name}`);
75
- (0, fs_1.unlinkSync)((0, path_1.resolve)(root, name));
76
- continue;
77
- }
78
- }
79
- catch (_a) {
62
+ const link = resolveLink(resolve(root, name));
63
+ const to = relative(root, destination);
64
+ if (link === to || force) {
65
+ info(`Removing ${name}`);
66
+ unlinkSync(resolve(root, name));
67
+ continue;
80
68
  }
81
- (0, console_1.info)(`Skipping ${name}`);
69
+ info(`Skipping ${name}`);
82
70
  }
83
71
  }
84
- exports.unlinkFiles = unlinkFiles;
85
- function linkExists(path) {
86
- try {
87
- (0, fs_1.lstatSync)(path);
88
- return true;
72
+ function resolveLink(path) {
73
+ const pathStat = lstatSync(path, { throwIfNoEntry: false });
74
+ return pathStat?.isSymbolicLink() ? readlinkSync(path) : null;
75
+ }
76
+ function ensureLink(path, to) {
77
+ mkdirSync(dirname(path), { recursive: true });
78
+ if (lstatSync(path, { throwIfNoEntry: false })) {
79
+ unlinkSync(path);
89
80
  }
90
- catch (_a) {
91
- return false;
81
+ symlinkSync(to, path);
82
+ }
83
+ function ensureFile(path, content) {
84
+ mkdirSync(dirname(path), { recursive: true });
85
+ if (lstatSync(path, { throwIfNoEntry: false })) {
86
+ unlinkSync(path);
92
87
  }
88
+ writeFileSync(path, content);
93
89
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEscUNBQStCO0FBQy9CLDJCQVNZO0FBQ1oscUNBQXFDO0FBQ3JDLCtCQUFxRTtBQUtyRSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFhakIsU0FBZ0IsUUFBUSxDQUN0QixJQUFZLEVBQ1osZ0JBQTBDLE1BQU07SUFFaEQsTUFBTSxPQUFPLEdBQUcsSUFBQSxpQkFBWSxFQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRzlDLFFBQVEsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUUsRUFBRTtRQUM1QyxLQUFLLE9BQU87WUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUE0QixDQUFDO1FBQ3hELEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxNQUFNO1lBQ1QsT0FBTyxJQUFBLGNBQUksRUFBQyxPQUFPLENBQTRCLENBQUM7UUFDbEQ7WUFDRSxPQUFPLE9BQU8sQ0FBQztLQUNsQjtBQUNILENBQUM7QUFoQkQsNEJBZ0JDO0FBUUQsU0FBZ0IsZ0JBQWdCLENBQzlCLFdBQW1CLEVBQ25CLE9BQWlCO0lBRWpCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1FBQy9CLE9BQU8sT0FBTyxDQUFDO0tBQ2hCO0lBRUQsUUFBUSxJQUFBLGNBQU8sRUFBQyxXQUFXLENBQUMsRUFBRTtRQUM1QixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBQSxjQUFJLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkIsS0FBSyxPQUFPLENBQUM7UUFDYjtZQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2hEO0FBQ0gsQ0FBQztBQWhCRCw0Q0FnQkM7QUFRRCxTQUFnQixV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
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBV3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQWFqQixNQUFNLFVBQVUsUUFBUSxDQUN0QixJQUFZLEVBQ1osZ0JBQTBDLE1BQU07SUFFaEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRzlDLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLEVBQUU7UUFDNUMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBNEIsQ0FBQztRQUN4RCxLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBNEIsQ0FBQztRQUNsRDtZQUNFLE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQVFELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsV0FBbUIsRUFDbkIsT0FBaUI7SUFFakIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDL0IsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFFRCxRQUFRLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUM1QixLQUFLLE9B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
package/lib/package.d.ts CHANGED
@@ -1,9 +1,7 @@
1
- import type { NormalizedPackageJson } from 'read-pkg-up';
2
- export declare type Package = {
1
+ import type { PackageJson } from 'type-fest';
2
+ export type Package = {
3
3
  path: string;
4
- json: NormalizedPackageJson & {
5
- scripts: Record<string, string>;
6
- };
4
+ json: PackageJson;
7
5
  };
8
6
  export declare function arePeerPackagesAutoInstalled(): boolean;
9
7
  export declare function getPackage(root?: string): Promise<Package>;
package/lib/package.js CHANGED
@@ -1,21 +1,13 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reifyDependencies = exports.getPackage = exports.arePeerPackagesAutoInstalled = void 0;
7
- const arborist_1 = require("@npmcli/arborist");
8
- const config_1 = __importDefault(require("@npmcli/config"));
9
- const lodash_1 = require("lodash");
10
- const os_1 = require("os");
11
- const path_1 = require("path");
12
- const read_pkg_up_1 = __importDefault(require("read-pkg-up"));
1
+ import { homedir } from 'node:os';
2
+ import { resolve } from 'node:path';
3
+ import { Arborist } from '@npmcli/arborist';
4
+ import Config from '@npmcli/config';
5
+ import { readPackageUp } from 'read-pkg-up';
13
6
  const NPM_VERSION_FOR_PEER_INSTALLATION = 7;
14
- function arePeerPackagesAutoInstalled() {
15
- var _a, _b, _c, _d;
16
- const [clientID] = (_b = (_a = process.env['npm_config_user_agent']) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];
17
- const [name, version] = (_c = clientID === null || clientID === void 0 ? void 0 : clientID.split('/')) !== null && _c !== void 0 ? _c : [];
18
- const [major] = (_d = version === null || version === void 0 ? void 0 : version.split('.')) !== null && _d !== void 0 ? _d : [];
7
+ export function arePeerPackagesAutoInstalled() {
8
+ const [clientID] = process.env['npm_config_user_agent']?.split(' ') ?? [];
9
+ const [name, version] = clientID?.split('/') ?? [];
10
+ const [major] = version?.split('.') ?? [];
19
11
  const isNPM = name === 'npm';
20
12
  const isNonNPM = name !== 'npm';
21
13
  return (isNonNPM ||
@@ -23,24 +15,20 @@ function arePeerPackagesAutoInstalled() {
23
15
  major !== undefined &&
24
16
  parseInt(major) >= NPM_VERSION_FOR_PEER_INSTALLATION));
25
17
  }
26
- exports.arePeerPackagesAutoInstalled = arePeerPackagesAutoInstalled;
27
- async function getPackage(root) {
28
- const detail = await (0, read_pkg_up_1.default)({ cwd: root, normalize: true });
18
+ export async function getPackage(root) {
19
+ const detail = await readPackageUp({ cwd: root, normalize: true });
29
20
  if (!detail) {
30
21
  throw new Error("failed to find target's package.json");
31
22
  }
32
23
  const path = detail.path;
33
- const json = (0, lodash_1.defaultsDeep)(detail.packageJson, {
34
- scripts: {},
35
- });
24
+ const json = detail.packageJson;
36
25
  return { path, json };
37
26
  }
38
- exports.getPackage = getPackage;
39
- async function reifyDependencies(args) {
40
- const { root, add = [], remove = [], saveAs = 'prod', lockFile = false, } = Object.assign({}, args);
27
+ export async function reifyDependencies(args) {
28
+ const { root, add = [], remove = [], saveAs = 'prod', lockFile = false, } = { ...args };
41
29
  const config = await getNPMConfig();
42
30
  const workspacesEnabled = arePeerPackagesAutoInstalled();
43
- const arborist = new arborist_1.Arborist(Object.assign({ path: root, workspacesEnabled }, config));
31
+ const arborist = new Arborist({ path: root, workspacesEnabled, ...config });
44
32
  const actualTree = await arborist.reify({
45
33
  add,
46
34
  rm: remove,
@@ -53,11 +41,10 @@ async function reifyDependencies(args) {
53
41
  spec: edge.spec,
54
42
  }));
55
43
  }
56
- exports.reifyDependencies = reifyDependencies;
57
44
  async function getNPMConfig() {
58
- const config = new config_1.default({
45
+ const config = new Config({
59
46
  definitions: {
60
- userconfig: { default: (0, path_1.resolve)((0, os_1.homedir)(), '.npmrc'), type: String },
47
+ userconfig: { default: resolve(homedir(), '.npmrc'), type: String },
61
48
  registry: { default: 'https://registry.npmjs.org', type: String },
62
49
  },
63
50
  npmPath: '.',
@@ -68,4 +55,4 @@ async function getNPMConfig() {
68
55
  await config.load();
69
56
  return config.flat;
70
57
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9wYWNrYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWVBLCtDQUE0QztBQUM1Qyw0REFBb0M7QUFDcEMsbUNBQXNDO0FBQ3RDLDJCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsOERBQTRDO0FBSTVDLE1BQU0saUNBQWlDLEdBQUcsQ0FBQyxDQUFDO0FBYzVDLFNBQWdCLDRCQUE0Qjs7SUFJMUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUNkLE1BQUEsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLDBDQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsbUNBQUssRUFBa0IsQ0FBQztJQUcxRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsbUNBQUssRUFBa0IsQ0FBQztJQUdwRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxtQ0FBSyxFQUFrQixDQUFDO0lBRTNELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQztJQUVoQyxPQUFPLENBRUwsUUFBUTtRQUNSLENBQUMsS0FBSztZQUNKLEtBQUssS0FBSyxTQUFTO1lBQ25CLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxDQUN4RCxDQUFDO0FBQ0osQ0FBQztBQXZCRCxvRUF1QkM7QUFPTSxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWE7SUFFNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHFCQUFpQixFQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUd2RSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixNQUFNLElBQUksR0FBRyxJQUFBLHFCQUFZLEVBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUM1QyxPQUFPLEVBQUUsRUFBRTtLQUNaLENBQW9CLENBQUM7SUFFdEIsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBZkQsZ0NBZUM7QUFZTSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsSUFNdkM7SUFDQyxNQUFNLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FBRyxFQUFFLEVBQ1IsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsTUFBTSxFQUNmLFFBQVEsR0FBRyxLQUFLLEdBQ2pCLHFCQUFRLElBQUksQ0FBRSxDQUFDO0lBR2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDcEMsTUFBTSxpQkFBaUIsR0FBRyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksbUJBQVEsaUJBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsSUFBSyxNQUFNLEVBQUcsQ0FBQztJQUc1RSxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDdEMsR0FBRztRQUNILEVBQUUsRUFBRSxNQUFNO1FBQ1YsUUFBUSxFQUFFLE1BQU07UUFDaEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0tBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQWpDRCw4Q0FpQ0M7QUFNRCxLQUFLLFVBQVUsWUFBWTtJQUV6QixNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUM7UUFDeEIsV0FBVyxFQUFFO1lBQ1gsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUEsY0FBTyxFQUFDLElBQUEsWUFBTyxHQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNuRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtTQUNsRTtRQUNELE9BQU8sRUFBRSxHQUFHO1FBQ1osT0FBTyxFQUFFLENBQ1AsTUFBOEIsRUFDOUIsZUFBdUMsRUFDakMsRUFBRTtZQUlSLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVwQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQyJ9
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9wYWNrYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxNQUFNLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk1QyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsQ0FBQztBQWM1QyxNQUFNLFVBQVUsNEJBQTRCO0lBSTFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQWtCLENBQUM7SUFHMUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFLLEVBQWtCLENBQUM7SUFHcEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUssRUFBa0IsQ0FBQztJQUUzRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxLQUFLLENBQUM7SUFFaEMsT0FBTyxDQUVMLFFBQVE7UUFDUixDQUFDLEtBQUs7WUFDSixLQUFLLEtBQUssU0FBUztZQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksaUNBQWlDLENBQUMsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFPRCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFhO0lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUduRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUN6QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsV0FBMEIsQ0FBQztJQUUvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFZRCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLElBTXZDO0lBQ0MsTUFBTSxFQUNKLElBQUksRUFDSixHQUFHLEdBQUcsRUFBRSxFQUNSLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLE1BQU0sRUFDZixRQUFRLEdBQUcsS0FBSyxHQUNqQixHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUdoQixNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO0lBQ3BDLE1BQU0saUJBQWlCLEdBQUcsNEJBQTRCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRzVFLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN0QyxHQUFHO1FBQ0gsRUFBRSxFQUFFLE1BQU07UUFDVixRQUFRLEVBQUUsTUFBTTtRQUNoQixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7S0FDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBTUQsS0FBSyxVQUFVLFlBQVk7SUFFekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDeEIsV0FBVyxFQUFFO1lBQ1gsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ25FLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ2xFO1FBQ0QsT0FBTyxFQUFFLEdBQUc7UUFDWixPQUFPLEVBQUUsQ0FDUCxNQUE4QixFQUM5QixlQUF1QyxFQUNqQyxFQUFFO1lBSVIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXBCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import type { PresetContext } from 'presetter-types';
2
+ interface BootstrapOptions {
3
+ force?: boolean;
4
+ }
5
+ export declare function bootstrapContent(context: PresetContext, options?: BootstrapOptions): Promise<void>;
6
+ export {};
@@ -0,0 +1,13 @@
1
+ import { resolveContext, resolveTemplate } from '../content.js';
2
+ import { linkFiles, writeFiles } from '../io.js';
3
+ import { getPresetGraph } from './graph.js';
4
+ import { getDestinationMap } from './mapping.js';
5
+ export async function bootstrapContent(context, options) {
6
+ const graph = await getPresetGraph(context);
7
+ const resolvedContext = await resolveContext({ graph, context });
8
+ const content = await resolveTemplate({ graph, context: resolvedContext });
9
+ const destinationMap = await getDestinationMap(content, resolvedContext);
10
+ writeFiles(context.target.root, content, destinationMap, options);
11
+ linkFiles(context.target.root, destinationMap, options);
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wcmVzZXQvY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWU5QyxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxPQUFzQixFQUN0QixPQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sY0FBYyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXpFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUQsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import type { PresetContext } from 'presetter-types';
2
+ export declare function getContext(): Promise<PresetContext>;
@@ -0,0 +1,14 @@
1
+ import { dirname } from 'node:path';
2
+ import { getPackage } from '../package.js';
3
+ import { getPresetterRC } from './presetterRC.js';
4
+ export async function getContext() {
5
+ const { json, path } = await getPackage();
6
+ const root = dirname(path);
7
+ const target = { name: json.name, root, package: json };
8
+ const custom = await getPresetterRC(root);
9
+ return {
10
+ target,
11
+ custom,
12
+ };
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wcmVzZXQvY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEvQyxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVU7SUFDOUIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUMsT0FBTztRQUNMLE1BQU07UUFDTixNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,4 @@
1
+ import type { PresetAsset, PresetContext, PresetGraph, PresetNode } from 'presetter-types';
2
+ export declare function getPresetAsset(name: string, context: PresetContext): Promise<PresetAsset>;
3
+ export declare function getPresetGraph(context: PresetContext): Promise<PresetGraph>;
4
+ export declare function getPresetNode(name: string, context: PresetContext): Promise<PresetNode>;
@@ -0,0 +1,20 @@
1
+ export async function getPresetAsset(name, context) {
2
+ try {
3
+ const { default: getPresetAsset } = (await import(name));
4
+ return await getPresetAsset(context);
5
+ }
6
+ catch {
7
+ throw new Error(`cannot resolve preset ${name}`);
8
+ }
9
+ }
10
+ export async function getPresetGraph(context) {
11
+ const { preset } = context.custom;
12
+ const presets = Array.isArray(preset) ? preset : [preset];
13
+ return Promise.all(presets.map(async (name) => getPresetNode(name, context)));
14
+ }
15
+ export async function getPresetNode(name, context) {
16
+ const asset = await getPresetAsset(name, context);
17
+ const nodes = await Promise.all((asset.extends ?? []).map(async (extension) => getPresetNode(extension, context)));
18
+ return { name, asset, nodes };
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcHJlc2V0L2dyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCQSxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsSUFBWSxFQUNaLE9BQXNCO0lBRXRCLElBQUk7UUFFRixNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBRXRELENBQUM7UUFFRixPQUFPLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3RDO0lBQUMsTUFBTTtRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDbEQ7QUFDSCxDQUFDO0FBT0QsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLE9BQXNCO0lBR3RCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRWxDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUxRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBUUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLElBQVksRUFDWixPQUFzQjtJQUV0QixNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM3QixDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUM1QyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUNsQyxDQUNGLENBQUM7SUFFRixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNoQyxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ export * from './scripts.js';
2
+ export * from './setup.js';
3
+ export * from './unset.js';
@@ -0,0 +1,4 @@
1
+ export * from './scripts.js';
2
+ export * from './setup.js';
3
+ export * from './unset.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcHJlc2V0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBCQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import type { ResolvedPresetContext, Template } from 'presetter-types';
2
+ export declare function getDestinationMap(template: Record<string, Template>, context: ResolvedPresetContext<'noSymlinks'>): Promise<Record<string, string>>;
@@ -0,0 +1,15 @@
1
+ import { resolve } from 'node:path';
2
+ import resolvePackage from 'resolve-pkg';
3
+ export async function getDestinationMap(template, context) {
4
+ const { custom: { noSymlinks }, target: { root }, } = context;
5
+ const presetterDir = resolvePackage('presetter', { cwd: root });
6
+ const outDir = resolve(presetterDir, 'generated', context.target.name);
7
+ const relativePaths = [...Object.keys(template)];
8
+ return Object.fromEntries([
9
+ ...relativePaths.map((relativePath) => [
10
+ relativePath,
11
+ resolve(noSymlinks.includes(relativePath) ? context.target.root : outDir, relativePath),
12
+ ]),
13
+ ]);
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wcmVzZXQvbWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sY0FBYyxNQUFNLGFBQWEsQ0FBQztBQVV6QyxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxRQUFrQyxFQUNsQyxPQUE0QztJQUU1QyxNQUFNLEVBQ0osTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQ3RCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxHQUNqQixHQUFHLE9BQU8sQ0FBQztJQUVaLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhFLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFakQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3hCLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBb0IsRUFBRSxDQUFDO1lBQ3ZELFlBQVk7WUFDWixPQUFPLENBRUwsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFDaEUsWUFBWSxDQUNiO1NBQ0YsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMifQ==
@@ -0,0 +1,5 @@
1
+ import type { PresetterConfig } from 'presetter-types';
2
+ export declare function getPresetterRCPaths(base: string): Promise<string[]>;
3
+ export declare function getPresetterRC(root: string): Promise<PresetterConfig>;
4
+ export declare function updatePresetterRC(root: string, config: PresetterConfig): Promise<void>;
5
+ export declare function assertPresetterRC(value: unknown): asserts value is PresetterConfig;
@@ -0,0 +1,38 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { readPackageUp } from 'read-pkg-up';
4
+ import { loadFile } from '../io.js';
5
+ import { isJSON, merge } from '../template.js';
6
+ const PRESETTERRC = '.presetterrc';
7
+ const JSON_INDENT = 2;
8
+ export async function getPresetterRCPaths(base) {
9
+ const filesFromBase = ['', '.json']
10
+ .map((ext) => resolve(base, `${PRESETTERRC}${ext}`))
11
+ .filter(existsSync);
12
+ const parent = await readPackageUp({ cwd: dirname(base) });
13
+ const filesFromParent = parent?.path
14
+ ? await getPresetterRCPaths(dirname(base))
15
+ : [];
16
+ return [...filesFromParent, ...filesFromBase];
17
+ }
18
+ export async function getPresetterRC(root) {
19
+ const paths = await getPresetterRCPaths(root);
20
+ if (!paths.length) {
21
+ throw new Error('missing presetter configuration file');
22
+ }
23
+ const configs = paths.map((path) => loadFile(path, 'json'));
24
+ const mergedConfig = configs.reduce((mergedConfig, config) => merge(mergedConfig, config), {});
25
+ assertPresetterRC(mergedConfig);
26
+ return mergedConfig;
27
+ }
28
+ export async function updatePresetterRC(root, config) {
29
+ const existingPresetterRC = await getPresetterRC(root).catch(() => ({}));
30
+ writeFileSync(resolve(root, `${PRESETTERRC}.json`), JSON.stringify(merge(existingPresetterRC, config), null, JSON_INDENT));
31
+ }
32
+ export function assertPresetterRC(value) {
33
+ if (!isJSON(value) ||
34
+ (typeof value['preset'] !== 'string' && !Array.isArray(value['preset']))) {
35
+ throw new Error(`invalid presetter configuration file`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0dGVyUkMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcHJlc2V0L3ByZXNldHRlclJDLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU01QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFFbkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBT3RCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7U0FDaEMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbkQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFHM0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxFQUFFLElBQUk7UUFDbEMsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxPQUFPLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBT0QsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBWTtJQUUvQyxNQUFNLEtBQUssR0FBRyxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztLQUN6RDtJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFjLENBQUMsQ0FBQztJQUV6RSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUNqQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQ3JELEVBQUUsQ0FDSCxDQUFDO0lBRUYsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEMsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQU9ELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLElBQVksRUFDWixNQUF1QjtJQUV2QixNQUFNLG1CQUFtQixHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekUsYUFBYSxDQUNYLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLE9BQU8sQ0FBQyxFQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQ3RFLENBQUM7QUFDSixDQUFDO0FBTUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUFjO0lBRWQsSUFDRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDZCxDQUFDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDeEU7UUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare function getScripts(): Promise<Record<string, string>>;
@@ -0,0 +1,10 @@
1
+ import { resolveContext, resolveScripts } from '../content.js';
2
+ import { getContext } from './context.js';
3
+ import { getPresetGraph } from './graph.js';
4
+ export async function getScripts() {
5
+ const context = await getContext();
6
+ const graph = await getPresetGraph(context);
7
+ const resolvedContext = await resolveContext({ graph, context });
8
+ return resolveScripts({ graph, context: resolvedContext });
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wcmVzZXQvc2NyaXB0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFNekMsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVO0lBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVqRSxPQUFPLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUM3RCxDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ interface BootstrapOptions {
2
+ force?: boolean;
3
+ }
4
+ export declare function bootstrapPreset(options?: BootstrapOptions): Promise<void>;
5
+ export declare function setupPreset(...uris: string[]): Promise<void>;
6
+ export {};
@@ -0,0 +1,43 @@
1
+ import { info } from 'node:console';
2
+ import { dirname } from 'node:path';
3
+ import { readPackage } from 'read-pkg';
4
+ import { writePackage } from 'write-pkg';
5
+ import { arePeerPackagesAutoInstalled, getPackage, reifyDependencies, } from '../package.js';
6
+ import { bootstrapContent } from './content.js';
7
+ import { getContext } from './context.js';
8
+ import { updatePresetterRC } from './presetterRC.js';
9
+ export async function bootstrapPreset(options) {
10
+ const context = await getContext();
11
+ if (!arePeerPackagesAutoInstalled()) {
12
+ await reifyDependencies({ root: context.target.root });
13
+ }
14
+ await bootstrapContent(context, options);
15
+ }
16
+ export async function setupPreset(...uris) {
17
+ const { path } = await getPackage();
18
+ const root = dirname(path);
19
+ const packageBefore = (await readPackage({ cwd: root })).devDependencies;
20
+ info(`Installing ${uris.join(' ')}... it may take a few moment...`);
21
+ await reifyDependencies({
22
+ root,
23
+ add: ['presetter', ...uris],
24
+ saveAs: 'dev',
25
+ lockFile: true,
26
+ });
27
+ const packageAfter = (await readPackage({ cwd: root })).devDependencies;
28
+ const newPackages = getNewPackages({ ...packageBefore }, { ...packageAfter });
29
+ const preset = newPackages.filter((name) => name !== 'presetter');
30
+ info('Updating .presetterrc.json & package.json');
31
+ await updatePresetterRC(root, { preset });
32
+ const context = await getContext();
33
+ await bootstrapContent(context);
34
+ const json = context.target.package;
35
+ const scripts = { prepare: 'presetter bootstrap', ...json.scripts };
36
+ const patched = { ...json, scripts };
37
+ await writePackage(root, patched);
38
+ info('Done. Enjoy coding!');
39
+ }
40
+ function getNewPackages(before, after) {
41
+ return Object.keys(after).filter((name) => !before[name]);
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcHJlc2V0L3NldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixVQUFVLEVBQ1YsaUJBQWlCLEdBQ2xCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWNsRCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FDbkMsT0FBMEI7SUFFMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUduQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRTtRQUNuQyxNQUFNLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN4RDtJQUdELE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFNRCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFHLElBQWM7SUFHakQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUd6RSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0saUJBQWlCLENBQUM7UUFDdEIsSUFBSTtRQUNKLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixNQUFNLEVBQUUsS0FBSztRQUNiLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBR0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDOUUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBRWxFLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBRWxELE1BQU0saUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUcxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO0lBQ25DLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFHaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQyxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBK0MsQ0FBQyxDQUFDO0lBRTFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFRRCxTQUFTLGNBQWMsQ0FDckIsTUFBOEIsRUFDOUIsS0FBNkI7SUFFN0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ export declare function unsetPreset(): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { resolveContext, resolveTemplate } from '../content.js';
2
+ import { unlinkFiles } from '../io.js';
3
+ import { getContext } from './context.js';
4
+ import { getPresetGraph } from './graph.js';
5
+ import { getDestinationMap } from './mapping.js';
6
+ export async function unsetPreset() {
7
+ const context = await getContext();
8
+ const graph = await getPresetGraph(context);
9
+ const resolvedContext = await resolveContext({ graph, context });
10
+ const content = await resolveTemplate({ graph, context: resolvedContext });
11
+ const configurationLink = await getDestinationMap(content, resolvedContext);
12
+ unlinkFiles(context.target.root, configurationLink);
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcHJlc2V0L3Vuc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUs5QyxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVc7SUFDL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFNUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDdEQsQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import type { DynamicAsset, DynamicAssetField, Generator, PresetAsset, PresetterConfig, RequiredResolution, ResolvedPresetContext, Template } from './types';
1
+ import type { DynamicAsset, DynamicAssetField, Generator, PresetAsset, PresetterConfig, RequiredResolution, ResolvedPresetContext, Template } from 'presetter-types';
2
2
  export declare function getConfigKey(filename: string): string;
3
3
  export declare function loadDynamicMap<F extends DynamicAssetField>(map: PresetAsset[F], context: ResolvedPresetContext<RequiredResolution<F>>): Promise<Record<string, DynamicAsset<F>>>;
4
4
  export declare function loadDynamic<R extends Template | string[], K extends keyof PresetterConfig>(value: string | R | Generator<R, K>, context: ResolvedPresetContext<K>): Promise<R>;