@lemmabase/lemma-engine 0.8.13 → 0.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Pricing tiers, tax brackets, leave entitlement, eligibility checks, discount sta
7
7
  ```lemma
8
8
  spec pricing 2026-01-01
9
9
 
10
- data money: scale
10
+ data money: quantity
11
11
  -> unit eur 1.00
12
12
  -> decimals 2
13
13
 
@@ -42,7 +42,7 @@ The `Response` carries every rule's value (or `veto` if no result could be compu
42
42
  - **Deterministic.** `(spec, data, effective_date) → result`. No DB, no clock, no ambient state. Same inputs → same outputs, every time.
43
43
  - **Explainable.** The `Response` tells you which rules contributed and why; pair it with the [CLI](https://github.com/lemma/lemma) for a full reasoning trace.
44
44
  - **Time-aware.** Multiple versions of the same spec coexist. Pass an `effective` date and the engine resolves the version in force on that day.
45
- - **Statically checked.** Type errors, missing data, cycles, scale-family mismatches - all caught at `load()` time. Bad specs never reach `run()`.
45
+ - **Statically checked.** Type errors, missing data, cycles, quantity-family mismatches - all caught at `load()` time. Bad specs never reach `run()`.
46
46
  - **Runs anywhere V8 does.** ~2 MB WASM, no native binary, no postinstall script.
47
47
  - **Editor in a tab.** Includes an in-process language server and a Monaco adapter, so you can build a real Lemma editor experience client-side - diagnostics, completion, formatting... even without setting up a server.
48
48
 
@@ -114,7 +114,8 @@ A pre-wired Monaco adapter ships at `@lemmabase/lemma-engine/monaco`.
114
114
  | `load(code, attribute?)` | Parse and validate a `.lemma` spec set. Resolves on success; rejects with `EngineError[]`. |
115
115
  | `load_batch(sources, dependency?)` | Load many sources in one planning pass (see `lemma.d.ts`). |
116
116
  | `fetch(name)` | Download registry source only; resolves with `{ source, id }`. Does not load. Rejects with `EngineError[]`. |
117
- | `list()` | JSON array of `ResolvedRepository`: each has `repository` and `specs` (spec sets). Each set has `name`, `repository`, and `specs` temporal versions as full `LemmaSpec` objects (`effective_from`, `start_line`, `source_type`, …). |
117
+ | `list()` | JSON array of `ResolvedRepository`: each has `repository` and `specs` (spec sets). Always includes embedded `lemma` / `spec si`. |
118
+ | `format_repository(repo)` | Canonical Lemma source for a loaded repository, formatted from the in-engine AST. Use `"lemma"` for the embedded SI stdlib. |
118
119
  | `schema(repo, name, effective?)` | `SpecSchema`; `repo` null for workspace. |
119
120
  | `run(repo, name, ruleNames, data, effective?)` | Evaluate. `rules: []` runs everything; pass an array to filter. Returns a `Response`. |
120
121
  | `format(code, attribute?)` | Canonical formatting; throws `EngineError` on parse error. |
@@ -6,7 +6,7 @@
6
6
  * *This API requires the following crate features to be activated: `ReadableStreamType`*
7
7
  */
8
8
 
9
- type ReadableStreamType = "bytes";
9
+ export type ReadableStreamType = "bytes";
10
10
 
11
11
  export class Engine {
12
12
  free(): void;
@@ -20,6 +20,10 @@ export class Engine {
20
20
  * Returns formatted source string on success; throws with error message on failure.
21
21
  */
22
22
  format(code: string, attribute?: string | null): any;
23
+ /**
24
+ * Canonical Lemma source for `repository`, formatted from the in-engine AST (e.g. `"lemma"`).
25
+ */
26
+ format_repository(repository: string): string;
23
27
  invert(_spec_name: string, _rule_name: string, _target_json: string, _provided_values_json: string): any;
24
28
  /**
25
29
  * Same data as [`Engine::list`]: grouped [`ResolvedRepository`] JSON without planning.
@@ -52,7 +56,7 @@ export class Engine {
52
56
  * `repository`: repository qualifier (`@org/pkg`), or `null`/empty for workspace (same as
53
57
  * [`Engine::run`] `repo: None`).
54
58
  */
55
- run(repository: string | null | undefined, spec: string, rule_names: any, data_values: any, effective?: string | null): any;
59
+ run(repository: string | null | undefined, spec: string, rule_names: any, data_values: any, rule_result_units: any, effective?: string | null): any;
56
60
  /**
57
61
  * Planning schema for the spec ([`crate::planning::execution_plan::SpecSchema`]). Throws on error.
58
62
  *
@@ -124,17 +128,18 @@ export interface InitOutput {
124
128
  readonly __wbg_engine_free: (a: number, b: number) => void;
125
129
  readonly wasmengine_fetch: (a: number, b: number, c: number) => number;
126
130
  readonly wasmengine_format: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
131
+ readonly wasmengine_format_repository: (a: number, b: number, c: number, d: number) => void;
127
132
  readonly wasmengine_invert: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
128
133
  readonly wasmengine_list: (a: number, b: number) => void;
129
134
  readonly wasmengine_load: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
130
135
  readonly wasmengine_load_batch: (a: number, b: number, c: number, d: number, e: number) => void;
131
136
  readonly wasmengine_new: () => number;
132
137
  readonly wasmengine_repositories: (a: number, b: number) => void;
133
- readonly wasmengine_run: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
138
+ readonly wasmengine_run: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void;
134
139
  readonly wasmengine_schema: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
135
- readonly __wasm_bindgen_func_elem_10830: (a: number, b: number, c: number, d: number) => void;
136
- readonly __wasm_bindgen_func_elem_2759: (a: number, b: number, c: number, d: number) => void;
137
- readonly __wasm_bindgen_func_elem_10848: (a: number, b: number, c: number, d: number) => void;
140
+ readonly __wasm_bindgen_func_elem_11795: (a: number, b: number, c: number, d: number) => void;
141
+ readonly __wasm_bindgen_func_elem_2721: (a: number, b: number, c: number, d: number) => void;
142
+ readonly __wasm_bindgen_func_elem_11803: (a: number, b: number, c: number, d: number) => void;
138
143
  readonly __wbindgen_export: (a: number, b: number) => number;
139
144
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
140
145
  readonly __wbindgen_export3: (a: number) => void;