| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import {Buffer} from "buffer"; // NodeJS library
- import {Delta} from "./delta";
- import {VersionRegistry} from "./version";
- import {DeltaParser} from "./delta_parser";
- export class VersionParser {
- readonly deltaParser: DeltaParser;
- readonly versionRegistry: VersionRegistry;
- constructor(deltaParser: DeltaParser, versionRegistry: VersionRegistry) {
- this.deltaParser = deltaParser;
- this.versionRegistry = versionRegistry;
- }
- load({externalDependencies, deltas, versions}, onLoadDelta: (Delta) => void, onLoadVersion: (Version) => void) {
- for (const e of externalDependencies) {
- if (this.versionRegistry.lookupOptional(Buffer.from(e, 'hex')) === undefined) {
- throw new Error("Cannot load versions: missing dependency: " + e);
- }
- }
- for (const d of deltas) {
- const loadedDelta = this.deltaParser.loadDelta(d);
- onLoadDelta(loadedDelta);
- }
- for (const {id, delta, parent, embeddings} of versions) {
- const parentVersion = this.versionRegistry.lookup(Buffer.from(parent, 'hex'));
- const parentDelta = this.deltaParser.deltaRegistry.deltas.get(delta)!;
- const theEmbeddings = new Map();
- const selfEmbeddingKeys = new Set<string>();
- for (const {guestId, v, ovr} of embeddings) {
- console.log({guestId, v, id})
- if (v === id) {
- selfEmbeddingKeys.add(guestId);
- }
- else {
- const guestVersion = this.versionRegistry.lookupOptional(Buffer.from(v, 'hex'));
- for (const [key,val] of Object.entries(ovr)) {
- const guestDelta = this.deltaParser.deltaRegistry.deltas.get(key as string);
- const hostDelta = this.deltaParser.deltaRegistry.deltas.get(val as string);
- theEmbeddings.set(guestDelta, hostDelta);
- }
- }
- }
- const loadedVersion = this.versionRegistry.createVersion(parentVersion, parentDelta, newVersion => {
- for (const guestId of selfEmbeddingKeys) {
- theEmbeddings.set(guestId, {version: newVersion, overridings: new Map()});
- }
- return theEmbeddings;
- });
- onLoadVersion(loadedVersion);
- }
- }
- }
|