@12ui/design 0.2.14 → 0.2.16
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 +21 -1
- package/dist/bounded-concurrency.d.ts +13 -0
- package/dist/bounded-concurrency.d.ts.map +1 -0
- package/dist/bounded-concurrency.js +43 -0
- package/dist/bounded-concurrency.js.map +1 -0
- package/dist/branch-downloads.d.ts +10 -0
- package/dist/branch-downloads.d.ts.map +1 -1
- package/dist/branch-downloads.js +20 -0
- package/dist/branch-downloads.js.map +1 -1
- package/dist/branch-execution.d.ts +7 -0
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +175 -38
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-materialize.d.ts +23 -12
- package/dist/branch-materialize.d.ts.map +1 -1
- package/dist/branch-materialize.js +55 -38
- package/dist/branch-materialize.js.map +1 -1
- package/dist/branch-page-conversion.d.ts +109 -5
- package/dist/branch-page-conversion.d.ts.map +1 -1
- package/dist/branch-page-conversion.js +375 -179
- package/dist/branch-page-conversion.js.map +1 -1
- package/dist/branch-progress.d.ts +24 -0
- package/dist/branch-progress.d.ts.map +1 -1
- package/dist/branch-progress.js +35 -6
- package/dist/branch-progress.js.map +1 -1
- package/dist/branch-run-record.d.ts +14 -0
- package/dist/branch-run-record.d.ts.map +1 -1
- package/dist/branch-run-record.js.map +1 -1
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +3 -0
- package/dist/branch-status.js.map +1 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +1 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts +10 -1
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +60 -11
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +35 -2
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +38 -1
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-draft-command.d.ts +2 -0
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +22 -4
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-package-command.d.ts +13 -0
- package/dist/cli-package-command.d.ts.map +1 -1
- package/dist/cli-package-command.js +35 -8
- package/dist/cli-package-command.js.map +1 -1
- package/dist/cli-progress.d.ts +81 -5
- package/dist/cli-progress.d.ts.map +1 -1
- package/dist/cli-progress.js +108 -5
- package/dist/cli-progress.js.map +1 -1
- package/dist/cli-skill-command.d.ts.map +1 -1
- package/dist/cli-skill-command.js +27 -12
- package/dist/cli-skill-command.js.map +1 -1
- package/dist/cli.js +20 -10
- package/dist/cli.js.map +1 -1
- package/dist/conversion-receipt-store.d.ts +75 -0
- package/dist/conversion-receipt-store.d.ts.map +1 -0
- package/dist/conversion-receipt-store.js +143 -0
- package/dist/conversion-receipt-store.js.map +1 -0
- package/dist/conversion-receipt.d.ts +223 -0
- package/dist/conversion-receipt.d.ts.map +1 -0
- package/dist/conversion-receipt.js +352 -0
- package/dist/conversion-receipt.js.map +1 -0
- package/dist/draft-adoption.d.ts +48 -0
- package/dist/draft-adoption.d.ts.map +1 -0
- package/dist/draft-adoption.js +237 -0
- package/dist/draft-adoption.js.map +1 -0
- package/dist/draft-run.d.ts +10 -0
- package/dist/draft-run.d.ts.map +1 -1
- package/dist/draft-run.js +16 -4
- package/dist/draft-run.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +65 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/package-client.d.ts +28 -0
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js +21 -1
- package/dist/package-client.js.map +1 -1
- package/dist/package-source-refusal.d.ts +17 -0
- package/dist/package-source-refusal.d.ts.map +1 -0
- package/dist/package-source-refusal.js +61 -0
- package/dist/package-source-refusal.js.map +1 -0
- package/dist/package-submission.d.ts +43 -1
- package/dist/package-submission.d.ts.map +1 -1
- package/dist/package-submission.js +32 -7
- package/dist/package-submission.js.map +1 -1
- package/dist/skill-clients.d.ts +39 -0
- package/dist/skill-clients.d.ts.map +1 -0
- package/dist/skill-clients.js +156 -0
- package/dist/skill-clients.js.map +1 -0
- package/dist/skill-installer.d.ts +2 -3
- package/dist/skill-installer.d.ts.map +1 -1
- package/dist/skill-installer.js +9 -101
- package/dist/skill-installer.js.map +1 -1
- package/package.json +1 -1
- package/skills/design/SKILL.md +6 -3
- package/skills/design-branch/SKILL.md +6 -5
- package/skills/design-convert/SKILL.md +3 -3
- package/skills/design-draft/SKILL.md +3 -3
- package/skills/design-search/SKILL.md +3 -3
|
@@ -1,206 +1,402 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
1
|
import { branchPackageKey } from './branch-identity.js';
|
|
2
|
+
import { BRANCH_PAGE_CONCURRENCY_DEFAULT } from './cli-progress.js';
|
|
3
|
+
import { createConcurrencyLimiter } from './bounded-concurrency.js';
|
|
4
|
+
import { readBranchScreenBytes } from './branch-downloads.js';
|
|
5
|
+
import { findReusableConversionId, } from './conversion-receipt.js';
|
|
3
6
|
import { normalizePageViewports, } from './branch-viewport-normalization.js';
|
|
7
|
+
import { isSourceConversionRefusal, sourceConversionRefusalViewportId, } from './package-source-refusal.js';
|
|
4
8
|
import { submitConversionPackage, } from './package-submission.js';
|
|
5
9
|
export const WINNER_VIEWPORT_ID = 'winner';
|
|
6
|
-
const
|
|
10
|
+
export const DEFAULT_PACKAGE_MODEL = 'standard';
|
|
7
11
|
const orderedViewports = (plan, page) => plan.screens
|
|
8
12
|
.filter((screen) => page.slots.includes(screen.slot))
|
|
9
13
|
.sort((left, right) => left.viewportOrdinal - right.viewportOrdinal)
|
|
10
14
|
.map((screen) => ({ slot: screen.slot, ordinal: screen.viewportOrdinal }));
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The reuse claim, gated on proof rather than on intent.
|
|
17
|
+
*
|
|
18
|
+
* A normalized winner is no longer the bytes any earlier conversion was
|
|
19
|
+
* admitted with, so a declared `--source-conversion-id` would assert a digest
|
|
20
|
+
* the server will disprove and turn a convertible page into a failed one. A
|
|
21
|
+
* receipt is keyed on the bytes actually submitted, so it survives
|
|
22
|
+
* normalization — the same approved design reconciled to the same server canvas
|
|
23
|
+
* produces the same bytes — and it is only honoured on an exact digest match.
|
|
24
|
+
*/
|
|
25
|
+
export const winnerReuseConversionId = async (args) => {
|
|
26
|
+
if (args.settings.sourceConversionId && !args.normalized)
|
|
27
|
+
return args.settings.sourceConversionId;
|
|
28
|
+
return await findReusableConversionId({
|
|
29
|
+
receipts: args.receipts,
|
|
30
|
+
sha256: args.submittedSha256,
|
|
31
|
+
model: args.model,
|
|
32
|
+
boughtBy: args.runId,
|
|
33
|
+
...(args.store ? { store: args.store } : {}),
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The same page, with the attachment the server just disproved dropped.
|
|
38
|
+
*
|
|
39
|
+
* A reuse claim is proved against durable evidence BEFORE the package row
|
|
40
|
+
* exists, so its refusal costs nothing and leaves nothing behind: the identical
|
|
41
|
+
* request without the attachment is a first admission, not a second one. The
|
|
42
|
+
* page's key is derived from the run, the page, and the ordered digests of the
|
|
43
|
+
* bytes being submitted (`branchPackageKey`) — never from the attachment — so
|
|
44
|
+
* the retry replays under the SAME key and the reuse stays what it always was:
|
|
45
|
+
* an optimisation over bytes the page is carrying anyway.
|
|
46
|
+
*
|
|
47
|
+
* Null when the failure is not that refusal, or names no attachment this page
|
|
48
|
+
* actually sent. Then there is nothing a retry would change, and the page
|
|
49
|
+
* settles failed exactly as it did before.
|
|
50
|
+
*/
|
|
51
|
+
const withoutRefusedAttachment = (viewports, error,
|
|
52
|
+
/** The submitted digest per viewport, and the model the page declared. */
|
|
53
|
+
key) => {
|
|
54
|
+
if (!isSourceConversionRefusal(error))
|
|
55
|
+
return null;
|
|
56
|
+
const attached = viewports.filter((viewport) => viewport.sourceConversionId);
|
|
57
|
+
const named = sourceConversionRefusalViewportId(error);
|
|
58
|
+
const refused = named === null
|
|
59
|
+
? attached
|
|
60
|
+
: attached.filter((viewport) => viewport.id === named);
|
|
61
|
+
// A refusal naming a viewport that carried no attachment is a contract this
|
|
62
|
+
// client does not recognise; dropping every attachment is then the only
|
|
63
|
+
// reading that can still be right.
|
|
64
|
+
const dropped = refused.length > 0 ? refused : attached;
|
|
65
|
+
if (dropped.length === 0)
|
|
66
|
+
return null;
|
|
67
|
+
const dropping = new Set(dropped.map((viewport) => viewport.id));
|
|
68
|
+
return {
|
|
69
|
+
viewports: viewports.map((viewport) => (dropping.has(viewport.id)
|
|
70
|
+
// Rebuilt without the claim, and with the bytes it was always carrying.
|
|
71
|
+
? {
|
|
72
|
+
id: viewport.id,
|
|
54
73
|
ordinal: viewport.ordinal,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const reuse = entry.input.id === WINNER_VIEWPORT_ID
|
|
86
|
-
&& args.settings.sourceConversionId
|
|
87
|
-
&& !resolved.normalized;
|
|
74
|
+
imagePath: viewport.imagePath,
|
|
75
|
+
bytes: viewport.bytes,
|
|
76
|
+
mediaType: viewport.mediaType,
|
|
77
|
+
}
|
|
78
|
+
: viewport)),
|
|
79
|
+
disproven: dropped.map((viewport) => ({
|
|
80
|
+
viewportId: viewport.id,
|
|
81
|
+
conversionId: viewport.sourceConversionId,
|
|
82
|
+
detail: error.message,
|
|
83
|
+
sha256: key.sha256(viewport.id),
|
|
84
|
+
model: key.model,
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export const convertBranchPage = async (args) => {
|
|
89
|
+
const { page } = args;
|
|
90
|
+
const planned = orderedViewports(args.plan, page);
|
|
91
|
+
const missing = planned.filter((viewport) => !args.screens.has(viewport.slot));
|
|
92
|
+
if (missing.length > 0) {
|
|
93
|
+
return {
|
|
94
|
+
status: 'skipped',
|
|
95
|
+
reason: `Page ${page.id} is missing screen(s) ${missing.map((entry) => entry.slot).join(', ')},`
|
|
96
|
+
+ ' so its viewports do not stack into a whole page. The screens that did land are on'
|
|
97
|
+
+ ' disk; redraw the gap and re-run with --resume before converting this page.',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Collect the page's pixels first, tagging which side declares the width.
|
|
101
|
+
const sources = [];
|
|
102
|
+
if (page.startsFromWinner) {
|
|
103
|
+
if (!args.winner) {
|
|
88
104
|
return {
|
|
89
|
-
id: entry.input.id,
|
|
90
|
-
ordinal: entry.ordinal,
|
|
91
|
-
imagePath: entry.path,
|
|
92
|
-
bytes: resolved.bytes,
|
|
93
|
-
mediaType: resolved.mediaType,
|
|
94
|
-
...(reuse ? { sourceConversionId: args.settings.sourceConversionId } : {}),
|
|
95
|
-
};
|
|
96
|
-
});
|
|
97
|
-
if (viewports.length === 0) {
|
|
98
|
-
conversions.set(page.id, {
|
|
99
105
|
status: 'skipped',
|
|
100
|
-
reason: `Page ${page.id}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
if (viewports.length === 1 && page.startsFromWinner) {
|
|
105
|
-
conversions.set(page.id, {
|
|
106
|
-
status: 'skipped',
|
|
107
|
-
reason: 'The approved screen already is the whole page — the server planned no'
|
|
108
|
-
+ ' continuations for it. Convert it on its own with'
|
|
109
|
-
+ ' `12ui convert <winner> --output layerdoc --export html`.',
|
|
110
|
-
});
|
|
111
|
-
continue;
|
|
106
|
+
reason: `Page ${page.id} starts from the approved screen, whose bytes are not available`
|
|
107
|
+
+ ' locally, so viewport 1 of the page is missing.',
|
|
108
|
+
};
|
|
112
109
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
110
|
+
sources.push({
|
|
111
|
+
ordinal: 1,
|
|
112
|
+
path: args.winner.path,
|
|
113
|
+
input: {
|
|
114
|
+
id: WINNER_VIEWPORT_ID,
|
|
115
|
+
bytes: await readBranchScreenBytes(args.winner),
|
|
116
|
+
mediaType: 'image/png',
|
|
117
|
+
width: args.winner.width,
|
|
118
|
+
height: args.winner.height,
|
|
119
|
+
// The winner came from somewhere else; it is the side that moves.
|
|
120
|
+
canonical: false,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
for (const viewport of planned) {
|
|
125
|
+
const screen = args.screens.get(viewport.slot);
|
|
126
|
+
sources.push({
|
|
127
|
+
ordinal: viewport.ordinal,
|
|
128
|
+
path: screen.path,
|
|
129
|
+
input: {
|
|
130
|
+
id: viewport.slot,
|
|
131
|
+
bytes: await readBranchScreenBytes(screen),
|
|
132
|
+
mediaType: 'image/png',
|
|
133
|
+
width: screen.width,
|
|
134
|
+
height: screen.height,
|
|
135
|
+
// Drawn by the server on the run's fixed canvas: this is the width.
|
|
136
|
+
canonical: true,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const model = args.settings.model ?? DEFAULT_PACKAGE_MODEL;
|
|
141
|
+
let normalization;
|
|
142
|
+
try {
|
|
143
|
+
normalization = await normalizePageViewports(sources.map((entry) => entry.input));
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return {
|
|
147
|
+
status: 'failed',
|
|
148
|
+
output: args.settings.output,
|
|
149
|
+
error: error instanceof Error ? error.message : String(error),
|
|
120
150
|
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
151
|
+
}
|
|
152
|
+
const normalizedById = new Map(normalization.viewports.map((entry) => [entry.id, entry]));
|
|
153
|
+
const submittedWinner = normalizedById.get(WINNER_VIEWPORT_ID);
|
|
154
|
+
// The winner's reuse is the one claim that reads the user's receipt store,
|
|
155
|
+
// and it can only be asked once the bytes it is about to submit are known.
|
|
156
|
+
const winnerReuse = submittedWinner
|
|
157
|
+
? await winnerReuseConversionId({
|
|
158
|
+
settings: args.settings,
|
|
159
|
+
submittedSha256: submittedWinner.sha256,
|
|
160
|
+
normalized: submittedWinner.normalized,
|
|
161
|
+
receipts: args.winnerReceipts ?? [],
|
|
124
162
|
runId: args.plan.runId,
|
|
125
|
-
|
|
126
|
-
|
|
163
|
+
model,
|
|
164
|
+
...(args.receiptStore ? { store: args.receiptStore } : {}),
|
|
165
|
+
})
|
|
166
|
+
: undefined;
|
|
167
|
+
const viewports = sources.map((entry) => {
|
|
168
|
+
const resolved = normalizedById.get(entry.input.id);
|
|
169
|
+
const reuse = entry.input.id === WINNER_VIEWPORT_ID ? winnerReuse : undefined;
|
|
170
|
+
return {
|
|
171
|
+
id: entry.input.id,
|
|
172
|
+
ordinal: entry.ordinal,
|
|
173
|
+
imagePath: entry.path,
|
|
174
|
+
bytes: resolved.bytes,
|
|
175
|
+
mediaType: resolved.mediaType,
|
|
176
|
+
...(reuse ? { sourceConversionId: reuse } : {}),
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
if (viewports.length === 0) {
|
|
180
|
+
return { status: 'skipped', reason: `Page ${page.id} has no viewport to convert.` };
|
|
181
|
+
}
|
|
182
|
+
if (viewports.length === 1 && page.startsFromWinner) {
|
|
183
|
+
return {
|
|
184
|
+
status: 'skipped',
|
|
185
|
+
reason: 'The approved screen already is the whole page — the server planned no'
|
|
186
|
+
+ ' continuations for it. Convert it on its own with'
|
|
187
|
+
+ ' `12ui convert <winner> --output layerdoc --export html`.',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// The page's identity. Its viewports travel per submission instead, because a
|
|
191
|
+
// disproven attachment changes them and nothing else about the page.
|
|
192
|
+
const input = {
|
|
193
|
+
id: page.id,
|
|
194
|
+
ordinal: page.index,
|
|
195
|
+
kind: page.kind,
|
|
196
|
+
...(page.title ? { title: page.title } : {}),
|
|
197
|
+
...(page.purpose ? { purpose: page.purpose } : {}),
|
|
198
|
+
};
|
|
199
|
+
// Keyed on the bytes actually submitted, so a retry after normalization
|
|
200
|
+
// replays the same package instead of buying the page again.
|
|
201
|
+
const idempotencyKey = branchPackageKey({
|
|
202
|
+
runId: args.plan.runId,
|
|
203
|
+
pageIndex: page.index,
|
|
204
|
+
viewportSha256s: viewports.map((viewport) => normalizedById.get(viewport.id).sha256),
|
|
205
|
+
output: args.settings.output,
|
|
206
|
+
...(args.settings.model ? { model: args.settings.model } : {}),
|
|
207
|
+
...(args.settings.responsiveQuality
|
|
208
|
+
? { responsiveQuality: args.settings.responsiveQuality }
|
|
209
|
+
: {}),
|
|
210
|
+
});
|
|
211
|
+
const normalizedRecord = normalization.viewports
|
|
212
|
+
.filter((viewport) => viewport.normalized)
|
|
213
|
+
.map((viewport) => ({
|
|
214
|
+
id: viewport.id,
|
|
215
|
+
fromWidth: viewport.original.width,
|
|
216
|
+
fromHeight: viewport.original.height,
|
|
217
|
+
fromSha256: viewport.original.sha256,
|
|
218
|
+
toWidth: viewport.width,
|
|
219
|
+
toHeight: viewport.height,
|
|
220
|
+
toSha256: viewport.sha256,
|
|
221
|
+
}));
|
|
222
|
+
const normalizationRecord = {
|
|
223
|
+
...(normalization.canonicalWidth === null
|
|
224
|
+
? {}
|
|
225
|
+
: { canonicalWidth: normalization.canonicalWidth }),
|
|
226
|
+
...(normalizedRecord.length > 0 ? { normalizedViewports: normalizedRecord } : {}),
|
|
227
|
+
};
|
|
228
|
+
const disproven = [];
|
|
229
|
+
const disproofRecord = () => (disproven.length > 0 ? { disprovenReuse: disproven } : {});
|
|
230
|
+
// The reconciliation is a fact about what was submitted, so it belongs in
|
|
231
|
+
// the record whether or not the submission was accepted — a failed page
|
|
232
|
+
// is exactly when an operator needs to know what the bytes were.
|
|
233
|
+
const failedPage = (error) => ({
|
|
234
|
+
status: 'failed',
|
|
235
|
+
idempotencyKey,
|
|
236
|
+
output: args.settings.output,
|
|
237
|
+
...normalizationRecord,
|
|
238
|
+
...disproofRecord(),
|
|
239
|
+
error: error instanceof Error ? error.message : String(error),
|
|
240
|
+
});
|
|
241
|
+
// Whether a package row exists yet. An attachment is proved at admission,
|
|
242
|
+
// before anything durable is created, so only a failure with no admitted
|
|
243
|
+
// package can be that refusal — and only then can the same key carry a
|
|
244
|
+
// different body without being a `409 idempotency_conflict`.
|
|
245
|
+
let admitted = false;
|
|
246
|
+
const submit = async (submitted) => await submitConversionPackage({
|
|
247
|
+
client: args.client,
|
|
248
|
+
outDir: args.pagesDirectory,
|
|
249
|
+
submission: {
|
|
127
250
|
output: args.settings.output,
|
|
128
251
|
...(args.settings.model ? { model: args.settings.model } : {}),
|
|
129
252
|
...(args.settings.responsiveQuality
|
|
130
253
|
? { responsiveQuality: args.settings.responsiveQuality }
|
|
131
254
|
: {}),
|
|
255
|
+
pages: [{ ...input, viewports: [...submitted] }],
|
|
256
|
+
idempotencyKey,
|
|
257
|
+
},
|
|
258
|
+
onSubmitted: () => { admitted = true; },
|
|
259
|
+
...(args.timeoutMs === undefined ? {} : { timeoutMs: args.timeoutMs }),
|
|
260
|
+
...(args.onProgress ? { onProgress: args.onProgress } : {}),
|
|
261
|
+
...(args.signal ? { signal: args.signal } : {}),
|
|
262
|
+
});
|
|
263
|
+
let result;
|
|
264
|
+
try {
|
|
265
|
+
result = await submit(viewports);
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
// A disproven reuse costs one retry of the same page, never the page: its
|
|
269
|
+
// other screens are already paid for by the time anything could refuse it.
|
|
270
|
+
const retry = admitted ? null : withoutRefusedAttachment(viewports, error, {
|
|
271
|
+
// Every viewport was built from the normalization, so its submitted
|
|
272
|
+
// digest is always known; the fallback only keeps an impossible miss from
|
|
273
|
+
// throwing inside the retry path, and names no record to withdraw.
|
|
274
|
+
sha256: (viewportId) => normalizedById.get(viewportId)?.sha256 ?? '',
|
|
275
|
+
model,
|
|
132
276
|
});
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
fromHeight: viewport.original.height,
|
|
139
|
-
fromSha256: viewport.original.sha256,
|
|
140
|
-
toWidth: viewport.width,
|
|
141
|
-
toHeight: viewport.height,
|
|
142
|
-
toSha256: viewport.sha256,
|
|
143
|
-
}));
|
|
144
|
-
const normalizationRecord = {
|
|
145
|
-
...(normalization.canonicalWidth === null
|
|
146
|
-
? {}
|
|
147
|
-
: { canonicalWidth: normalization.canonicalWidth }),
|
|
148
|
-
...(normalizedRecord.length > 0 ? { normalizedViewports: normalizedRecord } : {}),
|
|
149
|
-
};
|
|
277
|
+
if (!retry)
|
|
278
|
+
return failedPage(error);
|
|
279
|
+
disproven.push(...retry.disproven);
|
|
280
|
+
for (const entry of retry.disproven)
|
|
281
|
+
args.onReuseDisproven?.(entry);
|
|
150
282
|
try {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
283
|
+
result = await submit(retry.viewports);
|
|
284
|
+
}
|
|
285
|
+
catch (retryError) {
|
|
286
|
+
return failedPage(retryError);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const converted = result.pages[0];
|
|
290
|
+
const winnerChild = converted?.viewports?.find((viewport) => (viewport.id === WINNER_VIEWPORT_ID
|
|
291
|
+
&& viewport.status === 'succeeded'
|
|
292
|
+
&& viewport.conversionId));
|
|
293
|
+
if (winnerChild?.conversionId && result.expiresAt) {
|
|
294
|
+
args.onWinnerConversion?.({
|
|
295
|
+
sha256: normalizedById.get(WINNER_VIEWPORT_ID).sha256,
|
|
296
|
+
conversionId: winnerChild.conversionId,
|
|
297
|
+
// What the server says it ran, not what this page asked for. A receipt is
|
|
298
|
+
// only honoured when its model matches the next package's, so recording
|
|
299
|
+
// the request would claim a model the conversion may not have run.
|
|
300
|
+
model: result.model ?? model,
|
|
301
|
+
expiresAt: result.expiresAt,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
return converted?.status === 'succeeded'
|
|
305
|
+
? {
|
|
306
|
+
status: 'succeeded',
|
|
307
|
+
packageId: result.packageId,
|
|
308
|
+
idempotencyKey,
|
|
309
|
+
output: args.settings.output,
|
|
310
|
+
...normalizationRecord,
|
|
311
|
+
...disproofRecord(),
|
|
312
|
+
...(converted.conversionId ? { conversionId: converted.conversionId } : {}),
|
|
313
|
+
...(converted.outFile ? { outFile: converted.outFile } : {}),
|
|
314
|
+
...(converted.sha256 ? { sha256: converted.sha256 } : {}),
|
|
315
|
+
...(converted.bytes === undefined ? {} : { bytes: converted.bytes }),
|
|
316
|
+
}
|
|
317
|
+
: {
|
|
318
|
+
status: 'failed',
|
|
319
|
+
packageId: result.packageId,
|
|
320
|
+
idempotencyKey,
|
|
321
|
+
output: args.settings.output,
|
|
322
|
+
...normalizationRecord,
|
|
323
|
+
...disproofRecord(),
|
|
324
|
+
error: converted?.error ?? `Package ${result.packageId} produced no page.`,
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* Every page settles, whatever happens to any one of them. A page whose own
|
|
329
|
+
* bytes could not even be delivered is recorded as a failed conversion rather
|
|
330
|
+
* than thrown: a throw would abandon the sibling packages already running,
|
|
331
|
+
* which are paid work whose results would then never reach the sentinel.
|
|
332
|
+
*/
|
|
333
|
+
const settlePageConversion = async (args) => {
|
|
334
|
+
try {
|
|
335
|
+
return await convertBranchPage(args);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
return {
|
|
339
|
+
status: 'failed',
|
|
340
|
+
output: args.settings.output,
|
|
341
|
+
error: error instanceof Error ? error.message : String(error),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
/**
|
|
346
|
+
* The one owner of "which pages are converting, and how many at once".
|
|
347
|
+
*
|
|
348
|
+
* Pages are handed in as they become eligible rather than all at the end, so a
|
|
349
|
+
* page whose screens landed in the first wave is already converting while the
|
|
350
|
+
* rest of the run is still generating. `prepare` runs inside the page's own
|
|
351
|
+
* slot, which is what keeps a delivery for a page that has not started from
|
|
352
|
+
* competing with the packages that are already paid for.
|
|
353
|
+
*/
|
|
354
|
+
export const createBranchPageConversions = (args) => {
|
|
355
|
+
const limiter = createConcurrencyLimiter(args.concurrency ?? BRANCH_PAGE_CONCURRENCY_DEFAULT);
|
|
356
|
+
const conversions = new Map();
|
|
357
|
+
const enqueued = new Map();
|
|
358
|
+
return {
|
|
359
|
+
start: (plan, page) => {
|
|
360
|
+
if (enqueued.has(page.id))
|
|
361
|
+
return;
|
|
362
|
+
enqueued.set(page.id, limiter(async () => {
|
|
363
|
+
const prepared = await args.prepare(page, plan);
|
|
364
|
+
conversions.set(page.id, await settlePageConversion({
|
|
365
|
+
client: args.client,
|
|
366
|
+
plan,
|
|
367
|
+
page,
|
|
368
|
+
screens: prepared.screens,
|
|
369
|
+
settings: args.settings,
|
|
370
|
+
pagesDirectory: args.pagesDirectory,
|
|
371
|
+
...(prepared.winner ? { winner: prepared.winner } : {}),
|
|
372
|
+
...(args.timeoutMs === undefined ? {} : { timeoutMs: args.timeoutMs }),
|
|
373
|
+
...(args.winnerReceipts ? { winnerReceipts: args.winnerReceipts } : {}),
|
|
374
|
+
...(args.receiptStore ? { receiptStore: args.receiptStore } : {}),
|
|
375
|
+
...(args.onProgress
|
|
376
|
+
? { onProgress: (event) => args.onProgress(page.id, event) }
|
|
159
377
|
: {}),
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
: {}),
|
|
167
|
-
...(args.signal ? { signal: args.signal } : {}),
|
|
168
|
-
});
|
|
169
|
-
const converted = result.pages[0];
|
|
170
|
-
conversions.set(page.id, converted?.status === 'succeeded'
|
|
171
|
-
? {
|
|
172
|
-
status: 'succeeded',
|
|
173
|
-
packageId: result.packageId,
|
|
174
|
-
idempotencyKey,
|
|
175
|
-
output: args.settings.output,
|
|
176
|
-
...normalizationRecord,
|
|
177
|
-
...(converted.conversionId ? { conversionId: converted.conversionId } : {}),
|
|
178
|
-
...(converted.outFile ? { outFile: converted.outFile } : {}),
|
|
179
|
-
...(converted.sha256 ? { sha256: converted.sha256 } : {}),
|
|
180
|
-
...(converted.bytes === undefined ? {} : { bytes: converted.bytes }),
|
|
181
|
-
}
|
|
182
|
-
: {
|
|
378
|
+
...(args.onWinnerConversion ? { onWinnerConversion: args.onWinnerConversion } : {}),
|
|
379
|
+
...(args.onReuseDisproven ? { onReuseDisproven: args.onReuseDisproven } : {}),
|
|
380
|
+
...(args.signal ? { signal: args.signal } : {}),
|
|
381
|
+
}));
|
|
382
|
+
}).catch((error) => {
|
|
383
|
+
conversions.set(page.id, {
|
|
183
384
|
status: 'failed',
|
|
184
|
-
packageId: result.packageId,
|
|
185
|
-
idempotencyKey,
|
|
186
385
|
output: args.settings.output,
|
|
187
|
-
|
|
188
|
-
error: converted?.error ?? `Package ${result.packageId} produced no page.`,
|
|
386
|
+
error: error instanceof Error ? error.message : String(error),
|
|
189
387
|
});
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
//
|
|
194
|
-
// is
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
return conversions;
|
|
388
|
+
}));
|
|
389
|
+
},
|
|
390
|
+
settled: async () => {
|
|
391
|
+
// Draining can itself enqueue: a page becomes eligible while an earlier
|
|
392
|
+
// one is still in flight. Keep draining until nothing new arrived.
|
|
393
|
+
let counted = -1;
|
|
394
|
+
while (enqueued.size !== counted) {
|
|
395
|
+
counted = enqueued.size;
|
|
396
|
+
await Promise.all([...enqueued.values()]);
|
|
397
|
+
}
|
|
398
|
+
return conversions;
|
|
399
|
+
},
|
|
400
|
+
};
|
|
205
401
|
};
|
|
206
402
|
//# sourceMappingURL=branch-page-conversion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-page-conversion.js","sourceRoot":"","sources":["../src/branch-page-conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,OAAO,EACL,sBAAsB,GAGvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,uBAAuB,GAIxB,MAAM,yBAAyB,CAAC;AAqBjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAI3C,MAAM,eAAe,GAAG,KAAK,EAAE,MAA8B,EAAuB,EAAE,CAAC,CACrF,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC5C,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,IAA0B,EAC1B,IAA2C,EACN,EAAE,CAAC,IAAI,CAAC,OAAO;KACnD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACpD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;KACnE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAUxC,EAAwC,EAAE;IACzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,yBAAyB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;sBAC5F,oFAAoF;sBACpF,6EAA6E;aAClF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,0EAA0E;QAC1E,MAAM,OAAO,GAA8D,EAAE,CAAC;QAC9E,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;oBACvB,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,iEAAiE;0BACpF,iDAAiD;iBACtD,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE;oBACL,EAAE,EAAE,kBAAkB;oBACtB,KAAK;oBACL,SAAS,EAAE,WAAW;oBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC1B,kEAAkE;oBAClE,SAAS,EAAE,KAAK;iBACjB;aACF,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE;oBACL,EAAE,EAAE,QAAQ,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,eAAe,CAAC,MAAM,CAAC;oBACpC,SAAS,EAAE,WAAW;oBACtB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,oEAAoE;oBACpE,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAgC,CAAC;QACrC,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC5B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,SAAS,GAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC;YACrD,wEAAwE;YACxE,sEAAsE;YACtE,+CAA+C;YAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,kBAAkB;mBAC9C,IAAI,CAAC,QAAQ,CAAC,kBAAkB;mBAChC,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC1B,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;gBAClB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,8BAA8B;aACtD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,uEAAuE;sBAC3E,mDAAmD;sBACnD,2DAA2D;aAChE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,SAAS;SACV,CAAC;QACF,wEAAwE;QACxE,6DAA6D;QAC7D,MAAM,cAAc,GAAG,gBAAgB,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC;YACrF,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB;gBACjC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBACxD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS;aAC7C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;aACzC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,SAAS,EAAE,QAAQ,CAAC,QAAS,CAAC,KAAK;YACnC,UAAU,EAAE,QAAQ,CAAC,QAAS,CAAC,MAAM;YACrC,UAAU,EAAE,QAAQ,CAAC,QAAS,CAAC,MAAM;YACrC,OAAO,EAAE,QAAQ,CAAC,KAAK;YACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM;SAC1B,CAAC,CAAC,CAAC;QACN,MAAM,mBAAmB,GAAG;YAC1B,GAAG,CAAC,aAAa,CAAC,cAAc,KAAK,IAAI;gBACvC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,cAAc,EAAE,CAAC;YACrD,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF,CAAC;QACF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;gBAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,cAAc;gBAC3B,UAAU,EAAE;oBACV,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB;wBACjC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;wBACxD,CAAC,CAAC,EAAE,CAAC;oBACP,KAAK,EAAE,CAAC,KAAK,CAAC;oBACd,cAAc;iBACf;gBACD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtE,GAAG,CAAC,IAAI,CAAC,UAAU;oBACjB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,KAA2B,EAAE,EAAE,CAAC,IAAI,CAAC,UAAW,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE;oBACnF,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,WAAW;gBACxD,CAAC,CAAC;oBACA,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,cAAc;oBACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAC5B,GAAG,mBAAmB;oBACtB,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5D,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;iBACrE;gBACD,CAAC,CAAC;oBACA,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,cAAc;oBACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAC5B,GAAG,mBAAmB;oBACtB,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,WAAW,MAAM,CAAC,SAAS,oBAAoB;iBAC3E,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,wEAAwE;YACxE,iEAAiE;YACjE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,QAAQ;gBAChB,cAAc;gBACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC5B,GAAG,mBAAmB;gBACtB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"branch-page-conversion.js","sourceRoot":"","sources":["../src/branch-page-conversion.ts"],"names":[],"mappings":"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"}
|