functionalscript 0.0.342 → 0.0.349
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/.github/workflows/node.js.yml +2 -0
- package/.github/workflows/npm-publish.yml +1 -1
- package/commonjs/README.md +14 -8
- package/commonjs/build/{index.js → main.f.js} +14 -8
- package/commonjs/build/{test.js → test.f.js} +6 -6
- package/commonjs/main.f.js +20 -0
- package/commonjs/module/function/{index.js → main.f.js} +1 -1
- package/commonjs/module/{index.js → main.f.js} +3 -1
- package/commonjs/package/dependencies/{index.js → main.f.js} +3 -3
- package/commonjs/package/dependencies/{test.js → test.f.js} +1 -1
- package/commonjs/package/{index.js → main.f.js} +8 -3
- package/commonjs/package/{test.js → test.f.js} +2 -2
- package/commonjs/path/{index.js → main.f.js} +3 -3
- package/commonjs/path/{test.js → test.f.js} +7 -7
- package/dev/{index.js → main.f.js} +0 -0
- package/html/{index.js → main.f.js} +3 -4
- package/html/test.f.js +13 -0
- package/io/commonjs/{index.js → main.js} +3 -3
- package/io/commonjs/test.js +2 -2
- package/io/nodejs/version/{index.js → main.js} +0 -0
- package/io/result/{index.js → main.js} +1 -1
- package/json/{index.js → main.f.js} +31 -29
- package/json/{test.js → test.f.js} +3 -3
- package/json/tokenizer/{index.js → main.f.js} +3 -3
- package/json/tokenizer/{test.js → test.f.js} +4 -4
- package/main.f.js +14 -0
- package/package.json +6 -5
- package/sha2/{index.js → main.f.js} +1 -1
- package/sha2/{test.js → test.f.js} +4 -4
- package/test.f.js +78 -0
- package/types/array/{index.js → main.f.js} +1 -2
- package/types/array/{test.js → test.f.js} +3 -3
- package/types/btree/find/{index.js → main.f.js} +4 -4
- package/types/btree/find/{test.js → test.f.js} +7 -7
- package/types/btree/main.f.js +40 -0
- package/types/btree/remove/{index.js → main.f.js} +6 -6
- package/types/btree/remove/{test.js → test.f.js} +6 -6
- package/types/btree/set/{index.js → main.f.js} +4 -4
- package/types/btree/set/{test.js → test.f.js} +5 -5
- package/types/btree/{test.js → test.f.js} +11 -11
- package/types/btree/{index.js → types/main.f.js} +1 -33
- package/types/function/compare/{index.js → main.f.js} +1 -1
- package/types/function/compare/{test.js → test.f.js} +1 -1
- package/types/function/{index.js → main.f.js} +4 -0
- package/types/function/operator/{index.js → main.f.js} +0 -0
- package/types/list/{index.js → main.f.js} +3 -3
- package/types/list/{test.js → test.f.js} +4 -4
- package/types/main.f.js +20 -0
- package/types/map/{index.js → main.f.js} +10 -9
- package/types/map/{test.js → test.f.js} +3 -3
- package/types/object/{index.js → main.f.js} +2 -2
- package/types/object/{test.js → test.f.js} +1 -1
- package/types/option/{index.js → main.f.js} +0 -0
- package/types/range/{index.js → main.f.js} +0 -0
- package/types/range/{test.js → test.f.js} +1 -1
- package/types/result/{index.js → main.f.js} +0 -0
- package/types/{stringSet/index.js → stringset/main.f.js} +9 -10
- package/types/{stringSet/test.js → stringset/test.f.js} +1 -1
- package/commonjs/index.js +0 -11
- package/html/test.js +0 -6
- package/index.js +0 -76
- package/test.js +0 -125
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const list = require('../../list/
|
|
3
|
-
const cmp = require('../../function/compare/
|
|
4
|
-
const array = require('../../array/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const list = require('../../list/main.f.js')
|
|
3
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
4
|
+
const array = require('../../array/main.f.js')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @template T
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const list = require('../../list/
|
|
3
|
-
const json = require('../../../json/
|
|
4
|
-
const { sort } = require('../../object/
|
|
5
|
-
const btree = require('../
|
|
6
|
-
const { stringCmp } = require('../../function/compare/
|
|
7
|
-
const s = require('../set/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const list = require('../../list/main.f.js')
|
|
3
|
+
const json = require('../../../json/main.f.js')
|
|
4
|
+
const { sort } = require('../../object/main.f.js')
|
|
5
|
+
const btree = require('../types/main.f.js')
|
|
6
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
7
|
+
const s = require('../set/main.f.js')
|
|
8
8
|
|
|
9
9
|
const jsonStr = json.stringify(sort)
|
|
10
10
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const list = require('../list/main.f.js')
|
|
2
|
+
const option = require('../option/main.f.js')
|
|
3
|
+
const _ = require('./types/main.f.js')
|
|
4
|
+
|
|
5
|
+
/** @type {<T>(node: _.Node<T>) => list.Thunk<T>} */
|
|
6
|
+
const nodeValues = node => () => {
|
|
7
|
+
switch (node.length) {
|
|
8
|
+
case 1: case 2: { return node }
|
|
9
|
+
case 3: {
|
|
10
|
+
return list.flat([
|
|
11
|
+
nodeValues(node[0]),
|
|
12
|
+
[node[1]],
|
|
13
|
+
nodeValues(node[2])
|
|
14
|
+
])
|
|
15
|
+
}
|
|
16
|
+
default: {
|
|
17
|
+
return list.flat([
|
|
18
|
+
nodeValues(node[0]),
|
|
19
|
+
[node[1]],
|
|
20
|
+
nodeValues(node[2]),
|
|
21
|
+
[node[3]],
|
|
22
|
+
nodeValues(node[4])
|
|
23
|
+
])
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** @type {<T>(tree: _.Tree<T>) => list.List<T>} */
|
|
29
|
+
const values = option.map(nodeValues)
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
/** @readonly */
|
|
33
|
+
find: require('./find/main.f.js'),
|
|
34
|
+
/** @readonly */
|
|
35
|
+
remove: require('./remove/main.f.js'),
|
|
36
|
+
/** @readonly */
|
|
37
|
+
set: require('./set/main.f.js'),
|
|
38
|
+
/** @readonly */
|
|
39
|
+
values,
|
|
40
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const cmp = require('../../function/compare/
|
|
3
|
-
const find = require('../find/
|
|
4
|
-
const list = require('../../list/
|
|
5
|
-
const array = require('../../array/
|
|
6
|
-
const option = require('../../option/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
3
|
+
const find = require('../find/main.f.js')
|
|
4
|
+
const list = require('../../list/main.f.js')
|
|
5
|
+
const array = require('../../array/main.f.js')
|
|
6
|
+
const option = require('../../option/main.f.js')
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @template T
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const btree = require('../
|
|
3
|
-
const s = require('../set/
|
|
4
|
-
const { stringCmp } = require('../../function/compare/
|
|
5
|
-
const json = require('../../../json/
|
|
6
|
-
const { sort } = require('../../object/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const btree = require('../types/main.f.js')
|
|
3
|
+
const s = require('../set/main.f.js')
|
|
4
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
5
|
+
const json = require('../../../json/main.f.js')
|
|
6
|
+
const { sort } = require('../../object/main.f.js')
|
|
7
7
|
|
|
8
8
|
/** @type {(node: btree.Node<string>) => (value: string) => btree.Node<string>} */
|
|
9
9
|
const set = node => value => s.set(stringCmp(value))(value)(node)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const find = require('../find/
|
|
3
|
-
const cmp = require('../../function/compare/
|
|
4
|
-
const list = require('../../list/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const find = require('../find/main.f.js')
|
|
3
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
4
|
+
const list = require('../../list/main.f.js')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @template T
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const btree = require('../
|
|
3
|
-
const { stringCmp } = require('../../function/compare/
|
|
4
|
-
const json = require('../../../json/
|
|
5
|
-
const { sort } = require('../../object/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const btree = require('../types/main.f.js')
|
|
3
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
4
|
+
const json = require('../../../json/main.f.js')
|
|
5
|
+
const { sort } = require('../../object/main.f.js')
|
|
6
6
|
|
|
7
7
|
/** @type {(node: btree.Node<string>) => (value: string) => btree.Node<string>} */
|
|
8
8
|
const set = node => value => _.set(stringCmp(value))(value)(node)
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const btree = require('./
|
|
2
|
-
const { values } =
|
|
3
|
-
const json = require('../../json/
|
|
4
|
-
const { sort } = require('../object/
|
|
5
|
-
const { stringCmp } = require('../function/compare/
|
|
6
|
-
const list = require('../list/
|
|
7
|
-
const s = require('./set/
|
|
8
|
-
const f = require('./find/
|
|
1
|
+
const btree = require('./types/main.f.js')
|
|
2
|
+
const { values } = require('./main.f.js')
|
|
3
|
+
const json = require('../../json/main.f.js')
|
|
4
|
+
const { sort } = require('../object/main.f.js')
|
|
5
|
+
const { stringCmp } = require('../function/compare/main.f.js')
|
|
6
|
+
const list = require('../list/main.f.js')
|
|
7
|
+
const s = require('./set/main.f.js')
|
|
8
|
+
const f = require('./find/main.f.js')
|
|
9
9
|
|
|
10
|
-
require('./find/test.js')
|
|
11
|
-
require('./set/test.js')
|
|
12
|
-
require('./remove/test.js')
|
|
10
|
+
require('./find/test.f.js')
|
|
11
|
+
require('./set/test.f.js')
|
|
12
|
+
require('./remove/test.f.js')
|
|
13
13
|
|
|
14
14
|
const jsonStr = json.stringify(sort)
|
|
15
15
|
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
const seq = require('../list/index.js')
|
|
2
|
-
const option = require('../option/index.js')
|
|
3
|
-
|
|
4
1
|
/**
|
|
5
2
|
* @template T
|
|
6
3
|
* @typedef {readonly[T]} Array1
|
|
@@ -54,29 +51,6 @@ const option = require('../option/index.js')
|
|
|
54
51
|
* @typedef {Node<T> | undefined} Tree
|
|
55
52
|
*/
|
|
56
53
|
|
|
57
|
-
/** @type {<T>(node: Node<T>) => seq.Thunk<T>} */
|
|
58
|
-
const nodeValues = node => () => {
|
|
59
|
-
switch (node.length) {
|
|
60
|
-
case 1: case 2: { return node }
|
|
61
|
-
case 3: {
|
|
62
|
-
return seq.flat([
|
|
63
|
-
nodeValues(node[0]),
|
|
64
|
-
[node[1]],
|
|
65
|
-
nodeValues(node[2])
|
|
66
|
-
])
|
|
67
|
-
}
|
|
68
|
-
default: {
|
|
69
|
-
return seq.flat([
|
|
70
|
-
nodeValues(node[0]),
|
|
71
|
-
[node[1]],
|
|
72
|
-
nodeValues(node[2]),
|
|
73
|
-
[node[3]],
|
|
74
|
-
nodeValues(node[4])
|
|
75
|
-
])
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
54
|
/**
|
|
81
55
|
* @template T
|
|
82
56
|
* @typedef {readonly[Node<T>]} Branch1
|
|
@@ -87,10 +61,4 @@ const nodeValues = node => () => {
|
|
|
87
61
|
* @typedef { readonly[...Branch5<T>, T, Node<T>] } Branch7
|
|
88
62
|
*/
|
|
89
63
|
|
|
90
|
-
|
|
91
|
-
const values = option.map(nodeValues)
|
|
92
|
-
|
|
93
|
-
module.exports = {
|
|
94
|
-
/** @readonly */
|
|
95
|
-
values,
|
|
96
|
-
}
|
|
64
|
+
module.exports = {}
|
|
@@ -18,6 +18,10 @@ const identity = value => value
|
|
|
18
18
|
const flip = f => b => a => f(a)(b)
|
|
19
19
|
|
|
20
20
|
module.exports = {
|
|
21
|
+
/** @readonly */
|
|
22
|
+
compare: require('./compare/main.f.js'),
|
|
23
|
+
/** @readonly */
|
|
24
|
+
operator: require('./operator/main.f.js'),
|
|
21
25
|
/** @readonly */
|
|
22
26
|
identity,
|
|
23
27
|
/** @readonly */
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const { compose, identity } = require('../function/
|
|
2
|
-
const operator = require('../function/operator/
|
|
3
|
-
const { logicalNot, strictEqual, stateScanToScan, reduceToScan, foldToScan } =
|
|
1
|
+
const { compose, identity } = require('../function/main.f.js')
|
|
2
|
+
const operator = require('../function/operator/main.f.js')
|
|
3
|
+
const { logicalNot, strictEqual, stateScanToScan, reduceToScan, foldToScan } = operator
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @template T
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const json = require('../../json/
|
|
3
|
-
const { sort } = require('../object/
|
|
4
|
-
const { addition, strictEqual, foldToScan } = require('../function/operator/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const json = require('../../json/main.f.js')
|
|
3
|
+
const { sort } = require('../object/main.f.js')
|
|
4
|
+
const { addition, strictEqual, foldToScan } = require('../function/operator/main.f.js')
|
|
5
5
|
|
|
6
6
|
/** @type {(sequence: _.List<json.Unknown>) => string} */
|
|
7
7
|
const stringify = sequence => json.stringify(sort)(_.toArray(sequence))
|
package/types/main.f.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
/** @readonly */
|
|
3
|
+
array: require('./array/main.f.js'),
|
|
4
|
+
/** @readonly */
|
|
5
|
+
btree: require('./btree/main.f.js'),
|
|
6
|
+
/** @readonly */
|
|
7
|
+
function: require('./function/main.f.js'),
|
|
8
|
+
/** @readonly */
|
|
9
|
+
list: require('./list/main.f.js'),
|
|
10
|
+
/** @readonly */
|
|
11
|
+
map: require('./map/main.f.js'),
|
|
12
|
+
/** @readonly */
|
|
13
|
+
object: require('./object/main.f.js'),
|
|
14
|
+
/** @readonly */
|
|
15
|
+
range: require('./range/main.f.js'),
|
|
16
|
+
/** @readonly */
|
|
17
|
+
result: require('./result/main.f.js'),
|
|
18
|
+
/** @readonly */
|
|
19
|
+
stringSet: require('./stringset/main.f.js'),
|
|
20
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
1
|
+
const btTypes = require('../btree/types/main.f.js')
|
|
2
|
+
const btree = require('../btree/main.f.js')
|
|
3
|
+
const { values } = require("../btree/main.f.js")
|
|
4
|
+
const find = require('../btree/find/main.f.js')
|
|
5
|
+
const s = require('../btree/set/main.f.js')
|
|
6
|
+
const compare = require('../function/compare/main.f.js')
|
|
7
|
+
const { stringCmp } = require('../function/compare/main.f.js')
|
|
8
|
+
const list = require('../list/main.f.js')
|
|
9
|
+
const btRemove = require('../btree/remove/main.f.js')
|
|
9
10
|
|
|
10
11
|
/** @typedef {compare.Sign} Sign */
|
|
11
12
|
|
|
@@ -21,7 +22,7 @@ const btRemove = require('../btree/remove/index.js')
|
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* @template T
|
|
24
|
-
* @typedef {
|
|
25
|
+
* @typedef {btTypes.Tree<Entry<T>>} Map
|
|
25
26
|
*/
|
|
26
27
|
|
|
27
28
|
/** @type {(a: string) => <T>(b: Entry<T>) => Sign} */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const { at, set, empty, entries, remove } = require('./
|
|
2
|
-
const seq = require('../list/
|
|
1
|
+
const { at, set, empty, entries, remove } = require('./main.f.js')
|
|
2
|
+
const seq = require('../list/main.f.js')
|
|
3
3
|
|
|
4
4
|
{
|
|
5
5
|
let m = set('a')(1)(undefined)
|
|
@@ -53,7 +53,7 @@ const seq = require('../list/index.js')
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
{
|
|
56
|
-
/** @type {import('.').Map<number>} */
|
|
56
|
+
/** @type {import('./main.f').Map<number>} */
|
|
57
57
|
let m = empty
|
|
58
58
|
for (let i = 0; i < 100_000; ++i) {
|
|
59
59
|
m = set((i * i).toString())(i)(m)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const { compose } = require('../function/index.js')
|
|
1
|
+
const btTypes = require('../btree/types/main.f.js')
|
|
2
|
+
const btree = require('../btree/main.f.js')
|
|
3
|
+
const { find } = btree
|
|
4
|
+
const { stringCmp } = require("../function/compare/main.f.js")
|
|
5
|
+
const list = require('../list/main.f.js')
|
|
6
|
+
const { compose } = require('../function/main.f.js')
|
|
8
7
|
|
|
9
|
-
/** @typedef {
|
|
8
|
+
/** @typedef {btTypes.Tree<string>} StringSet */
|
|
10
9
|
|
|
11
10
|
/** @type {(value: string) => (set: StringSet) => boolean} */
|
|
12
11
|
const contains = value => s => s !== undefined && find.isFound(find.find(stringCmp(value))(s).first)
|
|
13
12
|
|
|
14
13
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
15
|
-
const set = value =>
|
|
14
|
+
const set = value => btree.set.set(stringCmp(value))(value)
|
|
16
15
|
|
|
17
16
|
/** @type {(s: StringSet) => list.List<string>} */
|
|
18
17
|
const values = btree.values
|
|
@@ -20,7 +19,7 @@ const values = btree.values
|
|
|
20
19
|
const fromValues = list.reduce(set)(undefined)
|
|
21
20
|
|
|
22
21
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
23
|
-
const remove = compose(stringCmp)(
|
|
22
|
+
const remove = compose(stringCmp)(btree.remove.remove)
|
|
24
23
|
|
|
25
24
|
module.exports = {
|
|
26
25
|
/** @readonly */
|
package/commonjs/index.js
DELETED
package/html/test.js
DELETED
package/index.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/** @type {<F>(c: string, found: (before: string, after: string) => F, notFound: (c: string, source: string) => F) => (source: string) => F} */
|
|
2
|
-
const splitOne = (c, found, notFound) => source => {
|
|
3
|
-
const i = source.indexOf(c)
|
|
4
|
-
return i !== -1 ? found(source.substring(0, i), source.substring(i + 1)) : notFound(c, source)
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/** @type {<T>(f: (_: T) => boolean) => (_: Iterable<T>) => boolean} */
|
|
8
|
-
const every = f => i => {
|
|
9
|
-
for (let e of i) {
|
|
10
|
-
if (!f(e)) {
|
|
11
|
-
return false
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return true
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** @typedef {{org: string, name: string}} RepoId */
|
|
18
|
-
/** @typedef {{repo: RepoId}} ModuleRepoId */
|
|
19
|
-
/** @typedef {{repo: RepoId, branch: string}} ModuleRepoBranchId */
|
|
20
|
-
/** @typedef {{repo: RepoId, commit: string}} ModuleRepoCommitId */
|
|
21
|
-
/** @typedef {ModuleRepoId|ModuleRepoBranchId|ModuleRepoCommitId} ModuleId */
|
|
22
|
-
|
|
23
|
-
/** @typedef {(..._: string[]) => string} GetMsg */
|
|
24
|
-
/** @typedef {'expected'|'unknownProtocol'} ErrorId */
|
|
25
|
-
/** @typedef {{[_ in ErrorId]: GetMsg}} ErrorMap */
|
|
26
|
-
/** @typedef {{ id: ErrorId, params: string[]}} ErrorValue */
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @template T
|
|
30
|
-
* @typedef {<R>(v: (_: T) => R, e: (_: ErrorValue) => R) => R} Result
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/** @type {<T>(_: T) => Result<T>} */
|
|
34
|
-
const value = v => vf => vf(v)
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @typedef {<R, T>(_: (_: T) => R, e: (_: ErrorValue) => R) => R} ErrorResult
|
|
38
|
-
*/
|
|
39
|
-
|
|
40
|
-
/** @type {(e: ErrorValue) => ErrorResult} */
|
|
41
|
-
const error = e => (_, ef) => ef(e)
|
|
42
|
-
|
|
43
|
-
/** @type {(id: ErrorId) => (...params: string[]) => ErrorResult} */
|
|
44
|
-
const createError = id => (...params) => error({ id, params })
|
|
45
|
-
|
|
46
|
-
/** @type {(_: string) => Result<ModuleId>} */
|
|
47
|
-
const parseRepo = repo => {
|
|
48
|
-
const s = repo.split('/')
|
|
49
|
-
return s.length === 2 ? value({ repo: { org: s[0], name: s[1] } }) : createError('expected')('/', repo)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** @type {(_: string) => boolean} */
|
|
53
|
-
const isCommit = name => name.length === 40 && every(c => "0123456789ABCDEFabcdef".includes(c))(name)
|
|
54
|
-
|
|
55
|
-
/** @type {(repo: string, branch: string) => Result<ModuleId>} */
|
|
56
|
-
const parseRepoAndBranchCommit = (repo, branchCommit) =>
|
|
57
|
-
parseRepo(repo)(
|
|
58
|
-
({repo}) => value(isCommit(branchCommit) ? { repo, commit: branchCommit } : { repo, branch: branchCommit }),
|
|
59
|
-
error)
|
|
60
|
-
|
|
61
|
-
const parseGitHubId = splitOne('#', parseRepoAndBranchCommit, (_, repo) => parseRepo(repo))
|
|
62
|
-
|
|
63
|
-
/** @type {(protocol: string, id: string) => Result<ModuleId>} */
|
|
64
|
-
const parseProtocolAndId = (protocol, id) => protocol === 'github'
|
|
65
|
-
? parseGitHubId(id) : createError('unknownProtocol')(protocol)
|
|
66
|
-
|
|
67
|
-
module.exports = {
|
|
68
|
-
every,
|
|
69
|
-
isCommit,
|
|
70
|
-
parseModuleUrl: splitOne(':', parseProtocolAndId, createError('expected')),
|
|
71
|
-
/** @type {ErrorMap} */
|
|
72
|
-
errorMap: {
|
|
73
|
-
expected: (c, s) => `expected '${c}' in '${s}'`,
|
|
74
|
-
unknownProtocol: protocol => `unknown protocol '${protocol}'`,
|
|
75
|
-
},
|
|
76
|
-
}
|
package/test.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
const i = require('./index.js')
|
|
2
|
-
|
|
3
|
-
require('./types/list/test.js')
|
|
4
|
-
require('./types/array/test.js')
|
|
5
|
-
require('./types/btree/test.js')
|
|
6
|
-
require('./sha2/test.js')
|
|
7
|
-
require('./json/test.js')
|
|
8
|
-
require('./json/tokenizer/test.js')
|
|
9
|
-
require('./types/object/test.js')
|
|
10
|
-
require('./io/commonjs/test.js')
|
|
11
|
-
require('./commonjs/package/dependencies/test.js')
|
|
12
|
-
require('./commonjs/package/test.js')
|
|
13
|
-
require('./commonjs/path/test.js')
|
|
14
|
-
require('./types/function/compare/test.js')
|
|
15
|
-
require('./types/stringSet/test.js')
|
|
16
|
-
require('./commonjs/build/test.js')
|
|
17
|
-
require('./types/range/test.js')
|
|
18
|
-
require('./html/test.js')
|
|
19
|
-
|
|
20
|
-
/** @type {() => never} */
|
|
21
|
-
const assert = () => { throw 'assert' }
|
|
22
|
-
|
|
23
|
-
/** @type {(_: boolean) => void} */
|
|
24
|
-
const assert_if = c => { if (c) { throw 'assert_if' } }
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
i.parseModuleUrl('')(
|
|
28
|
-
assert,
|
|
29
|
-
e => assert_if(e.id !== 'expected' || e.params[0] !== ':'))
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
{
|
|
33
|
-
i.parseModuleUrl(':')(
|
|
34
|
-
assert,
|
|
35
|
-
e => assert_if(e.id !== 'unknownProtocol'))
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
i.parseModuleUrl('github:r')(
|
|
40
|
-
assert,
|
|
41
|
-
e => assert_if(e.id !== 'expected'))
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
{
|
|
45
|
-
i.parseModuleUrl('github:functionalscript/node-example')(
|
|
46
|
-
v => assert_if(
|
|
47
|
-
v.repo.org !== 'functionalscript' ||
|
|
48
|
-
v.repo.name !== 'node-example' ||
|
|
49
|
-
'branch' in v),
|
|
50
|
-
assert)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
i.parseModuleUrl('github:functionalscript/node-example#main')(
|
|
55
|
-
v => assert_if(
|
|
56
|
-
v.repo.org !== 'functionalscript' ||
|
|
57
|
-
v.repo.name !== 'node-example' ||
|
|
58
|
-
!('branch' in v) ||
|
|
59
|
-
v.branch !== 'main'),
|
|
60
|
-
assert)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
{
|
|
64
|
-
i.parseModuleUrl('github:functionalscript/node-example#4b14a7a2b11cf53f037931eb7bef240f96dcea64')(
|
|
65
|
-
v => assert_if(
|
|
66
|
-
v.repo.org !== 'functionalscript' ||
|
|
67
|
-
v.repo.name !== 'node-example' ||
|
|
68
|
-
!('commit' in v) ||
|
|
69
|
-
v.commit !== '4b14a7a2b11cf53f037931eb7bef240f96dcea64'),
|
|
70
|
-
assert)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
{
|
|
74
|
-
const c = (()=>{})['constructor']
|
|
75
|
-
const f = c('return 5')
|
|
76
|
-
const result = f()
|
|
77
|
-
if (result !== 5) { throw 'function' }
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
/** @type {any} */
|
|
82
|
-
const o = {}
|
|
83
|
-
const c = o['constructor']
|
|
84
|
-
// console.log(c)
|
|
85
|
-
// console.log(c(()=>{}))
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
{
|
|
89
|
-
/** @type {any} */
|
|
90
|
-
const o = {
|
|
91
|
-
constructor: undefined
|
|
92
|
-
}
|
|
93
|
-
const c = o['constructor']
|
|
94
|
-
//console.log(c)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
{
|
|
98
|
-
/** @type {any} */
|
|
99
|
-
const b = '42'
|
|
100
|
-
const r = Number(b)
|
|
101
|
-
//console.log(r)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
{
|
|
105
|
-
/** @type {any} */
|
|
106
|
-
const o = {}
|
|
107
|
-
//const c = o['constructor']
|
|
108
|
-
//const c = o['__proto__']
|
|
109
|
-
//const c = o['__defineGetter__']
|
|
110
|
-
//const c = o['__defineSetter__']
|
|
111
|
-
//const c = o['__lookupGetter__']
|
|
112
|
-
//const c = o['__lookupSetter__']
|
|
113
|
-
//const c = o['hasOwnProperty']
|
|
114
|
-
//const c = o['isPrototypeOf']
|
|
115
|
-
//const c = o['propertyIsEnumerable']
|
|
116
|
-
//const c = o['toString']
|
|
117
|
-
const c = o['valueOf']
|
|
118
|
-
//console.log(c)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
{
|
|
122
|
-
const x = { 'a': 12 }
|
|
123
|
-
const c = Object.getOwnPropertyDescriptor(x, 'constructor')
|
|
124
|
-
const a = Object.getOwnPropertyDescriptor(x, 'a')
|
|
125
|
-
}
|