functionalscript 0.1.609 → 0.2.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/com/cpp/module.f.d.mts +4 -8
- package/com/cpp/module.f.mjs +20 -25
- package/com/cpp/testlib.f.mjs +3 -4
- package/com/cs/module.f.d.mts +4 -8
- package/com/cs/module.f.mjs +18 -23
- package/com/cs/testlib.f.mjs +3 -5
- package/com/rust/module.f.d.mts +3 -7
- package/com/rust/module.f.mjs +25 -30
- package/com/rust/testlib.f.mjs +3 -5
- package/com/test/build.f.d.mts +2 -2
- package/com/test/build.f.mjs +2 -2
- package/com/test/build.mjs +4 -4
- package/com/types/module.f.d.mts +5 -10
- package/com/types/module.f.mjs +5 -12
- package/commonjs/build/module.f.d.mts +13 -17
- package/commonjs/build/module.f.mjs +23 -28
- package/commonjs/build/test.f.mjs +4 -4
- package/commonjs/module/function/module.f.d.mts +0 -2
- package/commonjs/module/function/module.f.mjs +0 -2
- package/commonjs/module/module.f.d.mts +16 -21
- package/commonjs/module/module.f.mjs +2 -9
- package/commonjs/module.d.mts +1 -5
- package/commonjs/module.f.d.mts +0 -2
- package/commonjs/module.f.mjs +0 -2
- package/commonjs/module.mjs +2 -7
- package/commonjs/package/dependencies/module.f.d.mts +3 -7
- package/commonjs/package/dependencies/module.f.mjs +5 -10
- package/commonjs/package/dependencies/test.f.mjs +1 -1
- package/commonjs/package/module.f.d.mts +12 -18
- package/commonjs/package/module.f.mjs +6 -13
- package/commonjs/package/test.f.mjs +1 -1
- package/commonjs/path/module.f.d.mts +25 -32
- package/commonjs/path/module.f.mjs +12 -23
- package/commonjs/path/test.f.mjs +11 -11
- package/commonjs/test.mjs +1 -1
- package/dev/module.f.d.mts +1 -4
- package/dev/module.f.mjs +1 -4
- package/dev/test/module.f.d.mts +2 -3
- package/dev/test/module.f.mjs +4 -6
- package/djs/module.f.d.mts +13 -18
- package/djs/module.f.mjs +12 -19
- package/djs/parser/module.f.d.mts +11 -15
- package/djs/parser/module.f.mjs +18 -24
- package/djs/parser/test.f.mjs +9 -9
- package/djs/test.f.mjs +4 -4
- package/djs/tokenizer/module.f.d.mts +6 -10
- package/djs/tokenizer/module.f.mjs +18 -23
- package/djs/tokenizer/test.f.mjs +6 -6
- package/fsc/module.f.d.mts +4 -9
- package/fsc/module.f.mjs +17 -24
- package/fsc/test.f.mjs +3 -3
- package/fsm/module.f.d.mts +13 -20
- package/fsm/module.f.mjs +27 -38
- package/fsm/test.f.mjs +8 -8
- package/html/module.f.d.mts +7 -12
- package/html/module.f.mjs +14 -23
- package/html/test.f.mjs +4 -4
- package/js/tokenizer/module.f.d.mts +10 -15
- package/js/tokenizer/module.f.mjs +55 -62
- package/js/tokenizer/test.f.mjs +6 -6
- package/json/module.f.d.mts +18 -26
- package/json/module.f.mjs +18 -31
- package/json/parser/module.f.d.mts +9 -13
- package/json/parser/module.f.mjs +9 -14
- package/json/parser/test.f.mjs +7 -7
- package/json/serializer/module.f.d.mts +11 -20
- package/json/serializer/module.f.mjs +14 -29
- package/json/serializer/test.f.mjs +2 -2
- package/json/test.f.mjs +3 -3
- package/json/tokenizer/module.f.d.mts +6 -10
- package/json/tokenizer/module.f.mjs +14 -19
- package/json/tokenizer/test.f.mjs +6 -6
- package/jsr.json +1 -1
- package/nodejs/version/main.mjs +1 -1
- package/nodejs/version/module.f.d.mts +4 -9
- package/nodejs/version/module.f.mjs +2 -7
- package/nodejs/version/test.f.mjs +3 -3
- package/package.json +1 -1
- package/prime_field/module.f.d.mts +20 -23
- package/prime_field/module.f.mjs +9 -12
- package/prime_field/test.f.mjs +1 -1
- package/secp/module.f.d.mts +27 -28
- package/secp/module.f.mjs +38 -39
- package/secp/test.f.mjs +4 -4
- package/sha2/module.f.d.mts +8 -16
- package/sha2/module.f.mjs +7 -20
- package/sha2/test.f.mjs +4 -4
- package/text/ascii/module.f.d.mts +69 -72
- package/text/ascii/module.f.mjs +5 -10
- package/text/ascii/test.f.mjs +3 -3
- package/text/module.f.d.mts +9 -14
- package/text/module.f.mjs +7 -14
- package/text/sgr/module.f.d.mts +7 -9
- package/text/sgr/module.f.mjs +2 -4
- package/text/test.f.mjs +3 -3
- package/text/utf16/module.f.d.mts +8 -15
- package/text/utf16/module.f.mjs +17 -28
- package/text/utf16/test.f.mjs +5 -5
- package/text/utf8/module.f.d.mts +4 -9
- package/text/utf8/module.f.mjs +9 -16
- package/text/utf8/test.f.mjs +4 -4
- package/types/array/module.f.d.mts +14 -24
- package/types/array/module.f.mjs +8 -25
- package/types/array/test.f.mjs +3 -3
- package/types/bigfloat/module.f.d.mts +4 -9
- package/types/bigfloat/module.f.mjs +3 -10
- package/types/bigfloat/test.f.mjs +1 -1
- package/types/bigint/module.f.d.mts +16 -64
- package/types/bigint/module.f.mjs +11 -30
- package/types/bigint/test.f.mjs +1 -1
- package/types/btree/find/module.f.d.mts +20 -26
- package/types/btree/find/module.f.mjs +8 -17
- package/types/btree/find/test.f.mjs +7 -7
- package/types/btree/module.f.d.mts +4 -8
- package/types/btree/module.f.mjs +6 -11
- package/types/btree/remove/module.f.d.mts +7 -12
- package/types/btree/remove/module.f.mjs +10 -17
- package/types/btree/remove/test.f.mjs +5 -5
- package/types/btree/set/module.f.d.mts +3 -7
- package/types/btree/set/module.f.mjs +4 -9
- package/types/btree/set/test.f.mjs +4 -4
- package/types/btree/test.f.mjs +9 -9
- package/types/btree/types/module.f.d.mts +0 -2
- package/types/btree/types/module.f.mjs +0 -2
- package/types/byte_set/module.f.d.mts +16 -29
- package/types/byte_set/module.f.mjs +14 -39
- package/types/byte_set/test.f.mjs +5 -5
- package/types/function/compare/module.f.d.mts +9 -15
- package/types/function/compare/module.f.mjs +3 -12
- package/types/function/compare/test.f.mjs +1 -1
- package/types/function/module.f.d.mts +20 -27
- package/types/function/module.f.mjs +4 -15
- package/types/function/operator/module.f.d.mts +28 -43
- package/types/function/operator/module.f.mjs +14 -41
- package/types/function/test.f.mjs +1 -1
- package/types/list/module.f.d.mts +56 -91
- package/types/list/module.f.mjs +45 -114
- package/types/list/test.f.mjs +10 -10
- package/types/map/module.f.d.mts +15 -24
- package/types/map/module.f.mjs +15 -30
- package/types/map/test.f.mjs +2 -2
- package/types/nibble_set/module.f.d.mts +10 -20
- package/types/nibble_set/module.f.mjs +7 -24
- package/types/nibble_set/test.f.mjs +2 -2
- package/types/nullable/module.f.d.mts +3 -8
- package/types/nullable/module.f.mjs +2 -9
- package/types/nullable/test.f.mjs +1 -1
- package/types/number/module.f.d.mts +7 -13
- package/types/number/module.f.mjs +8 -19
- package/types/number/test.f.mjs +1 -1
- package/types/object/module.f.d.mts +11 -18
- package/types/object/module.f.mjs +9 -20
- package/types/object/test.f.mjs +1 -1
- package/types/range/module.f.d.mts +3 -8
- package/types/range/module.f.mjs +2 -9
- package/types/range/test.f.mjs +1 -1
- package/types/range_map/module.f.d.mts +9 -15
- package/types/range_map/module.f.mjs +9 -18
- package/types/range_map/test.f.mjs +32 -32
- package/types/result/module.d.mts +3 -3
- package/types/result/module.f.d.mts +6 -12
- package/types/result/module.f.mjs +3 -12
- package/types/result/module.mjs +2 -2
- package/types/sorted_list/module.f.d.mts +22 -28
- package/types/sorted_list/module.f.mjs +10 -19
- package/types/sorted_list/test.f.mjs +7 -7
- package/types/sorted_set/module.f.d.mts +6 -12
- package/types/sorted_set/module.f.mjs +7 -16
- package/types/sorted_set/test.f.mjs +7 -7
- package/types/string/module.f.d.mts +8 -14
- package/types/string/module.f.mjs +10 -21
- package/types/string/test.f.mjs +2 -2
- package/types/string_set/module.f.d.mts +8 -16
- package/types/string_set/module.f.mjs +12 -27
- package/types/string_set/test.f.mjs +1 -1
package/dev/module.f.mjs
CHANGED
package/dev/test/module.f.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
declare const _default: <T>(input: Input<T>) => readonly [number, T];
|
|
2
|
+
export default _default;
|
|
2
3
|
export type DependencyMap = { readonly [k in string]?: Module; };
|
|
3
4
|
export type Module = {
|
|
4
5
|
readonly default?: unknown;
|
|
@@ -21,6 +22,4 @@ export type TestState = {
|
|
|
21
22
|
readonly fail: number;
|
|
22
23
|
};
|
|
23
24
|
export type FullState<T> = readonly [TestState, T];
|
|
24
|
-
/** @type {<T>(input: Input<T>) => readonly[number, T]} */
|
|
25
|
-
declare const main: <T>(input: Input<T>) => readonly [number, T];
|
|
26
25
|
import * as Result from '../../types/result/module.f.mjs';
|
package/dev/test/module.f.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
|
-
import list from '../../types/list/module.f.mjs'
|
|
2
|
+
import * as list from '../../types/list/module.f.mjs'
|
|
3
3
|
const { fold } = list
|
|
4
|
-
import sgr from '../../text/sgr/module.f.mjs'
|
|
5
|
-
const { reset, fgGreen, fgRed, bold } = sgr
|
|
4
|
+
import * as sgr from '../../text/sgr/module.f.mjs'
|
|
5
|
+
const { reset, fgGreen, fgRed, bold } = sgr.codes
|
|
6
6
|
import * as Result from '../../types/result/module.f.mjs'
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -80,7 +80,7 @@ const timeFormat = a => {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/** @type {<T>(input: Input<T>) => readonly[number, T]} */
|
|
83
|
-
|
|
83
|
+
export default input => {
|
|
84
84
|
let { moduleMap, log, error, measure, tryCatch, env, state } = input
|
|
85
85
|
const isGitHub = env('GITHUB_ACTION') !== void 0
|
|
86
86
|
/** @typedef {input extends Input<infer T> ? T : never} T */
|
|
@@ -146,5 +146,3 @@ const main = input => {
|
|
|
146
146
|
state = log(`${bold}Time: ${timeFormat(ts.time)}${reset}`)(state);
|
|
147
147
|
return [ts.fail !== 0 ? 1 : 0, state]
|
|
148
148
|
}
|
|
149
|
-
|
|
150
|
-
export default main
|
package/djs/module.f.d.mts
CHANGED
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
export
|
|
6
|
-
export type Object = { readonly [k in string]: Unknown; };
|
|
7
|
-
export type Array = readonly Unknown[];
|
|
8
|
-
export type Unknown = Object | boolean | string | number | null | Array | bigint;
|
|
9
|
-
export type Entry = O.Entry<Unknown>;
|
|
10
|
-
export type Entries = (List.List<Entry>);
|
|
11
|
-
export type MapEntries = (entries: Entries) => Entries;
|
|
1
|
+
/** @typedef {O.Entry<Unknown>} Entry*/
|
|
2
|
+
/** @typedef {(list.List<Entry>)} Entries */
|
|
3
|
+
/** @typedef {(entries: Entries) => Entries} MapEntries */
|
|
4
|
+
/** @type {(mapEntries: MapEntries) => (value: Unknown) => list.List<string>} */
|
|
5
|
+
export const serialize: (mapEntries: MapEntries) => (value: Unknown) => list.List<string>;
|
|
12
6
|
/**
|
|
13
7
|
* The standard `JSON.stringify` rules determined by
|
|
14
8
|
* https://262.ecma-international.org/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys
|
|
15
9
|
*
|
|
16
10
|
* @type {(mapEntries: MapEntries) => (value: Unknown) => string}
|
|
17
11
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
export const stringify: (mapEntries: MapEntries) => (value: Unknown) => string;
|
|
13
|
+
export type Object = { readonly [k in string]: Unknown; };
|
|
14
|
+
export type Array = readonly Unknown[];
|
|
15
|
+
export type Unknown = Object | boolean | string | number | null | Array | bigint;
|
|
16
|
+
export type Entry = O.Entry<Unknown>;
|
|
17
|
+
export type Entries = (list.List<Entry>);
|
|
18
|
+
export type MapEntries = (entries: Entries) => Entries;
|
|
19
|
+
import * as list from '../types/list/module.f.mjs';
|
|
24
20
|
import * as O from '../types/object/module.f.mjs';
|
|
25
|
-
import * as List from '../types/list/module.f.mjs';
|
package/djs/module.f.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import * as list from '../types/list/module.f.mjs'
|
|
4
4
|
const { flat, map } = list
|
|
5
|
-
import string from '../types/string/module.f.mjs'
|
|
5
|
+
import * as string from '../types/string/module.f.mjs'
|
|
6
6
|
const { concat } = string
|
|
7
7
|
import * as O from '../types/object/module.f.mjs'
|
|
8
|
-
import f from '../types/function/module.f.mjs'
|
|
8
|
+
import * as f from '../types/function/module.f.mjs'
|
|
9
9
|
const { compose, fn } = f
|
|
10
10
|
const { entries } = Object
|
|
11
|
-
import bi from '../types/bigint/module.f.mjs'
|
|
11
|
+
import * as bi from '../types/bigint/module.f.mjs'
|
|
12
12
|
const { serialize: bigintSerialize } = bi
|
|
13
|
-
import j from '../json/serializer/module.f.mjs'
|
|
13
|
+
import * as j from '../json/serializer/module.f.mjs'
|
|
14
14
|
const { objectWrap, arrayWrap, stringSerialize, numberSerialize, nullSerialize, boolSerialize } = j
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -27,26 +27,26 @@ const colon = [':']
|
|
|
27
27
|
|
|
28
28
|
/** @typedef {O.Entry<Unknown>} Entry*/
|
|
29
29
|
|
|
30
|
-
/** @typedef {(
|
|
30
|
+
/** @typedef {(list.List<Entry>)} Entries */
|
|
31
31
|
|
|
32
32
|
/** @typedef {(entries: Entries) => Entries} MapEntries */
|
|
33
33
|
|
|
34
|
-
/** @type {(mapEntries: MapEntries) => (value: Unknown) =>
|
|
35
|
-
const serialize = sort => {
|
|
36
|
-
/** @type {(kv: readonly[string, Unknown]) =>
|
|
34
|
+
/** @type {(mapEntries: MapEntries) => (value: Unknown) => list.List<string>} */
|
|
35
|
+
export const serialize = sort => {
|
|
36
|
+
/** @type {(kv: readonly[string, Unknown]) => list.List<string>} */
|
|
37
37
|
const propertySerialize = ([k, v]) => flat([
|
|
38
38
|
stringSerialize(k),
|
|
39
39
|
colon,
|
|
40
40
|
f(v)
|
|
41
41
|
])
|
|
42
42
|
const mapPropertySerialize = map(propertySerialize)
|
|
43
|
-
/** @type {(object: Object) =>
|
|
43
|
+
/** @type {(object: Object) => list.List<string>} */
|
|
44
44
|
const objectSerialize = fn(entries)
|
|
45
45
|
.then(sort)
|
|
46
46
|
.then(mapPropertySerialize)
|
|
47
47
|
.then(objectWrap)
|
|
48
48
|
.result
|
|
49
|
-
/** @type {(value: Unknown) =>
|
|
49
|
+
/** @type {(value: Unknown) => list.List<string>} */
|
|
50
50
|
const f = value => {
|
|
51
51
|
switch (typeof value) {
|
|
52
52
|
case 'boolean': { return boolSerialize(value) }
|
|
@@ -70,11 +70,4 @@ const serialize = sort => {
|
|
|
70
70
|
*
|
|
71
71
|
* @type {(mapEntries: MapEntries) => (value: Unknown) => string}
|
|
72
72
|
*/
|
|
73
|
-
const stringify = sort => compose(serialize(sort))(concat)
|
|
74
|
-
|
|
75
|
-
export default {
|
|
76
|
-
/** @readonly */
|
|
77
|
-
stringify,
|
|
78
|
-
/** @readonly */
|
|
79
|
-
serialize,
|
|
80
|
-
}
|
|
73
|
+
export const stringify = sort => compose(serialize(sort))(concat)
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
export default _default;
|
|
1
|
+
/** @type {(tokenList: list.List<tokenizerT.DjsToken>) => result.Result<DjsModule, string>} */
|
|
2
|
+
export const parse: (tokenList: list.List<tokenizerT.DjsToken>) => result.Result<DjsModule, string>;
|
|
5
3
|
export type DjsModule = [readonly string[], readonly DjsConst[]];
|
|
6
4
|
export type DjsConst = boolean | string | number | null | bigint | DjsModuleRef | DjsArray | DjsObject;
|
|
7
5
|
export type DjsModuleRef = ["aref" | "cref", number];
|
|
8
6
|
export type DjsArray = ["array", readonly DjsConst[]];
|
|
9
7
|
export type DjsObject = { readonly [k in string]: DjsConst; };
|
|
10
|
-
export type DjsStackArray = ["array",
|
|
11
|
-
export type DjsStackObject = ["object",
|
|
8
|
+
export type DjsStackArray = ["array", list.List<DjsConst>];
|
|
9
|
+
export type DjsStackObject = ["object", map.Map<DjsConst>, string];
|
|
12
10
|
export type DjsStackElement = DjsStackArray | DjsStackObject;
|
|
13
|
-
export type DjsStack =
|
|
11
|
+
export type DjsStack = list.List<DjsStackElement>;
|
|
14
12
|
export type ParserState = InitialState | NewLineRequiredState | ImportState | ConstState | ExportState | ParseValueState | ResultState | ErrorState;
|
|
15
13
|
export type ModuleState = {
|
|
16
|
-
readonly refs:
|
|
17
|
-
readonly modules:
|
|
18
|
-
readonly consts:
|
|
14
|
+
readonly refs: map.Map<DjsModuleRef>;
|
|
15
|
+
readonly modules: list.List<string>;
|
|
16
|
+
readonly consts: list.List<DjsConst>;
|
|
19
17
|
};
|
|
20
18
|
export type InitialState = {
|
|
21
19
|
readonly state: "";
|
|
@@ -52,9 +50,7 @@ export type ErrorState = {
|
|
|
52
50
|
readonly state: "error";
|
|
53
51
|
readonly message: string;
|
|
54
52
|
};
|
|
55
|
-
|
|
56
|
-
declare const parse: (tokenList: List.List<tokenizerT.DjsToken>) => Result.Result<DjsModule, string>;
|
|
57
|
-
import * as List from '../../types/list/module.f.mjs';
|
|
58
|
-
import * as Map from '../../types/map/module.f.mjs';
|
|
53
|
+
import * as list from '../../types/list/module.f.mjs';
|
|
59
54
|
import * as tokenizerT from '../tokenizer/module.f.mjs';
|
|
60
|
-
import * as
|
|
55
|
+
import * as result from '../../types/result/module.f.mjs';
|
|
56
|
+
import * as map from '../../types/map/module.f.mjs';
|
package/djs/parser/module.f.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import * as result from '../../types/result/module.f.mjs'
|
|
4
|
+
import * as list from '../../types/list/module.f.mjs'
|
|
5
5
|
const { fold, first, drop, toArray, map: listMap, length } = list
|
|
6
6
|
import * as Operator from '../../types/function/operator/module.f.mjs'
|
|
7
7
|
import * as tokenizerT from '../tokenizer/module.f.mjs'
|
|
8
|
-
import
|
|
8
|
+
import * as map from '../../types/map/module.f.mjs'
|
|
9
9
|
const { setReplace, at } = map
|
|
10
|
-
import
|
|
10
|
+
import * as o from '../../types/object/module.f.mjs'
|
|
11
11
|
const { fromMap } = o
|
|
12
12
|
|
|
13
13
|
/** @typedef {[readonly string[], readonly DjsConst[]] } DjsModule */
|
|
@@ -24,9 +24,9 @@ const { fromMap } = o
|
|
|
24
24
|
* }} DjsObject
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
/** @typedef {['array',
|
|
27
|
+
/** @typedef {['array', list.List<DjsConst>]} DjsStackArray */
|
|
28
28
|
|
|
29
|
-
/** @typedef {['object',
|
|
29
|
+
/** @typedef {['object', map.Map<DjsConst>, string]} DjsStackObject */
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -36,15 +36,15 @@ const { fromMap } = o
|
|
|
36
36
|
* } DjsStackElement
|
|
37
37
|
*/
|
|
38
38
|
|
|
39
|
-
/** @typedef {
|
|
39
|
+
/** @typedef {list.List<DjsStackElement>} DjsStack */
|
|
40
40
|
|
|
41
41
|
/** @typedef {InitialState | NewLineRequiredState | ImportState | ConstState | ExportState | ParseValueState | ResultState | ErrorState} ParserState */
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* @typedef {{
|
|
45
|
-
* readonly refs:
|
|
46
|
-
* readonly modules:
|
|
47
|
-
* readonly consts:
|
|
45
|
+
* readonly refs: map.Map<DjsModuleRef>
|
|
46
|
+
* readonly modules: list.List<string>
|
|
47
|
+
* readonly consts: list.List<DjsConst>
|
|
48
48
|
* }} ModuleState
|
|
49
49
|
*/
|
|
50
50
|
|
|
@@ -153,7 +153,7 @@ const parseConstOp = token => state => {
|
|
|
153
153
|
case 'nl': return state
|
|
154
154
|
case 'id': {
|
|
155
155
|
if (map.at(token.value)(state.module.refs) !== null)
|
|
156
|
-
return { state: 'error', message: 'duplicate id' }
|
|
156
|
+
return { state: 'error', message: 'duplicate id' }
|
|
157
157
|
/** @type {DjsModuleRef} */
|
|
158
158
|
let cref = ['cref', length(state.module.consts)]
|
|
159
159
|
let refs = map.setReplace(token.value)(cref)(state.module.refs)
|
|
@@ -232,7 +232,7 @@ const pushKey = state => key => {
|
|
|
232
232
|
|
|
233
233
|
/** @type {(state: ParseValueState) => (value: DjsConst) => ParserState} */
|
|
234
234
|
const pushValue = state => value => {
|
|
235
|
-
if (state.top === null) {
|
|
235
|
+
if (state.top === null) {
|
|
236
236
|
let consts = list.concat(state.module.consts)([value])
|
|
237
237
|
switch(state.state)
|
|
238
238
|
{
|
|
@@ -262,7 +262,7 @@ const startArray = state => {
|
|
|
262
262
|
const endArray = state => {
|
|
263
263
|
const top = state.top;
|
|
264
264
|
/** @type {ParseValueState} */
|
|
265
|
-
const newState = { ... state, valueState: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
265
|
+
const newState = { ... state, valueState: '', top: first(null)(state.stack), stack: drop(1)(state.stack) }
|
|
266
266
|
if (top !== null && top[0] === 'array')
|
|
267
267
|
{
|
|
268
268
|
/** @type {DjsArray} */
|
|
@@ -391,13 +391,13 @@ const foldOp = token => state => {
|
|
|
391
391
|
case 'import+from': return parseImportFromOp(token)(state)
|
|
392
392
|
case 'const': return parseConstOp(token)(state)
|
|
393
393
|
case 'const+name': return parseConstNameOp(token)(state)
|
|
394
|
-
case 'export': return parseExportOp(token)(state)
|
|
394
|
+
case 'export': return parseExportOp(token)(state)
|
|
395
395
|
case 'result': return { state: 'error', message: 'unexpected token' }
|
|
396
396
|
case 'error': return { state: 'error', message: state.message }
|
|
397
397
|
case 'constValue':
|
|
398
|
-
case 'exportValue':
|
|
398
|
+
case 'exportValue':
|
|
399
399
|
{
|
|
400
|
-
switch (state.valueState)
|
|
400
|
+
switch (state.valueState)
|
|
401
401
|
{
|
|
402
402
|
case '': return parseValueOp(token)(state)
|
|
403
403
|
case '[': return parseArrayStartOp(token)(state)
|
|
@@ -413,8 +413,8 @@ const foldOp = token => state => {
|
|
|
413
413
|
}
|
|
414
414
|
}
|
|
415
415
|
|
|
416
|
-
/** @type {(tokenList:
|
|
417
|
-
const parse = tokenList => {
|
|
416
|
+
/** @type {(tokenList: list.List<tokenizerT.DjsToken>) => result.Result<DjsModule, string>} */
|
|
417
|
+
export const parse = tokenList => {
|
|
418
418
|
const state = fold(foldOp)({ state: '', module: { refs: null, modules: null, consts: null }})(tokenList)
|
|
419
419
|
switch (state.state) {
|
|
420
420
|
case 'result': return result.ok([ toArray(state.module.modules), toArray(state.module.consts) ])
|
|
@@ -422,9 +422,3 @@ const parse = tokenList => {
|
|
|
422
422
|
default: return result.error('unexpected end')
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
export default {
|
|
428
|
-
/** @readonly */
|
|
429
|
-
parse
|
|
430
|
-
}
|
package/djs/parser/test.f.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import parser from './module.f.mjs'
|
|
2
|
-
import
|
|
3
|
-
import list from '../../types/list/module.f.mjs'
|
|
1
|
+
import * as parser from './module.f.mjs'
|
|
2
|
+
import * as tokenizer from '../tokenizer/module.f.mjs'
|
|
3
|
+
import * as list from '../../types/list/module.f.mjs'
|
|
4
4
|
const { toArray } = list
|
|
5
|
-
import djs from '../module.f.mjs'
|
|
6
|
-
import o from '../../types/object/module.f.mjs'
|
|
5
|
+
import * as djs from '../module.f.mjs'
|
|
6
|
+
import * as o from '../../types/object/module.f.mjs'
|
|
7
7
|
const { sort } = o
|
|
8
|
-
import encoding from '../../text/utf16/module.f.mjs'
|
|
8
|
+
import * as encoding from '../../text/utf16/module.f.mjs'
|
|
9
9
|
|
|
10
|
-
/** @type {(s: string) => readonly
|
|
10
|
+
/** @type {(s: string) => readonly tokenizer.DjsToken[]} */
|
|
11
11
|
const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
12
12
|
|
|
13
13
|
const stringify = djs.stringify(sort)
|
|
@@ -72,7 +72,7 @@ export default {
|
|
|
72
72
|
const tokenList = tokenizeString('export default [0,[1,[2,[]]],3]')
|
|
73
73
|
const obj = parser.parse(tokenList)
|
|
74
74
|
const result = stringify(obj)
|
|
75
|
-
if (result !== '["ok",[[],[["array",[0,["array",[1,["array",[2,["array",[]]]]]],3]]]]]') { throw result }
|
|
75
|
+
if (result !== '["ok",[[],[["array",[0,["array",[1,["array",[2,["array",[]]]]]],3]]]]]') { throw result }
|
|
76
76
|
},
|
|
77
77
|
() => {
|
|
78
78
|
const tokenList = tokenizeString('export default {}')
|
|
@@ -395,7 +395,7 @@ export default {
|
|
|
395
395
|
const obj = parser.parse(tokenList)
|
|
396
396
|
const result = stringify(obj)
|
|
397
397
|
if (result !== '["error","unexpected token"]') { throw result }
|
|
398
|
-
},
|
|
398
|
+
},
|
|
399
399
|
() => {
|
|
400
400
|
const tokenList = tokenizeString('import a from "first/test.f.mjs" \n import a from "second/test.f.mjs" \n export default [b, a, b]')
|
|
401
401
|
const obj = parser.parse(tokenList)
|
package/djs/test.f.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import json from '../json/module.f.mjs'
|
|
2
|
-
import list from '../types/object/module.f.mjs'
|
|
1
|
+
import * as json from '../json/module.f.mjs'
|
|
2
|
+
import * as list from '../types/object/module.f.mjs'
|
|
3
3
|
const { sort } = list
|
|
4
|
-
import f from '../types/function/module.f.mjs'
|
|
4
|
+
import * as f from '../types/function/module.f.mjs'
|
|
5
5
|
const { identity } = f
|
|
6
|
-
import djs from './module.f.mjs'
|
|
6
|
+
import * as djs from './module.f.mjs'
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
9
|
stringify: [
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
export default _default;
|
|
1
|
+
/** @type {(input: list.List<number>) => list.List<DjsToken>} */
|
|
2
|
+
export const tokenize: (input: list.List<number>) => list.List<DjsToken>;
|
|
5
3
|
export type DjsToken = {
|
|
6
4
|
readonly kind: "true" | "false" | "null";
|
|
7
5
|
} | {
|
|
8
6
|
readonly kind: "{" | "}" | ":" | "," | "[" | "]" | "." | "=";
|
|
9
|
-
} |
|
|
7
|
+
} | jsTokenizer.StringToken | jsTokenizer.NumberToken | jsTokenizer.ErrorToken | jsTokenizer.IdToken | jsTokenizer.BigIntToken | jsTokenizer.WhitespaceToken | jsTokenizer.NewLineToken;
|
|
10
8
|
export type ScanState = {
|
|
11
9
|
readonly kind: "def" | "-";
|
|
12
10
|
};
|
|
13
|
-
export type ScanInput =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import * as jsTokenizerT from '../../js/tokenizer/module.f.mjs';
|
|
17
|
-
import * as List from '../../types/list/module.f.mjs';
|
|
11
|
+
export type ScanInput = jsTokenizer.JsToken | null;
|
|
12
|
+
import * as list from '../../types/list/module.f.mjs';
|
|
13
|
+
import * as jsTokenizer from '../../js/tokenizer/module.f.mjs';
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
2
|
|
|
3
3
|
import * as Operator from '../../types/function/operator/module.f.mjs'
|
|
4
|
-
import
|
|
4
|
+
import * as list from '../../types/list/module.f.mjs'
|
|
5
5
|
const { empty, flat, stateScan } = list
|
|
6
|
-
import bf from '../../types/bigfloat/module.f.mjs'
|
|
6
|
+
import * as bf from '../../types/bigfloat/module.f.mjs'
|
|
7
7
|
const { multiply } = bf
|
|
8
|
-
import
|
|
8
|
+
import * as jsTokenizer from '../../js/tokenizer/module.f.mjs'
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* @typedef {|
|
|
12
12
|
* {readonly kind: 'true' | 'false' | 'null'} |
|
|
13
13
|
* {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=' } |
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
14
|
+
* jsTokenizer.StringToken |
|
|
15
|
+
* jsTokenizer.NumberToken |
|
|
16
|
+
* jsTokenizer.ErrorToken |
|
|
17
|
+
* jsTokenizer.IdToken |
|
|
18
|
+
* jsTokenizer.BigIntToken |
|
|
19
|
+
* jsTokenizer.WhitespaceToken |
|
|
20
|
+
* jsTokenizer.NewLineToken
|
|
21
21
|
* } DjsToken
|
|
22
22
|
*/
|
|
23
23
|
|
|
@@ -29,11 +29,11 @@ import jsTokenizer, * as jsTokenizerT from '../../js/tokenizer/module.f.mjs'
|
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* @typedef {|
|
|
32
|
-
*
|
|
32
|
+
* jsTokenizer.JsToken | null
|
|
33
33
|
* } ScanInput
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
|
-
/** @type {(input:
|
|
36
|
+
/** @type {(input: jsTokenizer.JsToken) => list.List<DjsToken>} */
|
|
37
37
|
const mapToken = input =>
|
|
38
38
|
{
|
|
39
39
|
switch(input.kind)
|
|
@@ -60,7 +60,7 @@ const mapToken = input =>
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/** @type {(input: ScanInput) => readonly [
|
|
63
|
+
/** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
|
|
64
64
|
const parseDefaultState = input =>
|
|
65
65
|
{
|
|
66
66
|
if (input === null) return [empty, { kind: 'def'}]
|
|
@@ -71,7 +71,7 @@ const parseDefaultState = input =>
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
/** @type {(input: ScanInput) => readonly [
|
|
74
|
+
/** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
|
|
75
75
|
const parseMinusState = input =>
|
|
76
76
|
{
|
|
77
77
|
if (input === null) return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def'}]
|
|
@@ -84,7 +84,7 @@ const parseMinusState = input =>
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
/** @type {Operator.StateScan<ScanInput, ScanState,
|
|
87
|
+
/** @type {Operator.StateScan<ScanInput, ScanState, list.List<DjsToken>>} */
|
|
88
88
|
const scanToken = state => input => {
|
|
89
89
|
switch(state.kind)
|
|
90
90
|
{
|
|
@@ -93,15 +93,10 @@ const scanToken = state => input => {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
/** @type {(input:
|
|
97
|
-
const tokenize = input =>
|
|
96
|
+
/** @type {(input: list.List<number>) => list.List<DjsToken>} */
|
|
97
|
+
export const tokenize = input =>
|
|
98
98
|
{
|
|
99
|
-
/** @type {
|
|
99
|
+
/** @type {list.List<ScanInput>} */
|
|
100
100
|
const jsTokens = jsTokenizer.tokenize(input)
|
|
101
101
|
return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])))
|
|
102
102
|
}
|
|
103
|
-
|
|
104
|
-
export default {
|
|
105
|
-
/** @readonly */
|
|
106
|
-
tokenize
|
|
107
|
-
}
|
package/djs/tokenizer/test.f.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import list from '../../types/list/module.f.mjs'
|
|
1
|
+
import * as tokenizer from './module.f.mjs'
|
|
2
|
+
import * as list from '../../types/list/module.f.mjs'
|
|
3
3
|
const { toArray } = list
|
|
4
|
-
import djs from '../module.f.mjs'
|
|
5
|
-
import o from '../../types/object/module.f.mjs'
|
|
4
|
+
import * as djs from '../module.f.mjs'
|
|
5
|
+
import * as o from '../../types/object/module.f.mjs'
|
|
6
6
|
const { sort } = o
|
|
7
|
-
import encoding from '../../text/utf16/module.f.mjs'
|
|
7
|
+
import * as encoding from '../../text/utf16/module.f.mjs'
|
|
8
8
|
|
|
9
|
-
/** @type {(s: string) => readonly
|
|
9
|
+
/** @type {(s: string) => readonly tokenizer.DjsToken[]} */
|
|
10
10
|
const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)))
|
|
11
11
|
|
|
12
12
|
const stringify = djs.stringify(sort)
|
package/fsc/module.f.d.mts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { init };
|
|
4
|
-
}
|
|
5
|
-
export default _default;
|
|
1
|
+
export const terminal: -1;
|
|
2
|
+
export const init: ToResult;
|
|
6
3
|
export type Result = readonly [readonly string[], ToResult];
|
|
7
4
|
export type ToResult = (codePoint: number) => Result;
|
|
8
5
|
export type CreateToResult<T> = (state: T) => ToResult;
|
|
9
|
-
export type State<T> =
|
|
10
|
-
|
|
11
|
-
declare const init: ToResult;
|
|
12
|
-
import * as RM from '../types/range_map/module.f.mjs';
|
|
6
|
+
export type State<T> = rangeMap.RangeMapArray<CreateToResult<T>>;
|
|
7
|
+
import * as rangeMap from '../types/range_map/module.f.mjs';
|
package/fsc/module.f.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
|
-
import operator from '../types/function/operator/module.f.mjs'
|
|
3
|
-
import
|
|
4
|
-
const { merge: rangeMapMerge, fromRange, get } =
|
|
5
|
-
import
|
|
2
|
+
import * as operator from '../types/function/operator/module.f.mjs'
|
|
3
|
+
import * as rangeMap from '../types/range_map/module.f.mjs'
|
|
4
|
+
const { merge: rangeMapMerge, fromRange, get } = rangeMap
|
|
5
|
+
import * as list from '../types/list/module.f.mjs'
|
|
6
6
|
const { reduce: listReduce } = list
|
|
7
|
-
import ascii from '../text/ascii/module.f.mjs'
|
|
7
|
+
import * as ascii from '../text/ascii/module.f.mjs'
|
|
8
8
|
const { range: asciiRange } = ascii
|
|
9
9
|
const { fromCharCode } = String
|
|
10
|
-
import f from '../types/function/module.f.mjs'
|
|
10
|
+
import * as f from '../types/function/module.f.mjs'
|
|
11
11
|
const { fn } = f
|
|
12
|
-
import
|
|
12
|
+
import * as _range from '../types/range/module.f.mjs'
|
|
13
13
|
const { one } = _range
|
|
14
14
|
const { toArray, map } = list
|
|
15
15
|
|
|
@@ -24,7 +24,7 @@ const { toArray, map } = list
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @template T
|
|
27
|
-
* @typedef {
|
|
27
|
+
* @typedef {rangeMap.RangeMapArray<CreateToResult<T>>} State
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
/** @type {ToResult} */
|
|
@@ -43,10 +43,10 @@ const union = a => b => {
|
|
|
43
43
|
/** @type {readonly never[]} */
|
|
44
44
|
const empty = []
|
|
45
45
|
|
|
46
|
-
/** @type {<T>(a:
|
|
46
|
+
/** @type {<T>(a: list.List<State<T>>) => State<T>} */
|
|
47
47
|
const reduce = a => {
|
|
48
|
-
/** @typedef {typeof a extends
|
|
49
|
-
/** @type {
|
|
48
|
+
/** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
|
|
49
|
+
/** @type {rangeMap.RangeMerge<CreateToResult<T>>} */
|
|
50
50
|
const merge = rangeMapMerge({
|
|
51
51
|
union,
|
|
52
52
|
equal: operator.strictEqual,
|
|
@@ -61,28 +61,28 @@ const range = fn(asciiRange).then(codePointRange).result
|
|
|
61
61
|
/** @type {(l: readonly string[]) => <T>(f: CreateToResult<T>) => State<T>} */
|
|
62
62
|
const rangeSet = l => f => {
|
|
63
63
|
/** @typedef {typeof f extends CreateToResult<infer T> ? T : never} T */
|
|
64
|
-
/** @type {(a:
|
|
64
|
+
/** @type {(a: _range.Range) => (f: CreateToResult<T>) => State<T>} */
|
|
65
65
|
const codePointRange = fromRange(def)
|
|
66
66
|
/** @type {(r: string) => State<T>} */
|
|
67
67
|
const g = r => codePointRange(asciiRange(r))(f)
|
|
68
68
|
return reduce(map(g)(l))
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
/** @type {<T>(a:
|
|
71
|
+
/** @type {<T>(a: list.List<State<T>>) => CreateToResult<T>} */
|
|
72
72
|
const create = a => {
|
|
73
|
-
/** @typedef {typeof a extends
|
|
73
|
+
/** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
|
|
74
74
|
const i = reduce(a)
|
|
75
75
|
/** @type {(v: number) => (i: State<T>) => (v: T) => ToResult} */
|
|
76
76
|
const x = get(def)
|
|
77
77
|
return v => c => x(c)(i)(v)(c)
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
const terminal = -1
|
|
80
|
+
export const terminal = -1
|
|
81
81
|
|
|
82
82
|
/** @type {() => ToResult} */
|
|
83
83
|
const toInit = () => () => [[], init]
|
|
84
84
|
|
|
85
|
-
const init = create([
|
|
85
|
+
export const init = create([
|
|
86
86
|
codePointRange(one(terminal))(toInit),
|
|
87
87
|
rangeSet(['\t', ' ', '\n', '\r'])(toInit),
|
|
88
88
|
range('!')(() => () => [['!'], unexpectedSymbol]),
|
|
@@ -114,11 +114,4 @@ const init = create([
|
|
|
114
114
|
range('|')(() => () => [['|'], unexpectedSymbol]),
|
|
115
115
|
range('}')(() => () => [['}'], unexpectedSymbol]),
|
|
116
116
|
range('~')(() => () => [['~'], unexpectedSymbol]),
|
|
117
|
-
])(
|
|
118
|
-
|
|
119
|
-
export default {
|
|
120
|
-
/** @readonly */
|
|
121
|
-
terminal,
|
|
122
|
-
/** @readonly */
|
|
123
|
-
init,
|
|
124
|
-
}
|
|
117
|
+
])(undefined)
|
package/fsc/test.f.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import _ from './module.f.mjs'
|
|
2
|
-
import ascii from '../text/ascii/module.f.mjs'
|
|
1
|
+
import * as _ from './module.f.mjs'
|
|
2
|
+
import * as ascii from '../text/ascii/module.f.mjs'
|
|
3
3
|
const { one } = ascii
|
|
4
|
-
import j from '../json/module.f.mjs'
|
|
4
|
+
import * as j from '../json/module.f.mjs'
|
|
5
5
|
const { stringify } = j
|
|
6
6
|
const s = stringify(i => i)
|
|
7
7
|
|