presetter 3.1.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/lib/content.d.ts +49 -7
- package/lib/content.js +127 -133
- package/lib/directive.js +67 -196
- package/lib/error.js +12 -36
- package/lib/executable/entry.js +55 -73
- package/lib/executable/error.js +24 -55
- package/lib/executable/index.js +5 -23
- package/lib/index.d.ts +1 -0
- package/lib/index.js +21 -69
- package/lib/io.d.ts +2 -3
- package/lib/io.js +78 -172
- package/lib/package.js +58 -149
- package/lib/preset.d.ts +6 -6
- package/lib/preset.js +149 -297
- package/lib/resolution.d.ts +4 -0
- package/lib/resolution.js +35 -0
- package/lib/run.js +59 -127
- package/lib/scripts.js +52 -128
- package/lib/template.d.ts +4 -1
- package/lib/template.js +85 -141
- package/lib/types.d.ts +24 -7
- package/lib/types.js +2 -1
- package/package.json +10 -2
- package/lib/content.js.map +0 -1
- package/lib/directive.js.map +0 -1
- package/lib/error.js.map +0 -1
- package/lib/executable/entry.js.map +0 -1
- package/lib/executable/error.js.map +0 -1
- package/lib/executable/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/io.js.map +0 -1
- package/lib/package.js.map +0 -1
- package/lib/preset.js.map +0 -1
- package/lib/run.js.map +0 -1
- package/lib/scripts.js.map +0 -1
- package/lib/template.js.map +0 -1
- package/lib/types.js.map +0 -1
package/lib/preset.js
CHANGED
@@ -1,325 +1,177 @@
|
|
1
1
|
"use strict";
|
2
|
-
|
3
|
-
|
4
|
-
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
5
17
|
});
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
exports
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
var _writePkg = _interopRequireDefault(require("write-pkg"));
|
31
|
-
|
32
|
-
var _content = require("./content");
|
33
|
-
|
34
|
-
var _io = require("./io");
|
35
|
-
|
36
|
-
var _package = require("./package");
|
37
|
-
|
38
|
-
var _template = require("./template");
|
39
|
-
|
40
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
41
|
-
|
42
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
43
|
-
|
44
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
45
|
-
|
46
|
-
/** presetter configuration filename */
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
+
};
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
+
exports.getDestinationMap = exports.getContext = exports.unsetPreset = exports.bootstrapContent = exports.bootstrapPreset = exports.setupPreset = exports.getScripts = exports.getPresetGraph = exports.getPresetNode = exports.getPresetAsset = exports.assertPresetterRC = exports.updatePresetterRC = exports.getPresetterRC = void 0;
|
30
|
+
const console_1 = require("console");
|
31
|
+
const fs_extra_1 = require("fs-extra");
|
32
|
+
const lodash_1 = require("lodash");
|
33
|
+
const path_1 = require("path");
|
34
|
+
const read_pkg_1 = __importDefault(require("read-pkg"));
|
35
|
+
const resolve_pkg_1 = __importDefault(require("resolve-pkg"));
|
36
|
+
const write_pkg_1 = __importDefault(require("write-pkg"));
|
37
|
+
const content_1 = require("./content");
|
38
|
+
const io_1 = require("./io");
|
39
|
+
const package_1 = require("./package");
|
40
|
+
const template_1 = require("./template");
|
47
41
|
const PRESETTERRC = '.presetterrc';
|
48
42
|
const JSON_INDENT = 2;
|
49
|
-
/**
|
50
|
-
* get the .presetterrc configuration file content
|
51
|
-
* @param root the base directory in which the configuration file should be located
|
52
|
-
* @returns content of the configuration file
|
53
|
-
*/
|
54
|
-
|
55
43
|
async function getPresetterRC(root) {
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
return custom;
|
44
|
+
const potentialConfigFiles = ['', '.json'].map((ext) => (0, path_1.resolve)(root, `${PRESETTERRC}${ext}`));
|
45
|
+
for (const path of potentialConfigFiles) {
|
46
|
+
if (await (0, fs_extra_1.pathExists)(path)) {
|
47
|
+
const custom = await (0, io_1.loadFile)(path, 'json');
|
48
|
+
assertPresetterRC(custom);
|
49
|
+
return custom;
|
50
|
+
}
|
64
51
|
}
|
65
|
-
|
66
|
-
|
67
|
-
throw new Error('Missing preset defined in .presetterrc');
|
52
|
+
throw new Error('Missing preset defined in .presetterrc');
|
68
53
|
}
|
69
|
-
|
70
|
-
* update .presetterrc configuration file content
|
71
|
-
* @param root the base directory in which the configuration file should be located
|
72
|
-
* @param config content to be merged with the existing configuration file
|
73
|
-
*/
|
74
|
-
|
75
|
-
|
54
|
+
exports.getPresetterRC = getPresetterRC;
|
76
55
|
async function updatePresetterRC(root, config) {
|
77
|
-
|
78
|
-
|
79
|
-
spaces: JSON_INDENT
|
80
|
-
});
|
56
|
+
const existingPresetterRC = await getPresetterRC(root).catch(() => ({}));
|
57
|
+
await (0, fs_extra_1.writeJSON)((0, path_1.resolve)(root, `${PRESETTERRC}.json`), (0, template_1.merge)(existingPresetterRC, config), { spaces: JSON_INDENT });
|
81
58
|
}
|
82
|
-
|
83
|
-
* check that the configuration is valid
|
84
|
-
* @param value content from a configuration file
|
85
|
-
*/
|
86
|
-
|
87
|
-
|
59
|
+
exports.updatePresetterRC = updatePresetterRC;
|
88
60
|
function assertPresetterRC(value) {
|
89
|
-
|
90
|
-
|
91
|
-
|
61
|
+
if (!(0, template_1.isJSON)(value) ||
|
62
|
+
(typeof value['preset'] !== 'string' && !Array.isArray(value['preset']))) {
|
63
|
+
throw new Error(`invalid presetter configuration file`);
|
64
|
+
}
|
92
65
|
}
|
93
|
-
|
94
|
-
|
95
|
-
* @param context context about the target project and any customisation in .presetterrc
|
96
|
-
* @returns name of the preset package
|
97
|
-
*/
|
98
|
-
|
99
|
-
|
100
|
-
async function getPresetAssets(context) {
|
101
|
-
// get the preset name
|
102
|
-
const {
|
103
|
-
preset
|
104
|
-
} = context.custom;
|
105
|
-
const presets = Array.isArray(preset) ? preset : [preset];
|
106
|
-
const assets = [];
|
107
|
-
|
108
|
-
for (const preset of presets) {
|
66
|
+
exports.assertPresetterRC = assertPresetterRC;
|
67
|
+
async function getPresetAsset(name, context) {
|
109
68
|
try {
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
} = await Promise.resolve(`${module}`).then(s => _interopRequireWildcard(require(s)));
|
119
|
-
const asset = await presetPresetAsset(context); // add extended assets first
|
120
|
-
|
121
|
-
const extensions = (_asset$extends$map = (_asset$extends = asset.extends) === null || _asset$extends === void 0 ? void 0 : _asset$extends.map(async extension => getPresetAssets({ ...context,
|
122
|
-
custom: { ...context.custom,
|
123
|
-
preset: extension
|
124
|
-
}
|
125
|
-
}))) !== null && _asset$extends$map !== void 0 ? _asset$extends$map : [];
|
126
|
-
assets.push(...(await Promise.all(extensions)).flat()); // then asset from this preset so that this preset can override the extended ones
|
127
|
-
|
128
|
-
assets.push(asset);
|
129
|
-
} catch {
|
130
|
-
throw new Error(`cannot resolve preset ${preset}`);
|
69
|
+
const module = (0, resolve_pkg_1.default)(name, {
|
70
|
+
cwd: context.target.root,
|
71
|
+
});
|
72
|
+
const { default: presetPresetAsset } = (await Promise.resolve().then(() => __importStar(require(module))));
|
73
|
+
return await presetPresetAsset(context);
|
74
|
+
}
|
75
|
+
catch (_a) {
|
76
|
+
throw new Error(`cannot resolve preset ${name}`);
|
131
77
|
}
|
132
|
-
}
|
133
|
-
|
134
|
-
return assets;
|
135
78
|
}
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
async function getScripts(context) {
|
144
|
-
const {
|
145
|
-
custom
|
146
|
-
} = context; // get assets from all configured presets
|
147
|
-
|
148
|
-
const assets = await getPresetAssets(context); // compute the final variable to be used in the scripts template
|
149
|
-
|
150
|
-
const variable = (0, _content.getVariable)(assets, context); // load templated scripts from presets
|
151
|
-
|
152
|
-
const scripts = await Promise.all(assets.map(asset => asset.scripts).filter(path => typeof path === 'string').map(async path => await (0, _io.loadFile)(path, 'yaml'))); // merge all template scripts from presets
|
153
|
-
|
154
|
-
const scriptsFromPreset = scripts.reduce((merged, scripts) => (0, _template.merge)(merged, scripts), {}); // merge customised scripts with the preset scripts
|
155
|
-
|
156
|
-
const scriptsWithCustomConfig = (0, _template.merge)(scriptsFromPreset, custom.scripts); // replace the template variables
|
157
|
-
|
158
|
-
return (0, _template.template)(scriptsWithCustomConfig, variable);
|
79
|
+
exports.getPresetAsset = getPresetAsset;
|
80
|
+
async function getPresetNode(name, context) {
|
81
|
+
var _a;
|
82
|
+
const asset = await getPresetAsset(name, context);
|
83
|
+
const nodes = await Promise.all(((_a = asset.extends) !== null && _a !== void 0 ? _a : []).map(async (extension) => getPresetNode(extension, context)));
|
84
|
+
return { name, asset, nodes };
|
159
85
|
}
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
async function setupPreset(...uris) {
|
167
|
-
// NOTE: comparing packages before and after installation is the only reliable way
|
168
|
-
// to extract the name of the preset in case it's given as a git url or file path etc.
|
169
|
-
const {
|
170
|
-
path
|
171
|
-
} = await (0, _package.getPackage)();
|
172
|
-
const root = (0, _path.dirname)(path);
|
173
|
-
const packageBefore = (await (0, _readPkg.default)({
|
174
|
-
cwd: root
|
175
|
-
})).devDependencies; // install presetter & the preset
|
176
|
-
|
177
|
-
(0, _console.info)(`Installing ${uris.join(' ')}... it may take a few moment...`);
|
178
|
-
await (0, _package.reifyDependencies)({
|
179
|
-
root,
|
180
|
-
add: ['presetter', ...uris],
|
181
|
-
saveAs: 'dev',
|
182
|
-
lockFile: true
|
183
|
-
}); // extract the name of the installed preset
|
184
|
-
|
185
|
-
const packageAfter = (await (0, _readPkg.default)({
|
186
|
-
cwd: root
|
187
|
-
})).devDependencies;
|
188
|
-
const newPackages = getNewPackages({ ...packageBefore
|
189
|
-
}, { ...packageAfter
|
190
|
-
});
|
191
|
-
const preset = newPackages.filter(name => name !== 'presetter');
|
192
|
-
(0, _console.info)('Updating .presetterrc.json & package.json'); // update .presetterrc.json
|
193
|
-
|
194
|
-
await updatePresetterRC(root, {
|
195
|
-
preset
|
196
|
-
}); // bootstrap configuration files with the new .presetterrc.json
|
197
|
-
|
198
|
-
const context = await getContext();
|
199
|
-
await bootstrapContent(context); // insert post install script if not preset
|
200
|
-
|
201
|
-
await (0, _writePkg.default)(root, (0, _lodash.defaultsDeep)(context.target.package, {
|
202
|
-
scripts: {
|
203
|
-
prepare: 'presetter bootstrap'
|
204
|
-
}
|
205
|
-
}));
|
206
|
-
(0, _console.info)('Done. Enjoy coding!');
|
86
|
+
exports.getPresetNode = getPresetNode;
|
87
|
+
async function getPresetGraph(context) {
|
88
|
+
const { preset } = context.custom;
|
89
|
+
const presets = Array.isArray(preset) ? preset : [preset];
|
90
|
+
return Promise.all(presets.map(async (name) => getPresetNode(name, context)));
|
207
91
|
}
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
92
|
+
exports.getPresetGraph = getPresetGraph;
|
93
|
+
async function getScripts() {
|
94
|
+
const context = await getContext();
|
95
|
+
const graph = await getPresetGraph(context);
|
96
|
+
const resolvedContext = await (0, content_1.resolveContext)({ graph, context });
|
97
|
+
return (0, content_1.resolveScripts)({ graph, context: resolvedContext });
|
98
|
+
}
|
99
|
+
exports.getScripts = getScripts;
|
100
|
+
async function setupPreset(...uris) {
|
101
|
+
const { path } = await (0, package_1.getPackage)();
|
102
|
+
const root = (0, path_1.dirname)(path);
|
103
|
+
const packageBefore = (await (0, read_pkg_1.default)({ cwd: root })).devDependencies;
|
104
|
+
(0, console_1.info)(`Installing ${uris.join(' ')}... it may take a few moment...`);
|
105
|
+
await (0, package_1.reifyDependencies)({
|
106
|
+
root,
|
107
|
+
add: ['presetter', ...uris],
|
108
|
+
saveAs: 'dev',
|
109
|
+
lockFile: true,
|
225
110
|
});
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
111
|
+
const packageAfter = (await (0, read_pkg_1.default)({ cwd: root })).devDependencies;
|
112
|
+
const newPackages = getNewPackages(Object.assign({}, packageBefore), Object.assign({}, packageAfter));
|
113
|
+
const preset = newPackages.filter((name) => name !== 'presetter');
|
114
|
+
(0, console_1.info)('Updating .presetterrc.json & package.json');
|
115
|
+
await updatePresetterRC(root, { preset });
|
116
|
+
const context = await getContext();
|
117
|
+
await bootstrapContent(context);
|
118
|
+
await (0, write_pkg_1.default)(root, (0, lodash_1.defaultsDeep)(context.target.package, {
|
119
|
+
scripts: { prepare: 'presetter bootstrap' },
|
120
|
+
}));
|
121
|
+
(0, console_1.info)('Done. Enjoy coding!');
|
122
|
+
}
|
123
|
+
exports.setupPreset = setupPreset;
|
124
|
+
async function bootstrapPreset() {
|
125
|
+
const context = await getContext();
|
126
|
+
if (!(0, package_1.arePeerPackagesAutoInstalled)()) {
|
127
|
+
await (0, package_1.reifyDependencies)({ root: context.target.root });
|
128
|
+
}
|
129
|
+
await bootstrapContent(context);
|
230
130
|
}
|
231
|
-
|
232
|
-
* generate files from templates and link them to the target project root
|
233
|
-
* @param context context about the target project and any customisation in .presetterrc
|
234
|
-
*/
|
235
|
-
|
236
|
-
|
131
|
+
exports.bootstrapPreset = bootstrapPreset;
|
237
132
|
async function bootstrapContent(context) {
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
const presetIgnores = (await Promise.all(assets.map(({
|
245
|
-
supplementaryIgnores
|
246
|
-
}) => supplementaryIgnores instanceof Function ? supplementaryIgnores(resolvedContext) : supplementaryIgnores))).filter(rules => !!rules).flat();
|
247
|
-
const filteredContent = (0, _template.filter)(content, ...presetIgnores, ...userIgnores);
|
248
|
-
const destinationMap = await getDestinationMap(filteredContent, resolvedContext);
|
249
|
-
await (0, _io.writeFiles)(context.target.root, filteredContent, destinationMap);
|
250
|
-
await (0, _io.linkFiles)(context.target.root, destinationMap);
|
133
|
+
const graph = await getPresetGraph(context);
|
134
|
+
const resolvedContext = await (0, content_1.resolveContext)({ graph, context });
|
135
|
+
const content = await (0, content_1.resolveTemplate)({ graph, context: resolvedContext });
|
136
|
+
const destinationMap = await getDestinationMap(content, resolvedContext);
|
137
|
+
await (0, io_1.writeFiles)(context.target.root, content, destinationMap);
|
138
|
+
await (0, io_1.linkFiles)(context.target.root, destinationMap);
|
251
139
|
}
|
252
|
-
|
253
|
-
* uninstall the preset from the current project root
|
254
|
-
*/
|
255
|
-
|
256
|
-
|
140
|
+
exports.bootstrapContent = bootstrapContent;
|
257
141
|
async function unsetPreset() {
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
142
|
+
const context = await getContext();
|
143
|
+
const graph = await getPresetGraph(context);
|
144
|
+
const resolvedContext = await (0, content_1.resolveContext)({ graph, context });
|
145
|
+
const content = await (0, content_1.resolveTemplate)({ graph, context: resolvedContext });
|
146
|
+
const configurationLink = await getDestinationMap(content, resolvedContext);
|
147
|
+
await (0, io_1.unlinkFiles)(context.target.root, configurationLink);
|
264
148
|
}
|
265
|
-
|
266
|
-
* get context about the target project and any customisation in .presetterrc
|
267
|
-
* @returns context about the target project and any customisation in .presetterrc
|
268
|
-
*/
|
269
|
-
|
270
|
-
|
149
|
+
exports.unsetPreset = unsetPreset;
|
271
150
|
async function getContext() {
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
package: json
|
281
|
-
};
|
282
|
-
const custom = await getPresetterRC(root);
|
283
|
-
return {
|
284
|
-
target,
|
285
|
-
custom
|
286
|
-
};
|
151
|
+
const { json, path } = await (0, package_1.getPackage)();
|
152
|
+
const root = (0, path_1.dirname)(path);
|
153
|
+
const target = { name: json.name, root, package: json };
|
154
|
+
const custom = await getPresetterRC(root);
|
155
|
+
return {
|
156
|
+
target,
|
157
|
+
custom,
|
158
|
+
};
|
287
159
|
}
|
288
|
-
|
289
|
-
* compute the output paths of all configuration files to be generated
|
290
|
-
* @param template resolved template map
|
291
|
-
* @param context resolved context about the target project and customisation
|
292
|
-
* @returns mapping of configuration symlinks to its real path
|
293
|
-
*/
|
294
|
-
|
295
|
-
|
160
|
+
exports.getContext = getContext;
|
296
161
|
async function getDestinationMap(template, context) {
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
cwd: root
|
308
|
-
});
|
309
|
-
const outDir = (0, _path.resolve)(presetterDir, 'generated', context.target.name);
|
310
|
-
const relativePaths = [...Object.keys(template)];
|
311
|
-
return Object.fromEntries([...relativePaths.map(relativePath => [relativePath, (0, _path.resolve)( // output on the project root if it's specified as not a symlink
|
312
|
-
noSymlinks.includes(relativePath) ? context.target.root : outDir, relativePath)])]);
|
162
|
+
const { custom: { noSymlinks }, target: { root }, } = context;
|
163
|
+
const presetterDir = (0, resolve_pkg_1.default)('presetter', { cwd: root });
|
164
|
+
const outDir = (0, path_1.resolve)(presetterDir, 'generated', context.target.name);
|
165
|
+
const relativePaths = [...Object.keys(template)];
|
166
|
+
return Object.fromEntries([
|
167
|
+
...relativePaths.map((relativePath) => [
|
168
|
+
relativePath,
|
169
|
+
(0, path_1.resolve)(noSymlinks.includes(relativePath) ? context.target.root : outDir, relativePath),
|
170
|
+
]),
|
171
|
+
]);
|
313
172
|
}
|
314
|
-
|
315
|
-
* get a list of new packages installed by comparing the before and after state of devDependencies in package.json
|
316
|
-
* @param before before state of devDependencies in package.json
|
317
|
-
* @param after after state of devDependencies in package.json
|
318
|
-
* @returns list of new package names
|
319
|
-
*/
|
320
|
-
|
321
|
-
|
173
|
+
exports.getDestinationMap = getDestinationMap;
|
322
174
|
function getNewPackages(before, after) {
|
323
|
-
|
175
|
+
return Object.keys(after).filter((name) => !before[name]);
|
324
176
|
}
|
325
|
-
//# sourceMappingURL=
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3ByZXNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWVBLHFDQUErQjtBQUMvQix1Q0FBaUQ7QUFDakQsbUNBQXNDO0FBQ3RDLCtCQUF3QztBQUN4Qyx3REFBbUM7QUFDbkMsOERBQXlDO0FBQ3pDLDBEQUFxQztBQUVyQyx1Q0FBNEU7QUFDNUUsNkJBQW9FO0FBQ3BFLHVDQUltQjtBQUNuQix5Q0FBMkM7QUFjM0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO0FBRW5DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQWtCZixLQUFLLFVBQVUsY0FBYyxDQUFDLElBQVk7SUFDL0MsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNyRCxJQUFBLGNBQU8sRUFBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FDdEMsQ0FBQztJQUVGLEtBQUssTUFBTSxJQUFJLElBQUksb0JBQW9CLEVBQUU7UUFDdkMsSUFBSSxNQUFNLElBQUEscUJBQVUsRUFBQyxJQUFJLENBQUMsRUFBRTtZQUUxQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsYUFBUSxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxQixPQUFPLE1BQU0sQ0FBQztTQUNmO0tBQ0Y7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQWhCRCx3Q0FnQkM7QUFPTSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLElBQVksRUFDWixNQUF1QjtJQUV2QixNQUFNLG1CQUFtQixHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekUsTUFBTSxJQUFBLG9CQUFTLEVBQ2IsSUFBQSxjQUFPLEVBQUMsSUFBSSxFQUFFLEdBQUcsV0FBVyxPQUFPLENBQUMsRUFDcEMsSUFBQSxnQkFBSyxFQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxFQUNsQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FDeEIsQ0FBQztBQUNKLENBQUM7QUFYRCw4Q0FXQztBQU1ELFNBQWdCLGlCQUFpQixDQUMvQixLQUFjO0lBRWQsSUFDRSxDQUFDLElBQUEsaUJBQU0sRUFBQyxLQUFLLENBQUM7UUFDZCxDQUFDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDeEU7UUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBVEQsOENBU0M7QUFPTSxLQUFLLFVBQVUsY0FBYyxDQUNsQyxJQUFZLEVBQ1osT0FBc0I7SUFFdEIsSUFBSTtRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQWMsRUFBQyxJQUFJLEVBQUU7WUFDbEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSTtTQUN6QixDQUFDLENBQUM7UUFFSCxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyx3REFBYSxNQUFPLEdBQUMsQ0FFNUQsQ0FBQztRQUVGLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN6QztJQUFDLFdBQU07UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQWxCRCx3Q0FrQkM7QUFRTSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxJQUFZLEVBQ1osT0FBc0I7O0lBRXRCLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzdCLENBQUMsTUFBQSxLQUFLLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQzVDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQ2xDLENBQ0YsQ0FBQztJQUVGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFaRCxzQ0FZQztBQU9NLEtBQUssVUFBVSxjQUFjLENBQ2xDLE9BQXNCO0lBR3RCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRWxDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUxRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBVEQsd0NBU0M7QUFNTSxLQUFLLFVBQVUsVUFBVTtJQUM5QixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBQSx3QkFBYyxFQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFakUsT0FBTyxJQUFBLHdCQUFjLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQU5ELGdDQU1DO0FBTU0sS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFHLElBQWM7SUFHakQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBQSxvQkFBVSxHQUFFLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLElBQUEsa0JBQVcsRUFBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBR3pFLElBQUEsY0FBSSxFQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNwRSxNQUFNLElBQUEsMkJBQWlCLEVBQUM7UUFDdEIsSUFBSTtRQUNKLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixNQUFNLEVBQUUsS0FBSztRQUNiLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBR0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLElBQUEsa0JBQVcsRUFBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLGNBQWMsbUJBQU0sYUFBYSxxQkFBUyxZQUFZLEVBQUcsQ0FBQztJQUM5RSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7SUFFbEUsSUFBQSxjQUFJLEVBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUVsRCxNQUFNLGlCQUFpQixDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFHMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBR2hDLE1BQU0sSUFBQSxtQkFBWSxFQUNoQixJQUFJLEVBQ0osSUFBQSxxQkFBWSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ25DLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRTtLQUM1QyxDQUF5QyxDQUMzQyxDQUFDO0lBRUYsSUFBQSxjQUFJLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBdENELGtDQXNDQztBQUtNLEtBQUssVUFBVSxlQUFlO0lBQ25DLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7SUFHbkMsSUFBSSxDQUFDLElBQUEsc0NBQTRCLEdBQUUsRUFBRTtRQUNuQyxNQUFNLElBQUEsMkJBQWlCLEVBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3hEO0lBR0QsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBVkQsMENBVUM7QUFNTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsT0FBc0I7SUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUJBQWUsRUFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUUzRSxNQUFNLGNBQWMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV6RSxNQUFNLElBQUEsZUFBVSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMvRCxNQUFNLElBQUEsY0FBUyxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFURCw0Q0FTQztBQUtNLEtBQUssVUFBVSxXQUFXO0lBQy9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLHdCQUFjLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUJBQWUsRUFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sSUFBQSxnQkFBVyxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDNUQsQ0FBQztBQVJELGtDQVFDO0FBTU0sS0FBSyxVQUFVLFVBQVU7SUFDOUIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUEsb0JBQVUsR0FBRSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxQyxPQUFPO1FBQ0wsTUFBTTtRQUNOLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQVZELGdDQVVDO0FBUU0sS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxRQUFrQyxFQUNsQyxPQUE0QztJQUU1QyxNQUFNLEVBQ0osTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQ3RCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxHQUNqQixHQUFHLE9BQU8sQ0FBQztJQUVaLE1BQU0sWUFBWSxHQUFHLElBQUEscUJBQWMsRUFBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxZQUFhLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVqRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDeEIsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFvQixFQUFFLENBQUM7WUFDdkQsWUFBWTtZQUNaLElBQUEsY0FBTyxFQUVMLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQ2hFLFlBQVksQ0FDYjtTQUNGLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBeEJELDhDQXdCQztBQVFELFNBQVMsY0FBYyxDQUNyQixNQUE4QixFQUM5QixLQUE2QjtJQUU3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIn0=
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { DynamicAsset, DynamicAssetField, Generator, PresetAsset, PresetterConfig, RequiredResolution, ResolvedPresetContext, Template } from './types';
|
2
|
+
export declare function getConfigKey(filename: string): string;
|
3
|
+
export declare function loadDynamicMap<F extends DynamicAssetField>(map: PresetAsset[F], context: ResolvedPresetContext<RequiredResolution<F>>): Promise<Record<string, DynamicAsset<F>>>;
|
4
|
+
export declare function loadDynamic<R extends Template | string[], K extends keyof PresetterConfig>(value: string | R | Generator<R, K>, context: ResolvedPresetContext<K>): Promise<R>;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.loadDynamic = exports.loadDynamicMap = exports.getConfigKey = void 0;
|
4
|
+
const fs_extra_1 = require("fs-extra");
|
5
|
+
const path_1 = require("path");
|
6
|
+
const io_1 = require("./io");
|
7
|
+
function getConfigKey(filename) {
|
8
|
+
return (0, path_1.basename)(filename, (0, path_1.extname)(filename))
|
9
|
+
.replace(/^\./, '')
|
10
|
+
.replace(/rc$/, '')
|
11
|
+
.replace(/\.config$/, '');
|
12
|
+
}
|
13
|
+
exports.getConfigKey = getConfigKey;
|
14
|
+
async function loadDynamicMap(map, context) {
|
15
|
+
return Object.fromEntries(await Promise.all(Object.entries(map instanceof Function
|
16
|
+
? await map(context)
|
17
|
+
: Object.assign({}, map)).map(async ([relativePath, value]) => [
|
18
|
+
relativePath,
|
19
|
+
await loadDynamic(value, context),
|
20
|
+
])));
|
21
|
+
}
|
22
|
+
exports.loadDynamicMap = loadDynamicMap;
|
23
|
+
async function loadDynamic(value, context) {
|
24
|
+
if (typeof value === 'function') {
|
25
|
+
return value(context);
|
26
|
+
}
|
27
|
+
else if (typeof value === 'string' && (await (0, fs_extra_1.pathExists)(value))) {
|
28
|
+
return (await (0, io_1.loadFile)(value));
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
return value;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
exports.loadDynamic = loadDynamic;
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVBLHVDQUFzQztBQUN0QywrQkFBeUM7QUFFekMsNkJBQWdDO0FBa0JoQyxTQUFnQixZQUFZLENBQUMsUUFBZ0I7SUFDM0MsT0FBTyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsSUFBQSxjQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7U0FDekMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7U0FDbEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7U0FDbEIsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBTEQsb0NBS0M7QUFRTSxLQUFLLFVBQVUsY0FBYyxDQUNsQyxHQUFtQixFQUNuQixPQUFxRDtJQUdyRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQUcsWUFBWSxRQUFRO1FBQ3JCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFnQyxDQUFDO1FBQzdDLENBQUMsbUJBQU0sR0FBRyxDQUFFLENBQ2YsQ0FBQyxHQUFHLENBQ0gsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUEwQixFQUFFLENBQUM7UUFDdkQsWUFBWTtRQUNaLE1BQU0sV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFnQyxDQUFDO0tBQzNELENBQ0YsQ0FDRixDQUNGLENBQUM7QUFDSixDQUFDO0FBbkJELHdDQW1CQztBQVFNLEtBQUssVUFBVSxXQUFXLENBSS9CLEtBR21CLEVBQ25CLE9BQWlDO0lBRWpDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3ZCO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUEscUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2pFLE9BQU8sQ0FBQyxNQUFNLElBQUEsYUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFNLENBQUM7S0FDckM7U0FBTTtRQUNMLE9BQU8sS0FBVSxDQUFDO0tBQ25CO0FBQ0gsQ0FBQztBQWpCRCxrQ0FpQkMifQ==
|