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"); }