functionalscript 0.2.0 → 0.2.2
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/dev/module.mjs +1 -1
- package/jsr.json +59 -59
- package/out/com/cpp/module.f.mjs +123 -0
- package/out/com/cpp/test.f.mjs +40 -0
- package/out/com/cpp/testlib.f.mjs +7 -0
- package/out/com/cs/module.f.mjs +95 -0
- package/out/com/cs/test.f.mjs +43 -0
- package/out/com/cs/testlib.f.mjs +7 -0
- package/out/com/rust/module.f.mjs +213 -0
- package/out/com/rust/test.f.mjs +123 -0
- package/out/com/rust/testlib.f.mjs +7 -0
- package/out/com/test/build.f.mjs +98 -0
- package/out/com/test/build.mjs +40 -0
- package/out/com/types/module.f.mjs +51 -0
- package/out/com/types/testlib.f.mjs +30 -0
- package/out/commonjs/build/module.f.mjs +107 -0
- package/out/commonjs/build/test.f.mjs +102 -0
- package/out/commonjs/module/function/module.f.mjs +15 -0
- package/out/commonjs/module/module.f.mjs +48 -0
- package/out/commonjs/module.f.mjs +10 -0
- package/out/commonjs/module.mjs +26 -0
- package/out/commonjs/package/dependencies/module.f.mjs +21 -0
- package/out/commonjs/package/dependencies/test.f.mjs +15 -0
- package/out/commonjs/package/module.f.mjs +40 -0
- package/out/commonjs/package/test.f.mjs +27 -0
- package/out/commonjs/path/module.f.mjs +171 -0
- package/out/commonjs/path/test.f.mjs +231 -0
- package/out/commonjs/test.mjs +87 -0
- package/out/dev/index.mjs +2 -0
- package/out/dev/module.f.mjs +2 -0
- package/out/dev/module.mjs +167 -0
- package/out/dev/test/module.f.mjs +134 -0
- package/out/dev/test.f.mjs +58 -0
- package/out/dev/test.mjs +52 -0
- package/out/djs/module.f.mjs +75 -0
- package/out/djs/parser/module.f.mjs +432 -0
- package/out/djs/parser/test.f.mjs +535 -0
- package/out/djs/test.f.mjs +84 -0
- package/out/djs/tokenizer/module.f.mjs +87 -0
- package/out/djs/tokenizer/test.f.mjs +480 -0
- package/out/fsc/module.f.mjs +105 -0
- package/out/fsc/test.f.mjs +19 -0
- package/out/fsm/module.f.mjs +80 -0
- package/out/fsm/test.f.mjs +138 -0
- package/out/html/module.f.mjs +94 -0
- package/out/html/test.f.mjs +45 -0
- package/out/issues/test.f.mjs +66 -0
- package/out/js/tokenizer/module.f.mjs +686 -0
- package/out/js/tokenizer/test.f.mjs +844 -0
- package/out/json/module.f.mjs +89 -0
- package/out/json/parser/module.f.mjs +224 -0
- package/out/json/parser/test.f.mjs +321 -0
- package/out/json/serializer/module.f.mjs +67 -0
- package/out/json/serializer/test.f.mjs +87 -0
- package/out/json/test.f.mjs +61 -0
- package/out/json/tokenizer/module.f.mjs +78 -0
- package/out/json/tokenizer/test.f.mjs +420 -0
- package/out/nanvm-lib/tests/test.f.mjs +87 -0
- package/out/nodejs/version/main.mjs +3 -0
- package/out/nodejs/version/module.f.mjs +34 -0
- package/out/nodejs/version/test.f.mjs +97 -0
- package/out/prime_field/module.f.mjs +87 -0
- package/out/prime_field/test.f.mjs +145 -0
- package/out/secp/module.f.mjs +113 -0
- package/out/secp/test.f.mjs +63 -0
- package/out/sha2/module.f.mjs +172 -0
- package/out/sha2/test.f.mjs +86 -0
- package/out/text/ascii/module.f.mjs +154 -0
- package/out/text/ascii/test.f.mjs +14 -0
- package/out/text/module.f.mjs +19 -0
- package/out/text/sgr/module.f.mjs +17 -0
- package/out/text/test.f.mjs +19 -0
- package/out/text/utf16/module.f.mjs +86 -0
- package/out/text/utf16/test.f.mjs +145 -0
- package/out/text/utf8/module.f.mjs +126 -0
- package/out/text/utf8/test.f.mjs +175 -0
- package/out/types/array/module.f.mjs +95 -0
- package/out/types/array/test.f.mjs +116 -0
- package/out/types/bigfloat/module.f.mjs +77 -0
- package/out/types/bigfloat/test.f.mjs +349 -0
- package/out/types/bigint/module.f.mjs +114 -0
- package/out/types/bigint/test.f.mjs +192 -0
- package/out/types/btree/find/module.f.mjs +137 -0
- package/out/types/btree/find/test.f.mjs +156 -0
- package/out/types/btree/module.f.mjs +34 -0
- package/out/types/btree/remove/module.f.mjs +209 -0
- package/out/types/btree/remove/test.f.mjs +638 -0
- package/out/types/btree/set/module.f.mjs +114 -0
- package/out/types/btree/set/test.f.mjs +390 -0
- package/out/types/btree/test.f.mjs +83 -0
- package/out/types/btree/types/module.f.mjs +50 -0
- package/out/types/byte_set/module.f.mjs +42 -0
- package/out/types/byte_set/test.f.mjs +123 -0
- package/out/types/function/compare/module.f.mjs +22 -0
- package/out/types/function/compare/test.f.mjs +8 -0
- package/out/types/function/module.f.mjs +44 -0
- package/out/types/function/operator/module.f.mjs +60 -0
- package/out/types/function/test.f.mjs +15 -0
- package/out/types/list/module.f.mjs +269 -0
- package/out/types/list/test.f.mjs +401 -0
- package/out/types/map/module.f.mjs +54 -0
- package/out/types/map/test.f.mjs +115 -0
- package/out/types/nibble_set/module.f.mjs +19 -0
- package/out/types/nibble_set/test.f.mjs +90 -0
- package/out/types/nullable/module.f.mjs +9 -0
- package/out/types/nullable/test.f.mjs +12 -0
- package/out/types/number/module.f.mjs +12 -0
- package/out/types/number/test.f.mjs +126 -0
- package/out/types/object/module.f.mjs +27 -0
- package/out/types/object/test.f.mjs +17 -0
- package/out/types/range/module.f.mjs +6 -0
- package/out/types/range/test.f.mjs +18 -0
- package/out/types/range_map/module.f.mjs +84 -0
- package/out/types/range_map/test.f.mjs +201 -0
- package/out/types/result/module.f.mjs +25 -0
- package/out/types/result/module.mjs +16 -0
- package/out/types/sorted_list/module.f.mjs +102 -0
- package/out/types/sorted_list/test.f.mjs +66 -0
- package/out/types/sorted_set/module.f.mjs +29 -0
- package/out/types/sorted_set/test.f.mjs +80 -0
- package/out/types/string/module.f.mjs +17 -0
- package/out/types/string/test.f.mjs +58 -0
- package/out/types/string_set/module.f.mjs +29 -0
- package/out/types/string_set/test.f.mjs +65 -0
- package/package.json +5 -4
- package/tsconfig.json +2 -2
- /package/{com → out/com}/cpp/module.f.d.mts +0 -0
- /package/{com → out/com}/cpp/test.f.d.mts +0 -0
- /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
- /package/{com → out/com}/cs/module.f.d.mts +0 -0
- /package/{com → out/com}/cs/test.f.d.mts +0 -0
- /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
- /package/{com → out/com}/rust/module.f.d.mts +0 -0
- /package/{com → out/com}/rust/test.f.d.mts +0 -0
- /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
- /package/{com → out/com}/test/build.d.mts +0 -0
- /package/{com → out/com}/test/build.f.d.mts +0 -0
- /package/{com → out/com}/types/module.f.d.mts +0 -0
- /package/{com → out/com}/types/testlib.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/build/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/module/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/module.d.mts +0 -0
- /package/{commonjs → out/commonjs}/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/package/dependencies/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/package/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/path/module.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
- /package/{commonjs → out/commonjs}/test.d.mts +0 -0
- /package/{dev → out/dev}/index.d.mts +0 -0
- /package/{dev → out/dev}/module.d.mts +0 -0
- /package/{dev → out/dev}/module.f.d.mts +0 -0
- /package/{dev → out/dev}/test/module.f.d.mts +0 -0
- /package/{dev → out/dev}/test.d.mts +0 -0
- /package/{dev → out/dev}/test.f.d.mts +0 -0
- /package/{djs → out/djs}/module.f.d.mts +0 -0
- /package/{djs → out/djs}/parser/module.f.d.mts +0 -0
- /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
- /package/{djs → out/djs}/test.f.d.mts +0 -0
- /package/{djs → out/djs}/tokenizer/module.f.d.mts +0 -0
- /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
- /package/{fsc → out/fsc}/module.f.d.mts +0 -0
- /package/{fsc → out/fsc}/test.f.d.mts +0 -0
- /package/{fsm → out/fsm}/module.f.d.mts +0 -0
- /package/{fsm → out/fsm}/test.f.d.mts +0 -0
- /package/{html → out/html}/module.f.d.mts +0 -0
- /package/{html → out/html}/test.f.d.mts +0 -0
- /package/{issues → out/issues}/test.f.d.mts +0 -0
- /package/{js → out/js}/tokenizer/module.f.d.mts +0 -0
- /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
- /package/{json → out/json}/module.f.d.mts +0 -0
- /package/{json → out/json}/parser/module.f.d.mts +0 -0
- /package/{json → out/json}/parser/test.f.d.mts +0 -0
- /package/{json → out/json}/serializer/module.f.d.mts +0 -0
- /package/{json → out/json}/serializer/test.f.d.mts +0 -0
- /package/{json → out/json}/test.f.d.mts +0 -0
- /package/{json → out/json}/tokenizer/module.f.d.mts +0 -0
- /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
- /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
- /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
- /package/{nodejs → out/nodejs}/version/module.f.d.mts +0 -0
- /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
- /package/{prime_field → out/prime_field}/module.f.d.mts +0 -0
- /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
- /package/{secp → out/secp}/module.f.d.mts +0 -0
- /package/{secp → out/secp}/test.f.d.mts +0 -0
- /package/{sha2 → out/sha2}/module.f.d.mts +0 -0
- /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
- /package/{text → out/text}/ascii/module.f.d.mts +0 -0
- /package/{text → out/text}/ascii/test.f.d.mts +0 -0
- /package/{text → out/text}/module.f.d.mts +0 -0
- /package/{text → out/text}/sgr/module.f.d.mts +0 -0
- /package/{text → out/text}/test.f.d.mts +0 -0
- /package/{text → out/text}/utf16/module.f.d.mts +0 -0
- /package/{text → out/text}/utf16/test.f.d.mts +0 -0
- /package/{text → out/text}/utf8/module.f.d.mts +0 -0
- /package/{text → out/text}/utf8/test.f.d.mts +0 -0
- /package/{types → out/types}/array/module.f.d.mts +0 -0
- /package/{types → out/types}/array/test.f.d.mts +0 -0
- /package/{types → out/types}/bigfloat/module.f.d.mts +0 -0
- /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
- /package/{types → out/types}/bigint/module.f.d.mts +0 -0
- /package/{types → out/types}/bigint/test.f.d.mts +0 -0
- /package/{types → out/types}/btree/find/module.f.d.mts +0 -0
- /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
- /package/{types → out/types}/btree/module.f.d.mts +0 -0
- /package/{types → out/types}/btree/remove/module.f.d.mts +0 -0
- /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
- /package/{types → out/types}/btree/set/module.f.d.mts +0 -0
- /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
- /package/{types → out/types}/btree/test.f.d.mts +0 -0
- /package/{types → out/types}/btree/types/module.f.d.mts +0 -0
- /package/{types → out/types}/byte_set/module.f.d.mts +0 -0
- /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
- /package/{types → out/types}/function/compare/module.f.d.mts +0 -0
- /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
- /package/{types → out/types}/function/module.f.d.mts +0 -0
- /package/{types → out/types}/function/operator/module.f.d.mts +0 -0
- /package/{types → out/types}/function/test.f.d.mts +0 -0
- /package/{types → out/types}/list/module.f.d.mts +0 -0
- /package/{types → out/types}/list/test.f.d.mts +0 -0
- /package/{types → out/types}/map/module.f.d.mts +0 -0
- /package/{types → out/types}/map/test.f.d.mts +0 -0
- /package/{types → out/types}/nibble_set/module.f.d.mts +0 -0
- /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
- /package/{types → out/types}/nullable/module.f.d.mts +0 -0
- /package/{types → out/types}/nullable/test.f.d.mts +0 -0
- /package/{types → out/types}/number/module.f.d.mts +0 -0
- /package/{types → out/types}/number/test.f.d.mts +0 -0
- /package/{types → out/types}/object/module.f.d.mts +0 -0
- /package/{types → out/types}/object/test.f.d.mts +0 -0
- /package/{types → out/types}/range/module.f.d.mts +0 -0
- /package/{types → out/types}/range/test.f.d.mts +0 -0
- /package/{types → out/types}/range_map/module.f.d.mts +0 -0
- /package/{types → out/types}/range_map/test.f.d.mts +0 -0
- /package/{types → out/types}/result/module.d.mts +0 -0
- /package/{types → out/types}/result/module.f.d.mts +0 -0
- /package/{types → out/types}/sorted_list/module.f.d.mts +0 -0
- /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
- /package/{types → out/types}/sorted_set/module.f.d.mts +0 -0
- /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
- /package/{types → out/types}/string/module.f.d.mts +0 -0
- /package/{types → out/types}/string/test.f.d.mts +0 -0
- /package/{types → out/types}/string_set/module.f.d.mts +0 -0
- /package/{types → out/types}/string_set/test.f.d.mts +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as _ from './module.f.mjs';
|
|
2
|
+
import * as compare from '../function/compare/module.f.mjs';
|
|
3
|
+
const { unsafeCmp } = compare;
|
|
4
|
+
import * as json from '../../json/module.f.mjs';
|
|
5
|
+
import * as object from '../object/module.f.mjs';
|
|
6
|
+
const { sort } = object;
|
|
7
|
+
import * as list from '../list/module.f.mjs';
|
|
8
|
+
const { toArray, countdown, length } = list;
|
|
9
|
+
import * as Map from '../map/module.f.mjs';
|
|
10
|
+
import * as f from '../function/module.f.mjs';
|
|
11
|
+
const { flip } = f;
|
|
12
|
+
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
13
|
+
const stringify = json.stringify(sort);
|
|
14
|
+
/** @type {<T>(a: T) => (b: T) => Map.Sign} */
|
|
15
|
+
const reverseCmp = flip(unsafeCmp);
|
|
16
|
+
export default {
|
|
17
|
+
sortedMergre: [
|
|
18
|
+
() => {
|
|
19
|
+
const result = stringify(toArray(_.merge(unsafeCmp)([2, 3, 4])([1, 3, 5])));
|
|
20
|
+
if (result !== '[1,2,3,4,5]') {
|
|
21
|
+
throw result;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
() => {
|
|
25
|
+
const result = stringify(toArray(_.merge(unsafeCmp)([1, 2, 3])([])));
|
|
26
|
+
if (result !== '[1,2,3]') {
|
|
27
|
+
throw result;
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
() => {
|
|
31
|
+
const n = 10_000;
|
|
32
|
+
const list = countdown(n);
|
|
33
|
+
const result = _.merge(reverseCmp)(list)(list);
|
|
34
|
+
const len = length(result);
|
|
35
|
+
if (len != n) {
|
|
36
|
+
throw result;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
find: [
|
|
41
|
+
() => {
|
|
42
|
+
const result = _.find(unsafeCmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
43
|
+
if (result !== 0) {
|
|
44
|
+
throw result;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
() => {
|
|
48
|
+
const result = _.find(unsafeCmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
49
|
+
if (result !== null) {
|
|
50
|
+
throw result;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
() => {
|
|
54
|
+
const result = _.find(unsafeCmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
55
|
+
if (result !== null) {
|
|
56
|
+
throw result;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
() => {
|
|
60
|
+
const result = _.find(unsafeCmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
61
|
+
if (result !== 80) {
|
|
62
|
+
throw result;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @ts-self-types="./module.f.d.mts"
|
|
2
|
+
import * as Compare from '../function/compare/module.f.mjs';
|
|
3
|
+
import * as list from "../list/module.f.mjs";
|
|
4
|
+
const { toArray } = list;
|
|
5
|
+
import * as sortedList from '../sorted_list/module.f.mjs';
|
|
6
|
+
const { merge, genericMerge, find } = sortedList;
|
|
7
|
+
/**
|
|
8
|
+
* @template T
|
|
9
|
+
* @typedef {readonly T[]} SortedSet
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @template T
|
|
13
|
+
* @typedef {(a: T) => (b: T) => Compare.Sign} Cmp
|
|
14
|
+
*/
|
|
15
|
+
/** @typedef {number} Byte */
|
|
16
|
+
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
17
|
+
export const union = cmp => a => b => toArray(merge(cmp)(a)(b));
|
|
18
|
+
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
19
|
+
export const intersect = cmp => a => b => toArray(intersectMerge(cmp)(a)(b));
|
|
20
|
+
const tailReduce = () => () => null;
|
|
21
|
+
/** @type {<T>(cmp: Cmp<T>) => (a: sortedList.SortedList<T>) => (b: sortedList.SortedList<T>) => sortedList.SortedList<T>} */
|
|
22
|
+
const intersectMerge = cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null);
|
|
23
|
+
/** @type {<T,S>(cmp: Cmp<T>) => sortedList.ReduceOp<T,S>} */
|
|
24
|
+
const intersectReduce = cmp => state => a => b => {
|
|
25
|
+
const sign = cmp(a)(b);
|
|
26
|
+
return [sign === 0 ? a : null, sign, state];
|
|
27
|
+
};
|
|
28
|
+
/** @type {<T>(cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean} */
|
|
29
|
+
export const has = cmp => value => set => find(cmp)(value)(set) === value;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as _ from './module.f.mjs';
|
|
2
|
+
import * as compare from '../function/compare/module.f.mjs';
|
|
3
|
+
const { unsafeCmp } = compare;
|
|
4
|
+
import * as json from '../../json/module.f.mjs';
|
|
5
|
+
import * as object from '../object/module.f.mjs';
|
|
6
|
+
const { sort } = object;
|
|
7
|
+
import * as list from '../list/module.f.mjs';
|
|
8
|
+
const { toArray, countdown, length } = list;
|
|
9
|
+
import * as Map from '../map/module.f.mjs';
|
|
10
|
+
import * as f from '../function/module.f.mjs';
|
|
11
|
+
const { flip } = f;
|
|
12
|
+
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
13
|
+
const stringify = a => json.stringify(sort)(a);
|
|
14
|
+
/** @type {<T>(a: T) => (b: T) => Map.Sign} */
|
|
15
|
+
const reverseCmp = flip(unsafeCmp);
|
|
16
|
+
export default {
|
|
17
|
+
union: [
|
|
18
|
+
() => {
|
|
19
|
+
const result = stringify(toArray(_.union(unsafeCmp)([2, 3, 4])([1, 3, 5])));
|
|
20
|
+
if (result !== '[1,2,3,4,5]') {
|
|
21
|
+
throw result;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
() => {
|
|
25
|
+
const result = stringify(toArray(_.union(unsafeCmp)([1, 2, 3])([])));
|
|
26
|
+
if (result !== '[1,2,3]') {
|
|
27
|
+
throw result;
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
() => {
|
|
31
|
+
const n = 10_000;
|
|
32
|
+
const sortedSet = toArray(countdown(n));
|
|
33
|
+
const result = _.union(reverseCmp)(sortedSet)(sortedSet);
|
|
34
|
+
const len = length(result);
|
|
35
|
+
if (len != n) {
|
|
36
|
+
throw result;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
intersect: [
|
|
41
|
+
() => {
|
|
42
|
+
const result = stringify(toArray(_.intersect(unsafeCmp)([2, 3, 4])([1, 3, 5])));
|
|
43
|
+
if (result !== '[3]') {
|
|
44
|
+
throw result;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
() => {
|
|
48
|
+
const result = stringify(toArray(_.intersect(unsafeCmp)([1, 2, 3])([])));
|
|
49
|
+
if (result !== '[]') {
|
|
50
|
+
throw result;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
has: [
|
|
55
|
+
() => {
|
|
56
|
+
const result = _.has(unsafeCmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
57
|
+
if (!result) {
|
|
58
|
+
throw result;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
() => {
|
|
62
|
+
const result = _.has(unsafeCmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
63
|
+
if (result) {
|
|
64
|
+
throw result;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
() => {
|
|
68
|
+
const result = _.has(unsafeCmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
69
|
+
if (result) {
|
|
70
|
+
throw result;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
() => {
|
|
74
|
+
const result = _.has(unsafeCmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
|
|
75
|
+
if (!result) {
|
|
76
|
+
throw result;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// @ts-self-types="./module.f.d.mts"
|
|
2
|
+
import * as list from '../list/module.f.mjs';
|
|
3
|
+
const { reduce: listReduce, repeat: listRepeat } = list;
|
|
4
|
+
import * as f from '../function/module.f.mjs';
|
|
5
|
+
const { compose } = f;
|
|
6
|
+
import * as compare from '../function/compare/module.f.mjs';
|
|
7
|
+
const { unsafeCmp } = compare;
|
|
8
|
+
import * as op from '../function/operator/module.f.mjs';
|
|
9
|
+
const { join: joinOp, concat: concatOp } = op;
|
|
10
|
+
/** @type {(o: op.Reduce<string>) => (input: list.List<string>) => string} */
|
|
11
|
+
const reduce = o => listReduce(o)('');
|
|
12
|
+
export const join = compose(joinOp)(reduce);
|
|
13
|
+
export const concat = reduce(concatOp);
|
|
14
|
+
/** @type {(n: string) => (v: number) => string} */
|
|
15
|
+
export const repeat = v => compose(listRepeat(v))(concat);
|
|
16
|
+
/** @type {(a: string) => (b: string) => compare.Sign} */
|
|
17
|
+
export const cmp = unsafeCmp;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as _ from './module.f.mjs';
|
|
2
|
+
const { join, concat, repeat, cmp } = _;
|
|
3
|
+
import * as list from '../list/module.f.mjs';
|
|
4
|
+
const { repeat: repeatList } = list;
|
|
5
|
+
export default {
|
|
6
|
+
join: {
|
|
7
|
+
0: () => {
|
|
8
|
+
const result = join('/')([]);
|
|
9
|
+
if (result !== '') {
|
|
10
|
+
throw result;
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
1: () => {
|
|
14
|
+
const result = join('/')(['']);
|
|
15
|
+
if (result !== '') {
|
|
16
|
+
throw result;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
3: () => {
|
|
20
|
+
const result = join(' ')(['hello', 'world', '!']);
|
|
21
|
+
if (result !== 'hello world !') {
|
|
22
|
+
throw result;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
concat: () => {
|
|
27
|
+
const result = concat(['hello', 'world']);
|
|
28
|
+
if (result !== 'helloworld') {
|
|
29
|
+
throw result;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
repeatList: {
|
|
33
|
+
0: () => {
|
|
34
|
+
const s = join('.')(repeatList('x')(0));
|
|
35
|
+
if (s != '') {
|
|
36
|
+
throw s;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
5: () => {
|
|
40
|
+
const s = join('.')(repeatList('x')(5));
|
|
41
|
+
if (s != 'x.x.x.x.x') {
|
|
42
|
+
throw s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
repeat: () => {
|
|
47
|
+
const s = repeat('x')(5);
|
|
48
|
+
if (s != 'xxxxx') {
|
|
49
|
+
throw s;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
cmp: () => {
|
|
53
|
+
const result = cmp('3')('4');
|
|
54
|
+
if (result !== -1) {
|
|
55
|
+
throw result;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @ts-self-types="./module.f.d.mts"
|
|
2
|
+
import * as BtreeTypes from '../btree/types/module.f.mjs';
|
|
3
|
+
import * as btree from '../btree/module.f.mjs';
|
|
4
|
+
import * as btf from '../btree/find/module.f.mjs';
|
|
5
|
+
const { find, isFound } = btf;
|
|
6
|
+
import * as btr from '../btree/remove/module.f.mjs';
|
|
7
|
+
const { remove: btreeRemove } = btr;
|
|
8
|
+
import * as bts from '../btree/set/module.f.mjs';
|
|
9
|
+
const { set: btreeSet } = bts;
|
|
10
|
+
export const {
|
|
11
|
+
/** @type {(s: StringSet) => list.List<string>} */
|
|
12
|
+
values, empty, } = btree;
|
|
13
|
+
import * as string from "../string/module.f.mjs";
|
|
14
|
+
const { cmp } = string;
|
|
15
|
+
import * as list from '../list/module.f.mjs';
|
|
16
|
+
const { fold } = list;
|
|
17
|
+
import * as f from '../function/module.f.mjs';
|
|
18
|
+
const { compose } = f;
|
|
19
|
+
/** @typedef {BtreeTypes.Tree<string>} StringSet */
|
|
20
|
+
/** @type {(value: string) => (set: StringSet) => boolean} */
|
|
21
|
+
export const contains = value => {
|
|
22
|
+
const f = find(cmp(value));
|
|
23
|
+
return s => s !== null && isFound(f(s).first);
|
|
24
|
+
};
|
|
25
|
+
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
26
|
+
export const set = value => btreeSet(cmp(value))(() => value);
|
|
27
|
+
export const fromValues = fold(set)(null);
|
|
28
|
+
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
29
|
+
export const remove = compose(cmp)(btreeRemove);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as _ from './module.f.mjs';
|
|
2
|
+
export default {
|
|
3
|
+
contains: () => {
|
|
4
|
+
const r = _.set('hello')(null);
|
|
5
|
+
if (!_.contains('hello')(r)) {
|
|
6
|
+
throw r;
|
|
7
|
+
}
|
|
8
|
+
if (_.contains('hello1')(r)) {
|
|
9
|
+
throw r;
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
remove: () => {
|
|
13
|
+
let r = _.set('hello')(null);
|
|
14
|
+
r = _.set('world')(r);
|
|
15
|
+
r = _.set('HELLO')(r);
|
|
16
|
+
r = _.set('WORLD!')(r);
|
|
17
|
+
if (!_.contains('hello')(r)) {
|
|
18
|
+
throw r;
|
|
19
|
+
}
|
|
20
|
+
if (_.contains('hello1')(r)) {
|
|
21
|
+
throw r;
|
|
22
|
+
}
|
|
23
|
+
if (!_.contains('HELLO')(r)) {
|
|
24
|
+
throw r;
|
|
25
|
+
}
|
|
26
|
+
if (_.contains('WORLD')(r)) {
|
|
27
|
+
throw r;
|
|
28
|
+
}
|
|
29
|
+
if (!_.contains('world')(r)) {
|
|
30
|
+
throw r;
|
|
31
|
+
}
|
|
32
|
+
if (_.contains('world!')(r)) {
|
|
33
|
+
throw r;
|
|
34
|
+
}
|
|
35
|
+
if (!_.contains('WORLD!')(r)) {
|
|
36
|
+
throw r;
|
|
37
|
+
}
|
|
38
|
+
//
|
|
39
|
+
r = _.remove('hello')(r);
|
|
40
|
+
if (_.contains('hello')(r)) {
|
|
41
|
+
throw r;
|
|
42
|
+
}
|
|
43
|
+
if (!_.contains('world')(r)) {
|
|
44
|
+
throw r;
|
|
45
|
+
}
|
|
46
|
+
r = _.remove('world')(r);
|
|
47
|
+
if (_.contains('world')(r)) {
|
|
48
|
+
throw r;
|
|
49
|
+
}
|
|
50
|
+
if (!_.contains('HELLO')(r)) {
|
|
51
|
+
throw r;
|
|
52
|
+
}
|
|
53
|
+
r = _.remove('HELLO')(r);
|
|
54
|
+
if (_.contains('HELLO')(r)) {
|
|
55
|
+
throw r;
|
|
56
|
+
}
|
|
57
|
+
if (!_.contains('WORLD!')(r)) {
|
|
58
|
+
throw r;
|
|
59
|
+
}
|
|
60
|
+
r = _.remove('WORLD!')(r);
|
|
61
|
+
if (r !== null) {
|
|
62
|
+
throw r;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functionalscript",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "FunctionalScript is a functional subset of JavaScript",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"tscp": "
|
|
7
|
+
"tscp": "rm -rf out/ && tsc --NoEmit false",
|
|
8
8
|
"tsc": "tsc",
|
|
9
9
|
"test": "tsc && npm run test-only",
|
|
10
10
|
"index": "node ./dev/index.mjs",
|
|
11
11
|
"version": "node ./nodejs/version/main.mjs",
|
|
12
12
|
"test-only": "node --trace-uncaught ./dev/test.mjs",
|
|
13
|
-
"comtest": "node ./com/test/build.mjs"
|
|
13
|
+
"comtest": "node ./com/test/build.mjs",
|
|
14
|
+
"doc": "rm -rf docs/ && npm run tscp && deno doc --html out/**/module.f.mjs"
|
|
14
15
|
},
|
|
15
16
|
"repository": {
|
|
16
17
|
"type": "git",
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
},
|
|
33
34
|
"homepage": "https://github.com/functionalscript/functionalscript#readme",
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@types/node": "^22.10.
|
|
36
|
+
"@types/node": "^22.10.2",
|
|
36
37
|
"typescript": "^5.7.2"
|
|
37
38
|
}
|
|
38
39
|
}
|
package/tsconfig.json
CHANGED
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
|
|
43
43
|
|
|
44
44
|
/* Emit */
|
|
45
|
-
|
|
45
|
+
"declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
|
46
46
|
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
|
47
47
|
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
|
48
48
|
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
|
49
49
|
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
|
|
50
|
-
|
|
50
|
+
"outDir": "./out", /* Specify an output folder for all emitted files. */
|
|
51
51
|
// "removeComments": true, /* Disable emitting comments. */
|
|
52
52
|
"noEmit": true, /* Disable emitting files from a compilation. */
|
|
53
53
|
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|