66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
import { buildAtlas } from "./atlas.js";
|
|
import { emitEvent } from "./events.js";
|
|
import { setState, STATE } from "./state.js";
|
|
|
|
export let configuration = {};
|
|
|
|
export async function loadConfiguration(event) {
|
|
setState(STATE.initialization);
|
|
|
|
emitEvent("config:load:start");
|
|
let configData = null;
|
|
if (typeof event === "string") {
|
|
configData = await fetch(`./configurations/${event}.ncpf.json`)
|
|
.then(data => data.json());
|
|
} else if (event.target.dataset.configuration) {
|
|
const configuration = event.target.dataset.configuration;
|
|
console.log(configuration);
|
|
configData = await fetch(`./configurations/${configuration}.ncpf.json`)
|
|
.then(data => data.json());
|
|
} else if (event.target.files[0]) {
|
|
const file = event.target.files[0];
|
|
configData = await new Promise(resolve => {
|
|
const reader = new FileReader();
|
|
reader.addEventListener("load", () => {
|
|
resolve(JSON.parse(reader.result));
|
|
});
|
|
reader.readAsText(file);
|
|
});
|
|
} else {
|
|
throw new Error("Configuration load failed - unrecognised event");
|
|
}
|
|
|
|
if ((configData.designs ?? []).length > 0) {
|
|
throw new Error("Configuration load failed - contains designs, likely not full configuration");
|
|
}
|
|
|
|
emitEvent("config:load:end");
|
|
|
|
try {
|
|
await processConfiguration(configData);
|
|
} catch (e) {
|
|
emitEvent("config:fail");
|
|
throw e;
|
|
}
|
|
|
|
configuration = configData;
|
|
|
|
emitEvent("config:end");
|
|
}
|
|
|
|
export async function processConfiguration(data) {
|
|
emitEvent("config:process:start");
|
|
|
|
console.log(data);
|
|
|
|
try {
|
|
await buildAtlas(data);
|
|
} catch (e) {
|
|
console.error(e);
|
|
emitEvent("config:process:fail");
|
|
throw e;
|
|
}
|
|
|
|
emitEvent("config:process:end");
|
|
}
|