we have persistence. persisting all store values' ASTs to localStorage

This commit is contained in:
Dustin Swan 2026-02-06 23:34:24 -07:00
parent 1029b1671f
commit 8c3237e0db
No known key found for this signature in database
GPG key ID: 30D46587E2100467
8 changed files with 177 additions and 70 deletions

View file

@ -6,8 +6,7 @@ import { runApp } from './runtime';
import { builtins } from './builtins';
import { CGError } from './error';
import { createStore, startTracking, stopTracking, buildDependents } from './store';
// import type { Store } from './store'
import { loadStore } from './persistence';
import stdlibCode from './stdlib.cg?raw';
import designTokensCode from './design-tokens.cg?raw';
@ -33,18 +32,32 @@ try {
const env: Env = new Map(Object.entries(builtins));
const store = createStore();
const persisted = loadStore();
for (const def of definitions) {
const body = persisted?.[def.name]?.body ?? def.body;
const deps = startTracking(def.name);
const value = evaluate(def.body, env, cgCode);
const value = evaluate(body, env, cgCode);
stopTracking();
env.set(def.name, value);
store.set(def.name, { value, body, dependencies: deps });
}
store.set(def.name, {
value,
body: def.body,
dependencies: deps
});
// Load persisted store entries
if (persisted) {
for (const [name, data] of Object.entries(persisted)) {
if (!store.has(name) && data.source === 'runtime') {
const deps = startTracking(name);
const value = evaluate(data.body, env, "");
stopTracking();
env.set(name, value);
store.set(name, { value, body: data.body, dependencies: deps });
}
}
}
const dependents = buildDependents(store);