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

@ -5,25 +5,25 @@ import type { Value } from './types';
export type Literal = {
kind: 'literal'
value: Value
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Variable = {
kind: 'variable'
name: string
line: number
line?: number
column: number
start: number
start?: number
}
export type Constructor = {
kind: 'constructor'
name: string
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
// Functions
@ -32,18 +32,18 @@ export type Lambda = {
kind: 'lambda'
params: string[]
body: AST
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Apply = {
kind: 'apply'
func: AST
args: AST[]
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
// Bindings
@ -53,9 +53,9 @@ export type Let = {
name: string
value: AST
body: AST
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
// Matching
@ -64,17 +64,17 @@ export type Match = {
kind: 'match'
expr: AST
cases: MatchCase[]
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type MatchCase = {
pattern: Pattern
result: AST
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Pattern =
@ -91,43 +91,43 @@ export type Pattern =
export type ListSpread = {
kind: 'list-spread'
spread: AST;
line: number;
column: number;
start: number;
line?: number;
column?: number;
start?: number;
}
export type List = {
kind: 'list'
elements: (AST | ListSpread)[]
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Record = {
kind: 'record'
fields: { [key: string]: AST }
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type RecordAccess = {
kind: 'record-access'
record: AST
field: string
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type RecordUpdate = {
kind: 'record-update'
record: AST
updates: { [key: string]: AST }
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
// Top-level constructs
@ -136,36 +136,36 @@ export type Definition = {
kind: 'definition'
name: string
body: AST
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type TypeDef = {
kind: 'typedef'
name: string
variants: Array<{ name: string, args: string[] }>
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Import = {
kind: 'import'
module: string
items: string[] | 'all'
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type Rebind = {
kind: 'rebind'
target: AST
value: AST
line: number
column: number
start: number
line?: number
column?: number
start?: number
}
export type AST =