@vertesia/create-plugin 1.3.0 → 1.4.0-dev.20260615.042033Z
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/lib/configuration.d.ts.map +1 -1
- package/lib/configuration.js +2 -19
- package/lib/configuration.js.map +1 -1
- package/lib/download-template.d.ts +3 -0
- package/lib/download-template.d.ts.map +1 -1
- package/lib/download-template.js +10 -9
- package/lib/download-template.js.map +1 -1
- package/lib/index.js +46 -16
- package/lib/index.js.map +1 -1
- package/lib/package-manager.d.ts +3 -0
- package/lib/package-manager.d.ts.map +1 -1
- package/lib/package-manager.js +7 -9
- package/lib/package-manager.js.map +1 -1
- package/lib/post-install.d.ts +4 -1
- package/lib/post-install.d.ts.map +1 -1
- package/lib/post-install.js +17 -19
- package/lib/post-install.js.map +1 -1
- package/lib/process-template.d.ts +7 -4
- package/lib/process-template.d.ts.map +1 -1
- package/lib/process-template.js +52 -27
- package/lib/process-template.js.map +1 -1
- package/lib/prompts.d.ts +5 -2
- package/lib/prompts.d.ts.map +1 -1
- package/lib/prompts.js +21 -8
- package/lib/prompts.js.map +1 -1
- package/lib/template-config.d.ts +3 -1
- package/lib/template-config.d.ts.map +1 -1
- package/lib/template-config.js +2 -2
- package/lib/template-config.js.map +1 -1
- package/lib/template-selector.d.ts +1 -1
- package/lib/template-selector.d.ts.map +1 -1
- package/lib/template-selector.js +7 -7
- package/lib/template-selector.js.map +1 -1
- package/lib/transforms.d.ts +5 -0
- package/lib/transforms.d.ts.map +1 -1
- package/lib/transforms.js +12 -1
- package/lib/transforms.js.map +1 -1
- package/lib/version.d.ts.map +1 -1
- package/lib/version.js +5 -4
- package/lib/version.js.map +1 -1
- package/package.json +9 -8
package/lib/process-template.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Template file processing - variable replacement and adjustments
|
|
3
3
|
*/
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
4
7
|
import chalk from 'chalk';
|
|
5
|
-
import { execSync } from 'child_process';
|
|
6
|
-
import fs from 'fs';
|
|
7
|
-
import path from 'path';
|
|
8
8
|
import { getTemplateVersions } from './version.js';
|
|
9
9
|
/**
|
|
10
10
|
* Get the latest version of an npm package from the registry.
|
|
@@ -14,7 +14,7 @@ function getLatestVersion(packageName) {
|
|
|
14
14
|
try {
|
|
15
15
|
const result = execSync(`npm view ${packageName} version`, {
|
|
16
16
|
encoding: 'utf8',
|
|
17
|
-
stdio: ['pipe', 'pipe', 'ignore']
|
|
17
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
18
18
|
});
|
|
19
19
|
return result.trim();
|
|
20
20
|
}
|
|
@@ -41,6 +41,20 @@ function resolveInternalVersion(pkgName, versionMap) {
|
|
|
41
41
|
const latest = getLatestVersion(pkgName);
|
|
42
42
|
return latest ? { version: latest, pinned: false } : null;
|
|
43
43
|
}
|
|
44
|
+
function rewritePackageManagerScripts(packageJson, packageManager) {
|
|
45
|
+
if (!packageJson.scripts)
|
|
46
|
+
return 0;
|
|
47
|
+
let replacements = 0;
|
|
48
|
+
const runCommand = `${packageManager} run`;
|
|
49
|
+
for (const [scriptName, scriptCommand] of Object.entries(packageJson.scripts)) {
|
|
50
|
+
const updatedCommand = scriptCommand.replace(/\bpnpm run\b/g, runCommand);
|
|
51
|
+
if (updatedCommand !== scriptCommand) {
|
|
52
|
+
packageJson.scripts[scriptName] = updatedCommand;
|
|
53
|
+
replacements++;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return replacements;
|
|
57
|
+
}
|
|
44
58
|
/**
|
|
45
59
|
* Escape special regex characters
|
|
46
60
|
*/
|
|
@@ -52,7 +66,7 @@ function escapeRegex(str) {
|
|
|
52
66
|
*/
|
|
53
67
|
function isCodeFile(filePath) {
|
|
54
68
|
const codeExtensions = ['.js', '.jsx', '.mjs', '.ts', '.tsx'];
|
|
55
|
-
return codeExtensions.some(ext => filePath.endsWith(ext));
|
|
69
|
+
return codeExtensions.some((ext) => filePath.endsWith(ext));
|
|
56
70
|
}
|
|
57
71
|
/**
|
|
58
72
|
* Replace variables in text files (HTML, JSON, Markdown, etc.)
|
|
@@ -83,7 +97,7 @@ function replaceInCodeFile(content, answers) {
|
|
|
83
97
|
// Replaces only the value, keeps the constant declaration
|
|
84
98
|
const configPattern = new RegExp(`(const\\s+CONFIG__${key}\\s*=\\s*)([^;\\n]+)(\\s*;?\\s*\\n?)`, 'gm');
|
|
85
99
|
if (content.match(configPattern)) {
|
|
86
|
-
content = content.replace(configPattern, (
|
|
100
|
+
content = content.replace(configPattern, (_match, prefix, _oldValue, suffix) => {
|
|
87
101
|
return `${prefix}${JSON.stringify(value)}${suffix}`;
|
|
88
102
|
});
|
|
89
103
|
modified = true;
|
|
@@ -111,11 +125,11 @@ export function replaceVariables(projectName, templateConfig, answers) {
|
|
|
111
125
|
if (!templateConfig.files) {
|
|
112
126
|
return;
|
|
113
127
|
}
|
|
114
|
-
console.log(chalk.blue('
|
|
128
|
+
console.log(chalk.blue('Configuring files...\n'));
|
|
115
129
|
for (const file of templateConfig.files) {
|
|
116
130
|
const filePath = path.join(projectName, file);
|
|
117
131
|
if (!fs.existsSync(filePath)) {
|
|
118
|
-
console.log(chalk.yellow(`
|
|
132
|
+
console.log(chalk.yellow(` File not found: ${file} (skipping)`));
|
|
119
133
|
continue;
|
|
120
134
|
}
|
|
121
135
|
let content = fs.readFileSync(filePath, 'utf8');
|
|
@@ -133,7 +147,7 @@ export function replaceVariables(projectName, templateConfig, answers) {
|
|
|
133
147
|
}
|
|
134
148
|
if (modified) {
|
|
135
149
|
fs.writeFileSync(filePath, content);
|
|
136
|
-
console.log(chalk.gray(`
|
|
150
|
+
console.log(chalk.gray(` ${file}`));
|
|
137
151
|
}
|
|
138
152
|
}
|
|
139
153
|
console.log();
|
|
@@ -143,11 +157,11 @@ export function replaceVariables(projectName, templateConfig, answers) {
|
|
|
143
157
|
* 1. Sets the package name to PROJECT_NAME
|
|
144
158
|
* 2. Resolves workspace:* dependencies to actual latest versions
|
|
145
159
|
*/
|
|
146
|
-
export function adjustPackageJson(projectName, answers, isDev) {
|
|
147
|
-
console.log(chalk.blue('
|
|
160
|
+
export function adjustPackageJson(projectName, answers, isDev, packageManager) {
|
|
161
|
+
console.log(chalk.blue('Adjusting package.json...\n'));
|
|
148
162
|
const packageJsonPath = path.join(projectName, 'package.json');
|
|
149
163
|
if (!fs.existsSync(packageJsonPath)) {
|
|
150
|
-
console.log(chalk.yellow('
|
|
164
|
+
console.log(chalk.yellow(' package.json not found (skipping adjustment)'));
|
|
151
165
|
console.log();
|
|
152
166
|
return;
|
|
153
167
|
}
|
|
@@ -157,7 +171,16 @@ export function adjustPackageJson(projectName, answers, isDev) {
|
|
|
157
171
|
const newName = answers.PROJECT_NAME || projectName;
|
|
158
172
|
if (packageJson.name !== newName) {
|
|
159
173
|
packageJson.name = newName;
|
|
160
|
-
console.log(chalk.gray(`
|
|
174
|
+
console.log(chalk.gray(` Set package name to "${newName}"`));
|
|
175
|
+
}
|
|
176
|
+
// Pin the chosen package manager via Corepack
|
|
177
|
+
if (answers.PM_VERSION) {
|
|
178
|
+
packageJson.packageManager = `${packageManager}@${answers.PM_VERSION}`;
|
|
179
|
+
console.log(chalk.gray(` Set packageManager to "${packageJson.packageManager}"`));
|
|
180
|
+
}
|
|
181
|
+
const scriptReplacements = rewritePackageManagerScripts(packageJson, packageManager);
|
|
182
|
+
if (scriptReplacements > 0) {
|
|
183
|
+
console.log(chalk.gray(` Updated ${scriptReplacements} scripts for ${packageManager}`));
|
|
161
184
|
}
|
|
162
185
|
// 2. Replace workspace:* with pinned versions
|
|
163
186
|
const internalScopes = ['@vertesia/', '@llumiverse/', '@dglabs/'];
|
|
@@ -166,10 +189,10 @@ export function adjustPackageJson(projectName, answers, isDev) {
|
|
|
166
189
|
if (versionMap) {
|
|
167
190
|
console.log(chalk.gray(' Using pinned versions from CLI package'));
|
|
168
191
|
}
|
|
169
|
-
['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].forEach(depType => {
|
|
192
|
+
['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].forEach((depType) => {
|
|
170
193
|
if (packageJson[depType]) {
|
|
171
|
-
Object.keys(packageJson[depType]).forEach(pkgName => {
|
|
172
|
-
const isInternalPackage = internalScopes.some(scope => pkgName.startsWith(scope));
|
|
194
|
+
Object.keys(packageJson[depType]).forEach((pkgName) => {
|
|
195
|
+
const isInternalPackage = internalScopes.some((scope) => pkgName.startsWith(scope));
|
|
173
196
|
if (isInternalPackage && packageJson[depType][pkgName] === 'workspace:*') {
|
|
174
197
|
if (isDev) {
|
|
175
198
|
// Dev mode: use 'dev' npm tag
|
|
@@ -180,7 +203,9 @@ export function adjustPackageJson(projectName, answers, isDev) {
|
|
|
180
203
|
const resolved = resolveInternalVersion(pkgName, versionMap);
|
|
181
204
|
if (resolved) {
|
|
182
205
|
// Exact version when from version map, caret range when from registry
|
|
183
|
-
packageJson[depType][pkgName] = resolved.pinned
|
|
206
|
+
packageJson[depType][pkgName] = resolved.pinned
|
|
207
|
+
? resolved.version
|
|
208
|
+
: `^${resolved.version}`;
|
|
184
209
|
workspaceReplacements++;
|
|
185
210
|
}
|
|
186
211
|
else {
|
|
@@ -194,13 +219,13 @@ export function adjustPackageJson(projectName, answers, isDev) {
|
|
|
194
219
|
});
|
|
195
220
|
if (workspaceReplacements > 0) {
|
|
196
221
|
const method = versionMap ? 'pinned' : 'latest';
|
|
197
|
-
console.log(chalk.gray(`
|
|
222
|
+
console.log(chalk.gray(` Resolved ${workspaceReplacements} workspace:* dependencies to ${method} versions`));
|
|
198
223
|
}
|
|
199
224
|
// Write back to file
|
|
200
|
-
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)
|
|
225
|
+
fs.writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`);
|
|
201
226
|
}
|
|
202
227
|
catch (error) {
|
|
203
|
-
console.log(chalk.yellow(`
|
|
228
|
+
console.log(chalk.yellow(` Failed to adjust package.json: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
204
229
|
}
|
|
205
230
|
console.log();
|
|
206
231
|
}
|
|
@@ -210,7 +235,7 @@ export function adjustPackageJson(projectName, answers, isDev) {
|
|
|
210
235
|
export function handleConditionalRemoves(projectName, templateConfig, answers) {
|
|
211
236
|
if (!templateConfig.conditionalRemove)
|
|
212
237
|
return;
|
|
213
|
-
console.log(chalk.blue('
|
|
238
|
+
console.log(chalk.blue('Applying conditional configurations...\n'));
|
|
214
239
|
for (const [varName, conditions] of Object.entries(templateConfig.conditionalRemove)) {
|
|
215
240
|
const value = String(answers[varName]);
|
|
216
241
|
const filesToRemove = conditions[value];
|
|
@@ -219,7 +244,7 @@ export function handleConditionalRemoves(projectName, templateConfig, answers) {
|
|
|
219
244
|
const filePath = path.join(projectName, file);
|
|
220
245
|
if (fs.existsSync(filePath)) {
|
|
221
246
|
fs.rmSync(filePath, { recursive: true, force: true });
|
|
222
|
-
console.log(chalk.gray(`
|
|
247
|
+
console.log(chalk.gray(` Removed: ${file}`));
|
|
223
248
|
}
|
|
224
249
|
}
|
|
225
250
|
}
|
|
@@ -233,16 +258,16 @@ export function handleConditionalRemoves(projectName, templateConfig, answers) {
|
|
|
233
258
|
export function renameFiles(projectName, templateConfig) {
|
|
234
259
|
if (!templateConfig.renameFiles)
|
|
235
260
|
return;
|
|
236
|
-
console.log(chalk.blue('
|
|
261
|
+
console.log(chalk.blue('Renaming files...\n'));
|
|
237
262
|
for (const [source, destination] of Object.entries(templateConfig.renameFiles)) {
|
|
238
263
|
const sourcePath = path.join(projectName, source);
|
|
239
264
|
const destPath = path.join(projectName, destination);
|
|
240
265
|
if (fs.existsSync(sourcePath)) {
|
|
241
266
|
fs.renameSync(sourcePath, destPath);
|
|
242
|
-
console.log(chalk.gray(`
|
|
267
|
+
console.log(chalk.gray(` ${source} → ${destination}`));
|
|
243
268
|
}
|
|
244
269
|
else {
|
|
245
|
-
console.log(chalk.yellow(`
|
|
270
|
+
console.log(chalk.yellow(` File not found: ${source} (skipping rename)`));
|
|
246
271
|
}
|
|
247
272
|
}
|
|
248
273
|
console.log();
|
|
@@ -251,13 +276,13 @@ export function renameFiles(projectName, templateConfig) {
|
|
|
251
276
|
* Remove meta files that shouldn't be in the user's project
|
|
252
277
|
*/
|
|
253
278
|
export function removeMetaFiles(projectName, templateConfig) {
|
|
254
|
-
console.log(chalk.blue('
|
|
279
|
+
console.log(chalk.blue('Cleaning up...\n'));
|
|
255
280
|
const filesToRemove = templateConfig.removeAfterInstall || [];
|
|
256
281
|
for (const file of filesToRemove) {
|
|
257
282
|
const filePath = path.join(projectName, file);
|
|
258
283
|
if (fs.existsSync(filePath)) {
|
|
259
284
|
fs.rmSync(filePath, { recursive: true, force: true });
|
|
260
|
-
console.log(chalk.gray(`
|
|
285
|
+
console.log(chalk.gray(` Removed: ${file}`));
|
|
261
286
|
}
|
|
262
287
|
}
|
|
263
288
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-template.js","sourceRoot":"","sources":["../src/process-template.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"process-template.js","sourceRoot":"","sources":["../src/process-template.ts"],"names":[],"mappings":"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"}
|
package/lib/prompts.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* User prompts for configuration
|
|
3
|
+
*/
|
|
4
|
+
import type { TemplateConfig } from './template-config.js';
|
|
2
5
|
/**
|
|
3
6
|
* Prompt user for configuration values
|
|
4
7
|
* @param nonInteractive - If true, skip prompts and use default/initial values
|
|
5
8
|
*/
|
|
6
|
-
export declare function promptUser(projectName: string, templateConfig: TemplateConfig, nonInteractive?: boolean): Promise<Record<string,
|
|
9
|
+
export declare function promptUser(projectName: string, templateConfig: TemplateConfig, nonInteractive?: boolean): Promise<Record<string, unknown>>;
|
|
7
10
|
//# sourceMappingURL=prompts.d.ts.map
|
package/lib/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQzE;;;GAGG;AACH,wBAAsB,UAAU,CAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,cAAc,UAAQ,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0HlC"}
|
package/lib/prompts.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* User prompts for configuration
|
|
3
3
|
*/
|
|
4
|
-
import prompts from 'prompts';
|
|
5
4
|
import chalk from 'chalk';
|
|
6
|
-
import
|
|
5
|
+
import prompts from 'prompts';
|
|
6
|
+
import { applyMapTransform, applyTransform, concatValues } from './transforms.js';
|
|
7
7
|
/**
|
|
8
8
|
* Prompt user for configuration values
|
|
9
9
|
* @param nonInteractive - If true, skip prompts and use default/initial values
|
|
@@ -13,9 +13,9 @@ export async function promptUser(projectName, templateConfig, nonInteractive = f
|
|
|
13
13
|
return {};
|
|
14
14
|
}
|
|
15
15
|
// Pre-populate PROJECT_NAME from the directory name — skip the prompt entirely
|
|
16
|
-
const filteredPrompts = templateConfig.prompts.filter(p => p.name !== 'PROJECT_NAME');
|
|
16
|
+
const filteredPrompts = templateConfig.prompts.filter((p) => p.name !== 'PROJECT_NAME');
|
|
17
17
|
// Process prompts - replace ${PROJECT_NAME} and other variables in initial values
|
|
18
|
-
const processedPrompts = filteredPrompts.map(p => {
|
|
18
|
+
const processedPrompts = filteredPrompts.map((p) => {
|
|
19
19
|
const prompt = { ...p };
|
|
20
20
|
// Replace ${PROJECT_NAME} in initial values
|
|
21
21
|
if (typeof prompt.initial === 'string') {
|
|
@@ -26,8 +26,9 @@ export async function promptUser(projectName, templateConfig, nonInteractive = f
|
|
|
26
26
|
if (typeof prompt.validate === 'string') {
|
|
27
27
|
const validateStr = prompt.validate;
|
|
28
28
|
if (validateStr.includes('=>') || validateStr.includes('function')) {
|
|
29
|
-
// It's a function string - evaluate it
|
|
29
|
+
// It's a function string - evaluate it (template authors author validators here)
|
|
30
30
|
try {
|
|
31
|
+
// biome-ignore lint/security/noGlobalEval: plugin templates author trusted validator code that must run dynamically
|
|
31
32
|
prompt.validate = eval(validateStr);
|
|
32
33
|
}
|
|
33
34
|
catch {
|
|
@@ -67,11 +68,11 @@ export async function promptUser(projectName, templateConfig, nonInteractive = f
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
else {
|
|
70
|
-
console.log(chalk.blue('
|
|
71
|
+
console.log(chalk.blue('Configure your project:\n'));
|
|
71
72
|
const userAnswers = await prompts(processedPrompts, {
|
|
72
73
|
onCancel: () => {
|
|
73
74
|
throw new Error('Installation cancelled by user');
|
|
74
|
-
}
|
|
75
|
+
},
|
|
75
76
|
});
|
|
76
77
|
// Check if all prompts were answered
|
|
77
78
|
if (Object.keys(userAnswers).length !== processedPrompts.length) {
|
|
@@ -86,7 +87,7 @@ export async function promptUser(projectName, templateConfig, nonInteractive = f
|
|
|
86
87
|
if (derivedConfig.transform === 'concat') {
|
|
87
88
|
// Handle concat transform with multiple source fields
|
|
88
89
|
const sourceFields = Array.isArray(derivedConfig.from) ? derivedConfig.from : [derivedConfig.from];
|
|
89
|
-
const values = sourceFields.map(field => {
|
|
90
|
+
const values = sourceFields.map((field) => {
|
|
90
91
|
const value = answers[field];
|
|
91
92
|
if (value === undefined) {
|
|
92
93
|
throw new Error(`Source field "${field}" not found in answers`);
|
|
@@ -95,6 +96,18 @@ export async function promptUser(projectName, templateConfig, nonInteractive = f
|
|
|
95
96
|
});
|
|
96
97
|
answers[targetName] = concatValues(values, derivedConfig.separator || '');
|
|
97
98
|
}
|
|
99
|
+
else if (derivedConfig.transform === 'map') {
|
|
100
|
+
// Look up the source value in a fixed map
|
|
101
|
+
if (!derivedConfig.map) {
|
|
102
|
+
throw new Error(`"map" transform requires a "map" field`);
|
|
103
|
+
}
|
|
104
|
+
const sourceField = Array.isArray(derivedConfig.from) ? derivedConfig.from[0] : derivedConfig.from;
|
|
105
|
+
const sourceValue = answers[sourceField];
|
|
106
|
+
if (sourceValue === undefined) {
|
|
107
|
+
throw new Error(`Source field "${sourceField}" not found in answers`);
|
|
108
|
+
}
|
|
109
|
+
answers[targetName] = applyMapTransform(String(sourceValue), derivedConfig.map);
|
|
110
|
+
}
|
|
98
111
|
else {
|
|
99
112
|
// Handle single-source transforms
|
|
100
113
|
const sourceField = Array.isArray(derivedConfig.from) ? derivedConfig.from[0] : derivedConfig.from;
|
package/lib/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/lib/template-config.d.ts
CHANGED
|
@@ -68,10 +68,12 @@ export interface PreInstallConfig {
|
|
|
68
68
|
export interface DerivedVariable {
|
|
69
69
|
/** Source variable name(s) to derive from. Can be a single string or array of strings for concat transform */
|
|
70
70
|
from: string | string[];
|
|
71
|
-
/** Transformation to apply: "pascalCase", "camelCase", "kebabCase", "snakeCase", "titleCase", "upperCase", "lowerCase", "concat" */
|
|
71
|
+
/** Transformation to apply: "pascalCase", "camelCase", "kebabCase", "snakeCase", "titleCase", "upperCase", "lowerCase", "concat", "map" */
|
|
72
72
|
transform: string;
|
|
73
73
|
/** Separator for concat transform (default: "") */
|
|
74
74
|
separator?: string;
|
|
75
|
+
/** Lookup table for the "map" transform: { sourceValue: derivedValue } */
|
|
76
|
+
map?: Record<string, string>;
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
79
|
* Configuration for a post-install command
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-config.d.ts","sourceRoot":"","sources":["../src/template-config.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"template-config.d.ts","sourceRoot":"","sources":["../src/template-config.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC3B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAEhB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEhC,2DAA2D;IAC3D,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAE7D;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE1C;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;;OAGG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAE/B,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,8GAA8G;IAC9G,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,2IAA2I;IAC3I,SAAS,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAEhB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,yCAAyC;IACzC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAE/B,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IAEb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAetE"}
|
package/lib/template-config.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Template configuration types and reading
|
|
3
3
|
*/
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
import path from 'path';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
6
|
import { config } from './configuration.js';
|
|
7
7
|
/**
|
|
8
8
|
* Read template.config.json from the downloaded template
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-config.js","sourceRoot":"","sources":["../src/template-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"template-config.js","sourceRoot":"","sources":["../src/template-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwK5C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAErE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACX,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACxG,CAAC;IACN,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TemplateDefinition } from './configuration.js';
|
|
1
|
+
import { type TemplateDefinition } from './configuration.js';
|
|
2
2
|
/**
|
|
3
3
|
* Select a template (only prompts if multiple templates are available)
|
|
4
4
|
* Returns the selected template definition with the resolved git ref applied
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-selector.d.ts","sourceRoot":"","sources":["../src/template-selector.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-selector.d.ts","sourceRoot":"","sources":["../src/template-selector.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAwBrE;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgDhH"}
|
package/lib/template-selector.js
CHANGED
|
@@ -34,9 +34,9 @@ export async function selectTemplate(branchOverride, templateName) {
|
|
|
34
34
|
let selectedTemplate;
|
|
35
35
|
if (templateName) {
|
|
36
36
|
// Non-interactive: find template by name (case-insensitive)
|
|
37
|
-
const match = templates.find(t => t.name.toLowerCase() === templateName.toLowerCase());
|
|
37
|
+
const match = templates.find((t) => t.name.toLowerCase() === templateName.toLowerCase());
|
|
38
38
|
if (!match) {
|
|
39
|
-
const available = templates.map(t => ` - ${t.name}`).join('\n');
|
|
39
|
+
const available = templates.map((t) => ` - ${t.name}`).join('\n');
|
|
40
40
|
throw new Error(`Template "${templateName}" not found. Available templates:\n${available}`);
|
|
41
41
|
}
|
|
42
42
|
selectedTemplate = match;
|
|
@@ -47,20 +47,20 @@ export async function selectTemplate(branchOverride, templateName) {
|
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
49
|
// Multiple templates - let user choose
|
|
50
|
-
console.log(chalk.blue('
|
|
50
|
+
console.log(chalk.blue('Template Selection\n'));
|
|
51
51
|
const response = await prompts({
|
|
52
52
|
type: 'select',
|
|
53
53
|
name: 'template',
|
|
54
54
|
message: 'Which type of project would you like to create?',
|
|
55
55
|
choices: templates.map((template, index) => ({
|
|
56
56
|
title: template.name,
|
|
57
|
-
value: index
|
|
57
|
+
value: index,
|
|
58
58
|
})),
|
|
59
|
-
initial: 0
|
|
59
|
+
initial: 0,
|
|
60
60
|
}, {
|
|
61
61
|
onCancel: () => {
|
|
62
62
|
throw new Error('Installation cancelled by user');
|
|
63
|
-
}
|
|
63
|
+
},
|
|
64
64
|
});
|
|
65
65
|
console.log();
|
|
66
66
|
selectedTemplate = templates[response.template];
|
|
@@ -69,7 +69,7 @@ export async function selectTemplate(branchOverride, templateName) {
|
|
|
69
69
|
const ref = resolveTemplateRef(branchOverride);
|
|
70
70
|
return {
|
|
71
71
|
...selectedTemplate,
|
|
72
|
-
repository: `${selectedTemplate.repository}#${ref}
|
|
72
|
+
repository: `${selectedTemplate.repository}#${ref}`,
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
//# sourceMappingURL=template-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-selector.js","sourceRoot":"","sources":["../src/template-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"template-selector.js","sourceRoot":"","sources":["../src/template-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAA2B,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;;GAOG;AACH,SAAS,kBAAkB,CAAC,cAAuB;IAC/C,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,cAAuB,EAAE,YAAqB;IAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,gBAAoC,CAAC;IAEzC,IAAI,YAAY,EAAE,CAAC;QACf,4DAA4D;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,sCAAsC,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,gBAAgB,GAAG,KAAK,CAAC;IAC7B,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,2CAA2C;QAC3C,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACJ,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC1B;YACI,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,iDAAiD;YAC1D,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzC,KAAK,EAAE,QAAQ,CAAC,IAAI;gBACpB,KAAK,EAAE,KAAK;aACf,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;SACb,EACD;YACI,QAAQ,EAAE,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACtD,CAAC;SACJ,CACJ,CAAC;QAEF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,yCAAyC;IACzC,MAAM,GAAG,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO;QACH,GAAG,gBAAgB;QACnB,UAAU,EAAE,GAAG,gBAAgB,CAAC,UAAU,IAAI,GAAG,EAAE;KACtD,CAAC;AACN,CAAC"}
|
package/lib/transforms.d.ts
CHANGED
|
@@ -34,4 +34,9 @@ export declare function applyTransform(value: string, transform: string): string
|
|
|
34
34
|
* Concatenate multiple values with a separator
|
|
35
35
|
*/
|
|
36
36
|
export declare function concatValues(values: string[], separator?: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Look up a value in a map (used for the "map" transform)
|
|
39
|
+
* @throws Error if the key is not present in the map
|
|
40
|
+
*/
|
|
41
|
+
export declare function applyMapTransform(value: string, map: Record<string, string>): string;
|
|
37
42
|
//# sourceMappingURL=transforms.d.ts.map
|
package/lib/transforms.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAE7E"}
|
|
1
|
+
{"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAE7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAMpF"}
|
package/lib/transforms.js
CHANGED
|
@@ -52,7 +52,7 @@ export function toTitleCase(str) {
|
|
|
52
52
|
.replace(/\s+/g, ' ')
|
|
53
53
|
.trim()
|
|
54
54
|
.split(' ')
|
|
55
|
-
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
55
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
56
56
|
.join(' ');
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
@@ -84,4 +84,15 @@ export function applyTransform(value, transform) {
|
|
|
84
84
|
export function concatValues(values, separator = '') {
|
|
85
85
|
return values.join(separator);
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Look up a value in a map (used for the "map" transform)
|
|
89
|
+
* @throws Error if the key is not present in the map
|
|
90
|
+
*/
|
|
91
|
+
export function applyMapTransform(value, map) {
|
|
92
|
+
if (!(value in map)) {
|
|
93
|
+
const keys = Object.keys(map).join(', ');
|
|
94
|
+
throw new Error(`Value "${value}" has no entry in map (expected one of: ${keys})`);
|
|
95
|
+
}
|
|
96
|
+
return map[value];
|
|
97
|
+
}
|
|
87
98
|
//# sourceMappingURL=transforms.js.map
|
package/lib/transforms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;
|
|
1
|
+
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../src/transforms.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA0BA;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOxE"}
|
package/lib/version.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Reads the CLI's own package.json to get version and templateVersions map.
|
|
5
5
|
*/
|
|
6
|
-
import fs from 'fs';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import { fileURLToPath } from 'url';
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
9
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
let _cached;
|
|
11
11
|
function readCliPackageJson() {
|
|
@@ -13,6 +13,7 @@ function readCliPackageJson() {
|
|
|
13
13
|
return _cached;
|
|
14
14
|
const pkgPath = path.resolve(__dirname, '..', 'package.json');
|
|
15
15
|
_cached = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
16
|
+
// biome-ignore lint/style/noNonNullAssertion: intentional non-null assertion; TS can't prove narrowing here
|
|
16
17
|
return _cached;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
@@ -31,7 +32,7 @@ export function getTemplateVersions() {
|
|
|
31
32
|
if (!pkg.templateVersions)
|
|
32
33
|
return undefined;
|
|
33
34
|
// Only return if versions are actually populated (not the placeholder 0.0.0)
|
|
34
|
-
const hasReal = Object.values(pkg.templateVersions).some(v => v !== '0.0.0');
|
|
35
|
+
const hasReal = Object.values(pkg.templateVersions).some((v) => v !== '0.0.0');
|
|
35
36
|
return hasReal ? pkg.templateVersions : undefined;
|
|
36
37
|
}
|
|
37
38
|
//# sourceMappingURL=version.js.map
|
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAO/D,IAAI,OAAmC,CAAC;AAExC,SAAS,kBAAkB;IACvB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,4GAA4G;IAC5G,OAAO,OAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,kBAAkB,EAAE,CAAC,OAAO,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IAC/B,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,SAAS,CAAC;IAE5C,6EAA6E;IAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC"}
|