appshot-cli 0.8.7 → 0.9.1
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 +784 -15
- package/dist/cli.js +24 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +16 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +382 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/order.d.ts +3 -0
- package/dist/commands/order.d.ts.map +1 -0
- package/dist/commands/order.js +321 -0
- package/dist/commands/order.js.map +1 -0
- package/dist/commands/preset.d.ts +5 -0
- package/dist/commands/preset.d.ts.map +1 -0
- package/dist/commands/preset.js +191 -0
- package/dist/commands/preset.js.map +1 -0
- package/dist/commands/quickstart.d.ts +3 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +326 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/style.d.ts.map +1 -1
- package/dist/commands/style.js +98 -0
- package/dist/commands/style.js.map +1 -1
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +399 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/core/compose.d.ts +16 -0
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +342 -83
- package/dist/core/compose.js.map +1 -1
- package/dist/services/doctor.js +1 -1
- package/dist/services/export-validator.d.ts +23 -0
- package/dist/services/export-validator.d.ts.map +1 -0
- package/dist/services/export-validator.js +209 -0
- package/dist/services/export-validator.js.map +1 -0
- package/dist/services/fastlane-config-generator.d.ts +17 -0
- package/dist/services/fastlane-config-generator.d.ts.map +1 -0
- package/dist/services/fastlane-config-generator.js +343 -0
- package/dist/services/fastlane-config-generator.js.map +1 -0
- package/dist/services/fastlane-language-mapper.d.ts +33 -0
- package/dist/services/fastlane-language-mapper.d.ts.map +1 -0
- package/dist/services/fastlane-language-mapper.js +167 -0
- package/dist/services/fastlane-language-mapper.js.map +1 -0
- package/dist/services/screenshot-order.d.ts +41 -0
- package/dist/services/screenshot-order.d.ts.map +1 -0
- package/dist/services/screenshot-order.js +211 -0
- package/dist/services/screenshot-order.js.map +1 -0
- package/dist/services/screenshot-organizer.d.ts +44 -0
- package/dist/services/screenshot-organizer.d.ts.map +1 -0
- package/dist/services/screenshot-organizer.js +234 -0
- package/dist/services/screenshot-organizer.js.map +1 -0
- package/dist/templates/registry.d.ts +73 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +724 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/validation.d.ts +36 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +143 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import pc from 'picocolors';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import { loadConfig } from '../core/files.js';
|
|
7
|
+
import { templates, getTemplate, applyTemplateToConfig, getTemplateCaptionSuggestions, getTemplateCategories } from '../templates/registry.js';
|
|
8
|
+
import { validateTemplateId, sanitizeCaption, validateJson } from '../utils/validation.js';
|
|
9
|
+
export default function templateCmd() {
|
|
10
|
+
const cmd = new Command('template')
|
|
11
|
+
.description('Apply professional screenshot templates for quick App Store setup')
|
|
12
|
+
.argument('[template]', 'template ID to apply (e.g., modern, minimal, bold)')
|
|
13
|
+
.option('--list', 'list all available templates')
|
|
14
|
+
.option('--preview <id>', 'preview template configuration')
|
|
15
|
+
.option('--caption <text>', 'add a single caption to all screenshots')
|
|
16
|
+
.option('--captions <json>', 'add multiple captions as JSON')
|
|
17
|
+
.option('--device <name>', 'apply template to specific device only')
|
|
18
|
+
.option('--no-backup', 'skip creating backup of current config')
|
|
19
|
+
.option('--dry-run', 'preview changes without applying')
|
|
20
|
+
.addHelpText('after', `
|
|
21
|
+
${pc.bold('Available Templates:')}
|
|
22
|
+
${pc.cyan('modern')} - Eye-catching gradient with floating device
|
|
23
|
+
${pc.cyan('minimal')} - Soft pastel background with elegant typography
|
|
24
|
+
${pc.cyan('bold')} - Dark dramatic gradient with overlay captions
|
|
25
|
+
${pc.cyan('elegant')} - Sophisticated monochrome design
|
|
26
|
+
${pc.cyan('showcase')} - Custom backgrounds with partial frames
|
|
27
|
+
${pc.cyan('playful')} - Bright, fun gradients for games
|
|
28
|
+
${pc.cyan('corporate')} - Clean, professional for business apps
|
|
29
|
+
|
|
30
|
+
${pc.bold('Examples:')}
|
|
31
|
+
${pc.dim('# Apply a template')}
|
|
32
|
+
$ appshot template modern
|
|
33
|
+
|
|
34
|
+
${pc.dim('# Apply with caption')}
|
|
35
|
+
$ appshot template minimal --caption "Beautiful & Simple"
|
|
36
|
+
|
|
37
|
+
${pc.dim('# List all templates')}
|
|
38
|
+
$ appshot template --list
|
|
39
|
+
|
|
40
|
+
${pc.dim('# Preview template settings')}
|
|
41
|
+
$ appshot template --preview bold
|
|
42
|
+
|
|
43
|
+
${pc.dim('# Apply to specific device')}
|
|
44
|
+
$ appshot template elegant --device iphone
|
|
45
|
+
|
|
46
|
+
${pc.bold('Quick Start:')}
|
|
47
|
+
$ appshot template modern --caption "Your App Name"
|
|
48
|
+
$ appshot build
|
|
49
|
+
|
|
50
|
+
${pc.bold('Output:')}
|
|
51
|
+
Updates ${pc.cyan('.appshot/config.json')} with template settings`)
|
|
52
|
+
.action(async (templateId, opts) => {
|
|
53
|
+
try {
|
|
54
|
+
// List templates
|
|
55
|
+
if (opts.list) {
|
|
56
|
+
listTemplates();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Preview template
|
|
60
|
+
if (opts.preview) {
|
|
61
|
+
if (!validateTemplateId(opts.preview)) {
|
|
62
|
+
console.error(pc.red(`Template "${opts.preview}" not found`));
|
|
63
|
+
console.log(pc.dim('Run "appshot template --list" to see available templates'));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
previewTemplate(opts.preview);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Interactive selection if no template specified
|
|
70
|
+
if (!templateId) {
|
|
71
|
+
templateId = await selectTemplate();
|
|
72
|
+
}
|
|
73
|
+
// Validate template
|
|
74
|
+
if (!validateTemplateId(templateId)) {
|
|
75
|
+
console.error(pc.red(`Template "${templateId}" not found`));
|
|
76
|
+
console.log(pc.dim('Run "appshot template --list" to see available templates'));
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const template = getTemplate(templateId);
|
|
80
|
+
if (!template) {
|
|
81
|
+
// This shouldn't happen after validation, but keep as safety
|
|
82
|
+
console.error(pc.red(`Template "${templateId}" not found`));
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// Load current configuration
|
|
86
|
+
const configPath = path.join(process.cwd(), '.appshot', 'config.json');
|
|
87
|
+
let config;
|
|
88
|
+
try {
|
|
89
|
+
config = await loadConfig();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
console.log(pc.yellow('No existing config found, creating new one'));
|
|
93
|
+
config = createDefaultConfig();
|
|
94
|
+
}
|
|
95
|
+
// Backup current config
|
|
96
|
+
if (!opts.noBackup && await fileExists(configPath)) {
|
|
97
|
+
const backupPath = configPath.replace('.json', '.backup.json');
|
|
98
|
+
await fs.copyFile(configPath, backupPath);
|
|
99
|
+
console.log(pc.dim(`Backup saved to ${path.basename(backupPath)}`));
|
|
100
|
+
}
|
|
101
|
+
// Apply template
|
|
102
|
+
const newConfig = applyTemplateToConfig(templateId, config);
|
|
103
|
+
// Apply to specific device only if requested
|
|
104
|
+
if (opts.device && newConfig.devices) {
|
|
105
|
+
const deviceConfig = newConfig.devices[opts.device];
|
|
106
|
+
if (!deviceConfig) {
|
|
107
|
+
console.error(pc.red(`Device "${opts.device}" not found in configuration`));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Keep original config but update only specified device
|
|
111
|
+
config.devices = config.devices || {};
|
|
112
|
+
config.devices[opts.device] = {
|
|
113
|
+
...config.devices[opts.device],
|
|
114
|
+
...deviceConfig
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
config = newConfig;
|
|
119
|
+
}
|
|
120
|
+
// Add captions if provided
|
|
121
|
+
if (opts.caption || opts.captions) {
|
|
122
|
+
await addCaptions(config, opts.caption, opts.captions);
|
|
123
|
+
}
|
|
124
|
+
// Dry run mode
|
|
125
|
+
if (opts.dryRun) {
|
|
126
|
+
console.log(pc.bold('\n🔍 Dry Run - Configuration Preview:\n'));
|
|
127
|
+
console.log(JSON.stringify(config, null, 2));
|
|
128
|
+
console.log(pc.dim('\nNo changes made. Remove --dry-run to apply template.'));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Save configuration
|
|
132
|
+
await fs.mkdir(path.dirname(configPath), { recursive: true });
|
|
133
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
134
|
+
// Success message
|
|
135
|
+
console.log('\n' + pc.green('✨'), pc.bold(`Template "${template.name}" applied successfully!`));
|
|
136
|
+
console.log(pc.dim(template.description));
|
|
137
|
+
// Show what was configured
|
|
138
|
+
console.log('\n' + pc.cyan('Template Configuration:'));
|
|
139
|
+
console.log(` Background: ${template.background.mode === 'gradient' ? 'Gradient' : 'Image/Auto'}`);
|
|
140
|
+
console.log(` Device Scale: ${Math.round(template.deviceStyle.frameScale * 100)}%`);
|
|
141
|
+
console.log(` Caption Position: ${template.captionStyle.position || 'above'}`);
|
|
142
|
+
console.log(` Font: ${template.captionStyle.font}`);
|
|
143
|
+
if (template.deviceOverrides && Object.keys(template.deviceOverrides).length > 0) {
|
|
144
|
+
console.log(` Device Optimizations: ${Object.keys(template.deviceOverrides).join(', ')}`);
|
|
145
|
+
}
|
|
146
|
+
// Suggest next steps
|
|
147
|
+
console.log('\n' + pc.bold('Next Steps:'));
|
|
148
|
+
console.log(' 1. Add your screenshots to', pc.cyan('screenshots/'));
|
|
149
|
+
if (!opts.caption && !opts.captions) {
|
|
150
|
+
console.log(' 2. Add captions:', pc.cyan('appshot caption --device iphone'));
|
|
151
|
+
console.log(' 3. Build screenshots:', pc.cyan('appshot build'));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(' 2. Build screenshots:', pc.cyan('appshot build'));
|
|
155
|
+
}
|
|
156
|
+
// Show caption suggestions
|
|
157
|
+
if (!opts.caption && !opts.captions) {
|
|
158
|
+
const suggestions = getTemplateCaptionSuggestions(templateId);
|
|
159
|
+
console.log('\n' + pc.dim('Caption suggestions for this template:'));
|
|
160
|
+
console.log(pc.dim(` Hero: "${suggestions.hero[0]}"`));
|
|
161
|
+
console.log(pc.dim(` Feature: "${suggestions.features[0]}"`));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.error(pc.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return cmd;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* List all available templates
|
|
173
|
+
*/
|
|
174
|
+
function listTemplates() {
|
|
175
|
+
console.log(pc.bold('\n📱 Screenshot Templates\n'));
|
|
176
|
+
const categories = getTemplateCategories();
|
|
177
|
+
for (const category of categories) {
|
|
178
|
+
console.log(pc.cyan(category.toUpperCase()));
|
|
179
|
+
console.log(pc.dim('─'.repeat(50)));
|
|
180
|
+
const categoryTemplates = templates.filter(t => t.category === category);
|
|
181
|
+
for (const template of categoryTemplates) {
|
|
182
|
+
console.log(`\n ${pc.bold(template.id)}`);
|
|
183
|
+
console.log(` ${template.name}`);
|
|
184
|
+
console.log(` ${pc.dim(template.description)}`);
|
|
185
|
+
// Show key features
|
|
186
|
+
const features = [];
|
|
187
|
+
if (template.background.mode === 'gradient') {
|
|
188
|
+
features.push('Gradient');
|
|
189
|
+
}
|
|
190
|
+
else if (template.background.mode === 'auto') {
|
|
191
|
+
features.push('Auto Background');
|
|
192
|
+
}
|
|
193
|
+
if (template.deviceStyle.partialFrame) {
|
|
194
|
+
features.push('Partial Frame');
|
|
195
|
+
}
|
|
196
|
+
if (template.captionStyle.position === 'overlay') {
|
|
197
|
+
features.push('Overlay Caption');
|
|
198
|
+
}
|
|
199
|
+
else if (template.captionStyle.position === 'below') {
|
|
200
|
+
features.push('Bottom Caption');
|
|
201
|
+
}
|
|
202
|
+
if (features.length > 0) {
|
|
203
|
+
console.log(` ${pc.green('Features:')} ${features.join(', ')}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
console.log();
|
|
207
|
+
}
|
|
208
|
+
console.log(pc.dim('─'.repeat(50)));
|
|
209
|
+
console.log(pc.dim('\nUse "appshot template <id>" to apply a template'));
|
|
210
|
+
console.log(pc.dim('Use "appshot template --preview <id>" for detailed view'));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Preview template configuration
|
|
214
|
+
*/
|
|
215
|
+
function previewTemplate(templateId) {
|
|
216
|
+
const template = getTemplate(templateId);
|
|
217
|
+
if (!template) {
|
|
218
|
+
console.error(pc.red(`Template "${templateId}" not found`));
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
console.log(pc.bold(`\n📋 Template: ${template.name}\n`));
|
|
222
|
+
console.log(pc.dim(template.description));
|
|
223
|
+
console.log();
|
|
224
|
+
// Background
|
|
225
|
+
console.log(pc.cyan('Background:'));
|
|
226
|
+
if (template.background.mode === 'gradient' && template.background.gradient) {
|
|
227
|
+
console.log(` Type: Gradient (${template.background.gradient.direction})`);
|
|
228
|
+
console.log(` Colors: ${template.background.gradient.colors.join(' → ')}`);
|
|
229
|
+
}
|
|
230
|
+
else if (template.background.mode === 'auto') {
|
|
231
|
+
console.log(' Type: Auto-detect (looks for background.png)');
|
|
232
|
+
if (template.background.gradient) {
|
|
233
|
+
console.log(' Fallback: Gradient');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Device Style
|
|
237
|
+
console.log('\n' + pc.cyan('Device Style:'));
|
|
238
|
+
console.log(` Scale: ${Math.round(template.deviceStyle.frameScale * 100)}%`);
|
|
239
|
+
console.log(` Position: ${typeof template.deviceStyle.framePosition === 'number'
|
|
240
|
+
? `${template.deviceStyle.framePosition}% from top`
|
|
241
|
+
: template.deviceStyle.framePosition}`);
|
|
242
|
+
if (template.deviceStyle.partialFrame) {
|
|
243
|
+
console.log(` Partial Frame: Yes (${template.deviceStyle.frameOffset || 25}% cut)`);
|
|
244
|
+
}
|
|
245
|
+
// Caption Style
|
|
246
|
+
console.log('\n' + pc.cyan('Caption Style:'));
|
|
247
|
+
console.log(` Font: ${template.captionStyle.font}`);
|
|
248
|
+
console.log(` Size: ${template.captionStyle.fontsize}px`);
|
|
249
|
+
console.log(` Color: ${template.captionStyle.color}`);
|
|
250
|
+
console.log(` Position: ${template.captionStyle.position || 'above'}`);
|
|
251
|
+
if (template.captionStyle.background) {
|
|
252
|
+
console.log(` Background: ${template.captionStyle.background.color} (${Math.round((template.captionStyle.background.opacity || 1) * 100)}% opacity)`);
|
|
253
|
+
}
|
|
254
|
+
if (template.captionStyle.border) {
|
|
255
|
+
console.log(` Border: ${template.captionStyle.border.width || 1}px ${template.captionStyle.border.color || 'default'}`);
|
|
256
|
+
}
|
|
257
|
+
// Device Overrides
|
|
258
|
+
if (template.deviceOverrides && Object.keys(template.deviceOverrides).length > 0) {
|
|
259
|
+
console.log('\n' + pc.cyan('Device-Specific Settings:'));
|
|
260
|
+
for (const [device, override] of Object.entries(template.deviceOverrides)) {
|
|
261
|
+
const settings = [];
|
|
262
|
+
if (override.frameScale)
|
|
263
|
+
settings.push(`scale: ${Math.round(override.frameScale * 100)}%`);
|
|
264
|
+
if (override.captionSize)
|
|
265
|
+
settings.push(`font: ${override.captionSize}px`);
|
|
266
|
+
if (override.framePosition !== undefined)
|
|
267
|
+
settings.push(`position: ${override.framePosition}`);
|
|
268
|
+
console.log(` ${device}: ${settings.join(', ')}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Caption Suggestions
|
|
272
|
+
const suggestions = getTemplateCaptionSuggestions(templateId);
|
|
273
|
+
console.log('\n' + pc.cyan('Caption Suggestions:'));
|
|
274
|
+
console.log(` Hero: "${suggestions.hero[0]}"`);
|
|
275
|
+
console.log(` Feature: "${suggestions.features[0]}"`);
|
|
276
|
+
console.log(` CTA: "${suggestions.cta[0]}"`);
|
|
277
|
+
console.log('\n' + pc.dim('─'.repeat(50)));
|
|
278
|
+
console.log(pc.green('Apply this template:'), pc.cyan(`appshot template ${templateId}`));
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Interactive template selection
|
|
282
|
+
*/
|
|
283
|
+
async function selectTemplate() {
|
|
284
|
+
console.log(pc.bold('\n🎨 Select a Screenshot Template\n'));
|
|
285
|
+
// Not used - choices are built in categorizedChoices below
|
|
286
|
+
// Add separators by category
|
|
287
|
+
const categorizedChoices = [];
|
|
288
|
+
const categories = getTemplateCategories();
|
|
289
|
+
for (const category of categories) {
|
|
290
|
+
categorizedChoices.push(new inquirer.Separator(`── ${category.toUpperCase()} ──`));
|
|
291
|
+
const categoryTemplates = templates.filter(t => t.category === category);
|
|
292
|
+
for (const template of categoryTemplates) {
|
|
293
|
+
categorizedChoices.push({
|
|
294
|
+
name: `${pc.bold(template.name)} - ${template.description}`,
|
|
295
|
+
value: template.id,
|
|
296
|
+
short: template.name
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const answer = await inquirer.prompt([{
|
|
301
|
+
type: 'list',
|
|
302
|
+
name: 'template',
|
|
303
|
+
message: 'Choose a template:',
|
|
304
|
+
choices: categorizedChoices,
|
|
305
|
+
pageSize: 12
|
|
306
|
+
}]);
|
|
307
|
+
return answer.template;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Create default configuration
|
|
311
|
+
*/
|
|
312
|
+
function createDefaultConfig() {
|
|
313
|
+
return {
|
|
314
|
+
output: './final',
|
|
315
|
+
frames: './frames',
|
|
316
|
+
devices: {
|
|
317
|
+
iphone: {
|
|
318
|
+
input: './screenshots/iphone',
|
|
319
|
+
resolution: '1290x2796',
|
|
320
|
+
autoFrame: true
|
|
321
|
+
},
|
|
322
|
+
ipad: {
|
|
323
|
+
input: './screenshots/ipad',
|
|
324
|
+
resolution: '2048x2732',
|
|
325
|
+
autoFrame: true
|
|
326
|
+
},
|
|
327
|
+
mac: {
|
|
328
|
+
input: './screenshots/mac',
|
|
329
|
+
resolution: '2880x1800',
|
|
330
|
+
autoFrame: true
|
|
331
|
+
},
|
|
332
|
+
watch: {
|
|
333
|
+
input: './screenshots/watch',
|
|
334
|
+
resolution: '410x502',
|
|
335
|
+
autoFrame: true
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Add captions to configuration
|
|
342
|
+
*/
|
|
343
|
+
async function addCaptions(config, singleCaption, captionsJson) {
|
|
344
|
+
const captionsDir = path.join(process.cwd(), '.appshot', 'captions');
|
|
345
|
+
await fs.mkdir(captionsDir, { recursive: true });
|
|
346
|
+
if (singleCaption) {
|
|
347
|
+
// Sanitize the caption
|
|
348
|
+
const sanitizedCaption = sanitizeCaption(singleCaption);
|
|
349
|
+
// Apply single caption to all devices
|
|
350
|
+
if (config.devices) {
|
|
351
|
+
for (const device of Object.keys(config.devices)) {
|
|
352
|
+
const captionFile = path.join(captionsDir, `${device}.json`);
|
|
353
|
+
// Load existing captions or create new
|
|
354
|
+
let captions = {};
|
|
355
|
+
try {
|
|
356
|
+
const existing = await fs.readFile(captionFile, 'utf-8');
|
|
357
|
+
captions = JSON.parse(existing);
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
// File doesn't exist yet
|
|
361
|
+
}
|
|
362
|
+
// Add caption to all screenshots (we'll use a generic key)
|
|
363
|
+
captions['default'] = sanitizedCaption;
|
|
364
|
+
await fs.writeFile(captionFile, JSON.stringify(captions, null, 2));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
console.log(pc.dim(`Caption "${sanitizedCaption}" added to all devices`));
|
|
368
|
+
}
|
|
369
|
+
else if (captionsJson) {
|
|
370
|
+
// Parse and apply JSON captions
|
|
371
|
+
try {
|
|
372
|
+
const captions = validateJson(captionsJson);
|
|
373
|
+
if (config.devices) {
|
|
374
|
+
for (const device of Object.keys(config.devices)) {
|
|
375
|
+
const captionFile = path.join(captionsDir, `${device}.json`);
|
|
376
|
+
await fs.writeFile(captionFile, JSON.stringify(captions, null, 2));
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
console.log(pc.dim('Captions added from JSON'));
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
console.error(pc.red('Invalid JSON for captions'));
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Check if file exists
|
|
389
|
+
*/
|
|
390
|
+
async function fileExists(filePath) {
|
|
391
|
+
try {
|
|
392
|
+
await fs.access(filePath);
|
|
393
|
+
return true;
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
package/dist/core/compose.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import type { GradientConfig, CaptionConfig, DeviceConfig, BackgroundConfig } from '../types.js';
|
|
2
|
+
export interface LayoutDebugInfo {
|
|
3
|
+
mode: 'above' | 'below' | 'overlay';
|
|
4
|
+
framePosition: string | number | undefined;
|
|
5
|
+
frameScale?: number | undefined;
|
|
6
|
+
deviceTop: number;
|
|
7
|
+
deviceBottom: number;
|
|
8
|
+
deviceHeight: number;
|
|
9
|
+
captionTop: number;
|
|
10
|
+
captionHeight: number;
|
|
11
|
+
marginTop?: number;
|
|
12
|
+
marginBottom?: number;
|
|
13
|
+
bottomSpacing?: number;
|
|
14
|
+
rectY?: number;
|
|
15
|
+
rectBottom?: number;
|
|
16
|
+
}
|
|
2
17
|
export interface ComposeOptions {
|
|
3
18
|
screenshot: Buffer;
|
|
4
19
|
frame?: Buffer | null;
|
|
@@ -24,6 +39,7 @@ export interface ComposeOptions {
|
|
|
24
39
|
outputWidth: number;
|
|
25
40
|
outputHeight: number;
|
|
26
41
|
verbose?: boolean;
|
|
42
|
+
onDebug?: (info: LayoutDebugInfo) => void;
|
|
27
43
|
}
|
|
28
44
|
/**
|
|
29
45
|
* Compose a complete App Store screenshot with gradient, caption, and framed device
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/core/compose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/core/compose.ts"],"names":[],"mappings":"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"}
|