appshot-cli 0.3.0 → 0.5.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 +1343 -714
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +11 -4
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +67 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/fonts.d.ts +3 -0
- package/dist/commands/fonts.d.ts.map +1 -0
- package/dist/commands/fonts.js +384 -0
- package/dist/commands/fonts.js.map +1 -0
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +123 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +61 -46
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/style.d.ts.map +1 -1
- package/dist/commands/style.js +92 -1
- package/dist/commands/style.js.map +1 -1
- package/dist/core/app-store-specs.d.ts +2 -0
- package/dist/core/app-store-specs.d.ts.map +1 -1
- package/dist/core/app-store-specs.js +2 -0
- package/dist/core/app-store-specs.js.map +1 -1
- package/dist/core/compose.d.ts +4 -0
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +102 -9
- package/dist/core/compose.js.map +1 -1
- package/dist/services/doctor.d.ts +35 -0
- package/dist/services/doctor.d.ts.map +1 -0
- package/dist/services/doctor.js +439 -0
- package/dist/services/doctor.js.map +1 -0
- package/dist/services/fonts.d.ts +71 -0
- package/dist/services/fonts.d.ts.map +1 -0
- package/dist/services/fonts.js +314 -0
- package/dist/services/fonts.js.map +1 -0
- package/dist/types/exec.d.ts +5 -0
- package/dist/types/exec.d.ts.map +1 -0
- package/dist/types/exec.js +2 -0
- package/dist/types/exec.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/language.d.ts +32 -0
- package/dist/utils/language.d.ts.map +1 -0
- package/dist/utils/language.js +103 -0
- package/dist/utils/language.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { platform } from 'os';
|
|
4
|
+
const execAsync = promisify(exec);
|
|
5
|
+
export class FontService {
|
|
6
|
+
static instance;
|
|
7
|
+
systemFontsCache = null;
|
|
8
|
+
static getInstance() {
|
|
9
|
+
if (!FontService.instance) {
|
|
10
|
+
FontService.instance = new FontService();
|
|
11
|
+
}
|
|
12
|
+
return FontService.instance;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get list of system fonts based on platform
|
|
16
|
+
*/
|
|
17
|
+
async getSystemFonts() {
|
|
18
|
+
if (this.systemFontsCache) {
|
|
19
|
+
return this.systemFontsCache;
|
|
20
|
+
}
|
|
21
|
+
const os = platform();
|
|
22
|
+
let fonts = [];
|
|
23
|
+
try {
|
|
24
|
+
switch (os) {
|
|
25
|
+
case 'darwin': // macOS
|
|
26
|
+
fonts = await this.getMacOSFonts();
|
|
27
|
+
break;
|
|
28
|
+
case 'linux':
|
|
29
|
+
fonts = await this.getLinuxFonts();
|
|
30
|
+
break;
|
|
31
|
+
case 'win32':
|
|
32
|
+
fonts = await this.getWindowsFonts();
|
|
33
|
+
break;
|
|
34
|
+
default:
|
|
35
|
+
console.warn(`Font detection not implemented for platform: ${os}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Error detecting system fonts:', error);
|
|
40
|
+
}
|
|
41
|
+
this.systemFontsCache = fonts;
|
|
42
|
+
return fonts;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get fonts on macOS using system_profiler
|
|
46
|
+
*/
|
|
47
|
+
async getMacOSFonts() {
|
|
48
|
+
try {
|
|
49
|
+
const { stdout } = await execAsync('system_profiler SPFontsDataType -json', {
|
|
50
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB buffer to handle large font lists
|
|
51
|
+
});
|
|
52
|
+
const data = JSON.parse(stdout);
|
|
53
|
+
const fonts = new Set();
|
|
54
|
+
// Parse the JSON structure
|
|
55
|
+
if (data.SPFontsDataType) {
|
|
56
|
+
for (const font of data.SPFontsDataType) {
|
|
57
|
+
// Extract typefaces
|
|
58
|
+
if (font.typefaces) {
|
|
59
|
+
for (const typefaceKey of Object.keys(font.typefaces)) {
|
|
60
|
+
const typeface = font.typefaces[typefaceKey];
|
|
61
|
+
if (typeface.family) {
|
|
62
|
+
fonts.add(typeface.family);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return Array.from(fonts).sort();
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error('Error getting macOS fonts:', error);
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get fonts on Linux using fc-list
|
|
77
|
+
*/
|
|
78
|
+
async getLinuxFonts() {
|
|
79
|
+
try {
|
|
80
|
+
const { stdout } = await execAsync('fc-list : family');
|
|
81
|
+
const fonts = new Set();
|
|
82
|
+
const lines = stdout.split('\n');
|
|
83
|
+
for (const line of lines) {
|
|
84
|
+
const fontName = line.trim();
|
|
85
|
+
if (fontName) {
|
|
86
|
+
// fc-list may return comma-separated font names
|
|
87
|
+
const names = fontName.split(',');
|
|
88
|
+
for (const name of names) {
|
|
89
|
+
fonts.add(name.trim());
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return Array.from(fonts).sort();
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
console.warn('fc-list not available, using fallback fonts');
|
|
97
|
+
return this.getRecommendedFontsSync().map(f => f.name);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get fonts on Windows using PowerShell
|
|
102
|
+
*/
|
|
103
|
+
async getWindowsFonts() {
|
|
104
|
+
try {
|
|
105
|
+
const { stdout } = await execAsync('powershell -Command "[System.Reflection.Assembly]::LoadWithPartialName(\'System.Drawing\'); (New-Object System.Drawing.Text.InstalledFontCollection).Families | ForEach-Object { $_.Name }"');
|
|
106
|
+
const fonts = stdout
|
|
107
|
+
.split('\n')
|
|
108
|
+
.map(line => line.trim())
|
|
109
|
+
.filter(line => line.length > 0);
|
|
110
|
+
return fonts.sort();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
console.warn('Could not get Windows fonts, using fallback fonts');
|
|
114
|
+
return this.getRecommendedFontsSync().map(f => f.name);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get recommended fonts with installation status
|
|
119
|
+
*/
|
|
120
|
+
async getRecommendedFonts() {
|
|
121
|
+
const systemFonts = await this.getSystemFonts();
|
|
122
|
+
const systemFontSet = new Set(systemFonts.map(f => f.toLowerCase()));
|
|
123
|
+
const fonts = [
|
|
124
|
+
// Sans-serif fonts (web-safe are usually installed)
|
|
125
|
+
{ name: 'Helvetica', family: 'Helvetica', category: 'web-safe', fallback: 'Arial, sans-serif' },
|
|
126
|
+
{ name: 'Arial', family: 'Arial', category: 'web-safe', fallback: 'Helvetica, sans-serif' },
|
|
127
|
+
{ name: 'Roboto', family: 'Roboto', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
128
|
+
{ name: 'Open Sans', family: 'Open Sans', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
129
|
+
{ name: 'Montserrat', family: 'Montserrat', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
130
|
+
{ name: 'Lato', family: 'Lato', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
131
|
+
{ name: 'Poppins', family: 'Poppins', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
132
|
+
{ name: 'Inter', family: 'Inter', category: 'recommended', fallback: 'Arial, sans-serif' },
|
|
133
|
+
// Serif fonts
|
|
134
|
+
{ name: 'Georgia', family: 'Georgia', category: 'web-safe', fallback: 'Times New Roman, serif' },
|
|
135
|
+
{ name: 'Times New Roman', family: 'Times New Roman', category: 'web-safe', fallback: 'Georgia, serif' },
|
|
136
|
+
{ name: 'Playfair Display', family: 'Playfair Display', category: 'recommended', fallback: 'Georgia, serif' },
|
|
137
|
+
{ name: 'Merriweather', family: 'Merriweather', category: 'recommended', fallback: 'Georgia, serif' },
|
|
138
|
+
// Monospace fonts
|
|
139
|
+
{ name: 'Courier New', family: 'Courier New', category: 'web-safe', fallback: 'monospace' },
|
|
140
|
+
{ name: 'Monaco', family: 'Monaco', category: 'web-safe', fallback: 'Courier New, monospace' },
|
|
141
|
+
{ name: 'Consolas', family: 'Consolas', category: 'web-safe', fallback: 'Courier New, monospace' },
|
|
142
|
+
// Display fonts
|
|
143
|
+
{ name: 'Impact', family: 'Impact', category: 'web-safe', fallback: 'Arial Black, sans-serif' },
|
|
144
|
+
{ name: 'Arial Black', family: 'Arial Black', category: 'web-safe', fallback: 'Impact, sans-serif' },
|
|
145
|
+
// System fonts
|
|
146
|
+
{ name: 'SF Pro', family: 'SF Pro', category: 'system', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
147
|
+
{ name: 'SF Pro Display', family: 'SF Pro Display', category: 'system', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
148
|
+
{ name: 'San Francisco', family: 'San Francisco', category: 'system', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
149
|
+
{ name: 'New York', family: 'New York', category: 'system', fallback: 'Georgia, serif' },
|
|
150
|
+
{ name: 'Segoe UI', family: 'Segoe UI', category: 'system', fallback: 'system-ui, sans-serif' }
|
|
151
|
+
];
|
|
152
|
+
// Mark which fonts are actually installed
|
|
153
|
+
for (const font of fonts) {
|
|
154
|
+
font.installed = systemFontSet.has(font.name.toLowerCase());
|
|
155
|
+
}
|
|
156
|
+
return fonts;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get basic recommended fonts (without async check) for backward compatibility
|
|
160
|
+
*/
|
|
161
|
+
getRecommendedFontsSync() {
|
|
162
|
+
return [
|
|
163
|
+
// Only return truly web-safe fonts that are almost always available
|
|
164
|
+
{ name: 'Helvetica', family: 'Helvetica', category: 'web-safe', fallback: 'Arial, sans-serif' },
|
|
165
|
+
{ name: 'Arial', family: 'Arial', category: 'web-safe', fallback: 'Helvetica, sans-serif' },
|
|
166
|
+
{ name: 'Georgia', family: 'Georgia', category: 'web-safe', fallback: 'Times New Roman, serif' },
|
|
167
|
+
{ name: 'Times New Roman', family: 'Times New Roman', category: 'web-safe', fallback: 'Georgia, serif' },
|
|
168
|
+
{ name: 'Courier New', family: 'Courier New', category: 'web-safe', fallback: 'monospace' },
|
|
169
|
+
{ name: 'Monaco', family: 'Monaco', category: 'web-safe', fallback: 'Courier New, monospace' },
|
|
170
|
+
{ name: 'Impact', family: 'Impact', category: 'web-safe', fallback: 'Arial Black, sans-serif' },
|
|
171
|
+
{ name: 'Arial Black', family: 'Arial Black', category: 'web-safe', fallback: 'Impact, sans-serif' }
|
|
172
|
+
];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get fonts organized by category with installation status
|
|
176
|
+
*/
|
|
177
|
+
async getFontCategories() {
|
|
178
|
+
const systemFonts = await this.getSystemFonts();
|
|
179
|
+
const recommendedFonts = await this.getRecommendedFonts();
|
|
180
|
+
// Create a set of recommended font names for quick lookup
|
|
181
|
+
const recommendedNames = new Set(recommendedFonts.map(f => f.name.toLowerCase()));
|
|
182
|
+
// Filter system fonts to exclude ones already in recommended
|
|
183
|
+
const additionalSystemFonts = systemFonts
|
|
184
|
+
.filter(font => !recommendedNames.has(font.toLowerCase()))
|
|
185
|
+
.slice(0, 20) // Limit to top 20 to avoid overwhelming the user
|
|
186
|
+
.map(name => ({
|
|
187
|
+
name,
|
|
188
|
+
category: 'system',
|
|
189
|
+
installed: true // These are from system fonts, so they're installed
|
|
190
|
+
}));
|
|
191
|
+
// Separate installed vs not installed
|
|
192
|
+
const installedWebSafe = recommendedFonts.filter(f => f.category === 'web-safe' && f.installed);
|
|
193
|
+
const installedRecommended = recommendedFonts.filter(f => f.category === 'recommended' && f.installed);
|
|
194
|
+
const notInstalledRecommended = recommendedFonts.filter(f => f.category === 'recommended' && !f.installed);
|
|
195
|
+
const categories = [
|
|
196
|
+
{
|
|
197
|
+
name: 'Installed Fonts (Web-Safe)',
|
|
198
|
+
fonts: installedWebSafe
|
|
199
|
+
}
|
|
200
|
+
];
|
|
201
|
+
if (installedRecommended.length > 0) {
|
|
202
|
+
categories.push({
|
|
203
|
+
name: 'Installed Fonts (Popular)',
|
|
204
|
+
fonts: installedRecommended
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (notInstalledRecommended.length > 0) {
|
|
208
|
+
categories.push({
|
|
209
|
+
name: 'Popular Fonts (Not Installed - Will Use Fallback)',
|
|
210
|
+
fonts: notInstalledRecommended
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
categories.push({
|
|
214
|
+
name: 'System Fonts',
|
|
215
|
+
fonts: [
|
|
216
|
+
...recommendedFonts.filter(f => f.category === 'system' && f.installed),
|
|
217
|
+
...additionalSystemFonts
|
|
218
|
+
]
|
|
219
|
+
});
|
|
220
|
+
return categories;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Check if a font is actually installed on the system
|
|
224
|
+
* This is the TRUTH - only returns true if font can actually be used
|
|
225
|
+
*/
|
|
226
|
+
async isFontInstalled(fontName) {
|
|
227
|
+
const systemFonts = await this.getSystemFonts();
|
|
228
|
+
return systemFonts.some(f => f.toLowerCase() === fontName.toLowerCase());
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Validate if a font can be rendered
|
|
232
|
+
* NOW only checks if actually installed, not just "recommended"
|
|
233
|
+
*/
|
|
234
|
+
async validateFont(fontName) {
|
|
235
|
+
// Only return true if font is ACTUALLY installed
|
|
236
|
+
return this.isFontInstalled(fontName);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get detailed status about a font
|
|
240
|
+
*/
|
|
241
|
+
async getFontStatus(fontName) {
|
|
242
|
+
const installed = await this.isFontInstalled(fontName);
|
|
243
|
+
const recommended = await this.getRecommendedFonts();
|
|
244
|
+
const fontInfo = recommended.find(f => f.name.toLowerCase() === fontName.toLowerCase());
|
|
245
|
+
const status = {
|
|
246
|
+
name: fontName,
|
|
247
|
+
installed,
|
|
248
|
+
category: fontInfo?.category,
|
|
249
|
+
fallback: this.getFontFallback(fontName)
|
|
250
|
+
};
|
|
251
|
+
if (!installed) {
|
|
252
|
+
if (fontInfo?.category === 'recommended') {
|
|
253
|
+
status.warning = `Font "${fontName}" is not installed. Install it from Google Fonts or the fallback (${status.fallback}) will be used.`;
|
|
254
|
+
}
|
|
255
|
+
else if (fontInfo?.category === 'system') {
|
|
256
|
+
status.warning = `System font "${fontName}" is not available on this machine. The fallback (${status.fallback}) will be used.`;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
status.warning = `Font "${fontName}" is not installed on your system. The fallback (${status.fallback}) will be used.`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return status;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get a font's fallback chain (synchronous for backward compatibility)
|
|
266
|
+
*/
|
|
267
|
+
getFontFallback(fontName) {
|
|
268
|
+
// Use sync version for immediate fallback lookup
|
|
269
|
+
const recommended = this.getRecommendedFontsSync();
|
|
270
|
+
const font = recommended.find(f => f.name.toLowerCase() === fontName.toLowerCase());
|
|
271
|
+
if (font?.fallback) {
|
|
272
|
+
return font.fallback;
|
|
273
|
+
}
|
|
274
|
+
// Check extended list if not found in basic web-safe fonts
|
|
275
|
+
const extendedFonts = [
|
|
276
|
+
{ name: 'Roboto', fallback: 'Arial, sans-serif' },
|
|
277
|
+
{ name: 'Open Sans', fallback: 'Arial, sans-serif' },
|
|
278
|
+
{ name: 'Montserrat', fallback: 'Arial, sans-serif' },
|
|
279
|
+
{ name: 'Lato', fallback: 'Arial, sans-serif' },
|
|
280
|
+
{ name: 'Poppins', fallback: 'Arial, sans-serif' },
|
|
281
|
+
{ name: 'Inter', fallback: 'Arial, sans-serif' },
|
|
282
|
+
{ name: 'Playfair Display', fallback: 'Georgia, serif' },
|
|
283
|
+
{ name: 'Merriweather', fallback: 'Georgia, serif' },
|
|
284
|
+
{ name: 'SF Pro', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
285
|
+
{ name: 'SF Pro Display', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
286
|
+
{ name: 'San Francisco', fallback: 'system-ui, -apple-system, sans-serif' },
|
|
287
|
+
{ name: 'New York', fallback: 'Georgia, serif' },
|
|
288
|
+
{ name: 'Segoe UI', fallback: 'system-ui, sans-serif' }
|
|
289
|
+
];
|
|
290
|
+
const extendedFont = extendedFonts.find(f => f.name.toLowerCase() === fontName.toLowerCase());
|
|
291
|
+
if (extendedFont) {
|
|
292
|
+
return extendedFont.fallback;
|
|
293
|
+
}
|
|
294
|
+
// Default fallback based on font characteristics
|
|
295
|
+
const lowerFont = fontName.toLowerCase();
|
|
296
|
+
if (lowerFont.includes('serif') && !lowerFont.includes('sans')) {
|
|
297
|
+
// Serif font
|
|
298
|
+
return 'Georgia, Times New Roman, serif';
|
|
299
|
+
}
|
|
300
|
+
else if (lowerFont.includes('mono') || lowerFont.includes('code') || lowerFont.includes('console')) {
|
|
301
|
+
// Monospace font
|
|
302
|
+
return 'Courier New, Monaco, monospace';
|
|
303
|
+
}
|
|
304
|
+
else if (lowerFont.includes('display') || lowerFont.includes('headline')) {
|
|
305
|
+
// Display font
|
|
306
|
+
return 'Impact, Arial Black, sans-serif';
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
// Default to sans-serif
|
|
310
|
+
return 'Arial, Helvetica, sans-serif';
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../src/services/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAwBlC,MAAM,OAAO,WAAW;IACd,MAAM,CAAC,QAAQ,CAAc;IAC7B,gBAAgB,GAAoB,IAAI,CAAC;IAE1C,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtB,IAAI,KAAK,GAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,QAAQ,EAAE,EAAE,CAAC;gBACb,KAAK,QAAQ,EAAE,QAAQ;oBACrB,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrC,MAAM;gBACR;oBACE,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,uCAAuC,EAAE;gBAC1E,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,yCAAyC;aACtE,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAEhC,2BAA2B;YAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACxC,oBAAoB;oBACpB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;4BACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;4BAC7C,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gCACpB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;4BAC7B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,QAAQ,EAAE,CAAC;oBACb,gDAAgD;oBAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,6LAA6L,CAC9L,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAErE,MAAM,KAAK,GAAe;YACxB,oDAAoD;YACpD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAC/F,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,EAAE;YAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAClG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACpG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACxF,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAE1F,cAAc;YACd,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE;YAChG,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACxG,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YAC7G,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YAErG,kBAAkB;YAClB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;YAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE;YAC9F,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE;YAElG,gBAAgB;YAChB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,yBAAyB,EAAE;YAC/F,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE;YAEpG,eAAe;YACf,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YAC1G,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YAC1H,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YACxH,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACxF,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,EAAE;SAChG,CAAC;QAEF,0CAA0C;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO;YACL,oEAAoE;YACpE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAC/F,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,EAAE;YAC3F,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE;YAChG,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACxG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;YAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,EAAE;YAC9F,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,yBAAyB,EAAE;YAC/F,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE;SACrG,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE1D,0DAA0D;QAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAElF,6DAA6D;QAC7D,MAAM,qBAAqB,GAAG,WAAW;aACtC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;aACzD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iDAAiD;aAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,IAAI;YACJ,QAAQ,EAAE,QAAiB;YAC3B,SAAS,EAAE,IAAI,CAAE,oDAAoD;SACtE,CAAC,CAAC,CAAC;QAEN,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;QAChG,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;QACvG,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE3G,MAAM,UAAU,GAAmB;YACjC;gBACE,IAAI,EAAE,4BAA4B;gBAClC,KAAK,EAAE,gBAAgB;aACxB;SACF,CAAC;QAEF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,2BAA2B;gBACjC,KAAK,EAAE,oBAAoB;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,mDAAmD;gBACzD,KAAK,EAAE,uBAAuB;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE;gBACL,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;gBACvE,GAAG,qBAAqB;aACzB;SACF,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,iDAAiD;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAExF,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE,QAAQ;YACd,SAAS;YACT,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YAC5B,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;SACzC,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACzC,MAAM,CAAC,OAAO,GAAG,SAAS,QAAQ,qEAAqE,MAAM,CAAC,QAAQ,iBAAiB,CAAC;YAC1I,CAAC;iBAAM,IAAI,QAAQ,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,CAAC,OAAO,GAAG,gBAAgB,QAAQ,qDAAqD,MAAM,CAAC,QAAQ,iBAAiB,CAAC;YACjI,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,GAAG,SAAS,QAAQ,oDAAoD,MAAM,CAAC,QAAQ,iBAAiB,CAAC;YACzH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgB;QAC9B,iDAAiD;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAEpF,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,2DAA2D;QAC3D,MAAM,aAAa,GAA4C;YAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACjD,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACpD,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACrD,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAClD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YAChD,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACxD,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YACpD,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YACpE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YAC5E,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,sCAAsC,EAAE;YAC3E,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YAChD,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,EAAE;SACxD,CAAC;QAEF,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9F,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC,QAAQ,CAAC;QAC/B,CAAC;QAED,iDAAiD;QACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEzC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,aAAa;YACb,OAAO,iCAAiC,CAAC;QAC3C,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACrG,iBAAiB;YACjB,OAAO,gCAAgC,CAAC;QAC1C,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3E,eAAe;YACf,OAAO,iCAAiC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,OAAO,8BAA8B,CAAC;QACxC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/types/exec.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/types/exec.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export interface DeviceStyleConfig {
|
|
|
27
27
|
captionSize?: number;
|
|
28
28
|
captionPosition?: 'above' | 'overlay';
|
|
29
29
|
captionBox?: CaptionBoxConfig;
|
|
30
|
+
captionFont?: string;
|
|
30
31
|
}
|
|
31
32
|
export interface DeviceConfig extends DeviceStyleConfig {
|
|
32
33
|
input: string;
|
|
@@ -45,6 +46,7 @@ export interface AppshotConfig {
|
|
|
45
46
|
devices: {
|
|
46
47
|
[key: string]: DeviceConfig;
|
|
47
48
|
};
|
|
49
|
+
defaultLanguage?: string;
|
|
48
50
|
}
|
|
49
51
|
export interface CaptionEntry {
|
|
50
52
|
[lang: string]: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACnF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,UAAU,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;CACnF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;KAC7B,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CaptionsFile, AppshotConfig } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get the system's default language code
|
|
4
|
+
* Uses Intl API first, then environment variables, finally defaults to 'en'
|
|
5
|
+
*/
|
|
6
|
+
export declare function getSystemLanguage(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Detect available languages from caption structure
|
|
9
|
+
* Returns empty array for simple string captions
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectLanguagesFromCaptions(captions: CaptionsFile): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Resolve which languages to build based on priority:
|
|
14
|
+
* 1. CLI --langs flag (highest priority)
|
|
15
|
+
* 2. Languages detected from caption objects
|
|
16
|
+
* 3. Config defaultLanguage setting
|
|
17
|
+
* 4. System detected language
|
|
18
|
+
* 5. Fallback to 'en'
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveLanguages(cliLangs: string[] | undefined, captions: CaptionsFile, config: AppshotConfig): {
|
|
21
|
+
languages: string[];
|
|
22
|
+
source: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Validate language code format (basic ISO 639-1 validation)
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidLanguageCode(code: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Normalize language code to lowercase, preserving region if present
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizeLanguageCode(code: string): string;
|
|
32
|
+
//# sourceMappingURL=language.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/utils/language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAoB1C;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAW5E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAC9B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,aAAa,GACpB;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwCzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the system's default language code
|
|
3
|
+
* Uses Intl API first, then environment variables, finally defaults to 'en'
|
|
4
|
+
*/
|
|
5
|
+
export function getSystemLanguage() {
|
|
6
|
+
try {
|
|
7
|
+
// Try Intl API first (most reliable in Node.js)
|
|
8
|
+
const locale = Intl.DateTimeFormat().resolvedOptions().locale;
|
|
9
|
+
// Extract language code (e.g., 'en' from 'en-US')
|
|
10
|
+
return locale.split('-')[0].toLowerCase();
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// Fall back to environment variables
|
|
14
|
+
const envLang = process.env.LANG || process.env.LC_ALL || process.env.LC_MESSAGES || '';
|
|
15
|
+
if (envLang) {
|
|
16
|
+
// Extract language code from POSIX locale (e.g., 'en' from 'en_US.UTF-8')
|
|
17
|
+
const match = envLang.match(/^([a-z]{2})/i);
|
|
18
|
+
if (match) {
|
|
19
|
+
return match[1].toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Default to English
|
|
23
|
+
return 'en';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Detect available languages from caption structure
|
|
28
|
+
* Returns empty array for simple string captions
|
|
29
|
+
*/
|
|
30
|
+
export function detectLanguagesFromCaptions(captions) {
|
|
31
|
+
const languages = new Set();
|
|
32
|
+
for (const [_, value] of Object.entries(captions)) {
|
|
33
|
+
if (typeof value === 'object' && value !== null) {
|
|
34
|
+
// Caption entry with language keys
|
|
35
|
+
Object.keys(value).forEach(lang => languages.add(lang));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return Array.from(languages).sort();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve which languages to build based on priority:
|
|
42
|
+
* 1. CLI --langs flag (highest priority)
|
|
43
|
+
* 2. Languages detected from caption objects
|
|
44
|
+
* 3. Config defaultLanguage setting
|
|
45
|
+
* 4. System detected language
|
|
46
|
+
* 5. Fallback to 'en'
|
|
47
|
+
*/
|
|
48
|
+
export function resolveLanguages(cliLangs, captions, config) {
|
|
49
|
+
// Priority 1: CLI languages
|
|
50
|
+
if (cliLangs && cliLangs.length > 0) {
|
|
51
|
+
return {
|
|
52
|
+
languages: cliLangs,
|
|
53
|
+
source: 'command line'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Priority 2: Detect from captions
|
|
57
|
+
const captionLangs = detectLanguagesFromCaptions(captions);
|
|
58
|
+
if (captionLangs.length > 0) {
|
|
59
|
+
return {
|
|
60
|
+
languages: captionLangs,
|
|
61
|
+
source: 'caption files'
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Priority 3: Config default language
|
|
65
|
+
if (config.defaultLanguage) {
|
|
66
|
+
return {
|
|
67
|
+
languages: [config.defaultLanguage],
|
|
68
|
+
source: 'config setting'
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Priority 4: System language
|
|
72
|
+
const systemLang = getSystemLanguage();
|
|
73
|
+
if (systemLang !== 'en') {
|
|
74
|
+
return {
|
|
75
|
+
languages: [systemLang],
|
|
76
|
+
source: `system locale (${systemLang.toUpperCase()})`
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Priority 5: Fallback
|
|
80
|
+
return {
|
|
81
|
+
languages: ['en'],
|
|
82
|
+
source: 'default'
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate language code format (basic ISO 639-1 validation)
|
|
87
|
+
*/
|
|
88
|
+
export function isValidLanguageCode(code) {
|
|
89
|
+
// Basic validation: 2-3 letter codes, optionally with region (e.g., zh-CN)
|
|
90
|
+
return /^[a-z]{2,3}(-[A-Z]{2})?$/.test(code);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Normalize language code to lowercase, preserving region if present
|
|
94
|
+
*/
|
|
95
|
+
export function normalizeLanguageCode(code) {
|
|
96
|
+
const parts = code.split('-');
|
|
97
|
+
if (parts.length === 2) {
|
|
98
|
+
// Preserve format like zh-CN
|
|
99
|
+
return `${parts[0].toLowerCase()}-${parts[1].toUpperCase()}`;
|
|
100
|
+
}
|
|
101
|
+
return code.toLowerCase();
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/utils/language.ts"],"names":[],"mappings":"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"}
|