functionalscript 0.1.608 → 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.
Files changed (222) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/Cargo.lock +4 -0
  3. package/Cargo.toml +4 -2
  4. package/README.md +1 -1
  5. package/com/cpp/module.f.d.mts +4 -8
  6. package/com/cpp/module.f.mjs +20 -25
  7. package/com/cpp/testlib.f.mjs +3 -4
  8. package/com/cs/module.f.d.mts +4 -8
  9. package/com/cs/module.f.mjs +18 -23
  10. package/com/cs/testlib.f.mjs +3 -5
  11. package/com/rust/module.f.d.mts +3 -7
  12. package/com/rust/module.f.mjs +25 -30
  13. package/com/rust/nanocom/src/cobject.rs +1 -1
  14. package/com/rust/testlib.f.mjs +3 -5
  15. package/com/test/build.f.d.mts +2 -2
  16. package/com/test/build.f.mjs +2 -2
  17. package/com/test/build.mjs +4 -4
  18. package/com/test/rust/src/lib.rs +4 -4
  19. package/com/types/module.f.d.mts +5 -10
  20. package/com/types/module.f.mjs +5 -12
  21. package/commonjs/build/module.f.d.mts +13 -17
  22. package/commonjs/build/module.f.mjs +23 -28
  23. package/commonjs/build/test.f.mjs +4 -4
  24. package/commonjs/module/function/module.f.d.mts +0 -2
  25. package/commonjs/module/function/module.f.mjs +0 -2
  26. package/commonjs/module/module.f.d.mts +16 -21
  27. package/commonjs/module/module.f.mjs +2 -9
  28. package/commonjs/module.d.mts +1 -5
  29. package/commonjs/module.f.d.mts +0 -2
  30. package/commonjs/module.f.mjs +0 -2
  31. package/commonjs/module.mjs +2 -7
  32. package/commonjs/package/dependencies/module.f.d.mts +3 -7
  33. package/commonjs/package/dependencies/module.f.mjs +5 -10
  34. package/commonjs/package/dependencies/test.f.mjs +1 -1
  35. package/commonjs/package/module.f.d.mts +12 -18
  36. package/commonjs/package/module.f.mjs +6 -13
  37. package/commonjs/package/test.f.mjs +1 -1
  38. package/commonjs/path/module.f.d.mts +25 -32
  39. package/commonjs/path/module.f.mjs +12 -23
  40. package/commonjs/path/test.f.mjs +11 -11
  41. package/commonjs/test.mjs +1 -1
  42. package/dev/module.f.d.mts +1 -4
  43. package/dev/module.f.mjs +1 -4
  44. package/dev/module.mjs +1 -1
  45. package/dev/test/module.f.d.mts +2 -3
  46. package/dev/test/module.f.mjs +5 -7
  47. package/djs/module.f.d.mts +13 -18
  48. package/djs/module.f.mjs +12 -19
  49. package/djs/parser/module.f.d.mts +53 -37
  50. package/djs/parser/module.f.mjs +278 -131
  51. package/djs/parser/test.f.d.mts +4 -0
  52. package/djs/parser/test.f.mjs +186 -70
  53. package/djs/test.f.mjs +4 -4
  54. package/djs/tokenizer/module.f.d.mts +6 -10
  55. package/djs/tokenizer/module.f.mjs +19 -22
  56. package/djs/tokenizer/test.f.mjs +7 -7
  57. package/doc/LANGUAGE.md +17 -16
  58. package/doc/README.md +14 -50
  59. package/fsc/README.md +0 -3
  60. package/fsc/module.f.d.mts +4 -9
  61. package/fsc/module.f.mjs +17 -24
  62. package/fsc/test.f.mjs +3 -3
  63. package/fsm/README.md +1 -1
  64. package/fsm/module.f.d.mts +13 -20
  65. package/fsm/module.f.mjs +27 -38
  66. package/fsm/test.f.mjs +8 -8
  67. package/html/README.md +24 -0
  68. package/html/module.f.d.mts +7 -12
  69. package/html/module.f.mjs +14 -23
  70. package/html/test.f.mjs +4 -4
  71. package/issues/01-test-debug.md +3 -0
  72. package/issues/{publish.md → 05-publish.md} +8 -8
  73. package/issues/17-djs-extension.md +6 -0
  74. package/issues/README.md +20 -13
  75. package/issues/lang/1000-json.md +38 -0
  76. package/issues/lang/2110-default-export.md +2 -2
  77. package/issues/lang/2310-undefined.md +1 -1
  78. package/issues/lang/2330-property-accessor.md +225 -0
  79. package/issues/lang/2360-built-in.md +54 -47
  80. package/issues/lang/3240-export.md +44 -0
  81. package/issues/lang/README.md +64 -22
  82. package/issues/test.f.d.mts +16 -0
  83. package/issues/test.f.mjs +57 -0
  84. package/js/tokenizer/module.f.d.mts +18 -17
  85. package/js/tokenizer/module.f.mjs +80 -61
  86. package/js/tokenizer/test.f.mjs +15 -12
  87. package/json/module.f.d.mts +18 -26
  88. package/json/module.f.mjs +18 -31
  89. package/json/parser/module.f.d.mts +9 -13
  90. package/json/parser/module.f.mjs +9 -14
  91. package/json/parser/test.f.mjs +7 -7
  92. package/json/serializer/module.f.d.mts +11 -20
  93. package/json/serializer/module.f.mjs +14 -29
  94. package/json/serializer/test.f.mjs +2 -2
  95. package/json/test.f.mjs +3 -3
  96. package/json/tokenizer/module.f.d.mts +6 -10
  97. package/json/tokenizer/module.f.mjs +16 -20
  98. package/json/tokenizer/test.f.mjs +6 -6
  99. package/jsr.json +1 -1
  100. package/nanvm-lib/Cargo.toml +6 -0
  101. package/nanvm-lib/src/extension.rs +119 -0
  102. package/nanvm-lib/src/interface.rs +136 -0
  103. package/nanvm-lib/src/lib.rs +7 -0
  104. package/nanvm-lib/src/naive.rs +229 -0
  105. package/nanvm-lib/src/nanenum.rs +230 -0
  106. package/nanvm-lib/src/nullish.rs +7 -0
  107. package/nanvm-lib/src/sign.rs +5 -0
  108. package/nanvm-lib/src/simple.rs +32 -0
  109. package/nanvm-lib/tests/test.f.d.mts +36 -0
  110. package/nanvm-lib/tests/test.f.mjs +79 -0
  111. package/nanvm-lib/tests/test.rs +108 -0
  112. package/nodejs/version/main.mjs +1 -1
  113. package/nodejs/version/module.f.d.mts +4 -9
  114. package/nodejs/version/module.f.mjs +2 -7
  115. package/nodejs/version/test.f.mjs +3 -3
  116. package/package.json +1 -1
  117. package/prime_field/module.f.d.mts +20 -23
  118. package/prime_field/module.f.mjs +9 -12
  119. package/prime_field/test.f.mjs +1 -1
  120. package/secp/module.f.d.mts +27 -28
  121. package/secp/module.f.mjs +38 -39
  122. package/secp/test.f.mjs +4 -4
  123. package/sha2/module.f.d.mts +8 -16
  124. package/sha2/module.f.mjs +7 -20
  125. package/sha2/test.f.mjs +4 -4
  126. package/text/README.md +2 -2
  127. package/text/ascii/module.f.d.mts +69 -72
  128. package/text/ascii/module.f.mjs +5 -10
  129. package/text/ascii/test.f.mjs +3 -3
  130. package/text/module.f.d.mts +9 -14
  131. package/text/module.f.mjs +7 -14
  132. package/text/sgr/module.f.d.mts +7 -9
  133. package/text/sgr/module.f.mjs +2 -4
  134. package/text/test.f.mjs +3 -3
  135. package/text/utf16/module.f.d.mts +8 -15
  136. package/text/utf16/module.f.mjs +17 -28
  137. package/text/utf16/test.f.mjs +5 -5
  138. package/text/utf8/module.f.d.mts +4 -9
  139. package/text/utf8/module.f.mjs +9 -16
  140. package/text/utf8/test.f.mjs +4 -4
  141. package/types/array/module.f.d.mts +14 -24
  142. package/types/array/module.f.mjs +8 -25
  143. package/types/array/test.f.mjs +3 -3
  144. package/types/bigfloat/module.f.d.mts +4 -9
  145. package/types/bigfloat/module.f.mjs +3 -10
  146. package/types/bigfloat/test.f.mjs +1 -1
  147. package/types/bigint/module.f.d.mts +16 -64
  148. package/types/bigint/module.f.mjs +11 -30
  149. package/types/bigint/test.f.mjs +1 -1
  150. package/types/btree/find/module.f.d.mts +20 -26
  151. package/types/btree/find/module.f.mjs +8 -17
  152. package/types/btree/find/test.f.mjs +7 -7
  153. package/types/btree/module.f.d.mts +4 -8
  154. package/types/btree/module.f.mjs +6 -11
  155. package/types/btree/remove/module.f.d.mts +7 -12
  156. package/types/btree/remove/module.f.mjs +10 -17
  157. package/types/btree/remove/test.f.mjs +5 -5
  158. package/types/btree/set/module.f.d.mts +3 -7
  159. package/types/btree/set/module.f.mjs +4 -9
  160. package/types/btree/set/test.f.mjs +4 -4
  161. package/types/btree/test.f.mjs +9 -9
  162. package/types/btree/types/module.f.d.mts +0 -2
  163. package/types/btree/types/module.f.mjs +0 -2
  164. package/types/byte_set/module.f.d.mts +16 -29
  165. package/types/byte_set/module.f.mjs +14 -39
  166. package/types/byte_set/test.f.mjs +5 -5
  167. package/types/function/compare/module.f.d.mts +9 -15
  168. package/types/function/compare/module.f.mjs +3 -12
  169. package/types/function/compare/test.f.mjs +1 -1
  170. package/types/function/module.f.d.mts +20 -27
  171. package/types/function/module.f.mjs +4 -15
  172. package/types/function/operator/module.f.d.mts +28 -43
  173. package/types/function/operator/module.f.mjs +14 -41
  174. package/types/function/test.f.mjs +1 -1
  175. package/types/list/module.f.d.mts +56 -91
  176. package/types/list/module.f.mjs +45 -114
  177. package/types/list/test.f.mjs +10 -10
  178. package/types/map/module.f.d.mts +15 -24
  179. package/types/map/module.f.mjs +15 -30
  180. package/types/map/test.f.mjs +2 -2
  181. package/types/nibble_set/module.f.d.mts +10 -20
  182. package/types/nibble_set/module.f.mjs +7 -24
  183. package/types/nibble_set/test.f.mjs +2 -2
  184. package/types/nullable/module.f.d.mts +3 -8
  185. package/types/nullable/module.f.mjs +2 -9
  186. package/types/nullable/test.f.mjs +1 -1
  187. package/types/number/module.f.d.mts +7 -13
  188. package/types/number/module.f.mjs +8 -19
  189. package/types/number/test.f.mjs +1 -1
  190. package/types/object/module.f.d.mts +11 -18
  191. package/types/object/module.f.mjs +9 -20
  192. package/types/object/test.f.mjs +1 -1
  193. package/types/range/module.f.d.mts +3 -8
  194. package/types/range/module.f.mjs +2 -9
  195. package/types/range/test.f.mjs +1 -1
  196. package/types/range_map/module.f.d.mts +9 -15
  197. package/types/range_map/module.f.mjs +9 -18
  198. package/types/range_map/test.f.mjs +32 -32
  199. package/types/result/module.d.mts +3 -3
  200. package/types/result/module.f.d.mts +6 -12
  201. package/types/result/module.f.mjs +3 -12
  202. package/types/result/module.mjs +2 -2
  203. package/types/sorted_list/module.f.d.mts +22 -28
  204. package/types/sorted_list/module.f.mjs +10 -19
  205. package/types/sorted_list/test.f.mjs +7 -7
  206. package/types/sorted_set/module.f.d.mts +6 -12
  207. package/types/sorted_set/module.f.mjs +7 -16
  208. package/types/sorted_set/test.f.mjs +7 -7
  209. package/types/string/module.f.d.mts +8 -14
  210. package/types/string/module.f.mjs +10 -21
  211. package/types/string/test.f.mjs +2 -2
  212. package/types/string_set/module.f.d.mts +8 -16
  213. package/types/string_set/module.f.mjs +12 -27
  214. package/types/string_set/test.f.mjs +1 -1
  215. package/issues/lang/2351-property-accessor.md +0 -44
  216. package/issues/lang/2352-property-call.md +0 -43
  217. package/issues/lang/2353-property-at.md +0 -19
  218. package/issues/test-debug.md +0 -12
  219. /package/issues/{esm.md → 02-esm.md} +0 -0
  220. /package/issues/{djs.md → 03-djs.md} +0 -0
  221. /package/issues/{fs-load.md → 11-fs-load.md} +0 -0
  222. /package/issues/lang/{2330-grouping.md → 2350-grouping.md} +0 -0
@@ -1,17 +1,17 @@
1
- import _ from './module.f.mjs'
2
- import dev from '../../dev/module.f.mjs'
1
+ import * as _ from './module.f.mjs'
2
+ import * as dev from '../../dev/module.f.mjs'
3
3
  const { todo } = dev
4
- import json, * as Json from '../../json/module.f.mjs'
5
- import f from '../../types/function/module.f.mjs'
4
+ import * as json from '../../json/module.f.mjs'
5
+ import * as f from '../../types/function/module.f.mjs'
6
6
  const { identity } = f
7
- import object, * as O from '../../types/object/module.f.mjs'
7
+ import * as object from '../../types/object/module.f.mjs'
8
8
  const { at } = object
9
9
  import * as Package from '../package/module.f.mjs'
10
10
 
11
- /** @type {<T>(o: O.Map<T>) => (s: string) => T|null} */
11
+ /** @type {<T>(o: object.Map<T>) => (s: string) => T|null} */
12
12
  const i = o => s => at(s)(o)
13
13
 
14
- /** @type {(g: Json.Unknown) => string} */
14
+ /** @type {(g: json.Unknown) => string} */
15
15
  const stringify = json.stringify(identity)
16
16
 
17
17
  export default {
@@ -70,7 +70,7 @@ export default {
70
70
  },
71
71
  },
72
72
  9: () => {
73
- /** @type {O.Map<Package.Package>} */
73
+ /** @type {object.Map<Package.Package>} */
74
74
  const packages = {
75
75
  '': {
76
76
  dependency: () => todo(),
@@ -81,7 +81,7 @@ export default {
81
81
  if (result !== '{"id":{"package":"","path":["a","c"]},"source":"return \\"a/c\\""}') { throw result }
82
82
  },
83
83
  10: () => {
84
- /** @type {O.Map<Package.Package>} */
84
+ /** @type {object.Map<Package.Package>} */
85
85
  const packages = {
86
86
  '': {
87
87
  dependency: x => {
@@ -131,7 +131,7 @@ export default {
131
131
  }
132
132
  },
133
133
  11: () => {
134
- /** @type {O.Map<Package.Package>} */
134
+ /** @type {object.Map<Package.Package>} */
135
135
  const packages = {
136
136
  '': {
137
137
  dependency: x => {
@@ -158,7 +158,7 @@ export default {
158
158
  }
159
159
  },
160
160
  12: () => {
161
- /** @type {O.Map<Package.Package>} */
161
+ /** @type {object.Map<Package.Package>} */
162
162
  const packages = {
163
163
  '': {
164
164
  dependency: x => {
package/commonjs/test.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import _ from './module.mjs'
1
+ import * as _ from './module.mjs'
2
2
  import * as Run from './module/function/module.f.mjs'
3
3
 
4
4
  export default {
@@ -1,4 +1 @@
1
- declare namespace _default {
2
- function todo(): never;
3
- }
4
- export default _default;
1
+ export function todo(): never;
package/dev/module.f.mjs CHANGED
@@ -1,6 +1,3 @@
1
1
  // @ts-self-types="./module.f.d.mts"
2
2
 
3
- export default {
4
- /** @readonly */
5
- todo: () => { throw 'not implemented' },
6
- }
3
+ export const todo = () => { throw 'not implemented' }
package/dev/module.mjs CHANGED
@@ -86,7 +86,7 @@ export const loadModuleMap = async () => {
86
86
  const file = `${p}/${name}`
87
87
  if (i.isDirectory()) {
88
88
  await f(file)
89
- } else if (name.endsWith('.f.cjs') || name.endsWith('.f.mjs') || name.endsWith('.f.js')) {
89
+ } else if (name.endsWith('.f.mjs') || name.endsWith('.f.js')) {
90
90
  const source = await import(`../${file}`)
91
91
  map.push([file, source.default])
92
92
  }
@@ -1,4 +1,5 @@
1
- export default main;
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';
@@ -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
  /**
@@ -47,7 +47,7 @@ import * as Result from '../../types/result/module.f.mjs'
47
47
  */
48
48
 
49
49
  /** @type {(s: string) => boolean} */
50
- const isTest = s => s.endsWith('test.f.cjs') || s.endsWith('test.f.mjs') || s.endsWith('test.f.js')
50
+ const isTest = s => s.endsWith('test.f.mjs') || s.endsWith('test.f.js')
51
51
 
52
52
  /**
53
53
  * @typedef {{
@@ -80,7 +80,7 @@ const timeFormat = a => {
80
80
  }
81
81
 
82
82
  /** @type {<T>(input: Input<T>) => readonly[number, T]} */
83
- const main = input => {
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
@@ -1,25 +1,20 @@
1
- declare namespace _default {
2
- export { stringify };
3
- export { serialize };
4
- }
5
- export default _default;
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
- declare const stringify: (mapEntries: MapEntries) => (value: Unknown) => string;
19
- /** @typedef {O.Entry<Unknown>} Entry*/
20
- /** @typedef {(List.List<Entry>)} Entries */
21
- /** @typedef {(entries: Entries) => Entries} MapEntries */
22
- /** @type {(mapEntries: MapEntries) => (value: Unknown) => List.List<string>} */
23
- declare const serialize: (mapEntries: MapEntries) => (value: Unknown) => List.List<string>;
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 list, * as List from '../types/list/module.f.mjs'
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 {(List.List<Entry>)} Entries */
30
+ /** @typedef {(list.List<Entry>)} Entries */
31
31
 
32
32
  /** @typedef {(entries: Entries) => Entries} MapEntries */
33
33
 
34
- /** @type {(mapEntries: MapEntries) => (value: Unknown) => List.List<string>} */
35
- const serialize = sort => {
36
- /** @type {(kv: readonly[string, Unknown]) => List.List<string>} */
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) => List.List<string>} */
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) => List.List<string>} */
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,40 +1,56 @@
1
- declare namespace _default {
2
- export { parse };
3
- }
4
- export default _default;
5
- export type JsonObject = {
6
- readonly kind: "object";
7
- readonly values: Map.Map<Djs.Unknown>;
8
- readonly key: string;
9
- };
10
- export type JsonArray = {
11
- readonly kind: "array";
12
- readonly values: List.List<Djs.Unknown>;
13
- };
14
- export type JsonStackElement = JsonObject | JsonArray;
15
- export type JsonStack = List.List<JsonStackElement>;
16
- export type StateModule = {
17
- readonly status: "module";
18
- readonly stage: "module" | "." | "exports" | "=";
19
- };
20
- export type StateParse = {
21
- readonly status: "" | "[" | "[v" | "[," | "{" | "{k" | "{:" | "{v" | "{,";
22
- readonly top: JsonStackElement | null;
23
- readonly stack: JsonStack;
24
- };
25
- export type StateResult = {
26
- readonly status: "result";
27
- readonly value: Djs.Unknown;
28
- };
29
- export type StateError = {
30
- readonly status: "error";
1
+ /** @type {(tokenList: list.List<tokenizerT.DjsToken>) => result.Result<DjsModule, string>} */
2
+ export const parse: (tokenList: list.List<tokenizerT.DjsToken>) => result.Result<DjsModule, string>;
3
+ export type DjsModule = [readonly string[], readonly DjsConst[]];
4
+ export type DjsConst = boolean | string | number | null | bigint | DjsModuleRef | DjsArray | DjsObject;
5
+ export type DjsModuleRef = ["aref" | "cref", number];
6
+ export type DjsArray = ["array", readonly DjsConst[]];
7
+ export type DjsObject = { readonly [k in string]: DjsConst; };
8
+ export type DjsStackArray = ["array", list.List<DjsConst>];
9
+ export type DjsStackObject = ["object", map.Map<DjsConst>, string];
10
+ export type DjsStackElement = DjsStackArray | DjsStackObject;
11
+ export type DjsStack = list.List<DjsStackElement>;
12
+ export type ParserState = InitialState | NewLineRequiredState | ImportState | ConstState | ExportState | ParseValueState | ResultState | ErrorState;
13
+ export type ModuleState = {
14
+ readonly refs: map.Map<DjsModuleRef>;
15
+ readonly modules: list.List<string>;
16
+ readonly consts: list.List<DjsConst>;
17
+ };
18
+ export type InitialState = {
19
+ readonly state: "";
20
+ readonly module: ModuleState;
21
+ };
22
+ export type NewLineRequiredState = {
23
+ readonly state: "nl";
24
+ readonly module: ModuleState;
25
+ };
26
+ export type ImportState = {
27
+ readonly state: "import" | "import+name" | "import+from";
28
+ readonly module: ModuleState;
29
+ };
30
+ export type ConstState = {
31
+ readonly state: "const" | "const+name";
32
+ readonly module: ModuleState;
33
+ };
34
+ export type ExportState = {
35
+ readonly state: "export";
36
+ readonly module: ModuleState;
37
+ };
38
+ export type ParseValueState = {
39
+ readonly state: "constValue" | "exportValue";
40
+ readonly module: ModuleState;
41
+ readonly valueState: "" | "[" | "[v" | "[," | "{" | "{k" | "{:" | "{v" | "{,";
42
+ readonly top: DjsStackElement | null;
43
+ readonly stack: DjsStack;
44
+ };
45
+ export type ResultState = {
46
+ readonly state: "result";
47
+ readonly module: ModuleState;
48
+ };
49
+ export type ErrorState = {
50
+ readonly state: "error";
31
51
  readonly message: string;
32
52
  };
33
- export type DjsState = StateModule | StateParse | StateResult | StateError;
34
- /** @type {(tokenList: List.List<tokenizerT.DjsToken>) => Result.Result<Djs.Unknown, string>} */
35
- declare const parse: (tokenList: List.List<tokenizerT.DjsToken>) => Result.Result<Djs.Unknown, string>;
36
- import * as Map from '../../types/map/module.f.mjs';
37
- import * as Djs from '../module.f.mjs';
38
- import * as List from '../../types/list/module.f.mjs';
53
+ import * as list from '../../types/list/module.f.mjs';
39
54
  import * as tokenizerT from '../tokenizer/module.f.mjs';
40
- import * as Result from '../../types/result/module.f.mjs';
55
+ import * as result from '../../types/result/module.f.mjs';
56
+ import * as map from '../../types/map/module.f.mjs';