shapedef 1.0.19 → 1.0.21
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/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/shape.d.ts +8 -0
- package/dist/cjs/shape.d.ts.map +1 -1
- package/dist/cjs/shape.js +8 -0
- package/dist/cjs/shape.js.map +1 -1
- package/dist/cjs/turing/evaluate.d.ts +23 -0
- package/dist/cjs/turing/evaluate.d.ts.map +1 -0
- package/dist/cjs/turing/evaluate.js +195 -0
- package/dist/cjs/turing/evaluate.js.map +1 -0
- package/dist/cjs/turing/index.d.ts +4 -0
- package/dist/cjs/turing/index.d.ts.map +1 -0
- package/dist/cjs/turing/index.js +20 -0
- package/dist/cjs/turing/index.js.map +1 -0
- package/dist/cjs/turing/op.d.ts +5 -0
- package/dist/cjs/turing/op.d.ts.map +1 -0
- package/dist/cjs/turing/op.js +3 -0
- package/dist/cjs/turing/op.js.map +1 -0
- package/dist/cjs/turing/turing.d.ts +59 -0
- package/dist/cjs/turing/turing.d.ts.map +1 -0
- package/dist/cjs/turing/turing.js +75 -0
- package/dist/cjs/turing/turing.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/shape.d.ts +8 -0
- package/dist/esm/shape.d.ts.map +1 -1
- package/dist/esm/shape.js +8 -0
- package/dist/esm/shape.js.map +1 -1
- package/dist/esm/turing/evaluate.d.ts +23 -0
- package/dist/esm/turing/evaluate.d.ts.map +1 -0
- package/dist/esm/turing/evaluate.js +195 -0
- package/dist/esm/turing/evaluate.js.map +1 -0
- package/dist/esm/turing/index.d.ts +4 -0
- package/dist/esm/turing/index.d.ts.map +1 -0
- package/dist/esm/turing/index.js +20 -0
- package/dist/esm/turing/index.js.map +1 -0
- package/dist/esm/turing/op.d.ts +5 -0
- package/dist/esm/turing/op.d.ts.map +1 -0
- package/dist/esm/turing/op.js +3 -0
- package/dist/esm/turing/op.js.map +1 -0
- package/dist/esm/turing/turing.d.ts +59 -0
- package/dist/esm/turing/turing.d.ts.map +1 -0
- package/dist/esm/turing/turing.js +75 -0
- package/dist/esm/turing/turing.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/shape.ts +16 -0
- package/src/turing/evaluate.test.ts +407 -0
- package/src/turing/evaluate.ts +245 -0
- package/src/turing/index.ts +3 -0
- package/src/turing/op.ts +14 -0
- package/src/turing/turing.ts +160 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OutputOfShape,
|
|
3
|
+
Shape,
|
|
4
|
+
ShapeBool,
|
|
5
|
+
ShapeDate,
|
|
6
|
+
ShapeNil,
|
|
7
|
+
ShapeNumber,
|
|
8
|
+
ShapeRef,
|
|
9
|
+
shapes,
|
|
10
|
+
ShapeStr,
|
|
11
|
+
ShapeUnknown,
|
|
12
|
+
} from "../shape";
|
|
13
|
+
import { TuringOp } from "./op";
|
|
14
|
+
|
|
15
|
+
export type TuringPhantom = {
|
|
16
|
+
out: any;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type LooseTuring = {
|
|
20
|
+
type: string;
|
|
21
|
+
__phantom: TuringPhantom;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type OutputOfTuring<T> =
|
|
25
|
+
[T] extends [LooseTuring] ? T["__phantom"]["out"] : never;
|
|
26
|
+
|
|
27
|
+
export interface TuringBase<Type extends string> {
|
|
28
|
+
type: Type;
|
|
29
|
+
__phantom: TuringPhantom;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface TuringWithOutput<
|
|
33
|
+
Type extends string,
|
|
34
|
+
Out,
|
|
35
|
+
> extends TuringBase<Type> {
|
|
36
|
+
__phantom: {
|
|
37
|
+
out: Out;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TuringWithShape<
|
|
42
|
+
Type extends string,
|
|
43
|
+
S extends Shape,
|
|
44
|
+
> extends TuringWithOutput<Type, OutputOfShape<S>> {
|
|
45
|
+
shape: S;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface TuringNumber extends TuringWithShape<"number", ShapeNumber> {
|
|
49
|
+
value: number;
|
|
50
|
+
}
|
|
51
|
+
export interface TuringBool extends TuringWithShape<"bool", ShapeBool> {
|
|
52
|
+
value: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface TuringStr extends TuringWithShape<"str", ShapeStr> {
|
|
55
|
+
value: string;
|
|
56
|
+
}
|
|
57
|
+
export interface TuringDate extends TuringWithShape<"date", ShapeDate> {
|
|
58
|
+
value: Date;
|
|
59
|
+
}
|
|
60
|
+
export interface TuringNil extends TuringWithShape<"nil", ShapeNil> {
|
|
61
|
+
value: null;
|
|
62
|
+
}
|
|
63
|
+
export interface TuringRef<
|
|
64
|
+
Name extends string = string,
|
|
65
|
+
> extends TuringWithShape<"ref", ShapeRef<Name>> {
|
|
66
|
+
name: Name;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface TuringBinop<
|
|
70
|
+
Op extends TuringOp = TuringOp,
|
|
71
|
+
Left extends TuringNode = TuringNode,
|
|
72
|
+
Right extends TuringNode = TuringNode,
|
|
73
|
+
> extends TuringWithShape<"binop", ShapeUnknown> {
|
|
74
|
+
op: Op;
|
|
75
|
+
left: Left;
|
|
76
|
+
right: Right;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export type TuringNode =
|
|
80
|
+
| TuringNumber
|
|
81
|
+
| TuringBool
|
|
82
|
+
| TuringStr
|
|
83
|
+
| TuringDate
|
|
84
|
+
| TuringNil
|
|
85
|
+
| TuringRef
|
|
86
|
+
| TuringBinop;
|
|
87
|
+
|
|
88
|
+
const makeBase = (): { __phantom: { out: any } } => {
|
|
89
|
+
return {} as unknown as any;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export namespace turing {
|
|
93
|
+
export const number = (x: number): TuringNumber => ({
|
|
94
|
+
type: "number",
|
|
95
|
+
value: x,
|
|
96
|
+
shape: shapes.number(),
|
|
97
|
+
...makeBase(),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
export const bool = (x: boolean): TuringBool => ({
|
|
101
|
+
type: "bool",
|
|
102
|
+
value: x,
|
|
103
|
+
shape: shapes.bool(),
|
|
104
|
+
...makeBase(),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
export const str = (x: string): TuringStr => ({
|
|
108
|
+
type: "str",
|
|
109
|
+
value: x,
|
|
110
|
+
shape: shapes.str(),
|
|
111
|
+
...makeBase(),
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
export const date = (x: Date): TuringDate => ({
|
|
115
|
+
type: "date",
|
|
116
|
+
value: x,
|
|
117
|
+
shape: shapes.date(),
|
|
118
|
+
...makeBase(),
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export const nil = (): TuringNil => ({
|
|
122
|
+
type: "nil",
|
|
123
|
+
value: null,
|
|
124
|
+
shape: shapes.nil(),
|
|
125
|
+
...makeBase(),
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
export function ref<Name extends string>(name: Name): TuringRef<Name> {
|
|
129
|
+
return {
|
|
130
|
+
type: "ref",
|
|
131
|
+
name: name,
|
|
132
|
+
shape: shapes.ref(name),
|
|
133
|
+
...makeBase(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function binop<
|
|
138
|
+
Left extends TuringNode,
|
|
139
|
+
Op extends TuringOp,
|
|
140
|
+
Right extends TuringNode,
|
|
141
|
+
>(left: Left, op: Op, right: Right): TuringBinop<Op, Left, Right> {
|
|
142
|
+
return {
|
|
143
|
+
type: "binop",
|
|
144
|
+
left,
|
|
145
|
+
right,
|
|
146
|
+
op,
|
|
147
|
+
shape: shapes.unknown(),
|
|
148
|
+
...makeBase(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function auto(x: unknown): TuringNode {
|
|
153
|
+
if (x === null) return nil();
|
|
154
|
+
if (typeof x === "undefined") return nil();
|
|
155
|
+
if (typeof x === "number") return number(x);
|
|
156
|
+
if (typeof x === "string") return str(x);
|
|
157
|
+
if (typeof x === "boolean") return bool(x);
|
|
158
|
+
return nil();
|
|
159
|
+
}
|
|
160
|
+
}
|