@comyata/fe
Version:
Execute YAML and JSON files like programs and get clean data to work with as result.
45 lines (43 loc) • 1.1 kB
JavaScript
export class DataRef {
/**
* The parsed data to use for computing.
*/
/**
* The loaded data value to use for parsing.
*/
constructor(file) {
this.file = file;
this.value = file?.value;
this.node = file?.node;
}
static withValue(file, value) {
const ref = new DataRef(file);
ref.value = {
current: value
};
return ref;
}
}
export class DataFileRegistry {
files = new Map();
refs = new Map();
fileLoader = new Map();
fileLoaderListener = new Map();
constructor(
// onFileAdded,
// onFileUsed,
// onFileLoaded
resolveFile, initialFiles) {
this.resolveFile = resolveFile;
this.files = new Map(initialFiles?.map(f => [f.fileId, f]));
}
fileRef(fileUrl, importContext) {
let fileRef = this.files.get(fileUrl);
if (fileRef) return fileRef;
// todo: call here fileRef from fileEngine or
// mv logic here and only update the global state through some "on file added" hook from here?
fileRef = this.resolveFile(fileUrl, importContext);
this.files.set(fileUrl, fileRef);
return fileRef;
}
}