Skip to content

Commit c8b42e4

Browse files
fix: resolve all svelte-check and SSR build errors after SDK migration
1 parent 3eb9131 commit c8b42e4

20 files changed

Lines changed: 447 additions & 172 deletions

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@
154154
"svelte-css-vars": "^0.0.3",
155155
"svelte-focus-trap": "^1.2.0",
156156
"svelte-i18n": "^3.7.4",
157+
"intl-messageformat": "9.13.0",
157158
"svelte-meta-tags": "^3.0.4",
158159
"svelte-modals": "^1.3.0",
159160
"tippy.js": "^6.3.7"

‎pnpm-lock.yaml‎

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/components/EmbeddedIcon/EmbeddedIcon.svelte‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,13 @@
44
<script lang="ts">
55
import type { ClaimGeneratorDisplayInfo } from '$src/lib/asset';
66
7-
interface DisposableBlobUrl {
8-
url: string;
9-
dispose: () => void;
10-
}
117
import { onMount } from 'svelte';
128
139
export let generator: ClaimGeneratorDisplayInfo;
1410
let iconUrl: string | undefined;
1511
1612
onMount(() => {
17-
let dispose: DisposableBlobUrl['dispose'];
13+
let dispose: () => void = () => {};
1814
1915
if (generator.icon) {
2016
// The new SDK requires the active reader instance to fetch embedded resources.

‎src/lib/asset.ts‎

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export async function resultToAssetMap({
146146
dbg('Runtime validation statuses by manifest label', runtimeValidationStatuses);
147147

148148
const activeManifestValidationResults =
149-
manifestStore?.validation_results?.activeManifest;
149+
manifestStore?.validation_results?.activeManifest ?? undefined;
150150

151151
const rootValidationStatuses =
152152
runtimeValidationStatuses[activeManifestLabel] ?? [];
@@ -260,7 +260,7 @@ export async function resultToAssetMap({
260260
manifestData: await getManifestData(manifest, rootValidationResult),
261261
dataType: null,
262262
validationResult: rootValidationResult,
263-
trustSource: (manifest as Manifest & { trust_source?: string }).trust_source || 'none',
263+
trustSource: ((manifest as Manifest & { trust_source?: 'legacy' | 'none' | 'official' }).trust_source || 'none') as 'legacy' | 'none' | 'official',
264264
};
265265

266266
if (thumbnail?.dispose) {
@@ -288,7 +288,7 @@ export async function resultToAssetMap({
288288
);
289289

290290
const activeManifestValidationResults =
291-
ingredient.validation_results?.activeManifest;
291+
ingredient.validation_results?.activeManifest ?? undefined;
292292

293293
let validationResult = selectValidationResult(
294294
ingredient.validation_status || [],
@@ -318,7 +318,7 @@ export async function resultToAssetMap({
318318
manifestData: await getManifestData(ingredientManifest, validationResult),
319319
dataType: getIngredientDataType(ingredient),
320320
validationResult,
321-
trustSource: (ingredient as Ingredient & { trust_source?: string })?.trust_source || 'none',
321+
trustSource: ((ingredient as Ingredient & { trust_source?: 'legacy' | 'none' | 'official' })?.trust_source || 'none') as 'legacy' | 'none' | 'official',
322322
};
323323

324324
if (thumbnail?.dispose) {
@@ -338,9 +338,8 @@ export async function resultToAssetMap({
338338
return null;
339339
}
340340

341-
type ClaimGeneratorEntry = { name?: string; version?: string | null; icon?: Thumbnail | null };
342-
343-
function formattedGeneratorInfo(claim_generator: ClaimGeneratorEntry): ClaimGeneratorEntry {
341+
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
342+
function formattedGeneratorInfo(claim_generator: any): any {
344343
const version = claim_generator?.version;
345344
claim_generator.version = version?.replace(/\([^()]*\)/g, '');
346345

@@ -384,9 +383,25 @@ export async function resultToAssetMap({
384383
);
385384

386385
if (editsAndActivity) {
387-
const actionsAssertion = manifest.assertions?.['c2pa.actions'] as { data?: { metadata?: Record<string, unknown> } } | undefined;
386+
const assertions = manifest.assertions;
387+
388+
let actionsAssertion: unknown;
389+
390+
if (Array.isArray(assertions)) {
391+
actionsAssertion = assertions.find(
392+
(a): a is { label: string; data: unknown } =>
393+
typeof a === 'object' &&
394+
a !== null &&
395+
'label' in a &&
396+
typeof (a as Record<string, unknown>)['label'] === 'string' &&
397+
(a as Record<string, unknown>)['label'] === 'c2pa.actions'
398+
);
399+
} else if (assertions && typeof assertions === 'object') {
400+
actionsAssertion = (assertions as Record<string, unknown>)['c2pa.actions'];
401+
}
402+
388403
const hasInference =
389-
!!actionsAssertion?.data?.metadata?.['com.adobe.inference'];
404+
!!(actionsAssertion as { data?: { metadata?: Record<string, unknown> } })?.data?.metadata?.['com.adobe.inference'];
390405

391406
const filteredEditsAndActivity = editsAndActivity.filter(
392407
(value) => !!value.label,

‎src/lib/crjson.ts‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -302,12 +302,15 @@ function legacyManifestToCrJsonEntry(label: string, m: Record<string, unknown>):
302302
const validationResults = m.validation_results ?? m.validationResults;
303303
const validationStatus = m.validation_status ?? m.validationStatus;
304304

305-
return {
305+
const entry: CrJsonManifestEntry = {
306306
label,
307307
assertions,
308-
...(claim && { claim: claim as Record<string, unknown> }),
309-
...(signature && { signature }),
310-
...(validationResults && { validationResults: validationResults as CrJsonValidationResults }),
311-
...(validationStatus && { validationStatus: validationStatus as Record<string, unknown> })
312308
}
309+
310+
if (claim) entry.claim = claim as Record<string, unknown>;
311+
if (signature) entry.signature = signature;
312+
if (validationResults) entry.validationResults = validationResults as CrJsonValidationResults;
313+
if (validationStatus) entry.validationStatus = validationStatus as Record<string, unknown>;
314+
315+
return entry;
313316
}

‎src/lib/exif.ts‎

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ export interface ExifTags {
2828
'exif:offsettimeoriginal'?: string;
2929
}
3030

31-
declare module 'c2pa' {
32-
interface ExtendedAssertions {
33-
'stds.exif': ExifTags;
34-
}
35-
}
31+
3632

3733
function findExifValue(exif: ExifTags, locations: string[]) {
3834
return (
@@ -203,8 +199,24 @@ export function parseDateTime(exif: ExifTags): Date | null {
203199
}
204200

205201
export function selectExif(manifest: Manifest): ExifSummary | null {
206-
const assertion = manifest.assertions?.['stds.exif'];
207-
const exif: ExifTags = (Array.isArray(assertion) ? assertion : [assertion]).reduce(
202+
const assertions = manifest.assertions;
203+
let assertion: unknown;
204+
205+
if (Array.isArray(assertions)) {
206+
assertion = assertions.find(
207+
(a): a is { label: string; data: unknown } =>
208+
typeof a === 'object' &&
209+
a !== null &&
210+
'label' in a &&
211+
typeof (a as Record<string, unknown>)['label'] === 'string' &&
212+
(a as Record<string, unknown>)['label'] === 'stds.exif'
213+
);
214+
} else if (assertions && typeof assertions === 'object') {
215+
assertion = (assertions as Record<string, unknown>)['stds.exif'];
216+
}
217+
218+
const assertionData = (assertion as { data?: unknown })?.data;
219+
const exif: ExifTags = (Array.isArray(assertionData) ? assertionData : [assertionData]).reduce(
208220
(acc, exif) => {
209221
const caseInsensitiveData = mapKeys(exif?.data, (_, key) => {
210222
return key.toLowerCase();

‎src/lib/selectors/autoDubInfo.ts‎

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,40 @@ export interface AutoDubInfo {
1414
}
1515

1616
export function selectAutoDubInfo(manifest: Manifest): AutoDubInfo | null {
17-
const actionAssertion = manifest.assertions?.['c2pa.actions.v2'];
17+
const assertions = manifest.assertions;
18+
let actionAssertion: unknown;
19+
20+
if (Array.isArray(assertions)) {
21+
actionAssertion = assertions.find(
22+
(a): a is { label: string; data: unknown } =>
23+
typeof a === 'object' &&
24+
a !== null &&
25+
'label' in a &&
26+
typeof (a as Record<string, unknown>)['label'] === 'string' &&
27+
(a as Record<string, unknown>)['label'] === 'c2pa.actions.v2'
28+
);
29+
} else if (assertions && typeof assertions === 'object') {
30+
actionAssertion = (assertions as Record<string, unknown>)['c2pa.actions.v2'];
31+
}
1832

1933
if (!actionAssertion) {
2034
return null;
2135
}
2236

23-
const dubbedAction = actionAssertion.data.actions.find(
37+
type ActionItem = {
38+
action: string;
39+
changes?: Array<{ region?: Array<{ type?: string; item?: { value?: string } }> }>;
40+
parameters?: unknown;
41+
};
42+
type ActionsAssertion = { data?: { actions?: ActionItem[] } };
43+
44+
const dubbedAction = (actionAssertion as ActionsAssertion).data?.actions?.find(
2445
({ action }) => action === 'c2pa.dubbed',
2546
);
26-
const translatedAction = actionAssertion.data.actions.find(
47+
const translatedAction = (actionAssertion as ActionsAssertion).data?.actions?.find(
2748
({ action }) => action === 'c2pa.translated',
2849
);
29-
const editedAction = actionAssertion.data.actions.find(
50+
const editedAction = (actionAssertion as ActionsAssertion).data?.actions?.find(
3051
({ action }) => action === 'c2pa.edited',
3152
);
3253

@@ -36,15 +57,15 @@ export function selectAutoDubInfo(manifest: Manifest): AutoDubInfo | null {
3657
)?.region;
3758
const dubbedIdentified = dubbedRegionOfInterest?.find(
3859
(region: Record<string, unknown>) => region.type === 'identified',
39-
)?.item.value;
60+
)?.item?.value;
4061
const hasLipsRoi = dubbedIdentified === 'lips';
4162

4263
const editedRegionOfInterest = editedAction?.changes?.find(
4364
(change) => !!change?.region,
4465
)?.region;
4566
const editedIdentified = editedRegionOfInterest?.find(
4667
(region: Record<string, unknown>) => region.type === 'identified',
47-
)?.item.value;
68+
)?.item?.value;
4869
const hasTranscriptRoi = editedIdentified === 'transcript';
4970

5071
const translatedLanguageData = translatedAction?.parameters ?? null;

0 commit comments

Comments
 (0)