lawspec 0.9.0 → 0.10.0
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/API-MIGRATION.md +78 -2
- package/LANGUAGE.md +10 -7
- package/NATIVE-BINDINGS.md +1046 -0
- package/PRIMITIVES.md +1 -1
- package/README.md +73 -23
- package/REFINEMENTS.md +1 -1
- package/RELEASE-0.10.md +60 -0
- package/api.mjs +23 -3
- package/bin/lawspec.mjs +17 -4
- package/build.json +56 -36
- package/core.wasm +0 -0
- package/examples/native-payments/go/example/payments/domain.go +38 -0
- package/examples/native-payments/go/example/payments/native_generators_test.go +13 -0
- package/examples/native-payments/go/lawspec.json +136 -0
- package/examples/native-payments/haskell/lawspec.json +149 -0
- package/examples/native-payments/haskell/src/PaymentsDomain.hs +21 -0
- package/examples/native-payments/haskell/test/PaymentGenerators.hs +12 -0
- package/examples/native-payments/java/lawspec.json +165 -0
- package/examples/native-payments/java/src/main/java/domain/PaymentsDomain.java +32 -0
- package/examples/native-payments/java/src/test/java/domain/PaymentGenerators.java +16 -0
- package/examples/native-payments/javascript/lawspec.json +149 -0
- package/examples/native-payments/javascript/src/payments_domain.mjs +44 -0
- package/examples/native-payments/javascript/test/lawspec_generators.mjs +6 -0
- package/examples/native-payments/kotlin/lawspec.json +165 -0
- package/examples/native-payments/kotlin/src/main/kotlin/domain/PaymentsDomain.kt +17 -0
- package/examples/native-payments/kotlin/src/test/kotlin/domain/PaymentGenerators.kt +12 -0
- package/examples/native-payments/python/lawspec.json +149 -0
- package/examples/native-payments/python/src/payments_domain.py +60 -0
- package/examples/native-payments/python/tests/lawspec_generators.py +15 -0
- package/examples/native-payments/rust/lawspec.json +167 -0
- package/examples/native-payments/rust/src/domain.rs +37 -0
- package/examples/native-payments/rust/src/lib.rs +2 -0
- package/examples/native-payments/rust/tests/support/lawspec_generators.rs +11 -0
- package/examples/native-payments/typescript/lawspec.json +149 -0
- package/examples/native-payments/typescript/src/payments_domain.ts +42 -0
- package/examples/native-payments/typescript/test/lawspec_generators.ts +8 -0
- package/examples/specs/payments.lawspec +76 -0
- package/examples-command.mjs +5 -0
- package/files.mjs +6 -6
- package/index.d.ts +53 -2
- package/native-examples.mjs +81 -0
- package/package.json +2 -2
package/PRIMITIVES.md
CHANGED
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**State the law once. Check it everywhere.**
|
|
4
4
|
|
|
5
|
-
LawSpec 0.
|
|
5
|
+
LawSpec 0.10 compiles reusable laws into native property tests, executable examples,
|
|
6
6
|
and implementation adapters. The compiler is Haskell, distributed as prebuilt
|
|
7
7
|
WebAssembly with a Node CLI and an asynchronous, typed JavaScript API.
|
|
8
8
|
|
|
@@ -36,12 +36,27 @@ Compiler API consumers should read the [schema v3 migration guide](API-MIGRATION
|
|
|
36
36
|
Scalar values use tagged, lossless encodings; generated runtime placement is
|
|
37
37
|
separate from artifact ownership. Java 25+ and Python 3.13+ baselines are unchanged.
|
|
38
38
|
|
|
39
|
+
## Native domain bindings in 0.10
|
|
40
|
+
|
|
41
|
+
LawSpec 0.10 adds configuration for existing application products and sums,
|
|
42
|
+
function bindings, checked conversion hooks, and native property-generator
|
|
43
|
+
factories on all eight targets. Generators retain their framework's shrinkers;
|
|
44
|
+
explicit examples, boundaries, and finite-domain checks remain independent.
|
|
45
|
+
See the [native-binding reference and acceptance status](NATIVE-BINDINGS.md),
|
|
46
|
+
the [release notes](RELEASE-0.10.md), and
|
|
47
|
+
[schema 4 migration notes](API-MIGRATION.md#schema-4-native-bindings).
|
|
48
|
+
Existing specifications without bindings retain their behavior.
|
|
49
|
+
|
|
39
50
|
## Install and try it
|
|
40
51
|
|
|
52
|
+
LawSpec has its own [syntax-highlighting grammar and VS Code extension](editors/vscode/README.md)
|
|
53
|
+
for keywords, types, refinements, literals, and law names. GitHub needs upstream Linguist
|
|
54
|
+
support to use it; GitHub currently uses the Haskell fallback.
|
|
55
|
+
|
|
41
56
|
Install [LawSpec from npm](https://www.npmjs.com/package/lawspec):
|
|
42
57
|
|
|
43
58
|
```sh
|
|
44
|
-
npm install --save-dev lawspec@0.
|
|
59
|
+
npm install --save-dev lawspec@0.10.0
|
|
45
60
|
npx lawspec --version
|
|
46
61
|
```
|
|
47
62
|
|
|
@@ -55,8 +70,8 @@ local dependencies so LawSpec can create its `package.json` and test script:
|
|
|
55
70
|
```sh
|
|
56
71
|
mkdir lawspec-example
|
|
57
72
|
cd lawspec-example
|
|
58
|
-
npm exec --package=lawspec@0.
|
|
59
|
-
npm install --save-dev lawspec@0.
|
|
73
|
+
npm exec --package=lawspec@0.10.0 -- lawspec init --target javascript
|
|
74
|
+
npm install --save-dev lawspec@0.10.0
|
|
60
75
|
npx lawspec check
|
|
61
76
|
npx lawspec explain 'example.atoi_codec::itoa and then atoi yields a'
|
|
62
77
|
npx lawspec doctor
|
|
@@ -192,11 +207,13 @@ Reusable laws can declare typed unary function parameters and `requires Eq a`, n
|
|
|
192
207
|
[parameterized refinements and executable contracts](REFINEMENTS.md).
|
|
193
208
|
Definitions support law application, function application/composition, universal
|
|
194
209
|
quantification, `implies`, Boolean predicates, scalar literals, and equality.
|
|
195
|
-
Function signatures and quantified inputs support the [scalar catalog](PRIMITIVES.md)
|
|
196
|
-
including mixed and multiple inputs.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
210
|
+
Function signatures and quantified inputs support the [scalar catalog](PRIMITIVES.md)
|
|
211
|
+
and [structural types](LANGUAGE.md), including mixed and multiple inputs.
|
|
212
|
+
Generic variables are supported in reusable laws. Scalar and structural values
|
|
213
|
+
can also be intermediate or compared results. Functions are synchronous and
|
|
214
|
+
support curried signatures with any positive number of arguments. Text literals
|
|
215
|
+
are double-quoted, with escapes such as `\"`, `\\`, `\n`, and `\t`; examples must
|
|
216
|
+
bind each input to a concrete value of its declared type.
|
|
200
217
|
Text values contain Unicode scalar values; surrogate code points are rejected.
|
|
201
218
|
|
|
202
219
|
Examples refer to the expanded input names, including names inherited from the
|
|
@@ -206,9 +223,10 @@ produce literal braces. Law blocks use this order:
|
|
|
206
223
|
definition, optional description, optional rationale, examples, optional references.
|
|
207
224
|
`--` starts a line comment. Names that cannot be emitted portably are diagnosed.
|
|
208
225
|
|
|
209
|
-
|
|
210
|
-
prelude, async functions
|
|
211
|
-
|
|
226
|
+
Collections beyond `List`, external law packages, cross-unit imports beyond the
|
|
227
|
+
prelude, async functions and browser hosting remain outside the language.
|
|
228
|
+
Direct existing-symbol bindings are part of LawSpec 0.10 described
|
|
229
|
+
above; the published 0.9 release uses implementation adapters.
|
|
212
230
|
|
|
213
231
|
## Algebra and currying (0.6)
|
|
214
232
|
|
|
@@ -263,7 +281,7 @@ reusable laws accept these curried functions, their partial applications, and
|
|
|
263
281
|
scalar parameters. Quantified test inputs remain scalar.
|
|
264
282
|
|
|
265
283
|
The prelude defines the following laws. Every row has an executable example in
|
|
266
|
-
[algebra.lawspec](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
284
|
+
[algebra.lawspec](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/algebra.lawspec), including both sides of every
|
|
267
285
|
combined law. `f` and `g` are binary operations, `inverse` is unary, and `e` and
|
|
268
286
|
`zero` are scalar parameters. All these laws require equality of the element type.
|
|
269
287
|
|
|
@@ -331,7 +349,7 @@ their entire consequence. Every conjunct is type-checked and emitted. As with
|
|
|
331
349
|
existing assertions, the first failure stops that individual test. `and` is now
|
|
332
350
|
a reserved word.
|
|
333
351
|
|
|
334
|
-
[Currying examples](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
352
|
+
[Currying examples](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/currying.lawspec) demonstrate a four-argument
|
|
335
353
|
function partially applied twice, a formatter with four heterogeneous arguments,
|
|
336
354
|
and composition after partial application. Each example states its exact outputs.
|
|
337
355
|
Run `node npm/bin/lawspec.mjs examples` after rebuilding to inspect all nine units
|
|
@@ -383,7 +401,7 @@ law `valid ports round trip` is
|
|
|
383
401
|
end
|
|
384
402
|
```
|
|
385
403
|
|
|
386
|
-
The [complete port example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
404
|
+
The [complete port example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/parse_port.lawspec)
|
|
387
405
|
defines valid ports as 1–65535, and covers both endpoints, ordinary ports, zero,
|
|
388
406
|
negative values, and 65536. All explicit `expect` assertions run regardless of
|
|
389
407
|
the law's condition. A false condition skips only the consequence: invalid ports
|
|
@@ -401,7 +419,7 @@ The prelude includes `satisfies predicate` (the predicate holds for every input)
|
|
|
401
419
|
and `left inverse when predicate parse render` (the guarded round trip above).
|
|
402
420
|
These reusable laws preserve the condition and its lexical bindings when expanded.
|
|
403
421
|
`equivalent` can also compare two predicates, since `Bool` supports equality.
|
|
404
|
-
The [Boolean flags example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
422
|
+
The [Boolean flags example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/boolean_flags.lawspec)
|
|
405
423
|
checks that flipping twice restores both `false` and `true`; all targets generate
|
|
406
424
|
Boolean property inputs and explicit tests for both Boolean boundary values. Java caps Boolean-only JetCheck runs at the number of
|
|
407
425
|
possible input combinations (up to 100), avoiding generator exhaustion.
|
|
@@ -480,7 +498,7 @@ This expands to `for all (x :: Int32) . render (x) = referenceRender (x)`.
|
|
|
480
498
|
The example inherits the input name `x` from the prelude. Both functions are
|
|
481
499
|
user-owned adapter functions; either may delegate to your existing code.
|
|
482
500
|
|
|
483
|
-
[The complete example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
501
|
+
[The complete example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/equivalent.lawspec) compares decimal
|
|
484
502
|
renderers and two implementations that clamp negative integers to zero. For
|
|
485
503
|
JavaScript, their adapters can be:
|
|
486
504
|
|
|
@@ -517,7 +535,7 @@ law `normalizers agree` is
|
|
|
517
535
|
end
|
|
518
536
|
```
|
|
519
537
|
|
|
520
|
-
The [slug example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
538
|
+
The [slug example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/slug.lawspec)
|
|
521
539
|
compares two implementations of ASCII-space replacement. It includes empty,
|
|
522
540
|
Unicode and escaped text. Each target uses its native string generator:
|
|
523
541
|
JetCheck `Generator.stringsOf(Generator.asciiPrintableChars())`, Hypothesis `st.text()`, fast-check `fc.string()`,
|
|
@@ -544,7 +562,7 @@ law `canonicalization reaches a fixed point` is
|
|
|
544
562
|
end
|
|
545
563
|
```
|
|
546
564
|
|
|
547
|
-
The [canonical URL example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
565
|
+
The [canonical URL example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/canonical_url.lawspec)
|
|
548
566
|
uses removal of **all trailing slashes** as a small fixed-point demonstration,
|
|
549
567
|
not a complete URL canonicalization algorithm. For JavaScript:
|
|
550
568
|
|
|
@@ -553,13 +571,31 @@ export const canonicalize = value => value.replace(/\/+$/, "");
|
|
|
553
571
|
```
|
|
554
572
|
|
|
555
573
|
Removing just one trailing slash fails the supplied repeated-slash example.
|
|
556
|
-
The [mixed-input example](https://github.com/brain-fuel/lawspec/blob/v0.
|
|
574
|
+
The [mixed-input example](https://github.com/brain-fuel/lawspec/blob/v0.10.0/examples/specs/mixed_inputs.lawspec)
|
|
557
575
|
shows `Text` and `Int32` in the same quantified property and executable example.
|
|
558
|
-
The JavaScript API represents
|
|
559
|
-
|
|
576
|
+
The JavaScript API represents example bindings as typed records whose values use
|
|
577
|
+
`DataValue`: lossless tagged scalar payloads or structural constructors. Expected results are
|
|
578
|
+
typed expressions inside `Assertion` trees, not untyped JavaScript primitives.
|
|
579
|
+
See the [API migration guide](API-MIGRATION.md) for their wire representation.
|
|
560
580
|
|
|
561
581
|
## Generate all example artifacts
|
|
562
582
|
|
|
583
|
+
To use native domain bindings, export the runnable payment
|
|
584
|
+
example (omit `--target` to export all eight languages):
|
|
585
|
+
|
|
586
|
+
```sh
|
|
587
|
+
lawspec examples --example payments --target rust --output native_payments
|
|
588
|
+
cd native_payments/rust
|
|
589
|
+
# Install the dependencies listed in README.md, then:
|
|
590
|
+
lawspec check
|
|
591
|
+
lawspec generate
|
|
592
|
+
cargo test
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
These projects include application-owned types, native generators, binding
|
|
596
|
+
configuration, and build files. Re-exporting preserves edits and leaves the
|
|
597
|
+
compiler's generation manifest separate from the example export manifest.
|
|
598
|
+
|
|
563
599
|
```sh
|
|
564
600
|
npx lawspec examples
|
|
565
601
|
# Or select a target and a relative output directory:
|
|
@@ -618,7 +654,7 @@ by the JS shim.
|
|
|
618
654
|
## Build and verify
|
|
619
655
|
|
|
620
656
|
For contributors working from a repository checkout, build a local archive with
|
|
621
|
-
`npm pack ./npm` and install it with `npm install --save-dev ./lawspec-0.
|
|
657
|
+
`npm pack ./npm` and install it with `npm install --save-dev ./lawspec-0.10.0.tgz`.
|
|
622
658
|
The package payload lives in `npm/`.
|
|
623
659
|
|
|
624
660
|
```sh
|
|
@@ -657,6 +693,20 @@ unchanged. Arguments select individual targets. `LAWSPEC_PYTHON=3.14` selects th
|
|
|
657
693
|
additional Python reference environment. CI also exercises Node 22/24/26 and packs
|
|
658
694
|
and installs the npm archive. Registry publication is a separate release action.
|
|
659
695
|
|
|
696
|
+
The native-binding acceptance command uses the installed npm archive, public CLI,
|
|
697
|
+
and the selected target's normal test command:
|
|
698
|
+
|
|
699
|
+
```sh
|
|
700
|
+
node tools/native-example-integration.mjs rust
|
|
701
|
+
LAWSPEC_MACHINE_BITS=32 LAWSPEC_MINIFY=1 node tools/native-example-integration.mjs rust
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
Replace `rust` with any supported target. It exports the payment project, verifies
|
|
705
|
+
correct behavior, rejects an incorrect fee, and checks regeneration. Per-command
|
|
706
|
+
logs live in `.artifacts/native-example-integration/`. See the
|
|
707
|
+
[acceptance reference](NATIVE-BINDINGS.md) for dependency overrides and remaining
|
|
708
|
+
verification gates.
|
|
709
|
+
|
|
660
710
|
|
|
661
711
|
Refinement predicates can depend on earlier inputs. Generated tests backtrack from
|
|
662
712
|
impossible prefixes, preserve the domain during shrinking, and validate function
|
package/REFINEMENTS.md
CHANGED
package/RELEASE-0.10.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# LawSpec 0.10.0
|
|
2
|
+
|
|
3
|
+
## Existing application models
|
|
4
|
+
|
|
5
|
+
Native bindings connect LawSpec products and sums to existing application types
|
|
6
|
+
on Java, Python, JavaScript, TypeScript, Go, Haskell, Kotlin and Rust. Configure
|
|
7
|
+
constructor and field mappings, bind adapter declarations to existing functions,
|
|
8
|
+
or supply paired conversion hooks for representations requiring custom code.
|
|
9
|
+
Bindings resolve against typed declaration identities; they do not change the
|
|
10
|
+
meaning of arithmetic, equality, definitions or refinements.
|
|
11
|
+
|
|
12
|
+
Checked bridges compose through generic and recursive types and the built-in
|
|
13
|
+
containers. They preserve exact numeric values, Symbol identity and distinct
|
|
14
|
+
absence states. Invalid native inputs, results, generator samples and shrink
|
|
15
|
+
candidates fail with context.
|
|
16
|
+
|
|
17
|
+
## Native generators
|
|
18
|
+
|
|
19
|
+
Factories return their framework's generator: JetCheck, Hypothesis, fast-check,
|
|
20
|
+
Rapid, Hedgehog, Kotest or Proptest. Generic factories receive child generators.
|
|
21
|
+
Composition retains native shrinking. Explicit examples, deterministic boundaries
|
|
22
|
+
and finite-domain enumeration still run when the factory's distribution excludes
|
|
23
|
+
those values.
|
|
24
|
+
|
|
25
|
+
A factory can ignore an uninhabited parameter, as in `Phantom Empty`. Requesting a
|
|
26
|
+
value from that parameter fails generation; it cannot turn a property into a
|
|
27
|
+
vacuous success. Finite inhabited containers such as `List Empty` still enumerate.
|
|
28
|
+
|
|
29
|
+
Optional `stub: true` generator bindings create user-owned implementation files.
|
|
30
|
+
Regeneration preserves edits and reports changed factory signatures for review.
|
|
31
|
+
|
|
32
|
+
## API and migration
|
|
33
|
+
|
|
34
|
+
Native binding requests negotiate schema 4. Schema 3 remains supported for
|
|
35
|
+
specifications without bindings. Structured native references and strict
|
|
36
|
+
configuration validation prevent older compilers from silently ignoring mappings.
|
|
37
|
+
Go additionally supports explicit import aliases; Rust binds tests to the
|
|
38
|
+
application library's type identities.
|
|
39
|
+
|
|
40
|
+
Existing adapter files cannot be overwritten by adopting a binding. Move their
|
|
41
|
+
implementations into the application module and save the old adapters before
|
|
42
|
+
generation. Generated source bridges, test helpers and user-owned application
|
|
43
|
+
files retain separate placement and ownership. See the
|
|
44
|
+
[migration guide](API-MIGRATION.md#schema-4-native-bindings) and
|
|
45
|
+
[ownership instructions](NATIVE-BINDINGS.md#ownership-regeneration-and-migration).
|
|
46
|
+
|
|
47
|
+
## Runnable payment projects
|
|
48
|
+
|
|
49
|
+
`lawspec examples --example payments` exports a project for every target; use
|
|
50
|
+
`--target rust` or another language to select one. Each project includes an
|
|
51
|
+
application model, native generator, configuration, build files and instructions.
|
|
52
|
+
The shared specification checks exact fees, currency preservation, sum payloads,
|
|
53
|
+
ordered archives, duplicates and absence. Re-exporting preserves application
|
|
54
|
+
edits and the separate compiler generation manifest.
|
|
55
|
+
|
|
56
|
+
Both 32-bit and 64-bit logical machine profiles and readable/compact output are
|
|
57
|
+
covered by the acceptance matrices. Java 25+, Python 3.13+ and the other published
|
|
58
|
+
toolchain baselines remain unchanged. Python output follows PEP 8.
|
|
59
|
+
|
|
60
|
+
GADTs, dependent indices and cross-unit packages remain subsequent work.
|
package/api.mjs
CHANGED
|
@@ -4,9 +4,29 @@ import {loadCore} from './launcher.mjs';
|
|
|
4
4
|
export async function createCompiler() {
|
|
5
5
|
const call = await loadCore();
|
|
6
6
|
return {
|
|
7
|
-
check: (input) =>
|
|
8
|
-
|
|
7
|
+
check: (input) =>
|
|
8
|
+
call(
|
|
9
|
+
{
|
|
10
|
+
schemaVersion: input.nativeBindings === undefined ? 3 : 4,
|
|
11
|
+
...input,
|
|
12
|
+
method: 'check',
|
|
13
|
+
}
|
|
14
|
+
),
|
|
15
|
+
expand: (input) =>
|
|
16
|
+
call(
|
|
17
|
+
{
|
|
18
|
+
schemaVersion: input.nativeBindings === undefined ? 3 : 4,
|
|
19
|
+
...input,
|
|
20
|
+
method: 'expand',
|
|
21
|
+
}
|
|
22
|
+
),
|
|
9
23
|
planGeneration: (input) =>
|
|
10
|
-
call(
|
|
24
|
+
call(
|
|
25
|
+
{
|
|
26
|
+
schemaVersion: input.nativeBindings === undefined ? 3 : 4,
|
|
27
|
+
...input,
|
|
28
|
+
method: 'planGeneration',
|
|
29
|
+
}
|
|
30
|
+
),
|
|
11
31
|
};
|
|
12
32
|
}
|
package/bin/lawspec.mjs
CHANGED
|
@@ -19,7 +19,7 @@ const options = {};
|
|
|
19
19
|
const positional = [];
|
|
20
20
|
for (let i = 0; i < args.length; i++) {
|
|
21
21
|
const arg = args[i];
|
|
22
|
-
if (["--target", "--project", "--config", "--output", "--machine-bits"].includes(arg)) {
|
|
22
|
+
if (["--target", "--project", "--config", "--output", "--machine-bits", "--example"].includes(arg)) {
|
|
23
23
|
if (!args[i + 1] || args[i + 1].startsWith("--"))
|
|
24
24
|
throw new Error(`Missing value for ${arg}`);
|
|
25
25
|
options[arg.slice(2)] = args[++i];
|
|
@@ -173,13 +173,13 @@ async function main() {
|
|
|
173
173
|
}
|
|
174
174
|
if (!verb || ["help", "--help", "-h"].includes(verb)) {
|
|
175
175
|
output(
|
|
176
|
-
"LawSpec 0.
|
|
176
|
+
"LawSpec 0.10.0\nUsage: lawspec init --target <language> [--project <directory>] [--minify]\n lawspec check | doctor | explain <unit>::<law> | generate\n lawspec examples [--example payments] [--target <language>] [--output <directory>]\nOptions: --config <path>, --target <language>, --machine-bits <32|64>, --json\nGeneration: --dry-run, --check, --minify\nTargets: " +
|
|
177
177
|
targets.join(", "),
|
|
178
178
|
);
|
|
179
179
|
return;
|
|
180
180
|
}
|
|
181
181
|
if (verb === "--version") {
|
|
182
|
-
output("0.
|
|
182
|
+
output("0.10.0");
|
|
183
183
|
return;
|
|
184
184
|
}
|
|
185
185
|
if (positional.length > (verb === "explain" ? 1 : 0))
|
|
@@ -191,8 +191,15 @@ async function main() {
|
|
|
191
191
|
options["dry-run"] ||
|
|
192
192
|
options.check
|
|
193
193
|
)
|
|
194
|
-
throw new Error("examples supports --target, --output, --json and --minify only");
|
|
194
|
+
throw new Error("examples supports --example, --target, --output, --machine-bits, --json and --minify only");
|
|
195
195
|
const result = await generateExamples(options);
|
|
196
|
+
if (options.example) {
|
|
197
|
+
output(options.json ? result : result.map(r =>
|
|
198
|
+
`${r.target}: payment project in ${r.directory}; ${r.preservedAdapters.length} user files preserved.` +
|
|
199
|
+
(r.adapterUpdates.length ? `\nReview changed example files: ${r.adapterUpdates.map(a => a.path).join(", ")}` : "")
|
|
200
|
+
).join("\n") + "\nOpen each project's README.md, run lawspec generate, then its native test command.");
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
196
203
|
output(
|
|
197
204
|
options.json
|
|
198
205
|
? result
|
|
@@ -207,6 +214,7 @@ async function main() {
|
|
|
207
214
|
return;
|
|
208
215
|
}
|
|
209
216
|
if (options.output) throw new Error("--output is only supported by examples");
|
|
217
|
+
if (options.example) throw new Error("--example is only supported by examples");
|
|
210
218
|
if (options.minify && !["init", "generate", "examples"].includes(verb))
|
|
211
219
|
throw new Error("--minify applies to init, generate and examples");
|
|
212
220
|
if (verb === "init") return init();
|
|
@@ -251,6 +259,10 @@ async function main() {
|
|
|
251
259
|
const compiler = await createCompiler();
|
|
252
260
|
if (verb === "check") {
|
|
253
261
|
const result = diagnostics(await compiler.check(input));
|
|
262
|
+
for (const target of selected) {
|
|
263
|
+
if (target.nativeBindings !== undefined)
|
|
264
|
+
diagnostics(await compiler.check({...input, nativeBindings: target.nativeBindings}));
|
|
265
|
+
}
|
|
254
266
|
output(
|
|
255
267
|
options.json
|
|
256
268
|
? result
|
|
@@ -289,6 +301,7 @@ async function main() {
|
|
|
289
301
|
target: target.language,
|
|
290
302
|
sourceDir: target.sourceDir,
|
|
291
303
|
testDir: target.testDir,
|
|
304
|
+
nativeBindings: target.nativeBindings,
|
|
292
305
|
minify: options.minify === true,
|
|
293
306
|
}),
|
|
294
307
|
).files,
|
package/build.json
CHANGED
|
@@ -64,12 +64,14 @@
|
|
|
64
64
|
"src/LawSpec/GoData.hs",
|
|
65
65
|
"src/LawSpec/GoDefinitions.hs",
|
|
66
66
|
"src/LawSpec/GoExpr.hs",
|
|
67
|
+
"src/LawSpec/GoNativeBinding.hs",
|
|
67
68
|
"src/LawSpec/GoProperties.hs",
|
|
68
69
|
"src/LawSpec/GoTestHelpers.hs",
|
|
69
70
|
"src/LawSpec/GoTypeRefs.hs",
|
|
70
71
|
"src/LawSpec/HaskellData.hs",
|
|
71
72
|
"src/LawSpec/HaskellDefinitions.hs",
|
|
72
73
|
"src/LawSpec/HaskellExpr.hs",
|
|
74
|
+
"src/LawSpec/HaskellNativeBinding.hs",
|
|
73
75
|
"src/LawSpec/HaskellProperties.hs",
|
|
74
76
|
"src/LawSpec/HaskellTestHelpers.hs",
|
|
75
77
|
"src/LawSpec/HaskellTypeRefs.hs",
|
|
@@ -77,14 +79,18 @@
|
|
|
77
79
|
"src/LawSpec/JavaData.hs",
|
|
78
80
|
"src/LawSpec/JavaDefinitions.hs",
|
|
79
81
|
"src/LawSpec/JavaExpr.hs",
|
|
82
|
+
"src/LawSpec/JavaNativeBinding.hs",
|
|
80
83
|
"src/LawSpec/JavaProperties.hs",
|
|
81
84
|
"src/LawSpec/JavaTestHelpers.hs",
|
|
82
85
|
"src/LawSpec/KotlinData.hs",
|
|
83
86
|
"src/LawSpec/KotlinDefinitions.hs",
|
|
84
87
|
"src/LawSpec/KotlinExpr.hs",
|
|
88
|
+
"src/LawSpec/KotlinNativeBinding.hs",
|
|
85
89
|
"src/LawSpec/KotlinProperties.hs",
|
|
86
90
|
"src/LawSpec/KotlinTestHelpers.hs",
|
|
87
91
|
"src/LawSpec/Model.hs",
|
|
92
|
+
"src/LawSpec/NativeBinding.hs",
|
|
93
|
+
"src/LawSpec/NativeRequest.hs",
|
|
88
94
|
"src/LawSpec/Parser.hs",
|
|
89
95
|
"src/LawSpec/PortableGenerator.hs",
|
|
90
96
|
"src/LawSpec/PortableTestHelpers.hs",
|
|
@@ -93,6 +99,7 @@
|
|
|
93
99
|
"src/LawSpec/PythonData.hs",
|
|
94
100
|
"src/LawSpec/PythonDefinitions.hs",
|
|
95
101
|
"src/LawSpec/PythonExpr.hs",
|
|
102
|
+
"src/LawSpec/PythonNativeBinding.hs",
|
|
96
103
|
"src/LawSpec/PythonTypes.hs",
|
|
97
104
|
"src/LawSpec/Refinement.hs",
|
|
98
105
|
"src/LawSpec/RuntimeSources.hs",
|
|
@@ -100,12 +107,15 @@
|
|
|
100
107
|
"src/LawSpec/RustDefinitions.hs",
|
|
101
108
|
"src/LawSpec/RustEmit.hs",
|
|
102
109
|
"src/LawSpec/RustExpr.hs",
|
|
110
|
+
"src/LawSpec/RustNativeBinding.hs",
|
|
111
|
+
"src/LawSpec/RustNativeGenerators.hs",
|
|
103
112
|
"src/LawSpec/Scalar.hs",
|
|
104
113
|
"src/LawSpec/SpecializeDefinitions.hs",
|
|
105
114
|
"src/LawSpec/Testing.hs",
|
|
106
115
|
"src/LawSpec/WebData.hs",
|
|
107
116
|
"src/LawSpec/WebDefinitions.hs",
|
|
108
117
|
"src/LawSpec/WebExpr.hs",
|
|
118
|
+
"src/LawSpec/WebNativeBinding.hs",
|
|
109
119
|
"src/LawSpec/WebTypes.hs",
|
|
110
120
|
"stack.yaml",
|
|
111
121
|
"stack.yaml.lock",
|
|
@@ -116,34 +126,34 @@
|
|
|
116
126
|
"wasm/lawspec-wasm.cabal"
|
|
117
127
|
],
|
|
118
128
|
"digests": {
|
|
119
|
-
"lawspec.cabal": "
|
|
120
|
-
"package.yaml": "
|
|
129
|
+
"lawspec.cabal": "b38f73ab83f833725b64ae4d0df07783efbdeacf367e99e378c18dddbb864f9d",
|
|
130
|
+
"package.yaml": "c682a129e7fdec4ae5d60d229c622ad05714fd52c6d83a3c44815b232fb4459d",
|
|
121
131
|
"runtime/LawSpecCodecs.hs": "90cb1ed15d7ab664a17a054580c849408d77cfd2b2adcb4a3228b05132caeaca",
|
|
122
|
-
"runtime/LawSpecDataStrategies.hs": "
|
|
123
|
-
"runtime/LawSpecDataStrategies.java": "
|
|
132
|
+
"runtime/LawSpecDataStrategies.hs": "0b6639d200101bfc3c850278133a7f686bfc3423c81ccc7d82f161847700c914",
|
|
133
|
+
"runtime/LawSpecDataStrategies.java": "ade2e132f116d261c6e8c198c6f87515193ceda8ab83b1006627eebb72321ed1",
|
|
124
134
|
"runtime/LawSpecKotlin.kt": "0cf3b7de0406155225ccca33ee3dfdf8f0456c47d577f6be8f1265c13df838cb",
|
|
125
135
|
"runtime/LawSpecKotlinCodecs.kt": "6210f77dbbe24ba2088db48dae5415abf0993fe552fb3a57d29430807efbc297",
|
|
126
|
-
"runtime/LawSpecKotlinStrategies.kt": "
|
|
136
|
+
"runtime/LawSpecKotlinStrategies.kt": "73deed2d5d13529220147b530743a5f9bee72467e940bb357b2c3152ee6ec4ee",
|
|
127
137
|
"runtime/LawSpecRuntime.hs": "5ced6a6a86a892ae63a544d4c4a4429bf756a730ea786478d820c8070cc96402",
|
|
128
138
|
"runtime/LawSpecRuntime.java": "c7b7cfc9b7c22b082edee14a52d95ef80ebe01ee56988c22702f629ea24b8a4f",
|
|
129
139
|
"runtime/LawSpecSchema.hs": "9912d9f525426a598f9c03c29cfc7bacf80218f73c9d537d8c1257bae245aa33",
|
|
130
140
|
"runtime/LawSpecSchema.java": "885f5f17a9ea1bdb86915dc184aea25b72c3062d6ddb9605530310540b1cc166",
|
|
131
141
|
"runtime/LawSpecStrategies.kt": "569f7775c0ac44765d05567cbf62d026558ac193c080ca71681ec6ee49c21794",
|
|
132
|
-
"runtime/lawspec_codecs.go": "
|
|
133
|
-
"runtime/lawspec_data_strategies.go": "
|
|
134
|
-
"runtime/lawspec_data_strategies.mjs": "
|
|
135
|
-
"runtime/lawspec_data_strategies.py": "
|
|
142
|
+
"runtime/lawspec_codecs.go": "b3024fe60b3b66df9ebffe995ab5bb0294a609a82c611d54957e092eac29f2f5",
|
|
143
|
+
"runtime/lawspec_data_strategies.go": "cbddf44fbd222ad39bda3278dd433c6592a90c1808a5c157e02d8be931244c9a",
|
|
144
|
+
"runtime/lawspec_data_strategies.mjs": "f2e04a8d1b418afa6b8b6a993e222bdd5d84fca800e7f5071157b7888af0907c",
|
|
145
|
+
"runtime/lawspec_data_strategies.py": "685212fa4ecdde0139336d9fb9a6b8aca15ed5d3eab02c33b4cca4b39ad21eb5",
|
|
136
146
|
"runtime/lawspec_runtime.go": "af6ef660387b625b3bb5fcd57f06260c821d4f65eda158db44ad12d66e1d70f8",
|
|
137
147
|
"runtime/lawspec_runtime.mjs": "3b7877c1ee523afba30ed24cd452e2a6126d9e741c7675600e867600d7a73f46",
|
|
138
148
|
"runtime/lawspec_runtime.py": "2f780bc92762eb1115f734a36cc224ae34504929b4ff0ec506735cfa9e3ab02b",
|
|
139
149
|
"runtime/lawspec_runtime.rs": "7ae8afaad638a3d9d6973eebc7cd6daecc8012ec57f3f12ff50cca16e23e15b6",
|
|
140
150
|
"runtime/lawspec_schema.go": "bdfb6f2552bfccf56073d52f7cdbe1d784cba2d956c29762d77df7ad6bba8d67",
|
|
141
|
-
"runtime/lawspec_schema.mjs": "
|
|
142
|
-
"runtime/lawspec_schema.py": "
|
|
143
|
-
"runtime/lawspec_strategies.rs": "
|
|
144
|
-
"runtime/rust/Cargo.lock": "
|
|
145
|
-
"runtime/rust/Cargo.toml": "
|
|
146
|
-
"src/LawSpec/Api.hs": "
|
|
151
|
+
"runtime/lawspec_schema.mjs": "60eb4204461eaa2c207fc7c3394014e2a814e4383b7045c065b4dae7c7a202c2",
|
|
152
|
+
"runtime/lawspec_schema.py": "b6967ef1a33fe6a1a180d5573ec37cd8bb2079c06e961ac2eeb05f23cffcdd07",
|
|
153
|
+
"runtime/lawspec_strategies.rs": "ee2d42c4bc86bf1ccfcd3a8efc5628475829ea2551c4321e217485fca63433fa",
|
|
154
|
+
"runtime/rust/Cargo.lock": "03b17464317ee1e91281576aab67007cd8956e58a9d22665bc29045acdbbfa4e",
|
|
155
|
+
"runtime/rust/Cargo.toml": "615f3f40d2901e36b8ca5f2c105863264c93327c939a04f61469c658d352255f",
|
|
156
|
+
"src/LawSpec/Api.hs": "392f6e8c1a9ae81a95e219ac071e5b4bea03ee330d63b829036f8f54b2eda8a7",
|
|
147
157
|
"src/LawSpec/Backend.hs": "03c3b0cd62467ca677c88d29d7b12b2ab505cc0076d93d1f48fbddb0e9bcf133",
|
|
148
158
|
"src/LawSpec/Capabilities.hs": "e43d4fc3a4481fbb8aa3ff1c3f41f7e7fca5db01bfe256a30162a45d75a00c1c",
|
|
149
159
|
"src/LawSpec/Code/Doc.hs": "9e3b70f85deb1dcbce385af1d0cd4bea2dfa8a2d806d54745d4bb437406673e5",
|
|
@@ -162,12 +172,12 @@
|
|
|
162
172
|
"src/LawSpec/Core/Semantics.hs": "a9d019433e3b9731f8cd0f65ec0ccc53179824bea58247b72df26760b878c2b6",
|
|
163
173
|
"src/LawSpec/Core/Total.hs": "95d2b19ba7fbfd033295504d31f786815384003b3b4d370776860b423cf079dd",
|
|
164
174
|
"src/LawSpec/Core/Totality.hs": "8f5b5d69f4baaba45301899ef568cbe90133943c3771ba78d492424e9725e7a7",
|
|
165
|
-
"src/LawSpec/Core/Types.hs": "
|
|
175
|
+
"src/LawSpec/Core/Types.hs": "48ed1d197ce7089737895b7279f93437301fcfacff8b3a8dd98ecd7f1cb32b37",
|
|
166
176
|
"src/LawSpec/Core/Validate.hs": "0f045241215e068081d6cd7cf451f0166671bae5fffafda71a2e2320e8014c27",
|
|
167
177
|
"src/LawSpec/Core/Value.hs": "f2b2e4d82491e184d60b1217922b25c57a06cbbaecb2cb6f31174af50268fbc9",
|
|
168
|
-
"src/LawSpec/CoreEmit.hs": "
|
|
169
|
-
"src/LawSpec/CoreNativeScalarEmit.hs": "
|
|
170
|
-
"src/LawSpec/CoreScalarEmit.hs": "
|
|
178
|
+
"src/LawSpec/CoreEmit.hs": "075f06ef1be2437542967b171c535686f33ed4645f6525a93c1024a9fbf68582",
|
|
179
|
+
"src/LawSpec/CoreNativeScalarEmit.hs": "6caf801922e8969eac7926bef641d950aebf5cd32b2e4b7ce3f6f32f91f41d99",
|
|
180
|
+
"src/LawSpec/CoreScalarEmit.hs": "ea87bcf97a7be02cb4e83728b9dd4f5fa5a0c461e3f31f89e4d28242c148b43c",
|
|
171
181
|
"src/LawSpec/Data.hs": "9dbeafa120276b114dad790ec69e617f7ad0c632e3c718962f2f7faf8ca327f4",
|
|
172
182
|
"src/LawSpec/DefinitionTotality.hs": "7671b7efb0cac5d796b074d48b2c10940e5bd0b5df082b926aee694903285efa",
|
|
173
183
|
"src/LawSpec/Domain.hs": "222d15f0012ae630802238a6d7e1ee78d1e718b599f5ebb5a1ddc4e8d29d68c3",
|
|
@@ -175,31 +185,37 @@
|
|
|
175
185
|
"src/LawSpec/Emit.hs": "9f34f5765915a2a12a66a6dca647ddaef9289372956802c6d99cf0cfec447c7a",
|
|
176
186
|
"src/LawSpec/Eval.hs": "b0872ba8a6974463b32776653c2939826a6be87318c15641401f913f6b139de2",
|
|
177
187
|
"src/LawSpec/Frontend.hs": "fbf091b9c96f5b5361dbf4f65819634c0f8526ff98550d97c434c0d47af7839e",
|
|
178
|
-
"src/LawSpec/Gen.hs": "
|
|
179
|
-
"src/LawSpec/GoData.hs": "
|
|
188
|
+
"src/LawSpec/Gen.hs": "c76d00fb1f7e9ed2eed7d387f1cd86cf4d12cc57f007abb0e479043b0ed377e6",
|
|
189
|
+
"src/LawSpec/GoData.hs": "35efbfdc1079e777d4760069fa2405a9700bbabab7dc7e3c2c5e0757312ea201",
|
|
180
190
|
"src/LawSpec/GoDefinitions.hs": "09e9e4b60cfea893d35589cd18bc8a6099789d81e0f57ae5cb018bd95bd4838b",
|
|
181
191
|
"src/LawSpec/GoExpr.hs": "da3a7cc0e3d2906886dc44f6b990e72098bb351558bbb31ee335da7382fac58a",
|
|
182
|
-
"src/LawSpec/
|
|
192
|
+
"src/LawSpec/GoNativeBinding.hs": "1ad8ea4cec6187c7e6005651c0edeec69e196eb329fb958c833da7751225aa1b",
|
|
193
|
+
"src/LawSpec/GoProperties.hs": "b0b92af071b70058802627bfb971e1b64e05847f27ef0645b2d7325a3867fe1d",
|
|
183
194
|
"src/LawSpec/GoTestHelpers.hs": "dee55ee8505370e932773b8c685f4a1f380129e6f43f8806bf1e82efb99451b1",
|
|
184
195
|
"src/LawSpec/GoTypeRefs.hs": "7f239f5ac3ac8bd21c8f76c328049f7715d8562ee1382befa0a58abd4f15f726",
|
|
185
|
-
"src/LawSpec/HaskellData.hs": "
|
|
196
|
+
"src/LawSpec/HaskellData.hs": "51374f35de2b1d6c78d15597e41e6f0695fe5fdb040cbb35a7d03d23fa3a3179",
|
|
186
197
|
"src/LawSpec/HaskellDefinitions.hs": "535a8d644d5ddb98c22fa6bdf34cf2baa787aa1f5b900815c621d0d65ede0f0f",
|
|
187
198
|
"src/LawSpec/HaskellExpr.hs": "f4144cf2022ef0a3bec6d796ebe7d2f42563e9d25758b9f362cd5545b47e802b",
|
|
188
|
-
"src/LawSpec/
|
|
199
|
+
"src/LawSpec/HaskellNativeBinding.hs": "9f98aa0c8659b572bd6486a0e29c4692bc6432db8639fa74a09bbf1b771bbfa6",
|
|
200
|
+
"src/LawSpec/HaskellProperties.hs": "4a7c2aafbb3418e7e926d420d59e810a70e80b8e61a5efaad73d3282038c9d3c",
|
|
189
201
|
"src/LawSpec/HaskellTestHelpers.hs": "51e59b2abc9e85455e3c8e2c6baadb27e5d319081cb730d2ce56be5dc8053897",
|
|
190
202
|
"src/LawSpec/HaskellTypeRefs.hs": "2225b2a5e2ab3662e7202d23b24f4d6db48353b35ae28df8acd2b92fd2b97574",
|
|
191
203
|
"src/LawSpec/Inference.hs": "78285145897f03c3c4adc37acf0f490ea779bab3975fb2830628dae3a152fe38",
|
|
192
|
-
"src/LawSpec/JavaData.hs": "
|
|
204
|
+
"src/LawSpec/JavaData.hs": "177713377f7a38d69fbfd7891899357fc55782cf1d361f2e9dd5baf8725d4067",
|
|
193
205
|
"src/LawSpec/JavaDefinitions.hs": "9c0fe11bd4849af09bbe3d941d89ba609a2dabecdc1c8b09b6ddbf69671c8f92",
|
|
194
206
|
"src/LawSpec/JavaExpr.hs": "6f237b0fc1eabe2d53c160f4cb781f8b77b478383f1a77ca4ccc8f08ac0dbcd0",
|
|
195
|
-
"src/LawSpec/
|
|
207
|
+
"src/LawSpec/JavaNativeBinding.hs": "8abbae78959a5cb61b7c6ae1c9071e43d10e26c2f421766d431fa18031f87173",
|
|
208
|
+
"src/LawSpec/JavaProperties.hs": "ecc1c94bb212d214f1eb8b2897204b65390aad7be858afd8e118e71e28d46bf2",
|
|
196
209
|
"src/LawSpec/JavaTestHelpers.hs": "e6f4b9bbb7e5f07ece6ab1845e12aa661e62e8b926680b11454223fc3ec1523d",
|
|
197
|
-
"src/LawSpec/KotlinData.hs": "
|
|
210
|
+
"src/LawSpec/KotlinData.hs": "7785fc0c091e50010bce3002355f01c1d237fce05bca6a7ce6de6d207737e228",
|
|
198
211
|
"src/LawSpec/KotlinDefinitions.hs": "97d7d407d4bbdb4ce16035d607dbbcb8e3d6f5db513f2123a2c269e3dc6d2b38",
|
|
199
212
|
"src/LawSpec/KotlinExpr.hs": "20312f0774f1d0832a21a19b93c8103e2791ecd32a827d8e9c4f2b4830a996a0",
|
|
200
|
-
"src/LawSpec/
|
|
213
|
+
"src/LawSpec/KotlinNativeBinding.hs": "1aec7854758f07a4d2288de13931fbb88ef32220f85d3c84fe8233ad67b6d095",
|
|
214
|
+
"src/LawSpec/KotlinProperties.hs": "9d71af0bd05db95ab4cbd80210730c126f235d5b16dc07ca76c6230119b788c6",
|
|
201
215
|
"src/LawSpec/KotlinTestHelpers.hs": "74810d65faafc6ed4d64b1fb0596cda4186e586b7144a7441641b798795bc324",
|
|
202
216
|
"src/LawSpec/Model.hs": "1d7ceb7bd66e3d496eef89eaa86403e6896472317ca9a4be86e0c933a7cce403",
|
|
217
|
+
"src/LawSpec/NativeBinding.hs": "33959b0fd432ad4150f3b685f6438e284b801c2a59d9ef3132486a1cc7c8925a",
|
|
218
|
+
"src/LawSpec/NativeRequest.hs": "fb2dc88f42424ca520533700eab68c407a5de83807d1b0d8c976e6c4f3d65212",
|
|
203
219
|
"src/LawSpec/Parser.hs": "ad11e8f06371e98f295fae0245edceac8142320f054d0c3cb5600bc72588e17e",
|
|
204
220
|
"src/LawSpec/PortableGenerator.hs": "69d457e39f539c77fc7a4c08205e75352bbecd9dfdff031a283a39bf44b22d49",
|
|
205
221
|
"src/LawSpec/PortableTestHelpers.hs": "8ba4d87183c8c11f6ef1ce21c170127335797154f29fb97ad3429f032a167fd3",
|
|
@@ -208,19 +224,23 @@
|
|
|
208
224
|
"src/LawSpec/PythonData.hs": "07e9bb54a1515f3f4744b7b9bb43633cbdbf07b3f9e35efef511753f97e216d5",
|
|
209
225
|
"src/LawSpec/PythonDefinitions.hs": "bc7b971be97339f2d9e4962ad98100878266176aeccd2a9dfd014e2db9550bd8",
|
|
210
226
|
"src/LawSpec/PythonExpr.hs": "23d7d24b5fb4efff9cb63d38c02a93d95744ec79b4565daf1412088fc7c4ba59",
|
|
227
|
+
"src/LawSpec/PythonNativeBinding.hs": "6b7d7f34ce97fb518aef7413d3f72a3a199c2202f0c25a922d860a21c93acc62",
|
|
211
228
|
"src/LawSpec/PythonTypes.hs": "ef928bfeb4324eb6e53c99cae247cc2fa84816075d81de4589d14abaa326656a",
|
|
212
229
|
"src/LawSpec/Refinement.hs": "8058a9f7e433b4b00ef0966a9ea2be3c91ae93b591ed58a1ffcb792d316193d3",
|
|
213
|
-
"src/LawSpec/RuntimeSources.hs": "
|
|
214
|
-
"src/LawSpec/RustData.hs": "
|
|
230
|
+
"src/LawSpec/RuntimeSources.hs": "27ee0e26827a9f6fe9bdbaf29447980b0fd3289aa8350fda9996d59218718e79",
|
|
231
|
+
"src/LawSpec/RustData.hs": "8fda864335ccb5478c39f56cb714d5275edf36fcbdc2d152bbe94960b644ad98",
|
|
215
232
|
"src/LawSpec/RustDefinitions.hs": "5d0328a8b17e0cb5067f65d23f0f2cd2a96b92e4b1c3d6e22b7cb08255697177",
|
|
216
|
-
"src/LawSpec/RustEmit.hs": "
|
|
233
|
+
"src/LawSpec/RustEmit.hs": "e01be4504cde6ebfeae0327a1304e149bd49e2ef5ff96ec0cb9cf718c7041888",
|
|
217
234
|
"src/LawSpec/RustExpr.hs": "04b2ef81417b811c7b98a98acdadab4e588ca8757964a63ba8dc5936c36479e6",
|
|
235
|
+
"src/LawSpec/RustNativeBinding.hs": "9d08348da571ac335e335e48c1ad4a67108f7bca54119f5960480e97a6d1da84",
|
|
236
|
+
"src/LawSpec/RustNativeGenerators.hs": "a3b1484d9ff0008e4f961aa81d0aa51da57ec0cd7909124e80c98d56aacc8ce9",
|
|
218
237
|
"src/LawSpec/Scalar.hs": "52e61fec81a337bb5b35e9e6f501446cf0b18bffa6c6af2ddc5aeac2d6e07131",
|
|
219
238
|
"src/LawSpec/SpecializeDefinitions.hs": "08f2fe674a5e00d1be396d9edab0dd2c948b7beb12fa99f2a6aba00cbdf01e33",
|
|
220
239
|
"src/LawSpec/Testing.hs": "db1a427ac2197e447faf2a36eccfe965c58eaa0ba07bc494bf1ba24e4af43ad4",
|
|
221
|
-
"src/LawSpec/WebData.hs": "
|
|
240
|
+
"src/LawSpec/WebData.hs": "919af27be12f63f17762e0c052341ab82dcee5d45951a4fd9c66abead98d1ee0",
|
|
222
241
|
"src/LawSpec/WebDefinitions.hs": "fd985db70c778c8014b780666ac327018e05260be610fa717b8c5477ba9638b4",
|
|
223
242
|
"src/LawSpec/WebExpr.hs": "0389dcd5cf7479dd23ef034b1012de6ebd70bf1dc9e3d90981dfb0ba2702596f",
|
|
243
|
+
"src/LawSpec/WebNativeBinding.hs": "512c224b8fbe979eac3f490bb035f9371097eb13399bd361c016b397f8c2c777",
|
|
224
244
|
"src/LawSpec/WebTypes.hs": "f77ffee1e0c7929964a889fb252c1c5d0977afed94664ffcb0f8770c37b98c70",
|
|
225
245
|
"stack.yaml": "20ccf4d599e355e60b7aa4f814a7cd4299fe2048616cc2e6dbdc22a7bd8cec73",
|
|
226
246
|
"stack.yaml.lock": "ae222b9c81af920c56e50fa4596fa57786e7fa5a7b461390362b2b2ff63818c7",
|
|
@@ -228,10 +248,10 @@
|
|
|
228
248
|
"wasm/app/Exports.hs": "4ecbdac8faa2449e6fc61b93c82e6278fa14374154f29b4dacf0eef433f06a47",
|
|
229
249
|
"wasm/cabal.project": "021e560afdc5eb4cb7169e7119ecb8f92c9ee170245af909c94b612941bff5cc",
|
|
230
250
|
"wasm/cabal.project.freeze": "733dbed3d2ecccb26e874fd58f136296dad772184deb1658c196b5d54a0814dc",
|
|
231
|
-
"wasm/lawspec-wasm.cabal": "
|
|
232
|
-
"npm/core.wasm": "
|
|
251
|
+
"wasm/lawspec-wasm.cabal": "3915e30a899fa1aaaa811c225965bd8b39a25bc639299ae6077587cd09020688",
|
|
252
|
+
"npm/core.wasm": "6424553b1a5df71da4f7bb54acdd09fd15d6335954df76035e0015de18124faf",
|
|
233
253
|
"npm/core_jsffi.js": "88d136efe92f7cff5758c8fec8d9b6bbc9707fe37741cebeeb415fe34ce3d72b",
|
|
234
|
-
"npm/api.mjs": "
|
|
235
|
-
"npm/index.d.ts": "
|
|
254
|
+
"npm/api.mjs": "e93251db289ff0609abaff78ad67f0a9af82508c1141c6a999604f67c56b6e7d",
|
|
255
|
+
"npm/index.d.ts": "2674f8830bd20a2b9ef7dfa99e183598125b6bcc17e8d454e8f7cca1bbd2c9fe"
|
|
236
256
|
}
|
|
237
257
|
}
|
package/core.wasm
CHANGED
|
Binary file
|