@clipwright/core 0.18.0 → 0.20.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/CHANGELOG.md +44 -0
- package/dist/__fixtures__/queue-promises.d.ts +5 -84
- package/dist/__fixtures__/queue-promises.js +7 -84
- package/dist/__fixtures__/queue-promises.js.map +1 -1
- package/dist/account-actors.d.ts +25 -25
- package/dist/account-actors.js +25 -25
- package/dist/account-actors.js.map +1 -1
- package/dist/account.d.ts +4 -10
- package/dist/account.js +6 -12
- package/dist/account.js.map +1 -1
- package/dist/actor-bounds.d.ts +4 -4
- package/dist/actor-bounds.js +4 -4
- package/dist/actor-bounds.js.map +1 -1
- package/dist/actor-qualities.d.ts +3 -3
- package/dist/actor-qualities.js +3 -3
- package/dist/actor-qualities.js.map +1 -1
- package/dist/actors.d.ts +8 -8
- package/dist/actors.js +9 -9
- package/dist/actors.js.map +1 -1
- package/dist/api-failure.d.ts +28 -129
- package/dist/api-failure.js +52 -225
- package/dist/api-failure.js.map +1 -1
- package/dist/aspect.d.ts +26 -96
- package/dist/aspect.js +32 -108
- package/dist/aspect.js.map +1 -1
- package/dist/contract-dispositions.d.ts +42 -167
- package/dist/contract-dispositions.js +54 -184
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/endpoints.d.ts +5 -5
- package/dist/endpoints.js +3 -3
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +33 -101
- package/dist/errors.js +42 -108
- package/dist/errors.js.map +1 -1
- package/dist/faceless-cut-style.d.ts +115 -0
- package/dist/faceless-cut-style.js +109 -0
- package/dist/faceless-cut-style.js.map +1 -0
- package/dist/faceless-image-qualification.d.ts +97 -0
- package/dist/faceless-image-qualification.js +145 -0
- package/dist/faceless-image-qualification.js.map +1 -0
- package/dist/faceless-short-61.d.ts +83 -0
- package/dist/faceless-short-61.js +152 -0
- package/dist/faceless-short-61.js.map +1 -0
- package/dist/faceless-storyboard-timing.d.ts +40 -0
- package/dist/faceless-storyboard-timing.js +97 -0
- package/dist/faceless-storyboard-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
- package/dist/faceless-storyboard-v2-plan.js +112 -0
- package/dist/faceless-storyboard-v2-plan.js.map +1 -0
- package/dist/faceless-storyboard-v2-timing.d.ts +52 -0
- package/dist/faceless-storyboard-v2-timing.js +136 -0
- package/dist/faceless-storyboard-v2-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2.d.ts +44 -0
- package/dist/faceless-storyboard-v2.js +43 -0
- package/dist/faceless-storyboard-v2.js.map +1 -0
- package/dist/faceless-storyboard.d.ts +55 -0
- package/dist/faceless-storyboard.js +105 -0
- package/dist/faceless-storyboard.js.map +1 -0
- package/dist/idempotency.d.ts +8 -44
- package/dist/idempotency.js +10 -44
- package/dist/idempotency.js.map +1 -1
- package/dist/index.js +21 -25
- package/dist/index.js.map +1 -1
- package/dist/long-form-pricing.d.ts +4 -4
- package/dist/long-form-pricing.js +4 -4
- package/dist/long-form-pricing.js.map +1 -1
- package/dist/long-form-profile.d.ts +2 -2
- package/dist/long-form-profile.js +2 -2
- package/dist/long-form-profile.js.map +1 -1
- package/dist/pacing.d.ts +1 -1
- package/dist/pacing.js +1 -1
- package/dist/pacing.js.map +1 -1
- package/dist/public-endpoints.d.ts +9 -11
- package/dist/public-endpoints.js +11 -13
- package/dist/public-endpoints.js.map +1 -1
- package/dist/rate-limit.d.ts +23 -130
- package/dist/rate-limit.js +27 -132
- package/dist/rate-limit.js.map +1 -1
- package/dist/render-backend.d.ts +30 -145
- package/dist/render-backend.js +4 -27
- package/dist/render-backend.js.map +1 -1
- package/dist/run-preflight.d.ts +4 -4
- package/dist/run-preflight.js +10 -10
- package/dist/run-preflight.js.map +1 -1
- package/dist/run-static-warnings.d.ts +8 -8
- package/dist/run-static-warnings.js +24 -24
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/runs.d.ts +18 -55
- package/dist/runs.js +26 -94
- package/dist/runs.js.map +1 -1
- package/dist/script-integrity.d.ts +6 -7
- package/dist/script-integrity.js +7 -8
- package/dist/script-integrity.js.map +1 -1
- package/dist/semantic-inserts.d.ts +4 -4
- package/dist/semantic-inserts.js +6 -6
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +33 -107
- package/dist/skills.js +72 -161
- package/dist/skills.js.map +1 -1
- package/dist/tts-backend.d.ts +13 -42
- package/dist/tts-backend.js +2 -10
- package/dist/tts-backend.js.map +1 -1
- package/dist/uploads.d.ts +4 -4
- package/dist/uploads.js +4 -4
- package/dist/uploads.js.map +1 -1
- package/dist/vendor-response.d.ts +17 -80
- package/dist/vendor-response.js +19 -67
- package/dist/vendor-response.js.map +1 -1
- package/dist/voice-admission.d.ts +5 -5
- package/dist/voice-admission.js +6 -6
- package/dist/voice-admission.js.map +1 -1
- package/dist/voice-catalog-data.d.ts +2 -2
- package/dist/voice-catalog-data.js +2 -2
- package/dist/voice-catalog-data.js.map +1 -1
- package/dist/voice-catalog.d.ts +5 -5
- package/dist/voice-catalog.js +6 -6
- package/dist/voice-catalog.js.map +1 -1
- package/dist/voice-listing.d.ts +4 -4
- package/dist/voice-listing.js +6 -6
- package/dist/voice-listing.js.map +1 -1
- package/dist/voices.d.ts +40 -82
- package/dist/voices.js +56 -99
- package/dist/voices.js.map +1 -1
- package/package.json +1 -1
package/dist/render-backend.d.ts
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
import type { AspectRatio, Resolution } from "./skills.js";
|
|
2
2
|
import type { VendorRefusalClass } from "./vendor-response.js";
|
|
3
|
-
/**
|
|
4
|
-
* Вендор-нейтральный контракт рендера аватара.
|
|
5
|
-
*
|
|
6
|
-
* ЗАЧЕМ: HeyGen — не единственный и не обязательно постоянный провайдер.
|
|
7
|
-
* В docs/05 уже записан Argil как запасной бэкенд (дешевле по минуте), а
|
|
8
|
-
* legacy-API самого HeyGen выключается 31.10.2026 — вендорская поверхность
|
|
9
|
-
* меняется быстрее, чем наш продукт. Всё, что знает про `x-api-key`,
|
|
10
|
-
* `/v3/videos` и словарь `"1080p"`, живёт ИСКЛЮЧИТЕЛЬНО в адаптере.
|
|
11
|
-
*
|
|
12
|
-
* ПРАВИЛО: ни один тип в этом файле не должен быть заимствован из вендорского
|
|
13
|
-
* ответа. Если поле нельзя объяснить в терминах продукта — ему здесь не место.
|
|
14
|
-
*/
|
|
15
|
-
/** Источник аудио. Загруженный ассет — вендорская деталь, наружу не торчит. */
|
|
3
|
+
/** Audio source. An uploaded asset is a vendor detail and does not leak out. */
|
|
16
4
|
export type AudioSource = {
|
|
17
5
|
kind: "url";
|
|
18
6
|
url: string;
|
|
@@ -21,175 +9,72 @@ export type AudioSource = {
|
|
|
21
9
|
data: Uint8Array;
|
|
22
10
|
mimeType: string;
|
|
23
11
|
};
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
* Дискриминируемый союз из одного варианта не избыточен: он фиксирует, что
|
|
28
|
-
* вторым вариантом никогда не станет вендорский идентификатор. Расширяться он
|
|
29
|
-
* может кадром или байтами, но не «id аватара из каталога».
|
|
30
|
-
*/
|
|
12
|
+
/** Actor appearance source: the user's PUBLIC URL and nothing else. A one-variant union */
|
|
13
|
+
/** pins that a vendor identifier never becomes a second variant. */
|
|
31
14
|
export type ImageSource = {
|
|
32
15
|
kind: "url";
|
|
33
16
|
url: string;
|
|
34
17
|
};
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
*
|
|
38
|
-
* ПРО ВНЕШНОСТЬ (инвариант переписан в US-524, а не удалён). Раньше внешности
|
|
39
|
-
* здесь не было вовсе: её целиком разрешал адаптер, и поле `image` публичного
|
|
40
|
-
* контракта молча игнорировалось. Теперь внешность приходит СЮДА, но ровно в
|
|
41
|
-
* одной форме — пользовательский публичный URL. Вендорские идентификаторы
|
|
42
|
-
* (talking_photo, asset_id) наружу по-прежнему не торчат и остаются заперты в
|
|
43
|
-
* адаптере; `image` не задан — адаптер резолвит дефолтного актёра сам, как и
|
|
44
|
-
* прежде. То есть ослаблено ровно одно ограничение, и оно названо.
|
|
45
|
-
*/
|
|
18
|
+
/** Request to render one clip. Appearance arrives only as a user's public URL; vendor */
|
|
19
|
+
/** identifiers stay in the adapter, which resolves the default actor when `image` is unset. */
|
|
46
20
|
export interface AvatarClipRequest {
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
* (`Idempotency-Key`, если она есть) ОБЛАСТЬ — `idempotencyScope ?? runId`,
|
|
50
|
-
* а не сам `runId` безусловно: разбор — у поля `idempotencyScope` ниже.
|
|
51
|
-
*/
|
|
21
|
+
/** Our run_id. The adapter passes the SCOPE (`idempotencyScope ?? runId`) to vendor */
|
|
22
|
+
/** idempotency, not `runId` unconditionally. */
|
|
52
23
|
runId: string;
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
* поведение односегментного рана буквально прежнее.
|
|
56
|
-
*
|
|
57
|
-
* ЗАЧЕМ ОТДЕЛЬНО ОТ `runId` (US-526): у сегментного ролика на один ран
|
|
58
|
-
* приходится несколько платных create. Общий на всех ключ означал бы, что
|
|
59
|
-
* вендор дедуплицирует ВТОРОЙ сегмент в первый и вернёт чужой ролик —
|
|
60
|
-
* молча и с кодом 200. Разделять обязан вызывающий, потому что только он
|
|
61
|
-
* знает, чем сегменты различаются.
|
|
62
|
-
*/
|
|
24
|
+
/** Vendor idempotency scope, `runId` when unset. A segmented clip makes several paid */
|
|
25
|
+
/** creates per run; a shared key would make the vendor return the first clip for all. */
|
|
63
26
|
idempotencyScope?: string;
|
|
64
27
|
audio: AudioSource;
|
|
65
28
|
resolution: Resolution;
|
|
66
29
|
aspectRatio: AspectRatio;
|
|
67
|
-
/**
|
|
30
|
+
/** Unset: the adapter resolves the default actor. */
|
|
68
31
|
image?: ImageSource;
|
|
69
32
|
}
|
|
70
33
|
export interface AvatarClipResult {
|
|
71
|
-
/**
|
|
72
|
-
|
|
73
|
-
* у HeyGen это подписанная ссылка с истечением. Пайплайн обязан перелить
|
|
74
|
-
* файл в наше хранилище и вернуть пользователю уже наш URL.
|
|
75
|
-
*/
|
|
34
|
+
/** The vendor URL. TEMPORARY and unfit for clients (a signed, expiring link): the pipeline */
|
|
35
|
+
/** copies the file to our storage and returns our URL. */
|
|
76
36
|
videoUrl: string;
|
|
77
37
|
durationSec: number;
|
|
78
|
-
/**
|
|
38
|
+
/** The vendor's job id: without it the vendor cannot investigate an incident. */
|
|
79
39
|
providerJobId: string;
|
|
80
40
|
provider: string;
|
|
81
41
|
}
|
|
82
|
-
/**
|
|
83
|
-
|
|
84
|
-
* и бесплатным `pollAvatarJob`.
|
|
85
|
-
*
|
|
86
|
-
* СЕРИАЛИЗУЕМ ПО КОНТРАКТУ (инвариант): таск сохраняет его в R2 как
|
|
87
|
-
* `runs/{runId}/avatar.job.json` и после падения восстанавливает через
|
|
88
|
-
* `JSON.parse(JSON.stringify(handle))`. Отсюда: только примитивы — никаких
|
|
89
|
-
* `Date`, `Uint8Array`, функций; если когда-либо понадобится момент времени,
|
|
90
|
-
* он кладётся ISO-строкой. Round-trip обязан давать эквивалентный объект,
|
|
91
|
-
* иначе возобновление поллинга по чекпоинту сломается.
|
|
92
|
-
*/
|
|
42
|
+
/** Handle of a vendor render job, bridging the PAID `createAvatarJob` and the free */
|
|
43
|
+
/** `pollAvatarJob`. Must survive a JSON round-trip: primitives only, times as ISO strings. */
|
|
93
44
|
export interface AvatarJobHandle {
|
|
94
|
-
/**
|
|
45
|
+
/** The vendor's job id. */
|
|
95
46
|
providerJobId: string;
|
|
96
|
-
/**
|
|
47
|
+
/** The backend that created the job, so the same adapter polls it. */
|
|
97
48
|
provider: string;
|
|
98
49
|
}
|
|
99
|
-
/**
|
|
100
|
-
|
|
101
|
-
* которые ломают гейт: HeyGen отклоняет `480p` и ниже (проверено 18.07.2026,
|
|
102
|
-
* принимает только 720p/1080p/4k), у другого провайдера набор будет иным.
|
|
103
|
-
*
|
|
104
|
-
* Несовпадение НЕ должно приводить к молчаливой подмене — правило проекта №3
|
|
105
|
-
* требует объявлять несоблюдённые параметры в `warnings[]`.
|
|
106
|
-
*/
|
|
50
|
+
/** Backend capabilities: vendors differ in details that break the gate. A mismatch must */
|
|
51
|
+
/** never be silently substituted; unhonored parameters go to `warnings[]`. */
|
|
107
52
|
export interface BackendCapabilities {
|
|
108
53
|
resolutions: readonly Resolution[];
|
|
109
54
|
aspectRatios: readonly AspectRatio[];
|
|
110
|
-
/**
|
|
55
|
+
/** Maximum length of one audio, seconds. null: the vendor does not document it. */
|
|
111
56
|
maxAudioSec: number | null;
|
|
112
57
|
}
|
|
113
58
|
export interface RenderBackend {
|
|
114
59
|
readonly name: string;
|
|
115
60
|
readonly capabilities: BackendCapabilities;
|
|
116
|
-
/**
|
|
117
|
-
|
|
118
|
-
* ПЛАТНОЕ и однократное, поллинг — бесплатный и возобновляемый. Возврат —
|
|
119
|
-
* сериализуемый `AvatarJobHandle`, который таск пишет в R2 (`avatar.job.json`)
|
|
120
|
-
* ДО начала поллинга: падение между «вендор списал деньги» и «ролик перелит в
|
|
121
|
-
* наше хранилище» возобновляется поллингом сохранённого handle, а не вторым
|
|
122
|
-
* платным вызовом (ADR-006).
|
|
123
|
-
*
|
|
124
|
-
* Реализация обязана:
|
|
125
|
-
* - разрешать внешность персонажа ВНУТРИ (вендорский каталог), не принимая её
|
|
126
|
-
* из запроса — идентификаторы аватара и каталог наружу не торчат;
|
|
127
|
-
* - слать вендорский `Idempotency-Key`, детерминированный от ОБЛАСТИ
|
|
128
|
-
* идемпотентности (`req.idempotencyScope ?? req.runId`, US-526), — вторая
|
|
129
|
-
* независимая линия против двойного списания (подтверждено, docs/13).
|
|
130
|
-
* Именно от области, а не от `runId`: у сегментного ролика на один ран
|
|
131
|
-
* приходится несколько платных create, и общий ключ заставил бы вендора
|
|
132
|
-
* вернуть первый ролик в ответ на каждый следующий — молча и с кодом 200;
|
|
133
|
-
* - помечать ошибку признаком `retryable`: 4xx кроме 429 — `false`, 5xx и
|
|
134
|
-
* 429 — `true`.
|
|
135
|
-
*
|
|
136
|
-
* ПРИЗНАК ОПИСЫВАЕТ ПРИРОДУ ОШИБКИ, А НЕ РАЗРЕШЕНИЕ ПОВТОРИТЬ ЭТОТ ВЫЗОВ
|
|
137
|
-
* (уточнение US-606b, круг 11 внешнего ревью; прежняя редакция говорила «их
|
|
138
|
-
* ретрай починит» и читалась как позволение). «Транзиентная» и «можно
|
|
139
|
-
* повторить» — разные утверждения, и для ПЛАТНОГО создания второе всегда
|
|
140
|
-
* ложно: 429 означает, что вендор отбил, а 5xx — что неизвестно, начал ли он
|
|
141
|
-
* работу, и повтор превратил бы одно возможное списание в два достоверных.
|
|
142
|
-
* Признак читается ТОЛЬКО на бесплатном поллинге (`utils/poll-retry.ts`);
|
|
143
|
-
* `createAvatarJob` не повторяется ни при каком статусе.
|
|
144
|
-
*/
|
|
61
|
+
/** Creates the vendor job: PAID and once, apart from the free, resumable poll. Keys vendor */
|
|
62
|
+
/** idempotency on the scope; `retryable` describes the error, and a paid create is never retried. */
|
|
145
63
|
createAvatarJob(req: AvatarClipRequest): Promise<AvatarJobHandle>;
|
|
146
|
-
/**
|
|
147
|
-
|
|
148
|
-
* идемпотентный: безопасен для повтора и для возобновления по сохранённому
|
|
149
|
-
* handle.
|
|
150
|
-
*
|
|
151
|
-
* Дискриминация терминальности — SUCCESS-WHITELIST (fail-closed): успех — это
|
|
152
|
-
* ТОЛЬКО явно успешный статус вендора ВМЕСТЕ с непустым URL видео. Любой иной
|
|
153
|
-
* терминальный ИЛИ неизвестный статус, равно как «успех» без URL, обязан
|
|
154
|
-
* бросать: молчаливый провал внутри HTTP 200 (у HeyGen — `status: "failed"`)
|
|
155
|
-
* обычным error-handling не ловится. Реализация обязана иметь верхний предел
|
|
156
|
-
* ожидания и бросать по его превышению, а не висеть на зависшей очереди.
|
|
157
|
-
*/
|
|
64
|
+
/** Waits for a terminal state; free and idempotent. Fail-closed: only an explicit success */
|
|
65
|
+
/** with a non-empty video URL succeeds, and a deadline bounds the wait. */
|
|
158
66
|
pollAvatarJob(handle: AvatarJobHandle, options?: {
|
|
159
67
|
deadlineMs: number;
|
|
160
68
|
}): Promise<AvatarClipResult>;
|
|
161
|
-
/**
|
|
162
|
-
/**
|
|
69
|
+
/** Whose fault a refusal is: our account at the vendor or the vendor's trouble. REQUIRED, */
|
|
70
|
+
/** so a new vendor does not compile without it. */
|
|
163
71
|
classifyRefusal(error: unknown): VendorRefusalClass;
|
|
164
72
|
}
|
|
165
|
-
/**
|
|
166
|
-
|
|
167
|
-
*
|
|
168
|
-
* ЧТО ОН ЧИТАЕТ: природу ошибки, а не разрешение повторить операцию. Кто и что
|
|
169
|
-
* повторяет — решает вызывающий, и на ПЛАТНОМ создании ответ всегда «ничего»
|
|
170
|
-
* (см. `createAvatarJob` выше). Сегодня единственный потребитель — ретрай
|
|
171
|
-
* бесплатного поллинга.
|
|
172
|
-
*
|
|
173
|
-
* ЗАЧЕМ ЗДЕСЬ, А НЕ У ВЫЗЫВАЮЩЕГО. Обязанность помечать ошибку записана строкой
|
|
174
|
-
* выше, и до этой стори её никто не читал: адаптер считал признак, а
|
|
175
|
-
* потребителя у него не было — то есть контракт держался тестами адаптера на
|
|
176
|
-
* самого себя. Читатель обязан жить там же, где написана обязанность, иначе он
|
|
177
|
-
* станет разбором формы КОНКРЕТНОГО адаптера по месту, и второй бэкенд (Argil в
|
|
178
|
-
* docs/05) выполнит контракт, а вызывающий его не заметит.
|
|
179
|
-
*
|
|
180
|
-
* СТРОГОЕ РАВЕНСТВО `true`, А НЕ ПРИВЕДЕНИЕ К ИСТИНЕ: решение о повторе рядом с
|
|
181
|
-
* деньгами — последнее место, где уместна догадка «похоже на да». Чего в
|
|
182
|
-
* признаке нет (ошибка без поля, чужой объект, строка) — то не повторяется.
|
|
183
|
-
*/
|
|
73
|
+
/** Reads the `retryable` flag the contract above requires, next to where it is required. */
|
|
74
|
+
/** Strictly `=== true`: near money, anything short of an explicit yes is not retried. */
|
|
184
75
|
export declare function isRetryableVendorError(error: unknown): boolean;
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
*
|
|
188
|
-
* Возвращает то, что бэкенд реально может, и список предупреждений о каждом
|
|
189
|
-
* расхождении. Молча понижать разрешение нельзя: пользователь, заказавший
|
|
190
|
-
* 1080p и получивший 720p без предупреждения, — это ровно тот дефект
|
|
191
|
-
* конкурента, который зафиксирован в docs/08 как антипаттерн.
|
|
192
|
-
*/
|
|
76
|
+
/** Fits a request to the backend's capabilities; every mismatch is a warning, and the */
|
|
77
|
+
/** resolution is never lowered silently. */
|
|
193
78
|
export declare function negotiateCapabilities(req: Pick<AvatarClipRequest, "resolution" | "aspectRatio">, caps: BackendCapabilities, backendName: string): {
|
|
194
79
|
resolution: Resolution;
|
|
195
80
|
aspectRatio: AspectRatio;
|
package/dist/render-backend.js
CHANGED
|
@@ -1,35 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* ЧТО ОН ЧИТАЕТ: природу ошибки, а не разрешение повторить операцию. Кто и что
|
|
5
|
-
* повторяет — решает вызывающий, и на ПЛАТНОМ создании ответ всегда «ничего»
|
|
6
|
-
* (см. `createAvatarJob` выше). Сегодня единственный потребитель — ретрай
|
|
7
|
-
* бесплатного поллинга.
|
|
8
|
-
*
|
|
9
|
-
* ЗАЧЕМ ЗДЕСЬ, А НЕ У ВЫЗЫВАЮЩЕГО. Обязанность помечать ошибку записана строкой
|
|
10
|
-
* выше, и до этой стори её никто не читал: адаптер считал признак, а
|
|
11
|
-
* потребителя у него не было — то есть контракт держался тестами адаптера на
|
|
12
|
-
* самого себя. Читатель обязан жить там же, где написана обязанность, иначе он
|
|
13
|
-
* станет разбором формы КОНКРЕТНОГО адаптера по месту, и второй бэкенд (Argil в
|
|
14
|
-
* docs/05) выполнит контракт, а вызывающий его не заметит.
|
|
15
|
-
*
|
|
16
|
-
* СТРОГОЕ РАВЕНСТВО `true`, А НЕ ПРИВЕДЕНИЕ К ИСТИНЕ: решение о повторе рядом с
|
|
17
|
-
* деньгами — последнее место, где уместна догадка «похоже на да». Чего в
|
|
18
|
-
* признаке нет (ошибка без поля, чужой объект, строка) — то не повторяется.
|
|
19
|
-
*/
|
|
1
|
+
/** Reads the `retryable` flag the contract above requires, next to where it is required. */
|
|
2
|
+
/** Strictly `=== true`: near money, anything short of an explicit yes is not retried. */
|
|
20
3
|
export function isRetryableVendorError(error) {
|
|
21
4
|
return (typeof error === "object" &&
|
|
22
5
|
error !== null &&
|
|
23
6
|
error.retryable === true);
|
|
24
7
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
* Возвращает то, что бэкенд реально может, и список предупреждений о каждом
|
|
29
|
-
* расхождении. Молча понижать разрешение нельзя: пользователь, заказавший
|
|
30
|
-
* 1080p и получивший 720p без предупреждения, — это ровно тот дефект
|
|
31
|
-
* конкурента, который зафиксирован в docs/08 как антипаттерн.
|
|
32
|
-
*/
|
|
8
|
+
/** Fits a request to the backend's capabilities; every mismatch is a warning, and the */
|
|
9
|
+
/** resolution is never lowered silently. */
|
|
33
10
|
export function negotiateCapabilities(req, caps, backendName) {
|
|
34
11
|
const warnings = [];
|
|
35
12
|
let resolution = req.resolution;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-backend.js","sourceRoot":"","sources":["../src/render-backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-backend.js","sourceRoot":"","sources":["../src/render-backend.ts"],"names":[],"mappings":"AA4EA,4FAA4F;AAC5F,yFAAyF;AACzF,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiC,CAAC,SAAS,KAAK,IAAI,CACtD,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,4CAA4C;AAC5C,MAAM,UAAU,qBAAqB,CACnC,GAA0D,EAC1D,IAAyB,EACzB,WAAmB;IAEnB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,oCAAoC,CAAC,CAAC;QAC9E,CAAC;QACD,QAAQ,CAAC,IAAI,CACX,cAAc,UAAU,wBAAwB,WAAW,iBAAiB,QAAQ,EAAE,CACvF,CAAC;QACF,UAAU,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,IAAI,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,sCAAsC,CAAC,CAAC;QAChF,CAAC;QACD,QAAQ,CAAC,IAAI,CACX,gBAAgB,WAAW,wBAAwB,WAAW,iBAAiB,QAAQ,EAAE,CAC1F,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
|
package/dist/run-preflight.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
/**
|
|
2
|
+
/** Frame source probe; `not_probed` means no network call happened (no `image`). */
|
|
3
3
|
export declare const aspectProbeFact: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
4
4
|
kind: z.ZodLiteral<"not_probed">;
|
|
5
5
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -11,7 +11,7 @@ export declare const aspectProbeFact: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
11
11
|
height: z.ZodNumber;
|
|
12
12
|
}, z.core.$strip>], "kind">;
|
|
13
13
|
export type AspectProbeFact = z.infer<typeof aspectProbeFact>;
|
|
14
|
-
/**
|
|
14
|
+
/** Preflight of a RAW `voice_id`; a preset does not query the catalog. */
|
|
15
15
|
export declare const voicePreflightFact: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
16
16
|
kind: z.ZodLiteral<"not_probed">;
|
|
17
17
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -40,9 +40,9 @@ export declare const runPreflight: z.ZodObject<{
|
|
|
40
40
|
}, z.core.$strip>], "kind">>;
|
|
41
41
|
}, z.core.$strip>;
|
|
42
42
|
export type RunPreflight = z.infer<typeof runPreflight>;
|
|
43
|
-
/**
|
|
43
|
+
/** Family names, also the merge keys in `jsonb`. */
|
|
44
44
|
export type RunPreflightFamily = keyof RunPreflight;
|
|
45
45
|
export declare function sourceNotProbedWarning(errorClass: string): string;
|
|
46
|
-
/**
|
|
46
|
+
/** The voice catalog is truncated, so a raw `voice_id` cannot be confirmed. FAIL-OPEN. */
|
|
47
47
|
export declare const VOICE_CATALOG_INCOMPLETE_WARNING = "voice catalog incomplete \u2014 voice_id could not be verified";
|
|
48
48
|
export declare function parseRunPreflight(stored: unknown): RunPreflight;
|
package/dist/run-preflight.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
/**
|
|
2
|
+
// Run preflight facts: what cannot be derived on read because it needs the network.
|
|
3
|
+
// A fact is stored rather than a ready-made line, so the reader derives the text.
|
|
4
|
+
/** Frame source probe; `not_probed` means no network call happened (no `image`). */
|
|
5
5
|
export const aspectProbeFact = z.discriminatedUnion("kind", [
|
|
6
6
|
z.object({ kind: z.literal("not_probed") }),
|
|
7
7
|
z.object({ kind: z.literal("failed"), error_class: z.string().min(1) }),
|
|
@@ -11,26 +11,26 @@ export const aspectProbeFact = z.discriminatedUnion("kind", [
|
|
|
11
11
|
height: z.number().int().positive(),
|
|
12
12
|
}),
|
|
13
13
|
]);
|
|
14
|
-
/**
|
|
14
|
+
/** Preflight of a RAW `voice_id`; a preset does not query the catalog. */
|
|
15
15
|
export const voicePreflightFact = z.discriminatedUnion("kind", [
|
|
16
16
|
z.object({ kind: z.literal("not_probed") }),
|
|
17
17
|
z.object({ kind: z.literal("catalog_incomplete") }),
|
|
18
18
|
z.object({ kind: z.literal("verified") }),
|
|
19
19
|
]);
|
|
20
|
-
//
|
|
21
|
-
//
|
|
20
|
+
// A missing family key ≠ `not_probed`: the first means "not recorded" (older runs look
|
|
21
|
+
// like that); the second is recorded knowledge that no probe happened.
|
|
22
22
|
export const runPreflight = z.object({
|
|
23
23
|
aspect: aspectProbeFact.optional(),
|
|
24
24
|
voice: voicePreflightFact.optional(),
|
|
25
25
|
});
|
|
26
|
-
//
|
|
26
|
+
// The text lives next to the fact: both ends print it, `quote` and the column reader.
|
|
27
27
|
export function sourceNotProbedWarning(errorClass) {
|
|
28
28
|
return `source could not be probed (${errorClass})`;
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
30
|
+
/** The voice catalog is truncated, so a raw `voice_id` cannot be confirmed. FAIL-OPEN. */
|
|
31
31
|
export const VOICE_CATALOG_INCOMPLETE_WARNING = "voice catalog incomplete — voice_id could not be verified";
|
|
32
|
-
//
|
|
33
|
-
//
|
|
32
|
+
// Families parse independently: a corrupt one does not take down a sound one.
|
|
33
|
+
// An unreadable value gives an empty set of facts.
|
|
34
34
|
export function parseRunPreflight(stored) {
|
|
35
35
|
if (typeof stored !== "object" || stored === null)
|
|
36
36
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-preflight.js","sourceRoot":"","sources":["../src/run-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,
|
|
1
|
+
{"version":3,"file":"run-preflight.js","sourceRoot":"","sources":["../src/run-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,kFAAkF;AAElF,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC1D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACpC,CAAC;CACH,CAAC,CAAC;AAGH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;CAC1C,CAAC,CAAC;AAGH,uFAAuF;AACvF,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAMH,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,+BAA+B,UAAU,GAAG,CAAC;AACtD,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gCAAgC,GAC3C,2DAA2D,CAAC;AAE9D,8EAA8E;AAC9E,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { type Gender } from "./actors.js";
|
|
2
2
|
import { type RunPreflight } from "./run-preflight.js";
|
|
3
|
-
/**
|
|
4
|
-
/**
|
|
3
|
+
/** Voice gender comes FROM THE CALLER and is required: the voice catalog is not in the */
|
|
4
|
+
/** barrel, and a presets-only default would silently lose catalog voices. */
|
|
5
5
|
export type VoiceGenderResolver = (voice: string) => Gender | undefined;
|
|
6
|
-
/**
|
|
6
|
+
/** The stored input is unreadable: there is nothing to list unhonored fields from. */
|
|
7
7
|
export declare const UNREADABLE_RUN_INPUT_WARNING = "run input could not be read: parameters that are accepted but not honored cannot be listed for this run";
|
|
8
|
-
/**
|
|
8
|
+
/** The same for `create_actor`: it has no unhonored parameters, and an unreadable input fails uncharged. */
|
|
9
9
|
export declare const UNREADABLE_CREATE_ACTOR_INPUT_WARNING = "create_actor run input could not be read: a run that fails for this reason creates no actor and is not charged";
|
|
10
|
-
/**
|
|
11
|
-
/**
|
|
10
|
+
/** Derived warnings by run skill. `create_actor` has nothing to derive: its warnings are */
|
|
11
|
+
/** written at admission and not recomputed on read. */
|
|
12
12
|
export declare function derivedRunWarnings(storedInput: unknown, preflight: RunPreflight, skill: string, voiceGenderOf: VoiceGenderResolver): string[];
|
|
13
|
-
/**
|
|
14
|
-
/**
|
|
13
|
+
/** A run's full `warnings[]`; derived lines in `quote` order. Preflight and skill are */
|
|
14
|
+
/** REQUIRED on purpose: an optional one would silently lose the fact for a new reader. */
|
|
15
15
|
export declare function composeRunWarnings(stored: unknown, storedInput: unknown, storedPreflight: unknown, skill: string, voiceGenderOf: VoiceGenderResolver): string[];
|
|
@@ -6,12 +6,12 @@ import { buildActorGenderWarnings, buildVoiceActorMatchWarnings } from "./actors
|
|
|
6
6
|
import { resolveAspectRatio, upscaleWarning } from "./aspect.js";
|
|
7
7
|
import { DEFAULT_RESOLUTION } from "./skills.js";
|
|
8
8
|
import { parseRunPreflight, sourceNotProbedWarning, VOICE_CATALOG_INCOMPLETE_WARNING, } from "./run-preflight.js";
|
|
9
|
-
/**
|
|
9
|
+
/** The stored input is unreadable: there is nothing to list unhonored fields from. */
|
|
10
10
|
export const UNREADABLE_RUN_INPUT_WARNING = "run input could not be read: parameters that are accepted but not honored cannot be listed for this run";
|
|
11
|
-
/**
|
|
11
|
+
/** The same for `create_actor`: it has no unhonored parameters, and an unreadable input fails uncharged. */
|
|
12
12
|
export const UNREADABLE_CREATE_ACTOR_INPUT_WARNING = "create_actor run input could not be read: a run that fails for this reason creates no actor and is not charged";
|
|
13
|
-
/**
|
|
14
|
-
/**
|
|
13
|
+
/** What a probe fact gives WITHOUT the input. `undefined` below is not a format default: only */
|
|
14
|
+
/** `warnings` are taken, and with `source === null` they do not depend on `requested`. */
|
|
15
15
|
function aspectWarningsWithoutInput(fact) {
|
|
16
16
|
if (fact?.kind !== "failed")
|
|
17
17
|
return [];
|
|
@@ -21,29 +21,29 @@ function aspectWarningsWithoutInput(fact) {
|
|
|
21
21
|
...(resolution.kind === "resolved" ? resolution.warnings : []),
|
|
22
22
|
];
|
|
23
23
|
}
|
|
24
|
-
//
|
|
25
|
-
// (`decideAspect` → `resolveAspectRatio`),
|
|
24
|
+
// The format is derived from the probe fact by the same resolver as `quote`
|
|
25
|
+
// (`decideAspect` → `resolveAspectRatio`), so the two surfaces cannot diverge.
|
|
26
26
|
function aspectFactWarnings(fact, input) {
|
|
27
27
|
if (fact === undefined || fact.kind === "not_probed")
|
|
28
28
|
return [];
|
|
29
|
-
//
|
|
30
|
-
//
|
|
29
|
+
// A failure calls THE SAME function as the input-free path, so the two paths are
|
|
30
|
+
// equal by structure, not by a coincidence that the next edit breaks.
|
|
31
31
|
if (fact.kind === "failed")
|
|
32
32
|
return aspectWarningsWithoutInput(fact);
|
|
33
33
|
const source = { width: fact.width, height: fact.height, origin: "probed" };
|
|
34
34
|
const resolution = resolveAspectRatio({ requested: input.aspect_ratio, source });
|
|
35
|
-
//
|
|
35
|
+
// A refusal is unreachable here: a run with a format conflict is refused before insert (400).
|
|
36
36
|
if (resolution.kind !== "resolved")
|
|
37
37
|
return [];
|
|
38
38
|
const upscale = upscaleWarning(source, input.resolution ?? DEFAULT_RESOLUTION, resolution.aspectRatio);
|
|
39
39
|
return [...resolution.warnings, ...(upscale === null ? [] : [upscale])];
|
|
40
40
|
}
|
|
41
|
-
/**
|
|
41
|
+
/** Voice preflight: the reader rebuilds the line, since it has no access to the vendor catalog. */
|
|
42
42
|
function voiceFactWarnings(fact) {
|
|
43
43
|
return fact?.kind === "catalog_incomplete" ? [VOICE_CATALOG_INCOMPLETE_WARNING] : [];
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
46
|
-
/**
|
|
45
|
+
/** Derived warnings by run skill. `create_actor` has nothing to derive: its warnings are */
|
|
46
|
+
/** written at admission and not recomputed on read. */
|
|
47
47
|
export function derivedRunWarnings(storedInput, preflight, skill, voiceGenderOf) {
|
|
48
48
|
const parsed = parseSkill(skill);
|
|
49
49
|
switch (parsed) {
|
|
@@ -57,13 +57,13 @@ export function derivedRunWarnings(storedInput, preflight, skill, voiceGenderOf)
|
|
|
57
57
|
return parsed;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
//
|
|
61
|
-
//
|
|
60
|
+
// The disposition registry and the preset language warning; the raw `voice_id` warning
|
|
61
|
+
// is quote-only, since the run verifies the id itself.
|
|
62
62
|
function ugcRunWarnings(storedInput, preflight, voiceGenderOf) {
|
|
63
63
|
const parsed = storedUgcInput.safeParse(storedInput);
|
|
64
64
|
if (!parsed.success) {
|
|
65
|
-
//
|
|
66
|
-
//
|
|
65
|
+
// An unreadable input does not cancel the facts: everything derivable WITHOUT the
|
|
66
|
+
// input is derived. An `ok` snap depends on the requested format, so it is absent.
|
|
67
67
|
return [
|
|
68
68
|
UNREADABLE_RUN_INPUT_WARNING,
|
|
69
69
|
...aspectWarningsWithoutInput(preflight.aspect),
|
|
@@ -72,30 +72,30 @@ function ugcRunWarnings(storedInput, preflight, voiceGenderOf) {
|
|
|
72
72
|
}
|
|
73
73
|
const { tts_model: storedModel, actor_snapshot: pin, ...rest } = parsed.data;
|
|
74
74
|
const ttsModel = TTS_MODELS.find((model) => model === storedModel);
|
|
75
|
-
//
|
|
75
|
+
// A removed model (`eleven_multilingual_v2`) reads as the default, which stays silent about models.
|
|
76
76
|
const input = { ...rest, tts_model: ttsModel };
|
|
77
|
-
//
|
|
78
|
-
//
|
|
77
|
+
// The same ORDER as `quote`: dispositions, format, voice, so the two surfaces are
|
|
78
|
+
// equal, not merely the same set.
|
|
79
79
|
return [
|
|
80
80
|
...dispositionWarnings(input),
|
|
81
81
|
...aspectFactWarnings(preflight.aspect, input),
|
|
82
82
|
...buildVoiceWarnings({ voice: input.voice, script: resolvedScript(input) }),
|
|
83
83
|
...buildActorGenderWarnings(input),
|
|
84
84
|
...buildVoiceActorMatchWarnings(input, voiceGenderOf, pin?.gender),
|
|
85
|
-
//
|
|
86
|
-
//
|
|
85
|
+
// The pinned gender does not feed MODEL choice: both genders' default voices share a
|
|
86
|
+
// model. If they diverge, a test in run-static-warnings.test.ts turns red.
|
|
87
87
|
...buildSpeechModelWarnings({ ...input, script: resolvedScript(input) }, input.actor_gender),
|
|
88
88
|
...voiceFactWarnings(preflight.voice),
|
|
89
89
|
];
|
|
90
90
|
}
|
|
91
|
-
/**
|
|
91
|
+
/** Strings of the `warnings` column; an unreadable value gives an empty list. */
|
|
92
92
|
function storedStrings(stored) {
|
|
93
93
|
if (!Array.isArray(stored))
|
|
94
94
|
return [];
|
|
95
95
|
return stored.filter((item) => typeof item === "string");
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
/**
|
|
97
|
+
/** A run's full `warnings[]`; derived lines in `quote` order. Preflight and skill are */
|
|
98
|
+
/** REQUIRED on purpose: an optional one would silently lose the fact for a new reader. */
|
|
99
99
|
export function composeRunWarnings(stored, storedInput, storedPreflight, skill, voiceGenderOf) {
|
|
100
100
|
return [
|
|
101
101
|
...new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-static-warnings.js","sourceRoot":"","sources":["../src/run-static-warnings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAe,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,gCAAgC,GAIjC,MAAM,oBAAoB,CAAC;AAQ5B,
|
|
1
|
+
{"version":3,"file":"run-static-warnings.js","sourceRoot":"","sources":["../src/run-static-warnings.ts"],"names":[],"mappings":"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"}
|