UNPKG

nitropage

Version:

A free and open source, extensible visual page builder based on SolidStart.

69 lines (59 loc) 1.6 kB
import { Blueprint, InitConfigParams, NPConfig } from "#../types"; import { NONE_BLUEPRINT_ID } from "#lib/constants.js"; import { startTransition } from "solid-js"; import { produce } from "solid-js/store"; import { initBlueprint } from "./blueprint"; export const createConfig = function (params: NPConfig) { const blueprints = params.blueprints(); const parent = () => { if (!lastCtx) { return; } startTransition(() => { initConfig( { ...lastCtx, configParams: parent, }, true, ); }); }; parent.pageRoot = params.pageRoot; parent.blueprints = () => blueprints; return parent; }; let lastCtx: InitConfigParams; export async function initConfig(ctx: InitConfigParams, allBlueprints = false) { if (import.meta.env.DEV) { lastCtx = ctx; } ctx.setConfig( produce((d) => { d.page = ctx.configParams.pageRoot; d.getBlueprints = ctx.configParams.blueprints; }), ); if (allBlueprints) { const blueprints = ctx.configParams.blueprints(); const files = Object.keys(blueprints); await Promise.all( files.map((f) => initBlueprint(f, ctx.config, ctx.setConfig)), ); if (import.meta.env.DEV) { console.info( "init config - loaded blueprints:", Object.keys(ctx.config.blueprints), ); } } ctx.setConfig("blueprints", NONE_BLUEPRINT_ID, { id: NONE_BLUEPRINT_ID, title: () => "None", category: "misc", data: {}, component: () => [], slots: {}, } satisfies Blueprint); return ctx.config; }