@arcblock/did-connect-service 4.1.59 → 4.1.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Node font files shared by `og-node`'s tree renderer (`tree-node.ts`) and
3
+ * og.png generator (`generator.ts`): subset siblings (ArcBlock/arc#8800) and
4
+ * cross-script fallback siblings (ArcBlock/arc#8832) of the configured
5
+ * Regular font.
6
+ *
7
+ * Layout, relative to the Regular font URL (the bundled face, or
8
+ * `CONNECT_OG_FONT_URL`, `file:` URLs included):
9
+ * - Bold: `…Regular…` → `…Bold…` in the file name ({@link deriveBoldFontUrl});
10
+ * - subset: `subset-v1/<same file name>` ({@link deriveSubsetFontUrl});
11
+ * - fallback families: the R2 file names next to it (`NotoSansSC-Regular.otf`,
12
+ * `NotoSansJP-Regular.otf`, `NotoSansTC-Regular.otf`, with their Bold and
13
+ * subset siblings) — the layout of the font bucket, so a `CONNECT_OG_FONT_URL`
14
+ * pointing at it gets fallbacks for free. The npm package bundles only Noto
15
+ * Sans SC Regular (the widest CJK face: 30 890 codepoints, including 歩 and
16
+ * most Japanese shinjitai), so the bundled default has no fallback siblings;
17
+ * each missing sibling is remembered and warned about once per process.
18
+ */
19
+ import type { Logger } from "../logger.js";
20
+ import { type OgCjkFamily } from "./font-fallback.js";
21
+ import { type OgSubsetFontSet } from "./font-subset.js";
22
+ /** Deadline for downloading a remote font (Node). */
23
+ export declare const FONT_FETCH_TIMEOUT_MS = 10000;
24
+ export declare function md5(s: string): string;
25
+ /** `…Regular…` → `…Bold…` in the last path segment; undefined when the name has no Regular marker. */
26
+ export declare function deriveBoldFontUrl(regularUrl: string | undefined): string | undefined;
27
+ /** `…/NotoSansSC-Regular.otf` → `…/subset-v1/NotoSansSC-Regular.otf` (and the file name). */
28
+ export declare function deriveSubsetFontUrl(url: string | undefined): {
29
+ url: string;
30
+ file: string;
31
+ } | undefined;
32
+ /** A subset file, checked against the build's sha256 (`null` = missing or mismatch, warned once per process). */
33
+ export declare function loadSubsetFile(url: string, sha256: string, fontCacheDir: string, fetchImpl: typeof fetch, logger: Logger): Promise<Buffer | null>;
34
+ /** Test isolation: forget cached subset / fallback bytes and re-arm the warnings. */
35
+ export declare function resetOgNodeFontFilesForTesting(): void;
36
+ /** The subset-table set (and CJK family) of the Regular font at `regularUrl`, matched by file name. */
37
+ export declare function nodeFontSetFor(regularUrl: string): {
38
+ set: OgSubsetFontSet;
39
+ family?: OgCjkFamily;
40
+ subsetUrl: string;
41
+ } | undefined;
42
+ export interface NodeFallbackFonts {
43
+ fallbacks: Array<{
44
+ family: OgCjkFamily;
45
+ url: string;
46
+ regular: Buffer;
47
+ bold: Buffer | null;
48
+ }>;
49
+ /** Families the text needed but the render did not load (over budget, or files missing). */
50
+ skipped: OgCjkFamily[];
51
+ /** A wanted fallback file was missing: the output may change once it is there (do not cache it). */
52
+ degraded: boolean;
53
+ }
54
+ /**
55
+ * Plans (`font-fallback.ts`) and loads the cross-script fallbacks of one Node
56
+ * render. `regularUrl` is the resolved Regular font URL (bundled face
57
+ * included); `primaryBytes` what the primary loaded. A missing sibling is
58
+ * skipped (warned once per process); a read error / timeout rejects like a
59
+ * primary font read.
60
+ */
61
+ export interface NodeFallbackInput {
62
+ regularUrl: string;
63
+ primaryBytes: number;
64
+ /** The primary loaded its full font (not its subset). */
65
+ primaryFull: boolean;
66
+ codepoints: ReadonlySet<number>;
67
+ bold: boolean;
68
+ fontCacheDir: string;
69
+ fetchImpl: typeof fetch;
70
+ logger: Logger;
71
+ }
72
+ /**
73
+ * Every fallback family the render wanted (planned or cut by the budget) —
74
+ * what a render that could not load its fallbacks at all (a read error or
75
+ * timeout) reports as skipped.
76
+ */
77
+ export declare function nodeFallbackFamiliesWanted(input: Pick<NodeFallbackInput, "regularUrl" | "primaryBytes" | "primaryFull" | "codepoints" | "bold">): OgCjkFamily[];
78
+ export declare function loadNodeFallbackFonts(input: NodeFallbackInput): Promise<NodeFallbackFonts>;
79
+ /**
80
+ * The fallback families an og.png's params text needs (missing from the primary,
81
+ * mapped by another family), for the generator's cache key: a card that now
82
+ * renders with a fallback must not be served from a cache entry drawn before
83
+ * arc#8832. Empty for every other card (its key is unchanged).
84
+ */
85
+ export declare function nodeParamsFallbackFamilies(regularUrl: string, params: Record<string, unknown>): OgCjkFamily[];
86
+ //# sourceMappingURL=node-font-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-font-files.d.ts","sourceRoot":"","sources":["../../src/og/node-font-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoB,KAAK,eAAe,EAAkD,MAAM,kBAAkB,CAAC;AAE1H,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOpF;AAID,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmBtG;AAyCD,iHAAiH;AACjH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,KAAK,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAOD,qFAAqF;AACrF,wBAAgB,8BAA8B,IAAI,IAAI,CAIrD;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUhI;AAmBD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7F,4FAA4F;IAC5F,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC,GAAG,WAAW,EAAE,CAI/J;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmEhG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,EAAE,CAc7G"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Node font files shared by `og-node`'s tree renderer (`tree-node.ts`) and
3
+ * og.png generator (`generator.ts`): subset siblings (ArcBlock/arc#8800) and
4
+ * cross-script fallback siblings (ArcBlock/arc#8832) of the configured
5
+ * Regular font.
6
+ *
7
+ * Layout, relative to the Regular font URL (the bundled face, or
8
+ * `CONNECT_OG_FONT_URL`, `file:` URLs included):
9
+ * - Bold: `…Regular…` → `…Bold…` in the file name ({@link deriveBoldFontUrl});
10
+ * - subset: `subset-v1/<same file name>` ({@link deriveSubsetFontUrl});
11
+ * - fallback families: the R2 file names next to it (`NotoSansSC-Regular.otf`,
12
+ * `NotoSansJP-Regular.otf`, `NotoSansTC-Regular.otf`, with their Bold and
13
+ * subset siblings) — the layout of the font bucket, so a `CONNECT_OG_FONT_URL`
14
+ * pointing at it gets fallbacks for free. The npm package bundles only Noto
15
+ * Sans SC Regular (the widest CJK face: 30 890 codepoints, including 歩 and
16
+ * most Japanese shinjitai), so the bundled default has no fallback siblings;
17
+ * each missing sibling is remembered and warned about once per process.
18
+ */
19
+ import { createHash } from "node:crypto";
20
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
21
+ import { readFile } from "node:fs/promises";
22
+ import { dirname, join } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+ import { OG_CJK_FALLBACK_PREFERENCE, ogFallbackIgnorable, ogFontSetBytes, ogFontSetFits, planOgFontFallbacks, } from "./font-fallback.js";
25
+ import { OG_SUBSET_PREFIX, ogFontSha256, ogFullFontMaps, ogSubsetFontSets } from "./font-subset.js";
26
+ /** Deadline for downloading a remote font (Node). */
27
+ export const FONT_FETCH_TIMEOUT_MS = 10_000;
28
+ export function md5(s) {
29
+ return createHash("md5").update(s).digest("hex");
30
+ }
31
+ /** `…Regular…` → `…Bold…` in the last path segment; undefined when the name has no Regular marker. */
32
+ export function deriveBoldFontUrl(regularUrl) {
33
+ if (!regularUrl)
34
+ return undefined;
35
+ const slash = regularUrl.lastIndexOf("/");
36
+ const head = regularUrl.slice(0, slash + 1);
37
+ const name = regularUrl.slice(slash + 1);
38
+ const bold = name.replace(/Regular/, "Bold").replace(/regular/, "bold");
39
+ return bold === name ? undefined : head + bold;
40
+ }
41
+ const SUBSET_DIR = OG_SUBSET_PREFIX.slice(OG_SUBSET_PREFIX.lastIndexOf("/") + 1);
42
+ /** `…/NotoSansSC-Regular.otf` → `…/subset-v1/NotoSansSC-Regular.otf` (and the file name). */
43
+ export function deriveSubsetFontUrl(url) {
44
+ if (!url)
45
+ return undefined;
46
+ let parsed;
47
+ try {
48
+ parsed = new URL(url);
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ const slash = parsed.pathname.lastIndexOf("/");
54
+ const name = parsed.pathname.slice(slash + 1);
55
+ if (!name)
56
+ return undefined;
57
+ parsed.pathname = `${parsed.pathname.slice(0, slash + 1)}${SUBSET_DIR}/${name}`;
58
+ let file;
59
+ try {
60
+ file = decodeURIComponent(name);
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ return { url: parsed.href, file };
66
+ }
67
+ /** A font file that may not exist: `null` on 404 / 403 / ENOENT; other failures throw. Remote files are disk-cached. */
68
+ async function readOptionalFontFile(url, fontCacheDir, fetchImpl) {
69
+ if (url.startsWith("file:")) {
70
+ try {
71
+ return await readFile(fileURLToPath(url));
72
+ }
73
+ catch (err) {
74
+ if (err.code === "ENOENT")
75
+ return null;
76
+ throw err;
77
+ }
78
+ }
79
+ const diskPath = join(fontCacheDir, `${md5(url)}.font`);
80
+ if (existsSync(diskPath))
81
+ return readFile(diskPath);
82
+ const res = await fetchImpl(url, { signal: AbortSignal.timeout(FONT_FETCH_TIMEOUT_MS) });
83
+ if (res.status === 404 || res.status === 403)
84
+ return null;
85
+ if (!res.ok)
86
+ throw new Error(`font fetch failed: ${res.status}`);
87
+ const buf = Buffer.from(await res.arrayBuffer());
88
+ mkdirSync(dirname(diskPath), { recursive: true });
89
+ writeFileSync(diskPath, buf);
90
+ return buf;
91
+ }
92
+ /** Memoized file bytes by URL; `null` (missing / not the build's bytes) is cached, errors are not. */
93
+ const files = new Map();
94
+ let subsetMissingWarned = false;
95
+ let fallbackMissingWarned = false;
96
+ function memoFile(url, load) {
97
+ let entry = files.get(url);
98
+ if (!entry) {
99
+ const created = load();
100
+ created.catch(() => {
101
+ if (files.get(url) === created)
102
+ files.delete(url);
103
+ });
104
+ files.set(url, created);
105
+ entry = created;
106
+ }
107
+ return entry;
108
+ }
109
+ /** A subset file, checked against the build's sha256 (`null` = missing or mismatch, warned once per process). */
110
+ export function loadSubsetFile(url, sha256, fontCacheDir, fetchImpl, logger) {
111
+ return memoFile(url, () => readOptionalFontFile(url, fontCacheDir, fetchImpl).then(async (bytes) => {
112
+ const reason = !bytes ? "missing" : (await ogFontSha256(bytes)) !== sha256 ? "sha256 mismatch" : undefined;
113
+ if (!reason)
114
+ return bytes;
115
+ // A stale / corrupt download must not stay on disk for the next process.
116
+ if (bytes && !url.startsWith("file:"))
117
+ rmSync(join(fontCacheDir, `${md5(url)}.font`), { force: true });
118
+ if (!subsetMissingWarned) {
119
+ subsetMissingWarned = true;
120
+ logger.warn({ message: `[og] subset font ${reason}; rendering with the full font`, mod: "og" });
121
+ }
122
+ return null;
123
+ }));
124
+ }
125
+ /** A full fallback font file, or `null` when it is not there. */
126
+ function loadOptionalFullFile(url, fontCacheDir, fetchImpl) {
127
+ return memoFile(url, () => readOptionalFontFile(url, fontCacheDir, fetchImpl));
128
+ }
129
+ /** Test isolation: forget cached subset / fallback bytes and re-arm the warnings. */
130
+ export function resetOgNodeFontFilesForTesting() {
131
+ files.clear();
132
+ subsetMissingWarned = false;
133
+ fallbackMissingWarned = false;
134
+ }
135
+ /** The subset-table set (and CJK family) of the Regular font at `regularUrl`, matched by file name. */
136
+ export function nodeFontSetFor(regularUrl) {
137
+ const derived = deriveSubsetFontUrl(regularUrl);
138
+ if (!derived)
139
+ return undefined;
140
+ const sets = ogSubsetFontSets();
141
+ const entry = Object.entries(sets).find(([, candidate]) => candidate.regular.file === derived.file);
142
+ if (!entry)
143
+ return undefined;
144
+ const [id, set] = entry;
145
+ // The bundled face is Noto Sans SC.
146
+ const family = id === "node-bundled" ? "zh-CN" : OG_CJK_FALLBACK_PREFERENCE.includes(id) ? id : undefined;
147
+ return { set, family, subsetUrl: derived.url };
148
+ }
149
+ /** Fallback families next to `regularUrl`, excluding the primary's own family. */
150
+ function fallbackCandidates(regularUrl, primaryFamily) {
151
+ const sets = ogSubsetFontSets();
152
+ return OG_CJK_FALLBACK_PREFERENCE.flatMap((family) => family !== primaryFamily && sets[family] && !knownMissing.has(siblingUrl(regularUrl, sets[family].regular.file))
153
+ ? [{ family, set: sets[family] }]
154
+ : []);
155
+ }
156
+ /** Full Regular URLs of fallback families found missing (not probed again by this process). */
157
+ const knownMissing = new Set();
158
+ function siblingUrl(regularUrl, file) {
159
+ return new URL(encodeURIComponent(file), regularUrl).href;
160
+ }
161
+ function planNodeFallbacks(input) {
162
+ const primary = nodeFontSetFor(input.regularUrl);
163
+ if (!primary)
164
+ return undefined;
165
+ const planPrimary = { primaryBytes: input.primaryBytes, primaryFull: input.primaryFull, primaryCjk: !!primary.family };
166
+ const plan = planOgFontFallbacks({
167
+ primary: primary.set,
168
+ ...planPrimary,
169
+ codepoints: input.codepoints,
170
+ candidates: fallbackCandidates(input.regularUrl, primary.family),
171
+ bold: input.bold,
172
+ });
173
+ return { planPrimary, plan };
174
+ }
175
+ /**
176
+ * Every fallback family the render wanted (planned or cut by the budget) —
177
+ * what a render that could not load its fallbacks at all (a read error or
178
+ * timeout) reports as skipped.
179
+ */
180
+ export function nodeFallbackFamiliesWanted(input) {
181
+ const planned = planNodeFallbacks(input);
182
+ if (!planned)
183
+ return [];
184
+ return [...new Set([...planned.plan.fallbacks.map((f) => f.family), ...planned.plan.overBudget])];
185
+ }
186
+ export async function loadNodeFallbackFonts(input) {
187
+ const out = { fallbacks: [], skipped: [], degraded: false };
188
+ const planned = planNodeFallbacks(input);
189
+ if (!planned)
190
+ return out;
191
+ const { regularUrl, bold, fontCacheDir, fetchImpl, logger } = input;
192
+ const { planPrimary, plan } = planned;
193
+ out.skipped.push(...plan.overBudget);
194
+ const loadFull = async (choice) => {
195
+ const fullUrl = siblingUrl(regularUrl, choice.set.regular.file);
196
+ const fullBoldUrl = choice.set.bold ? siblingUrl(regularUrl, choice.set.bold.file) : undefined;
197
+ const [regularBytes, boldBytes] = await Promise.all([
198
+ loadOptionalFullFile(fullUrl, fontCacheDir, fetchImpl),
199
+ bold && fullBoldUrl ? loadOptionalFullFile(fullBoldUrl, fontCacheDir, fetchImpl) : Promise.resolve(null),
200
+ ]);
201
+ if (!regularBytes) {
202
+ knownMissing.add(fullUrl);
203
+ if (!fallbackMissingWarned) {
204
+ fallbackMissingWarned = true;
205
+ logger.warn({ message: "[og] fallback font missing; its characters render as .notdef", mod: "og", family: choice.family });
206
+ }
207
+ return "missing";
208
+ }
209
+ return { family: choice.family, url: fullUrl, regular: regularBytes, bold: boldBytes };
210
+ };
211
+ const loadPlanned = async (choice) => {
212
+ if (!choice.subset)
213
+ return loadFull(choice);
214
+ const fullUrl = siblingUrl(regularUrl, choice.set.regular.file);
215
+ const subsetRegular = deriveSubsetFontUrl(fullUrl).url;
216
+ const regularBytes = await loadSubsetFile(subsetRegular, choice.set.regular.sha256, fontCacheDir, fetchImpl, logger);
217
+ const boldBytes = regularBytes && bold && choice.set.bold
218
+ ? await loadSubsetFile(deriveSubsetFontUrl(siblingUrl(regularUrl, choice.set.bold.file)).url, choice.set.bold.sha256, fontCacheDir, fetchImpl, logger)
219
+ : null;
220
+ if (regularBytes && (!bold || boldBytes))
221
+ return { family: choice.family, url: subsetRegular, regular: regularBytes, bold: boldBytes };
222
+ return "subset-unusable";
223
+ };
224
+ // Planned fonts in parallel; then a planned subset that is unusable may load
225
+ // its full font, one at a time, only while the whole set still fits.
226
+ const loaded = await Promise.all(plan.fallbacks.map(loadPlanned));
227
+ const effective = plan.fallbacks.map((c) => ({ subset: c.subset, bytes: c.bytes }));
228
+ for (const [i, choice] of plan.fallbacks.entries()) {
229
+ if (loaded[i] !== "subset-unusable")
230
+ continue;
231
+ out.degraded = true;
232
+ const asFull = effective.map((e, j) => (j === i ? { subset: false, bytes: ogFontSetBytes(choice.set, false, bold) } : e));
233
+ if (!ogFontSetFits(planPrimary, asFull))
234
+ continue;
235
+ loaded[i] = await loadFull(choice);
236
+ if (typeof loaded[i] !== "string")
237
+ effective[i] = asFull[i];
238
+ }
239
+ plan.fallbacks.forEach((choice, i) => {
240
+ const result = loaded[i];
241
+ if (typeof result === "string") {
242
+ out.skipped.push(choice.family);
243
+ if (result === "missing")
244
+ out.degraded = true;
245
+ return;
246
+ }
247
+ if (bold && !result.bold)
248
+ out.degraded = true;
249
+ out.fallbacks.push(result);
250
+ });
251
+ out.skipped = [...new Set(out.skipped)];
252
+ return out;
253
+ }
254
+ /**
255
+ * The fallback families an og.png's params text needs (missing from the primary,
256
+ * mapped by another family), for the generator's cache key: a card that now
257
+ * renders with a fallback must not be served from a cache entry drawn before
258
+ * arc#8832. Empty for every other card (its key is unchanged).
259
+ */
260
+ export function nodeParamsFallbackFamilies(regularUrl, params) {
261
+ const primary = nodeFontSetFor(regularUrl);
262
+ if (!primary)
263
+ return [];
264
+ const candidates = fallbackCandidates(regularUrl, primary.family);
265
+ const needed = new Set();
266
+ for (const value of Object.values(params)) {
267
+ if (typeof value !== "string" || value.startsWith("data:"))
268
+ continue;
269
+ for (const ch of value) {
270
+ const cp = ch.codePointAt(0);
271
+ if (cp < 0x80 || ogFallbackIgnorable(cp) || ogFullFontMaps(primary.set, cp))
272
+ continue;
273
+ for (const c of candidates)
274
+ if (ogFullFontMaps(c.set, cp))
275
+ needed.add(c.family);
276
+ }
277
+ }
278
+ return OG_CJK_FALLBACK_PREFERENCE.filter((family) => needed.has(family));
279
+ }
280
+ //# sourceMappingURL=node-font-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-font-files.js","sourceRoot":"","sources":["../../src/og/node-font-files.ts"],"names":[],"mappings":"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"}