we have persistence. persisting all store values' ASTs to localStorage
This commit is contained in:
parent
1029b1671f
commit
8c3237e0db
8 changed files with 177 additions and 70 deletions
29
src/main.ts
29
src/main.ts
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue