Versie 0.2.0

This commit is contained in:
Atreides Assets committed 2026-10-29 11:57:29 +01:00
commit e77d8fd373
495 files changed
+81026

No files matched your search

+139
View File
@@ -0,0 +1,139 @@
// Generated, do not edit. sha256:45a1e1f166c06347eecc16618109c15256ed61caf29cc462a558b68275a28363
import { fieldClass } from './policy.js';
import { createAliasRegistry, isSchijnwaarde } from './aliases.js';
import { bucketLabel } from './buckets.js';
const SCHIJN_SOORT = Object.freeze({
address: 'address',
externalAddress: 'address',
automaticLabel: 'address',
txid: 'txid',
transactionHash: 'txid',
});
const HANDLE_SOORT = Object.freeze({
assetId: 'asset',
accountId: 'account',
fromAccountId: 'account',
toAccountId: 'account',
productId: 'product',
providerId: 'provider',
connectionId: 'connection',
sourceId: 'walletSource',
labelId: 'label',
eventId: 'event',
scheduleId: 'schedule',
profileId: 'profile',
walletTransactionId: 'walletTransaction',
resolvedEventId: 'event',
createdEventId: 'event',
createdAccountId: 'account',
createdValuationId: 'valuation',
principalAssetId: 'asset',
payoutAssetId: 'asset',
});
export function createTranslator({ secret, precision } = {}) {
const stand = Object.freeze({ rawValues: false, ...(precision ?? {}) });
const raw = stand.rawValues === true;
const registry = createAliasRegistry({ secret });
const gedeeld = new Set();
const uitgaand = new Map();
function onthoudUit(uit, echt) {
uitgaand.set(uit, echt);
return uit;
}
function veld(naam, waarde, entiteit, tabel, rol) {
const klasse = fieldClass(naam, tabel);
const logNaam = (tabel != null && klasse !== fieldClass(naam)) ? `${tabel}.${naam}` : naam;
if (klasse === null || klasse === 'drop') return undefined;
if (waarde === null || waarde === undefined) {
gedeeld.add(logNaam);
return null;
}
switch (klasse) {
case 'plain':
case 'rate':
gedeeld.add(logNaam);
return waarde;
case 'quantity':
case 'quantityFiat': {
if (raw) { gedeeld.add(logNaam); return waarde; }
const emmeren = klasse === 'quantity'
? stand.bucketQuantities !== false
: (rol === 'total' ? stand.bucketTotals !== false : stand.bucketAmounts !== false);
if (!emmeren) { gedeeld.add(logNaam); return waarde; }
const label = bucketLabel(Number(waarde), klasse === 'quantityFiat' ? 'FINE' : 'COARSE');
if (label === null) return undefined;
gedeeld.add(logNaam);
return label;
}
case 'chain': {
const soort = SCHIJN_SOORT[naam];
if (!soort) return undefined;
gedeeld.add(logNaam);
if (raw) return waarde;
return onthoudUit(registry.alias(soort, String(waarde)), String(waarde));
}
case 'handle': {
if (raw) { gedeeld.add(logNaam); return waarde; }
const soort = naam === 'id' ? (entiteit || 'record') : (HANDLE_SOORT[naam] || 'text');
gedeeld.add(logNaam);
return onthoudUit(registry.handle(soort, String(waarde)), String(waarde));
}
default:
throw new Error(`no handling for class '${klasse}' (field '${naam}')`);
}
}
function toAi(waarde, opties = {}) {
const entiteit = opties.entity || null;
const tabel = opties.table || null;
const rol = opties.role || 'row';
if (Array.isArray(waarde)) return waarde.map(v => toAi(v, opties));
if (waarde === null || typeof waarde !== 'object') return waarde;
const uit = {};
for (const [naam, v] of Object.entries(waarde)) {
const vertaald = (v !== null && typeof v === 'object')
? (fieldClass(naam, tabel) === null ? undefined : toAi(v, {}))
: veld(naam, v, entiteit, tabel, rol);
if (vertaald !== undefined) uit[naam] = vertaald;
}
return uit;
}
function fromAi(tekst) {
if (typeof tekst !== 'string') return { text: tekst, unresolved: [] };
let uit = tekst;
const sleutels = [...uitgaand.keys()].sort((a, b) => b.length - a.length);
for (const s of sleutels) uit = uit.split(s).join(uitgaand.get(s));
const unresolved = [];
for (const m of uit.matchAll(/\b(?:bc1q[0-9a-z]{38}|xpub[0-9A-Za-z]{107}|[0-9a-z]{64})\b/g)) {
if (isSchijnwaarde(m[0])) unresolved.push(m[0]);
}
return { text: uit, unresolved };
}
return {
toAi,
fromAi,
beginCall() { gedeeld.clear(); },
fieldsShared: () => [...gedeeld].sort(),
resolve: uit => registry.resolve(uit),
precision: stand,
};
}