@bedolla/enrivision 0.1.5 → 0.1.6
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 +31 -6
- package/dist/client/EnriProxyClient.d.ts +289 -244
- package/dist/client/EnriProxyClient.d.ts.map +1 -1
- package/dist/client/EnriProxyClient.js +841 -115
- package/dist/client/EnriProxyClient.js.map +1 -1
- package/dist/client/EnriProxyClientContract.d.ts +425 -0
- package/dist/client/EnriProxyClientContract.d.ts.map +1 -0
- package/dist/client/EnriProxyClientContract.js +87 -0
- package/dist/client/EnriProxyClientContract.js.map +1 -0
- package/dist/index.js +23 -12
- package/dist/index.js.map +1 -1
- package/dist/package-info.d.ts +28 -0
- package/dist/package-info.d.ts.map +1 -1
- package/dist/package-info.js +28 -0
- package/dist/package-info.js.map +1 -1
- package/dist/server/EnriVisionServer.d.ts +186 -0
- package/dist/server/EnriVisionServer.d.ts.map +1 -1
- package/dist/server/EnriVisionServer.js +780 -93
- package/dist/server/EnriVisionServer.js.map +1 -1
- package/dist/shared/codepointTruncation.d.ts +61 -0
- package/dist/shared/codepointTruncation.d.ts.map +1 -0
- package/dist/shared/codepointTruncation.js +73 -0
- package/dist/shared/codepointTruncation.js.map +1 -0
- package/dist/shared/mediaUrlFetcher.d.ts +247 -9
- package/dist/shared/mediaUrlFetcher.d.ts.map +1 -1
- package/dist/shared/mediaUrlFetcher.js +712 -53
- package/dist/shared/mediaUrlFetcher.js.map +1 -1
- package/dist/shared/tar.d.ts +82 -2
- package/dist/shared/tar.d.ts.map +1 -1
- package/dist/shared/tar.js +106 -43
- package/dist/shared/tar.js.map +1 -1
- package/dist/shared/validation.d.ts +96 -2
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +169 -10
- package/dist/shared/validation.js.map +1 -1
- package/dist/tools/AnalyzeMediaContract.d.ts +457 -0
- package/dist/tools/AnalyzeMediaContract.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaContract.js +161 -0
- package/dist/tools/AnalyzeMediaContract.js.map +1 -0
- package/dist/tools/AnalyzeMediaExtractionSanitizer.d.ts +35 -0
- package/dist/tools/AnalyzeMediaExtractionSanitizer.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaExtractionSanitizer.js +214 -0
- package/dist/tools/AnalyzeMediaExtractionSanitizer.js.map +1 -0
- package/dist/tools/AnalyzeMediaInputResolver.d.ts +250 -0
- package/dist/tools/AnalyzeMediaInputResolver.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaInputResolver.js +430 -0
- package/dist/tools/AnalyzeMediaInputResolver.js.map +1 -0
- package/dist/tools/AnalyzeMediaParamParser.d.ts +299 -0
- package/dist/tools/AnalyzeMediaParamParser.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaParamParser.js +824 -0
- package/dist/tools/AnalyzeMediaParamParser.js.map +1 -0
- package/dist/tools/AnalyzeMediaResumableUploader.d.ts +244 -0
- package/dist/tools/AnalyzeMediaResumableUploader.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaResumableUploader.js +549 -0
- package/dist/tools/AnalyzeMediaResumableUploader.js.map +1 -0
- package/dist/tools/AnalyzeMediaTarPackager.d.ts +42 -0
- package/dist/tools/AnalyzeMediaTarPackager.d.ts.map +1 -0
- package/dist/tools/AnalyzeMediaTarPackager.js +245 -0
- package/dist/tools/AnalyzeMediaTarPackager.js.map +1 -0
- package/dist/tools/AnalyzeMediaTool.d.ts +155 -294
- package/dist/tools/AnalyzeMediaTool.d.ts.map +1 -1
- package/dist/tools/AnalyzeMediaTool.js +600 -457
- package/dist/tools/AnalyzeMediaTool.js.map +1 -1
- package/package.json +2 -1
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export function assertObject(value, name) {
|
|
17
17
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
18
|
-
throw new Error(`${name} must be an object.`);
|
|
18
|
+
throw new Error(`${name} debe ser un objeto. / ${name} must be an object.`);
|
|
19
19
|
}
|
|
20
20
|
return value;
|
|
21
21
|
}
|
|
@@ -28,11 +28,11 @@ export function assertObject(value, name) {
|
|
|
28
28
|
*/
|
|
29
29
|
export function assertNonEmptyString(value, name) {
|
|
30
30
|
if (typeof value !== "string") {
|
|
31
|
-
throw new Error(`${name} must be a string.`);
|
|
31
|
+
throw new Error(`${name} debe ser una cadena de texto. / ${name} must be a string.`);
|
|
32
32
|
}
|
|
33
33
|
const trimmed = value.trim();
|
|
34
34
|
if (!trimmed) {
|
|
35
|
-
throw new Error(`${name} must be a non-empty string.`);
|
|
35
|
+
throw new Error(`${name} debe ser una cadena de texto no vacía. / ${name} must be a non-empty string.`);
|
|
36
36
|
}
|
|
37
37
|
return trimmed;
|
|
38
38
|
}
|
|
@@ -50,23 +50,41 @@ export function optionalString(value) {
|
|
|
50
50
|
return trimmed ? trimmed : undefined;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
* Returns an integer when the value is
|
|
53
|
+
* Returns an integer when the value is an integer number or an integer
|
|
54
|
+
* numeric string, otherwise undefined.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* Strict by design: fractional numbers (`7.9`) and fractional strings
|
|
58
|
+
* (`"7.9"`) are rejected (undefined) so callers fail with a Spanish
|
|
59
|
+
* coaching error instead of silently flooring to `7`.
|
|
54
60
|
*
|
|
55
61
|
* @param value - Value to validate
|
|
56
62
|
* @returns Parsed integer or undefined
|
|
57
63
|
*/
|
|
58
64
|
export function optionalInt(value) {
|
|
59
|
-
if (typeof value === "number"
|
|
60
|
-
return
|
|
65
|
+
if (typeof value === "number") {
|
|
66
|
+
return Number.isInteger(value) ? value : undefined;
|
|
61
67
|
}
|
|
62
68
|
if (typeof value === "string" && value.trim()) {
|
|
63
|
-
const
|
|
69
|
+
const trimmed = value.trim();
|
|
70
|
+
if (!/^[+-]?\d+$/u.test(trimmed)) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
64
74
|
return Number.isFinite(parsed) ? parsed : undefined;
|
|
65
75
|
}
|
|
66
76
|
return undefined;
|
|
67
77
|
}
|
|
68
78
|
/**
|
|
69
|
-
* Returns a number when the value is a number or numeric string, otherwise undefined.
|
|
79
|
+
* Returns a number when the value is a number or a complete numeric string, otherwise undefined.
|
|
80
|
+
*
|
|
81
|
+
* @remarks
|
|
82
|
+
* Strict by design: partial numerics (`"12:34"`, `"754s"`, `"1e"`) and
|
|
83
|
+
* exponent spellings (`"1e3"`) are rejected (undefined) so callers fail
|
|
84
|
+
* with a Spanish coaching error instead of silently parsing a prefix
|
|
85
|
+
* (`parseFloat("12:34") === 12`). Mirrors the anchored-string policy of
|
|
86
|
+
* {@link optionalFraction} and {@link optionalInt} plus EnriCode
|
|
87
|
+
* `coerceCompleteNumber` and the proxy `requireValidFloat`/`requireValidInt`.
|
|
70
88
|
*
|
|
71
89
|
* @param value - Value to validate
|
|
72
90
|
* @returns Parsed number or undefined
|
|
@@ -76,20 +94,161 @@ export function optionalNumber(value) {
|
|
|
76
94
|
return value;
|
|
77
95
|
}
|
|
78
96
|
if (typeof value === "string" && value.trim()) {
|
|
79
|
-
const
|
|
97
|
+
const trimmed = value.trim();
|
|
98
|
+
if (!/^[+-]?(\d+(\.\d+)?|\.\d+)$/u.test(trimmed)) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
const parsed = Number.parseFloat(trimmed);
|
|
80
102
|
return Number.isFinite(parsed) ? parsed : undefined;
|
|
81
103
|
}
|
|
82
104
|
return undefined;
|
|
83
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns a trimmed string when present, failing on non-string values.
|
|
108
|
+
*
|
|
109
|
+
* @remarks
|
|
110
|
+
* Strict by design: when the key exists (anything but `undefined`) with a
|
|
111
|
+
* non-string value (`123`, `{}`, `null`), callers get a Spanish coaching
|
|
112
|
+
* error instead of silently dropping the value (which hides model mistakes
|
|
113
|
+
* such as `language: 5`). Absent keys stay `undefined`; blank strings
|
|
114
|
+
* collapse to `undefined`.
|
|
115
|
+
*
|
|
116
|
+
* @param value - Raw field value.
|
|
117
|
+
* @param fieldName - Dotted field name for error messages.
|
|
118
|
+
* @returns Trimmed string or undefined when absent/blank.
|
|
119
|
+
* @throws Error with an Spanish-first bilingual message when present but not a string.
|
|
120
|
+
*/
|
|
121
|
+
export function assertOptionalString(value, fieldName) {
|
|
122
|
+
if (typeof value === "undefined") {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
if (typeof value !== "string") {
|
|
126
|
+
throw new Error(`${fieldName} debe ser una cadena de texto. / ${fieldName} must be a string.`);
|
|
127
|
+
}
|
|
128
|
+
const trimmed = value.trim();
|
|
129
|
+
return trimmed ? trimmed : undefined;
|
|
130
|
+
}
|
|
84
131
|
/**
|
|
85
132
|
* Returns a boolean when the value is a boolean, otherwise undefined.
|
|
86
133
|
*
|
|
134
|
+
* @remarks
|
|
135
|
+
* Strict by design: truthy strings such as `"true"` are NOT coerced and
|
|
136
|
+
* return undefined so callers can fail with a Spanish coaching error.
|
|
137
|
+
*
|
|
87
138
|
* @param value - Value to validate
|
|
88
139
|
* @returns Boolean or undefined
|
|
89
140
|
*/
|
|
90
141
|
export function optionalBoolean(value) {
|
|
91
142
|
return typeof value === "boolean" ? value : undefined;
|
|
92
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Validates an optional boolean knob, accepting booleans plus `"true"`/`"false"` strings.
|
|
146
|
+
*
|
|
147
|
+
* @remarks
|
|
148
|
+
* Small-model parity with EnriCode `readOptionalBoolean`: `"true"` and
|
|
149
|
+
* `"false"` (trimmed, case-insensitive) coerce; every other present value
|
|
150
|
+
* fails in Spanish (`"yes"`, `1`, `{}` never coerce silently).
|
|
151
|
+
*
|
|
152
|
+
* @param value - Raw knob value.
|
|
153
|
+
* @param fieldName - Dotted field name for error messages.
|
|
154
|
+
* @returns Boolean or undefined when absent.
|
|
155
|
+
* @throws Error with an Spanish-first bilingual message when present but not a boolean nor a true/false string.
|
|
156
|
+
*/
|
|
157
|
+
export function assertOptionalBoolean(value, fieldName) {
|
|
158
|
+
if (typeof value === "undefined") {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
if (typeof value === "boolean") {
|
|
162
|
+
return value;
|
|
163
|
+
}
|
|
164
|
+
if (typeof value === "string") {
|
|
165
|
+
const normalized = value.trim().toLowerCase();
|
|
166
|
+
if (normalized === "true") {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
if (normalized === "false") {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
throw new Error(`${fieldName} debe ser un booleano (true o false; también vale "true"/"false"). / ${fieldName} must be a boolean (true or false; "true"/"false" also work).`);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Parses a relative [0,1] fraction from a number or a complete numeric string.
|
|
177
|
+
*
|
|
178
|
+
* @remarks
|
|
179
|
+
* Strict by design: booleans, empty strings, and partial numerics are
|
|
180
|
+
* rejected instead of being coerced (`Number(true) === 1`).
|
|
181
|
+
*
|
|
182
|
+
* @param value - Raw fraction value.
|
|
183
|
+
* @returns Parsed finite number or undefined when unparseable.
|
|
184
|
+
*/
|
|
185
|
+
export function optionalFraction(value) {
|
|
186
|
+
if (typeof value === "number") {
|
|
187
|
+
return Number.isFinite(value) ? value : undefined;
|
|
188
|
+
}
|
|
189
|
+
if (typeof value === "string" && value.trim()) {
|
|
190
|
+
const trimmed = value.trim();
|
|
191
|
+
if (!/^[+-]?(\d+(\.\d+)?|\.\d+)$/u.test(trimmed)) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
const parsed = Number.parseFloat(trimmed);
|
|
195
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
196
|
+
}
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Builds the shared Spanish-first bilingual honesty warning for one clamped clip window.
|
|
201
|
+
*
|
|
202
|
+
* @remarks
|
|
203
|
+
* Single builder for the parser and the direct-client backstop so both surfaces
|
|
204
|
+
* declare the exact analyzed window with identical wording. The Spanish half keeps
|
|
205
|
+
* the `La ventana pedida (inicio …) … se recortó la duración` prefix family shared with
|
|
206
|
+
* EnriCode `buildClipWindowClampedWarning` (`La ventana del clip pedida … recortó`),
|
|
207
|
+
* so es-MX parity fixtures keep matching on both sides.
|
|
208
|
+
*
|
|
209
|
+
* @param startSeconds - Effective analyzed window start in seconds.
|
|
210
|
+
* @param requestedDurationSeconds - Requested window duration in seconds (before clamping).
|
|
211
|
+
* @param clampedDurationSeconds - Analyzed window duration in seconds (after clamping).
|
|
212
|
+
* @param maxSeconds - Clip-window cap in seconds (86400, 24 h).
|
|
213
|
+
* @returns Spanish-first bilingual warning naming the requested and analyzed windows.
|
|
214
|
+
*/
|
|
215
|
+
export function buildClipWindowClampedWarning(startSeconds, requestedDurationSeconds, clampedDurationSeconds, maxSeconds) {
|
|
216
|
+
const requestedEnd = startSeconds + requestedDurationSeconds;
|
|
217
|
+
const english = `Requested clip window (start ${String(startSeconds)} s + duration ${String(requestedDurationSeconds)} s = end ${String(requestedEnd)} s)` +
|
|
218
|
+
` exceeds the 24 h limit: trimmed duration to ${String(clampedDurationSeconds)} s (end ${String(maxSeconds)} s).`;
|
|
219
|
+
const spanish = `La ventana pedida (inicio ${String(startSeconds)} s + duración ${String(requestedDurationSeconds)} s = fin ${String(requestedEnd)} s)` +
|
|
220
|
+
` excede el límite de 24 h: se recortó la duración a ${String(clampedDurationSeconds)} s (fin ${String(maxSeconds)} s).`;
|
|
221
|
+
return `${spanish} / ${english}`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Resolves a timeout override from a raw environment string.
|
|
225
|
+
*
|
|
226
|
+
* @remarks
|
|
227
|
+
* Strict by design: only `^\d+$` with a value `> 0` is accepted. Anything
|
|
228
|
+
* else present (`"30s"`, `"1e4"`, `"0"`, `"-5"`) falls back to
|
|
229
|
+
* `fallbackMs` with a bilingual stderr warning instead of silently using a
|
|
230
|
+
* garbage budget (`parseInt("30s") === 30`).
|
|
231
|
+
*
|
|
232
|
+
* @param raw - Raw environment value (already trimmed, may be empty).
|
|
233
|
+
* @param envName - Environment variable name for the warning.
|
|
234
|
+
* @param fallbackMs - Fallback timeout in milliseconds.
|
|
235
|
+
* @returns Resolved timeout plus a Spanish warning, or null when clean.
|
|
236
|
+
*/
|
|
237
|
+
export function resolveTimeoutMs(raw, envName, fallbackMs) {
|
|
238
|
+
if (!raw) {
|
|
239
|
+
return { timeoutMs: fallbackMs, warning: null };
|
|
240
|
+
}
|
|
241
|
+
if (/^\d+$/u.test(raw)) {
|
|
242
|
+
const parsed = Number.parseInt(raw, 10);
|
|
243
|
+
if (Number.isSafeInteger(parsed) && parsed > 0) {
|
|
244
|
+
return { timeoutMs: parsed, warning: null };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
timeoutMs: fallbackMs,
|
|
249
|
+
warning: `${envName} inválido ('${raw}'); se usa ${String(fallbackMs)}ms. / ${envName} invalid ('${raw}'); using ${String(fallbackMs)}ms.`,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
93
252
|
/**
|
|
94
253
|
* Asserts that a string looks like an HTTP(S) URL.
|
|
95
254
|
*
|
|
@@ -100,7 +259,7 @@ export function optionalBoolean(value) {
|
|
|
100
259
|
export function assertHttpUrl(value, name) {
|
|
101
260
|
const url = assertNonEmptyString(value, name);
|
|
102
261
|
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
|
103
|
-
throw new Error(`${name} must start with http:// or https
|
|
262
|
+
throw new Error(`${name} debe comenzar con http:// o https://. / ${name} must start with http:// or https://.`);
|
|
104
263
|
}
|
|
105
264
|
return url.replace(/\/+$/, "");
|
|
106
265
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,IAAY;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"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"}
|