📄 src/models/generated-src/ExternalIdCrosswalk.ts
D-OPEN SOVEREIGN
1// AUTO-GENERATED by @the_library/public/models schemaGenerator
2import type { Lang } from "../interfaces.ts";
3import type { SidecarSet } from "../worker/libs/initialLoad.ts";
4
5export class ExternalIdCrosswalk {
6 static instance: ExternalIdCrosswalk | null = null;
7 private worker: Worker;
8 private readyPromise: Promise<void>;
9 private resolveReady!: () => void;
10 private rejectReady!: (e: Error) => void;
11 public ready = false;
12 private nextMsgId = 1;
13 private pending = new Map<number, (res: any) => void>();
14
15 constructor(workerPath = '/ExternalIdCrosswalkWorker.js') {
16 this.worker = new Worker(workerPath, { type: 'module' });
17 this.readyPromise = new Promise((resolve, reject) => {
18 this.resolveReady = resolve;
19 this.rejectReady = reject;
20 });
21 ExternalIdCrosswalk.instance = this;
22 (globalThis as any).ExternalIdCrosswalk = ExternalIdCrosswalk;
23
24 this.worker.onmessage = (e) => {
25 const { msgId, result, status } = e.data;
26 if (msgId && this.pending.has(msgId)) {
27 this.pending.get(msgId)!(result ?? status);
28 this.pending.delete(msgId);
29 }
30 };
31 this.worker.onerror = (err) => {
32 console.error("[ExternalIdCrosswalk] Worker error:", err);
33 // If it crashes before ready, reject the ready promise
34 if (!this.ready) {
35 this.rejectReady(new Error("ExternalIdCrosswalk worker crashed during initialization: " + err.message));
36 }
37 };
38 this.worker.onmessageerror = (err) => {
39 console.error("[ExternalIdCrosswalk] Worker message error:", err);
40 };
41 }
42
43 async whenReady() {
44 return this.readyPromise;
45 }
46
47 private request(cmd: string, payload: any): Promise<any> {
48 return new Promise(resolve => {
49 const msgId = this.nextMsgId++;
50 this.pending.set(msgId, resolve);
51 this.worker.postMessage({ cmd, payload, msgId });
52 });
53 }
54
55 async init(sidecars: SidecarSet[]) {
56 await this.request('init_crosswalk', { sidecars });
57 this.ready = true;
58 this.resolveReady();
59 }
60
61 async loadLang(sidecars: SidecarSet[]) {
62 await this.request('load_lang_crosswalk', { sidecars });
63 }
64
65 async resolveDerived(sfcuid: string, lang: Lang) {
66 return this.request('resolve_derived', { sfcuid, lang });
67 }
68
69 async resolveForInstance(standardId: string, value: string, lang: Lang) {
70 return this.request('resolve_standard', { standardId, value, lang });
71 }
72}
73