📄 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