@gannochenko/staticstripes 0.0.18 → 0.0.20

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.
@@ -0,0 +1,29 @@
1
+ import { Browser } from 'puppeteer';
2
+ import { App } from './type';
3
+ export interface RenderAppOptions {
4
+ app: App;
5
+ width: number;
6
+ height: number;
7
+ projectDir: string;
8
+ outputName: string;
9
+ title: string;
10
+ date?: string;
11
+ tags: string[];
12
+ browser?: Browser;
13
+ }
14
+ export interface AppRenderResult {
15
+ app: App;
16
+ screenshotPath: string;
17
+ }
18
+ /**
19
+ * Renders a React (or any SPA) app to a PNG screenshot using Puppeteer.
20
+ * The app must dispatch a "sts-render-complete" custom event on document
21
+ * when it is fully rendered. If the event is not received within
22
+ * RENDER_TIMEOUT_MS, an error is thrown.
23
+ */
24
+ export declare function renderApp(options: RenderAppOptions): Promise<AppRenderResult>;
25
+ /**
26
+ * Renders multiple apps in sequence, reusing a single browser instance.
27
+ */
28
+ export declare function renderApps(apps: App[], width: number, height: number, projectDir: string, outputName: string, title: string, date: string | undefined, tags: string[], activeCacheKeys?: Set<string>): Promise<AppRenderResult[]>;
29
+ //# sourceMappingURL=app-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-renderer.d.ts","sourceRoot":"","sources":["../src/app-renderer.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAK/C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAI7B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,cAAc,EAAE,MAAM,CAAC;CACxB;AAoBD;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkHnF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,EAAE,EACd,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,eAAe,EAAE,CAAC,CAiD5B"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderApp = renderApp;
7
+ exports.renderApps = renderApps;
8
+ const puppeteer_1 = __importDefault(require("puppeteer"));
9
+ const promises_1 = require("fs/promises");
10
+ const path_1 = require("path");
11
+ const fs_1 = require("fs");
12
+ const crypto_1 = require("crypto");
13
+ const RENDER_TIMEOUT_MS = 5000;
14
+ function generateAppCacheKey(src, parameters, title, date, tags, outputName) {
15
+ const hash = (0, crypto_1.createHash)('sha256');
16
+ hash.update(src);
17
+ hash.update(JSON.stringify(parameters));
18
+ hash.update(title);
19
+ hash.update(date ?? '');
20
+ hash.update(tags.join(','));
21
+ hash.update(outputName);
22
+ return hash.digest('hex').substring(0, 16);
23
+ }
24
+ /**
25
+ * Renders a React (or any SPA) app to a PNG screenshot using Puppeteer.
26
+ * The app must dispatch a "sts-render-complete" custom event on document
27
+ * when it is fully rendered. If the event is not received within
28
+ * RENDER_TIMEOUT_MS, an error is thrown.
29
+ */
30
+ async function renderApp(options) {
31
+ const { app, width, height, projectDir, outputName, title, date, tags, browser: sharedBrowser } = options;
32
+ // Create cache directory
33
+ const cacheDir = (0, path_1.resolve)(projectDir, 'cache', 'apps');
34
+ if (!(0, fs_1.existsSync)(cacheDir)) {
35
+ await (0, promises_1.mkdir)(cacheDir, { recursive: true });
36
+ }
37
+ // Generate cache key from all inputs that affect output
38
+ const cacheKey = generateAppCacheKey(app.src, app.parameters, title, date, tags, outputName);
39
+ const screenshotPath = (0, path_1.resolve)(cacheDir, `${cacheKey}.png`);
40
+ // Return cached result if available
41
+ if ((0, fs_1.existsSync)(screenshotPath)) {
42
+ console.log(`Using cached app "${app.id}" (hash: ${cacheKey}) from ${screenshotPath}`);
43
+ return { app, screenshotPath };
44
+ }
45
+ // Resolve index.html
46
+ const appDir = (0, path_1.isAbsolute)(app.src)
47
+ ? app.src
48
+ : (0, path_1.resolve)(projectDir, app.src);
49
+ const indexPath = (0, path_1.resolve)(appDir, 'index.html');
50
+ if (!(0, fs_1.existsSync)(indexPath)) {
51
+ throw new Error(`App "${app.id}": index.html not found at ${indexPath}`);
52
+ }
53
+ // Build URL with query parameters.
54
+ // Metadata (title, date, tags) is always injected; extra parameters from
55
+ // data-parameters are merged in afterwards and can override metadata keys.
56
+ const searchParams = new URLSearchParams({ rendering: '' });
57
+ searchParams.set('title', title);
58
+ if (date)
59
+ searchParams.set('date', date);
60
+ if (tags.length > 0)
61
+ searchParams.set('tags', tags.join(','));
62
+ for (const [key, value] of Object.entries(app.parameters)) {
63
+ searchParams.set(key, value);
64
+ }
65
+ const url = `file://${indexPath}?${searchParams.toString()}`;
66
+ console.log(`\nRendering app "${app.id}" from ${url}`);
67
+ const ownBrowser = sharedBrowser
68
+ ? null
69
+ : await puppeteer_1.default.launch({
70
+ headless: true,
71
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
72
+ });
73
+ const browser = sharedBrowser ?? ownBrowser;
74
+ const page = await browser.newPage();
75
+ try {
76
+ await page.setViewport({ width, height });
77
+ page.on('console', (msg) => console.log(`[app:${app.id}] console.${msg.type()}: ${msg.text()}`));
78
+ page.on('pageerror', (err) => console.error(`[app:${app.id}] page error: ${String(err)}`));
79
+ page.on('requestfailed', (req) => console.error(`[app:${app.id}] request failed: ${req.url()} — ${req.failure()?.errorText}`));
80
+ // Initialise the flag before navigation. The app sets it to true directly
81
+ // via window.__stsRenderComplete = true inside its useEffect, so no event
82
+ // listener is needed on this side.
83
+ await page.evaluateOnNewDocument(`window.__stsRenderComplete = false;`);
84
+ await page.goto(url, { waitUntil: 'networkidle0' });
85
+ // Wait for the app to signal it is done rendering
86
+ await page
87
+ .waitForFunction('window.__stsRenderComplete === true', {
88
+ timeout: RENDER_TIMEOUT_MS,
89
+ })
90
+ .catch(() => {
91
+ throw new Error(`App "${app.id}" did not set window.__stsRenderComplete within ${RENDER_TIMEOUT_MS}ms`);
92
+ });
93
+ // Screenshot with transparent background
94
+ const screenshot = await page.screenshot({
95
+ type: 'png',
96
+ omitBackground: true,
97
+ clip: { x: 0, y: 0, width, height },
98
+ });
99
+ await (0, promises_1.writeFile)(screenshotPath, screenshot);
100
+ console.log(`Rendered app "${app.id}" (hash: ${cacheKey}) to ${screenshotPath}`);
101
+ return { app, screenshotPath };
102
+ }
103
+ finally {
104
+ await page.close();
105
+ if (ownBrowser)
106
+ await ownBrowser.close();
107
+ }
108
+ }
109
+ /**
110
+ * Renders multiple apps in sequence, reusing a single browser instance.
111
+ */
112
+ async function renderApps(apps, width, height, projectDir, outputName, title, date, tags, activeCacheKeys) {
113
+ const results = [];
114
+ // Launch once and reuse across all apps.
115
+ // --allow-file-access-from-files is required so Chromium allows
116
+ // <script type="module"> and <link> tags to load sibling files
117
+ // when the page itself is served via file://.
118
+ const browser = await puppeteer_1.default.launch({
119
+ headless: true,
120
+ args: [
121
+ '--no-sandbox',
122
+ '--disable-setuid-sandbox',
123
+ '--allow-file-access-from-files',
124
+ ],
125
+ });
126
+ try {
127
+ for (const app of apps) {
128
+ const cacheKey = generateAppCacheKey(app.src, app.parameters, title, date, tags, outputName);
129
+ if (activeCacheKeys) {
130
+ activeCacheKeys.add(cacheKey);
131
+ }
132
+ const result = await renderApp({
133
+ app,
134
+ width,
135
+ height,
136
+ projectDir,
137
+ outputName,
138
+ title,
139
+ date,
140
+ tags,
141
+ browser,
142
+ });
143
+ results.push(result);
144
+ }
145
+ }
146
+ finally {
147
+ await browser.close();
148
+ }
149
+ return results;
150
+ }
151
+ //# sourceMappingURL=app-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-renderer.js","sourceRoot":"","sources":["../src/app-renderer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,OAAO,EAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GACnD,IAAI,CAuON"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,OAAO,EAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GACnD,IAAI,CAwON"}
@@ -137,8 +137,9 @@ function registerGenerateCommand(program, isDebugMode, handleError) {
137
137
  console.log(`📂 Creating output directory: ${outputDir}`);
138
138
  (0, fs_1.mkdirSync)(outputDir, { recursive: true });
139
139
  }
140
- // Render containers for this output (accumulate cache keys)
140
+ // Render containers and apps for this output (accumulate cache keys)
141
141
  await project.renderContainers(outputName, activeCacheKeys);
142
+ await project.renderApps(outputName, activeCacheKeys);
142
143
  // Print project statistics
143
144
  project.printStats();
144
145
  // Build filter graph
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,11 @@ export declare class HTMLParser {
38
38
  * Applies CSS rules to all elements in the AST
39
39
  */
40
40
  private traverseAndApplyStyles;
41
+ /**
42
+ * Parses inline style attribute into CSS properties
43
+ * Example: "color: red; font-size: 16px;" => { color: "red", "font-size": "16px" }
44
+ */
45
+ private parseInlineStyle;
41
46
  }
42
47
  /**
43
48
  * Helper to find elements by tag name in the AST
@@ -1 +1 @@
1
- {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../src/html-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAElC,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAOD,qBAAa,UAAU;IACrB;;;;OAIG;IACU,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAK7D;;;;OAIG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAmBtC;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA6B/B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,OAAO,EAAE,CAiBX;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiBpD"}
1
+ {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../src/html-parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAElC,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAOD,qBAAa,UAAU;IACrB;;;;OAIG;IACU,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAK7D;;;;OAIG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAmBtC;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAwBzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,OAAO,EAAE,CAiBX;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiBpD"}
@@ -137,12 +137,18 @@ class HTMLParser {
137
137
  if (currentNode.type === 'tag') {
138
138
  const element = currentNode;
139
139
  const computedStyles = {};
140
- // Apply matching rules
140
+ // Apply matching rules (CSS classes)
141
141
  for (const rule of styleRules) {
142
142
  if (this.matchesSelector(element, rule.selector)) {
143
143
  Object.assign(computedStyles, rule.properties);
144
144
  }
145
145
  }
146
+ // Apply inline style attribute (highest priority)
147
+ const inlineStyle = element.attribs?.style;
148
+ if (inlineStyle) {
149
+ const inlineProperties = this.parseInlineStyle(inlineStyle);
150
+ Object.assign(computedStyles, inlineProperties);
151
+ }
146
152
  elementsMap.set(element, computedStyles);
147
153
  }
148
154
  if ('children' in currentNode && currentNode.children) {
@@ -153,6 +159,32 @@ class HTMLParser {
153
159
  };
154
160
  traverse(node);
155
161
  }
162
+ /**
163
+ * Parses inline style attribute into CSS properties
164
+ * Example: "color: red; font-size: 16px;" => { color: "red", "font-size": "16px" }
165
+ */
166
+ parseInlineStyle(styleText) {
167
+ const properties = {};
168
+ try {
169
+ // Wrap in a dummy rule for CSS parsing
170
+ const css = `.dummy { ${styleText} }`;
171
+ const ast = csstree.parse(css);
172
+ csstree.walk(ast, {
173
+ visit: 'Declaration',
174
+ enter: (node) => {
175
+ const decl = node;
176
+ const property = decl.property;
177
+ const value = csstree.generate(decl.value);
178
+ properties[property] = value;
179
+ },
180
+ });
181
+ }
182
+ catch (error) {
183
+ // If parsing fails, log and continue without inline styles
184
+ console.warn(`Failed to parse inline style: "${styleText}"`, error);
185
+ }
186
+ return properties;
187
+ }
156
188
  }
157
189
  exports.HTMLParser = HTMLParser;
158
190
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../src/html-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../src/html-parser.ts"],"names":[],"mappings":"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"}
@@ -182,6 +182,12 @@ export declare class HTMLProjectParser {
182
182
  * Extracts the first <container> child from a fragment element
183
183
  */
184
184
  private extractFragmentContainer;
185
+ /**
186
+ * Extracts the first <app> child from a fragment element.
187
+ * The src attribute points to the app's dst directory (relative to project).
188
+ * The data-parameters attribute is parsed as JSON and merged into query params.
189
+ */
190
+ private extractFragmentApp;
185
191
  /**
186
192
  * Serializes an element's children to HTML string
187
193
  */
@@ -202,6 +208,11 @@ export declare class HTMLProjectParser {
202
208
  * Cannot be negative
203
209
  */
204
210
  private parseTrimStart;
211
+ /**
212
+ * Parses -trim-end property into trimRight
213
+ * Cannot be negative
214
+ */
215
+ private parseTrimEnd;
205
216
  /**
206
217
  * Parses the -duration CSS property
207
218
  * Can be: "auto", percentage (e.g. "100%", "50%"), or time value (e.g. "5000ms", "5s")
@@ -1 +1 @@
1
- {"version":3,"file":"html-project-parser.d.ts","sourceRoot":"","sources":["../src/html-project-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAUV,UAAU,EACX,MAAM,QAAQ,CAAC;AAKhB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,WAAW;IAJrB,OAAO,CAAC,UAAU,CAAS;gBAGjB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM;IAK7B;;;OAGG;IACI,+BAA+B,IAAI;QACxC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,gBAAgB,EAAE,KAAK,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,eAAe,EAAE,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ;IAuCY,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA8BtC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;YACW,uBAAuB;IAwErC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmE5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;;OAKG;YACW,gBAAgB;IA2B9B;;;;;OAKG;YACW,gBAAgB;IAiC9B;;;;;OAKG;YACW,kBAAkB;IAiChC;;;;;OAKG;YACW,WAAW;IAiBzB;;;;;OAKG;YACW,WAAW;IA+BzB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqDtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IA6CtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqI3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA0HtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2H7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgC9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+ExB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAyGvB;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4CxB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA6BrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAqF9B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CA2D/B"}
1
+ {"version":3,"file":"html-project-parser.d.ts","sourceRoot":"","sources":["../src/html-project-parser.ts"],"names":[],"mappings":"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"}
@@ -72,7 +72,7 @@ class HTMLProjectParser {
72
72
  const uploads = this.processUploads(title, globalTags);
73
73
  const sequences = this.processSequences(assets);
74
74
  const cssText = this.html.cssText;
75
- return new project_1.Project(sequences, assets, outputs, ffmpegOptions, uploads, aiProviders, title, date, cssText, this.projectPath);
75
+ return new project_1.Project(sequences, assets, outputs, ffmpegOptions, uploads, aiProviders, title, date, globalTags, cssText, this.projectPath);
76
76
  }
77
77
  /**
78
78
  * Validates that all asset files exist on the filesystem
@@ -1297,12 +1297,15 @@ class HTMLProjectParser {
1297
1297
  const assetName = attrs.get('data-asset') || styles['-asset'] || '';
1298
1298
  // 3. Check enabled flag from display property
1299
1299
  const enabled = this.parseEnabled(styles['display']);
1300
- // 4. Extract container if present (first one only)
1300
+ // 4. Extract container or app if present (first one only, mutually exclusive)
1301
1301
  const container = this.extractFragmentContainer(element);
1302
+ const app = container ? undefined : this.extractFragmentApp(element);
1302
1303
  // 5. Parse trimLeft from -trim-start property
1303
1304
  const trimLeft = this.parseTrimStart(styles['-trim-start']);
1305
+ // 5b. Parse trimRight from -trim-end property
1306
+ const trimRight = this.parseTrimEnd(styles['-trim-end']);
1304
1307
  // 6. Parse duration from -duration property
1305
- const duration = this.parseDurationProperty(styles['-duration'], assetName, assets, trimLeft);
1308
+ const duration = this.parseDurationProperty(styles['-duration'], assetName, assets, trimLeft, trimRight);
1306
1309
  // 7. Parse -offset-start for overlayLeft (can be number or expression)
1307
1310
  const overlayLeft = this.parseOffsetStart(styles['-offset-start']);
1308
1311
  // 8. Parse -offset-end for overlayRight (temporary, will be normalized)
@@ -1349,6 +1352,7 @@ class HTMLProjectParser {
1349
1352
  chromakeyColor: chromakeyData.chromakeyColor,
1350
1353
  ...(visualFilter && { visualFilter }), // Add visualFilter if present
1351
1354
  ...(container && { container }), // Add container if present
1355
+ ...(app && { app }), // Add app if present
1352
1356
  ...(timecodeLabel && { timecodeLabel }), // Add timecode label if present
1353
1357
  };
1354
1358
  }
@@ -1390,6 +1394,40 @@ class HTMLProjectParser {
1390
1394
  }
1391
1395
  return undefined;
1392
1396
  }
1397
+ /**
1398
+ * Extracts the first <app> child from a fragment element.
1399
+ * The src attribute points to the app's dst directory (relative to project).
1400
+ * The data-parameters attribute is parsed as JSON and merged into query params.
1401
+ */
1402
+ extractFragmentApp(element) {
1403
+ if (!('children' in element) || !element.children) {
1404
+ return undefined;
1405
+ }
1406
+ for (const child of element.children) {
1407
+ if (child.type === 'tag' && child.name === 'app') {
1408
+ const appElement = child;
1409
+ const id = appElement.attribs?.id ||
1410
+ `app_${Math.random().toString(36).substring(2, 11)}`;
1411
+ const src = appElement.attribs?.src ?? '';
1412
+ let parameters = {};
1413
+ const dataParameters = appElement.attribs?.['data-parameters'];
1414
+ if (dataParameters) {
1415
+ try {
1416
+ const parsed = JSON.parse(dataParameters);
1417
+ // Convert all values to strings for query parameters
1418
+ for (const [key, value] of Object.entries(parsed)) {
1419
+ parameters[key] = String(value);
1420
+ }
1421
+ }
1422
+ catch {
1423
+ console.warn(`Warning: invalid JSON in data-parameters for app "${id}": ${dataParameters}`);
1424
+ }
1425
+ }
1426
+ return { id, src, parameters };
1427
+ }
1428
+ }
1429
+ return undefined;
1430
+ }
1393
1431
  /**
1394
1432
  * Serializes an element's children to HTML string
1395
1433
  */
@@ -1477,18 +1515,30 @@ class HTMLProjectParser {
1477
1515
  // Ensure non-negative as per spec
1478
1516
  return Math.max(0, value);
1479
1517
  }
1518
+ /**
1519
+ * Parses -trim-end property into trimRight
1520
+ * Cannot be negative
1521
+ */
1522
+ parseTrimEnd(trimEnd) {
1523
+ if (!trimEnd) {
1524
+ return 0;
1525
+ }
1526
+ const value = this.parseMilliseconds(trimEnd);
1527
+ // Ensure non-negative as per spec
1528
+ return Math.max(0, value);
1529
+ }
1480
1530
  /**
1481
1531
  * Parses the -duration CSS property
1482
1532
  * Can be: "auto", percentage (e.g. "100%", "50%"), or time value (e.g. "5000ms", "5s")
1483
1533
  */
1484
- parseDurationProperty(duration, assetName, assets, trimLeft) {
1534
+ parseDurationProperty(duration, assetName, assets, trimLeft, trimRight) {
1485
1535
  if (!duration || duration.trim() === 'auto') {
1486
- // Auto: use asset duration minus trim-start
1536
+ // Auto: use asset duration minus trim-start and trim-end
1487
1537
  const asset = assets.get(assetName);
1488
1538
  if (!asset) {
1489
1539
  return 0;
1490
1540
  }
1491
- return Math.max(0, asset.duration - trimLeft);
1541
+ return Math.max(0, asset.duration - trimLeft - trimRight);
1492
1542
  }
1493
1543
  // Handle percentage (e.g., "100%", "50%")
1494
1544
  if (duration.endsWith('%')) {