@highstate/designer 0.9.18 → 0.9.19

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 (170) hide show
  1. package/.output/nitro.json +3 -3
  2. package/.output/public/_nuxt/00PavPNr.js +1 -0
  3. package/.output/public/_nuxt/{xVLoeQ-B.js → 24pzIZRr.js} +1 -1
  4. package/.output/public/_nuxt/B2umP1rN.js +1 -0
  5. package/.output/public/_nuxt/B8z64P5r.js +1 -0
  6. package/.output/public/_nuxt/BEFlL3Zb.js +1 -0
  7. package/.output/public/_nuxt/BH2j9ZdL.js +2 -0
  8. package/.output/public/_nuxt/BLIjXRbp.js +1 -0
  9. package/.output/public/_nuxt/BLPLmiCg.js +1 -0
  10. package/.output/public/_nuxt/BODfYi5x.js +1 -0
  11. package/.output/public/_nuxt/BSVaCi82.js +1 -0
  12. package/.output/public/_nuxt/BeBKEPaV.js +1 -0
  13. package/.output/public/_nuxt/BhWccYlK.js +276 -0
  14. package/.output/public/_nuxt/{CNBtkm4J.js → Bj2v5zwu.js} +2 -2
  15. package/.output/public/_nuxt/BjQbGaFu.js +1 -0
  16. package/.output/public/_nuxt/BkhU0P2a.js +1 -0
  17. package/.output/public/_nuxt/Bq9zGKGH.js +1 -0
  18. package/.output/public/_nuxt/Bwy6lXZI.js +1 -0
  19. package/.output/public/_nuxt/C28Ky4mM.js +5 -0
  20. package/.output/public/_nuxt/{CPSgaaQ0.js → C39wRh4i.js} +1 -1
  21. package/.output/public/_nuxt/CAEVHbCq.js +1 -0
  22. package/.output/public/_nuxt/CBdGpnmw.js +1 -0
  23. package/.output/public/_nuxt/CF5B4EM_.js +1 -0
  24. package/.output/public/_nuxt/CHdpI9cE.js +1 -0
  25. package/.output/public/_nuxt/CIv7p5Hd.js +16 -0
  26. package/.output/public/_nuxt/CND6o3oI.js +1 -0
  27. package/.output/public/_nuxt/{B7grBCAR.js → COCm9MC_.js} +1 -1
  28. package/.output/public/_nuxt/CasefD2V.js +1 -0
  29. package/.output/public/_nuxt/Ck1nftBx.js +1 -0
  30. package/.output/public/_nuxt/CzVLS6f1.js +2 -0
  31. package/.output/public/_nuxt/D1TquUAQ.js +1 -0
  32. package/.output/public/_nuxt/D2AD0cA7.js +1 -0
  33. package/.output/public/_nuxt/D9qQxcz2.js +1 -0
  34. package/.output/public/_nuxt/D9rAj-Tm.js +1 -0
  35. package/.output/public/_nuxt/DDCXd-ua.js +1 -0
  36. package/.output/public/_nuxt/DEKgA0CD.js +1 -0
  37. package/.output/public/_nuxt/DFPGdAue.js +1 -0
  38. package/.output/public/_nuxt/DInZfUJa.js +1 -0
  39. package/.output/public/_nuxt/DIpLW5D5.js +1 -0
  40. package/.output/public/_nuxt/DLQCiJf0.js +1 -0
  41. package/.output/public/_nuxt/DLaRxjQz.js +1 -0
  42. package/.output/public/_nuxt/DO3LUuFM.js +12 -0
  43. package/.output/public/_nuxt/DP4clH6m.js +1 -0
  44. package/.output/public/_nuxt/DPWtH2b9.js +1 -0
  45. package/.output/public/_nuxt/DTnN7l_n.js +1 -0
  46. package/.output/public/_nuxt/DYtuF1mO.js +1 -0
  47. package/.output/public/_nuxt/DarxiN41.js +1 -0
  48. package/.output/public/_nuxt/DbnWrFmt.js +1 -0
  49. package/.output/public/_nuxt/DcrT2YVS.js +1 -0
  50. package/.output/public/_nuxt/{ClbN2oa7.js → DjVGtenp.js} +2 -2
  51. package/.output/public/_nuxt/DoLmvh98.js +1 -0
  52. package/.output/public/_nuxt/DuztTtWK.js +1 -0
  53. package/.output/public/_nuxt/DwmUhPpj.js +1 -0
  54. package/.output/public/_nuxt/DxOL29Up.js +1 -0
  55. package/.output/public/_nuxt/Dy4MTz6g.js +1 -0
  56. package/.output/public/_nuxt/HgwTqqUo.js +1 -0
  57. package/.output/public/_nuxt/JJ2MHRK2.js +1 -0
  58. package/.output/public/_nuxt/JokPmHXv.js +1 -0
  59. package/.output/public/_nuxt/N0qQ3IYs.js +2 -0
  60. package/.output/public/_nuxt/O074qcLn.js +1 -0
  61. package/.output/public/_nuxt/SecretValueField.SMGlmIfE.css +1 -0
  62. package/.output/public/_nuxt/T7hNoCXG.js +1 -0
  63. package/.output/public/_nuxt/UczlX-c9.js +1 -0
  64. package/.output/public/_nuxt/_d0M4KuU.js +1 -0
  65. package/.output/public/_nuxt/_pageId_.Be9XJqQA.css +1 -0
  66. package/.output/public/_nuxt/builds/latest.json +1 -1
  67. package/.output/public/_nuxt/builds/meta/c89eb61d-80e1-4ca1-b13e-521c420f664e.json +1 -0
  68. package/.output/public/_nuxt/{entry.YsT17dxl.css → entry.B__IA1SB.css} +1 -1
  69. package/.output/public/_nuxt/error-404.Ctkhr_Pq.css +1 -0
  70. package/.output/public/_nuxt/error-500.BsWzRwYo.css +1 -0
  71. package/.output/public/_nuxt/fqUPtzRv.js +1 -0
  72. package/.output/public/_nuxt/{graph-resolver-ClVztv7P.js → graph-resolver-DwBTX8MB.js} +100 -100
  73. package/.output/public/_nuxt/gt3opOQe.js +1 -0
  74. package/.output/public/_nuxt/i3Pf1NPu.js +2 -0
  75. package/.output/public/_nuxt/index.CdaM9XKS.css +1 -0
  76. package/.output/public/_nuxt/kFPB2rqp.js +1 -0
  77. package/.output/public/_nuxt/koatKMQr.js +26 -0
  78. package/.output/public/_nuxt/mwDqsUrW.js +1 -0
  79. package/.output/public/_nuxt/oZs8U75K.js +1 -0
  80. package/.output/public/_nuxt/operations.3bVU1gWl.css +1 -0
  81. package/.output/public/_nuxt/settings.DE1a_g5Y.css +1 -0
  82. package/.output/public/_nuxt/ttev5MDP.js +1 -0
  83. package/.output/public/_nuxt/v9bSWb7m.js +1 -0
  84. package/.output/public/_nuxt/{vuetify.C_sYHwU6.css → vuetify.uXRHzFBB.css} +1 -1
  85. package/.output/server/index.mjs +3699 -2226
  86. package/.output/server/index.mjs.map +1 -1
  87. package/.output/server/node_modules/@babel/parser/lib/index.js +7 -2
  88. package/.output/server/node_modules/@babel/parser/package.json +2 -2
  89. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +24 -25
  90. package/.output/server/node_modules/@vue/compiler-core/package.json +4 -4
  91. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +1 -1
  92. package/.output/server/node_modules/@vue/compiler-dom/package.json +3 -3
  93. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1 -1
  94. package/.output/server/node_modules/@vue/compiler-ssr/package.json +3 -3
  95. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +4 -4
  96. package/.output/server/node_modules/@vue/reactivity/package.json +2 -2
  97. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +51 -47
  98. package/.output/server/node_modules/@vue/runtime-core/package.json +3 -3
  99. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +18 -16
  100. package/.output/server/node_modules/@vue/runtime-dom/package.json +4 -4
  101. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +26 -4
  102. package/.output/server/node_modules/@vue/server-renderer/package.json +4 -4
  103. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +14 -3
  104. package/.output/server/node_modules/@vue/shared/package.json +1 -1
  105. package/.output/server/node_modules/copy-anything/dist/index.js +36 -0
  106. package/.output/server/node_modules/copy-anything/package.json +108 -0
  107. package/.output/server/node_modules/is-what/dist/index.js +171 -0
  108. package/.output/server/node_modules/is-what/package.json +128 -0
  109. package/.output/server/node_modules/superjson/dist/accessDeep.js +123 -0
  110. package/.output/server/node_modules/superjson/dist/class-registry.js +22 -0
  111. package/.output/server/node_modules/superjson/dist/custom-transformer-registry.js +16 -0
  112. package/.output/server/node_modules/superjson/dist/double-indexed-kv.js +21 -0
  113. package/.output/server/node_modules/superjson/dist/index.js +89 -0
  114. package/.output/server/node_modules/superjson/dist/is.js +35 -0
  115. package/.output/server/node_modules/superjson/dist/pathstringifier.js +29 -0
  116. package/.output/server/node_modules/superjson/dist/plainer.js +173 -0
  117. package/.output/server/node_modules/superjson/dist/registry.js +26 -0
  118. package/.output/server/node_modules/superjson/dist/transformer.js +197 -0
  119. package/.output/server/node_modules/superjson/dist/util.js +45 -0
  120. package/.output/server/node_modules/superjson/package.json +79 -0
  121. package/.output/server/node_modules/unhead/dist/plugins.mjs +14 -8
  122. package/.output/server/node_modules/unhead/dist/server.mjs +3 -3
  123. package/.output/server/node_modules/unhead/dist/shared/{unhead.C13swrCa.mjs → unhead.BYvz9V1x.mjs} +1 -6
  124. package/.output/server/node_modules/unhead/dist/shared/{unhead.Di5OD67x.mjs → unhead.BpRRHAhY.mjs} +4 -0
  125. package/.output/server/node_modules/unhead/dist/shared/{unhead.CAk5S5m6.mjs → unhead.DH45uomy.mjs} +1 -1
  126. package/.output/server/node_modules/unhead/dist/shared/{unhead.DeCxexjU.mjs → unhead.Djo8ep_Y.mjs} +1 -1
  127. package/.output/server/node_modules/unhead/dist/utils.mjs +2 -2
  128. package/.output/server/node_modules/unhead/package.json +1 -1
  129. package/.output/server/node_modules/vue/dist/vue.cjs.js +1 -1
  130. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +1 -1
  131. package/.output/server/node_modules/vue/package.json +6 -6
  132. package/.output/server/node_modules/vue-bundle-renderer/package.json +13 -13
  133. package/.output/server/package.json +16 -13
  134. package/package.json +16 -12
  135. package/.output/public/_nuxt/84XNjSIe.js +0 -1
  136. package/.output/public/_nuxt/BKmAPqal.js +0 -1
  137. package/.output/public/_nuxt/BLOpwnqT.js +0 -1
  138. package/.output/public/_nuxt/BTEhxafZ.js +0 -1
  139. package/.output/public/_nuxt/B_wu9Dqv.js +0 -1
  140. package/.output/public/_nuxt/BebE75YV.js +0 -1
  141. package/.output/public/_nuxt/Bm_zuxCd.js +0 -1
  142. package/.output/public/_nuxt/BvYfgXkl.js +0 -1
  143. package/.output/public/_nuxt/C-_oQ9hf.js +0 -1
  144. package/.output/public/_nuxt/COWjEZnb.js +0 -1
  145. package/.output/public/_nuxt/CYRjgJw9.js +0 -26
  146. package/.output/public/_nuxt/Cj-b45ZR.js +0 -1
  147. package/.output/public/_nuxt/CtMxL075.js +0 -21
  148. package/.output/public/_nuxt/D-pF80u_.js +0 -1
  149. package/.output/public/_nuxt/D0Gq3ULd.js +0 -1
  150. package/.output/public/_nuxt/DCWrMWBD.js +0 -1
  151. package/.output/public/_nuxt/DEsY2yuF.js +0 -1
  152. package/.output/public/_nuxt/DPvdOr2J.js +0 -1
  153. package/.output/public/_nuxt/DbtIzDGy.js +0 -1
  154. package/.output/public/_nuxt/DwheRqRn.js +0 -1
  155. package/.output/public/_nuxt/SVGiTNnK.js +0 -1
  156. package/.output/public/_nuxt/SettingsDataTable.BLJqwlEK.css +0 -1
  157. package/.output/public/_nuxt/UQxqNY8s.js +0 -273
  158. package/.output/public/_nuxt/about.fWlW3EhQ.css +0 -1
  159. package/.output/public/_nuxt/builds/meta/b0e10f5e-bdc5-4007-9281-161aa323adf1.json +0 -1
  160. package/.output/public/_nuxt/error-404.CH3riSrg.css +0 -1
  161. package/.output/public/_nuxt/error-500.C8Qk6cR7.css +0 -1
  162. package/.output/public/_nuxt/index.smtD6lYF.css +0 -1
  163. package/.output/public/_nuxt/instances.CGwVkdDM.css +0 -1
  164. package/.output/public/_nuxt/oVh4WQ21.js +0 -1
  165. package/.output/public/_nuxt/operations.BfCOaoAx.css +0 -1
  166. package/.output/public/_nuxt/operations.DvUkbQbt.css +0 -1
  167. package/.output/public/_nuxt/p5ZwBirz.js +0 -1
  168. package/.output/public/_nuxt/secrets._PitGGJK.css +0 -1
  169. package/.output/public/_nuxt/settings.BCRf8MgD.css +0 -1
  170. package/.output/public/_nuxt/terminals.B07MGsh3.css +0 -1
@@ -0,0 +1,128 @@
1
+ {
2
+ "name": "is-what",
3
+ "version": "4.1.16",
4
+ "description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "types": "./dist/index.d.ts",
8
+ "module": "./dist/index.js",
9
+ "main": "./dist/index.js",
10
+ "exports": {
11
+ ".": {
12
+ "require": {
13
+ "types": "./dist/cjs/index.d.cts",
14
+ "default": "./dist/cjs/index.cjs"
15
+ },
16
+ "import": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ }
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "engines": {
26
+ "node": ">=12.13"
27
+ },
28
+ "scripts": {
29
+ "test": "vitest run",
30
+ "lint": "tsc --noEmit && eslint ./src --ext .ts",
31
+ "build": "rollup -c ./rollup.config.js",
32
+ "build:docs": "typedoc",
33
+ "release": "npm run lint && del dist && npm run build && np"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/mesqueeb/is-what.git"
38
+ },
39
+ "keywords": [
40
+ "javascript",
41
+ "typescript",
42
+ "typechecker",
43
+ "check-type",
44
+ "javascript-type",
45
+ "primitive-types",
46
+ "plain-object",
47
+ "plain-objects",
48
+ "class-instance",
49
+ "class-identifier",
50
+ "type-checking",
51
+ "type-checker",
52
+ "type-check",
53
+ "define-type",
54
+ "get-type",
55
+ "what-type",
56
+ "is-object",
57
+ "is-plain-obj",
58
+ "is-plain-object"
59
+ ],
60
+ "author": "Luca Ban - Mesqueeb",
61
+ "funding": "https://github.com/sponsors/mesqueeb",
62
+ "license": "MIT",
63
+ "bugs": {
64
+ "url": "https://github.com/mesqueeb/is-what/issues"
65
+ },
66
+ "homepage": "https://github.com/mesqueeb/is-what#readme",
67
+ "devDependencies": {
68
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
69
+ "@typescript-eslint/parser": "^5.62.0",
70
+ "del-cli": "^5.1.0",
71
+ "eslint-config-prettier": "^8.10.0",
72
+ "eslint-plugin-tree-shaking": "^1.10.1",
73
+ "eslint": "^8.52.0",
74
+ "np": "^8.0.4",
75
+ "prettier-plugin-jsdoc": "^0.4.2",
76
+ "prettier": "^2.8.8",
77
+ "rollup-plugin-dts": "^5.3.1",
78
+ "rollup-plugin-esbuild": "^5.0.0",
79
+ "rollup": "^3.29.4",
80
+ "typedoc": "^0.25.2",
81
+ "typescript": "^5.2.2",
82
+ "vitest": "^0.34.6"
83
+ },
84
+ "np": {
85
+ "branch": "production",
86
+ "publish": false,
87
+ "yarn": false
88
+ },
89
+ "eslintConfig": {
90
+ "ignorePatterns": [
91
+ "node_modules",
92
+ "dist",
93
+ "scripts",
94
+ "test"
95
+ ],
96
+ "root": true,
97
+ "parser": "@typescript-eslint/parser",
98
+ "plugins": [
99
+ "@typescript-eslint",
100
+ "tree-shaking"
101
+ ],
102
+ "extends": [
103
+ "eslint:recommended",
104
+ "plugin:@typescript-eslint/eslint-recommended",
105
+ "plugin:@typescript-eslint/recommended",
106
+ "prettier"
107
+ ],
108
+ "rules": {
109
+ "@typescript-eslint/no-empty-function": "off",
110
+ "@typescript-eslint/no-explicit-any": "off",
111
+ "@typescript-eslint/ban-ts-ignore": "off",
112
+ "tree-shaking/no-side-effects-in-initialization": "error",
113
+ "@typescript-eslint/ban-ts-comment": "off"
114
+ }
115
+ },
116
+ "prettier": {
117
+ "printWidth": 100,
118
+ "tabWidth": 2,
119
+ "singleQuote": true,
120
+ "trailingComma": "es5",
121
+ "semi": false,
122
+ "bracketSpacing": true,
123
+ "quoteProps": "consistent",
124
+ "plugins": [
125
+ "prettier-plugin-jsdoc"
126
+ ]
127
+ }
128
+ }
@@ -0,0 +1,123 @@
1
+ import { isMap, isArray, isPlainObject, isSet } from './is.js';
2
+ import { includes } from './util.js';
3
+ const getNthKey = (value, n) => {
4
+ if (n > value.size)
5
+ throw new Error('index out of bounds');
6
+ const keys = value.keys();
7
+ while (n > 0) {
8
+ keys.next();
9
+ n--;
10
+ }
11
+ return keys.next().value;
12
+ };
13
+ function validatePath(path) {
14
+ if (includes(path, '__proto__')) {
15
+ throw new Error('__proto__ is not allowed as a property');
16
+ }
17
+ if (includes(path, 'prototype')) {
18
+ throw new Error('prototype is not allowed as a property');
19
+ }
20
+ if (includes(path, 'constructor')) {
21
+ throw new Error('constructor is not allowed as a property');
22
+ }
23
+ }
24
+ export const getDeep = (object, path) => {
25
+ validatePath(path);
26
+ for (let i = 0; i < path.length; i++) {
27
+ const key = path[i];
28
+ if (isSet(object)) {
29
+ object = getNthKey(object, +key);
30
+ }
31
+ else if (isMap(object)) {
32
+ const row = +key;
33
+ const type = +path[++i] === 0 ? 'key' : 'value';
34
+ const keyOfRow = getNthKey(object, row);
35
+ switch (type) {
36
+ case 'key':
37
+ object = keyOfRow;
38
+ break;
39
+ case 'value':
40
+ object = object.get(keyOfRow);
41
+ break;
42
+ }
43
+ }
44
+ else {
45
+ object = object[key];
46
+ }
47
+ }
48
+ return object;
49
+ };
50
+ export const setDeep = (object, path, mapper) => {
51
+ validatePath(path);
52
+ if (path.length === 0) {
53
+ return mapper(object);
54
+ }
55
+ let parent = object;
56
+ for (let i = 0; i < path.length - 1; i++) {
57
+ const key = path[i];
58
+ if (isArray(parent)) {
59
+ const index = +key;
60
+ parent = parent[index];
61
+ }
62
+ else if (isPlainObject(parent)) {
63
+ parent = parent[key];
64
+ }
65
+ else if (isSet(parent)) {
66
+ const row = +key;
67
+ parent = getNthKey(parent, row);
68
+ }
69
+ else if (isMap(parent)) {
70
+ const isEnd = i === path.length - 2;
71
+ if (isEnd) {
72
+ break;
73
+ }
74
+ const row = +key;
75
+ const type = +path[++i] === 0 ? 'key' : 'value';
76
+ const keyOfRow = getNthKey(parent, row);
77
+ switch (type) {
78
+ case 'key':
79
+ parent = keyOfRow;
80
+ break;
81
+ case 'value':
82
+ parent = parent.get(keyOfRow);
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ const lastKey = path[path.length - 1];
88
+ if (isArray(parent)) {
89
+ parent[+lastKey] = mapper(parent[+lastKey]);
90
+ }
91
+ else if (isPlainObject(parent)) {
92
+ parent[lastKey] = mapper(parent[lastKey]);
93
+ }
94
+ if (isSet(parent)) {
95
+ const oldValue = getNthKey(parent, +lastKey);
96
+ const newValue = mapper(oldValue);
97
+ if (oldValue !== newValue) {
98
+ parent.delete(oldValue);
99
+ parent.add(newValue);
100
+ }
101
+ }
102
+ if (isMap(parent)) {
103
+ const row = +path[path.length - 2];
104
+ const keyToRow = getNthKey(parent, row);
105
+ const type = +lastKey === 0 ? 'key' : 'value';
106
+ switch (type) {
107
+ case 'key': {
108
+ const newKey = mapper(keyToRow);
109
+ parent.set(newKey, parent.get(keyToRow));
110
+ if (newKey !== keyToRow) {
111
+ parent.delete(keyToRow);
112
+ }
113
+ break;
114
+ }
115
+ case 'value': {
116
+ parent.set(keyToRow, mapper(parent.get(keyToRow)));
117
+ break;
118
+ }
119
+ }
120
+ }
121
+ return object;
122
+ };
123
+ //# sourceMappingURL=accessDeep.js.map
@@ -0,0 +1,22 @@
1
+ import { Registry } from './registry.js';
2
+ export class ClassRegistry extends Registry {
3
+ constructor() {
4
+ super(c => c.name);
5
+ this.classToAllowedProps = new Map();
6
+ }
7
+ register(value, options) {
8
+ if (typeof options === 'object') {
9
+ if (options.allowProps) {
10
+ this.classToAllowedProps.set(value, options.allowProps);
11
+ }
12
+ super.register(value, options.identifier);
13
+ }
14
+ else {
15
+ super.register(value, options);
16
+ }
17
+ }
18
+ getAllowedProps(value) {
19
+ return this.classToAllowedProps.get(value);
20
+ }
21
+ }
22
+ //# sourceMappingURL=class-registry.js.map
@@ -0,0 +1,16 @@
1
+ import { find } from './util.js';
2
+ export class CustomTransformerRegistry {
3
+ constructor() {
4
+ this.transfomers = {};
5
+ }
6
+ register(transformer) {
7
+ this.transfomers[transformer.name] = transformer;
8
+ }
9
+ findApplicable(v) {
10
+ return find(this.transfomers, transformer => transformer.isApplicable(v));
11
+ }
12
+ findByName(name) {
13
+ return this.transfomers[name];
14
+ }
15
+ }
16
+ //# sourceMappingURL=custom-transformer-registry.js.map
@@ -0,0 +1,21 @@
1
+ export class DoubleIndexedKV {
2
+ constructor() {
3
+ this.keyToValue = new Map();
4
+ this.valueToKey = new Map();
5
+ }
6
+ set(key, value) {
7
+ this.keyToValue.set(key, value);
8
+ this.valueToKey.set(value, key);
9
+ }
10
+ getByKey(key) {
11
+ return this.keyToValue.get(key);
12
+ }
13
+ getByValue(value) {
14
+ return this.valueToKey.get(value);
15
+ }
16
+ clear() {
17
+ this.keyToValue.clear();
18
+ this.valueToKey.clear();
19
+ }
20
+ }
21
+ //# sourceMappingURL=double-indexed-kv.js.map
@@ -0,0 +1,89 @@
1
+ import { ClassRegistry } from './class-registry.js';
2
+ import { Registry } from './registry.js';
3
+ import { CustomTransformerRegistry, } from './custom-transformer-registry.js';
4
+ import { applyReferentialEqualityAnnotations, applyValueAnnotations, generateReferentialEqualityAnnotations, walker, } from './plainer.js';
5
+ import { copy } from 'copy-anything';
6
+ export default class SuperJSON {
7
+ /**
8
+ * @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.
9
+ */
10
+ constructor({ dedupe = false, } = {}) {
11
+ this.classRegistry = new ClassRegistry();
12
+ this.symbolRegistry = new Registry(s => s.description ?? '');
13
+ this.customTransformerRegistry = new CustomTransformerRegistry();
14
+ this.allowedErrorProps = [];
15
+ this.dedupe = dedupe;
16
+ }
17
+ serialize(object) {
18
+ const identities = new Map();
19
+ const output = walker(object, identities, this, this.dedupe);
20
+ const res = {
21
+ json: output.transformedValue,
22
+ };
23
+ if (output.annotations) {
24
+ res.meta = {
25
+ ...res.meta,
26
+ values: output.annotations,
27
+ };
28
+ }
29
+ const equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);
30
+ if (equalityAnnotations) {
31
+ res.meta = {
32
+ ...res.meta,
33
+ referentialEqualities: equalityAnnotations,
34
+ };
35
+ }
36
+ return res;
37
+ }
38
+ deserialize(payload) {
39
+ const { json, meta } = payload;
40
+ let result = copy(json);
41
+ if (meta?.values) {
42
+ result = applyValueAnnotations(result, meta.values, this);
43
+ }
44
+ if (meta?.referentialEqualities) {
45
+ result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);
46
+ }
47
+ return result;
48
+ }
49
+ stringify(object) {
50
+ return JSON.stringify(this.serialize(object));
51
+ }
52
+ parse(string) {
53
+ return this.deserialize(JSON.parse(string));
54
+ }
55
+ registerClass(v, options) {
56
+ this.classRegistry.register(v, options);
57
+ }
58
+ registerSymbol(v, identifier) {
59
+ this.symbolRegistry.register(v, identifier);
60
+ }
61
+ registerCustom(transformer, name) {
62
+ this.customTransformerRegistry.register({
63
+ name,
64
+ ...transformer,
65
+ });
66
+ }
67
+ allowErrorProps(...props) {
68
+ this.allowedErrorProps.push(...props);
69
+ }
70
+ }
71
+ SuperJSON.defaultInstance = new SuperJSON();
72
+ SuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);
73
+ SuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);
74
+ SuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);
75
+ SuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);
76
+ SuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);
77
+ SuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);
78
+ SuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);
79
+ SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);
80
+ export { SuperJSON };
81
+ export const serialize = SuperJSON.serialize;
82
+ export const deserialize = SuperJSON.deserialize;
83
+ export const stringify = SuperJSON.stringify;
84
+ export const parse = SuperJSON.parse;
85
+ export const registerClass = SuperJSON.registerClass;
86
+ export const registerCustom = SuperJSON.registerCustom;
87
+ export const registerSymbol = SuperJSON.registerSymbol;
88
+ export const allowErrorProps = SuperJSON.allowErrorProps;
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,35 @@
1
+ const getType = (payload) => Object.prototype.toString.call(payload).slice(8, -1);
2
+ export const isUndefined = (payload) => typeof payload === 'undefined';
3
+ export const isNull = (payload) => payload === null;
4
+ export const isPlainObject = (payload) => {
5
+ if (typeof payload !== 'object' || payload === null)
6
+ return false;
7
+ if (payload === Object.prototype)
8
+ return false;
9
+ if (Object.getPrototypeOf(payload) === null)
10
+ return true;
11
+ return Object.getPrototypeOf(payload) === Object.prototype;
12
+ };
13
+ export const isEmptyObject = (payload) => isPlainObject(payload) && Object.keys(payload).length === 0;
14
+ export const isArray = (payload) => Array.isArray(payload);
15
+ export const isString = (payload) => typeof payload === 'string';
16
+ export const isNumber = (payload) => typeof payload === 'number' && !isNaN(payload);
17
+ export const isBoolean = (payload) => typeof payload === 'boolean';
18
+ export const isRegExp = (payload) => payload instanceof RegExp;
19
+ export const isMap = (payload) => payload instanceof Map;
20
+ export const isSet = (payload) => payload instanceof Set;
21
+ export const isSymbol = (payload) => getType(payload) === 'Symbol';
22
+ export const isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf());
23
+ export const isError = (payload) => payload instanceof Error;
24
+ export const isNaNValue = (payload) => typeof payload === 'number' && isNaN(payload);
25
+ export const isPrimitive = (payload) => isBoolean(payload) ||
26
+ isNull(payload) ||
27
+ isUndefined(payload) ||
28
+ isNumber(payload) ||
29
+ isString(payload) ||
30
+ isSymbol(payload);
31
+ export const isBigint = (payload) => typeof payload === 'bigint';
32
+ export const isInfinite = (payload) => payload === Infinity || payload === -Infinity;
33
+ export const isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView);
34
+ export const isURL = (payload) => payload instanceof URL;
35
+ //# sourceMappingURL=is.js.map
@@ -0,0 +1,29 @@
1
+ export const escapeKey = (key) => key.replace(/\./g, '\\.');
2
+ export const stringifyPath = (path) => path
3
+ .map(String)
4
+ .map(escapeKey)
5
+ .join('.');
6
+ export const parsePath = (string) => {
7
+ const result = [];
8
+ let segment = '';
9
+ for (let i = 0; i < string.length; i++) {
10
+ let char = string.charAt(i);
11
+ const isEscapedDot = char === '\\' && string.charAt(i + 1) === '.';
12
+ if (isEscapedDot) {
13
+ segment += '.';
14
+ i++;
15
+ continue;
16
+ }
17
+ const isEndOfSegment = char === '.';
18
+ if (isEndOfSegment) {
19
+ result.push(segment);
20
+ segment = '';
21
+ continue;
22
+ }
23
+ segment += char;
24
+ }
25
+ const lastSegment = segment;
26
+ result.push(lastSegment);
27
+ return result;
28
+ };
29
+ //# sourceMappingURL=pathstringifier.js.map
@@ -0,0 +1,173 @@
1
+ import { isArray, isEmptyObject, isMap, isPlainObject, isPrimitive, isSet, } from './is.js';
2
+ import { escapeKey, stringifyPath } from './pathstringifier.js';
3
+ import { isInstanceOfRegisteredClass, transformValue, untransformValue, } from './transformer.js';
4
+ import { includes, forEach } from './util.js';
5
+ import { parsePath } from './pathstringifier.js';
6
+ import { getDeep, setDeep } from './accessDeep.js';
7
+ function traverse(tree, walker, origin = []) {
8
+ if (!tree) {
9
+ return;
10
+ }
11
+ if (!isArray(tree)) {
12
+ forEach(tree, (subtree, key) => traverse(subtree, walker, [...origin, ...parsePath(key)]));
13
+ return;
14
+ }
15
+ const [nodeValue, children] = tree;
16
+ if (children) {
17
+ forEach(children, (child, key) => {
18
+ traverse(child, walker, [...origin, ...parsePath(key)]);
19
+ });
20
+ }
21
+ walker(nodeValue, origin);
22
+ }
23
+ export function applyValueAnnotations(plain, annotations, superJson) {
24
+ traverse(annotations, (type, path) => {
25
+ plain = setDeep(plain, path, v => untransformValue(v, type, superJson));
26
+ });
27
+ return plain;
28
+ }
29
+ export function applyReferentialEqualityAnnotations(plain, annotations) {
30
+ function apply(identicalPaths, path) {
31
+ const object = getDeep(plain, parsePath(path));
32
+ identicalPaths.map(parsePath).forEach(identicalObjectPath => {
33
+ plain = setDeep(plain, identicalObjectPath, () => object);
34
+ });
35
+ }
36
+ if (isArray(annotations)) {
37
+ const [root, other] = annotations;
38
+ root.forEach(identicalPath => {
39
+ plain = setDeep(plain, parsePath(identicalPath), () => plain);
40
+ });
41
+ if (other) {
42
+ forEach(other, apply);
43
+ }
44
+ }
45
+ else {
46
+ forEach(annotations, apply);
47
+ }
48
+ return plain;
49
+ }
50
+ const isDeep = (object, superJson) => isPlainObject(object) ||
51
+ isArray(object) ||
52
+ isMap(object) ||
53
+ isSet(object) ||
54
+ isInstanceOfRegisteredClass(object, superJson);
55
+ function addIdentity(object, path, identities) {
56
+ const existingSet = identities.get(object);
57
+ if (existingSet) {
58
+ existingSet.push(path);
59
+ }
60
+ else {
61
+ identities.set(object, [path]);
62
+ }
63
+ }
64
+ export function generateReferentialEqualityAnnotations(identitites, dedupe) {
65
+ const result = {};
66
+ let rootEqualityPaths = undefined;
67
+ identitites.forEach(paths => {
68
+ if (paths.length <= 1) {
69
+ return;
70
+ }
71
+ // if we're not deduping, all of these objects continue existing.
72
+ // putting the shortest path first makes it easier to parse for humans
73
+ // if we're deduping though, only the first entry will still exist, so we can't do this optimisation.
74
+ if (!dedupe) {
75
+ paths = paths
76
+ .map(path => path.map(String))
77
+ .sort((a, b) => a.length - b.length);
78
+ }
79
+ const [representativePath, ...identicalPaths] = paths;
80
+ if (representativePath.length === 0) {
81
+ rootEqualityPaths = identicalPaths.map(stringifyPath);
82
+ }
83
+ else {
84
+ result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath);
85
+ }
86
+ });
87
+ if (rootEqualityPaths) {
88
+ if (isEmptyObject(result)) {
89
+ return [rootEqualityPaths];
90
+ }
91
+ else {
92
+ return [rootEqualityPaths, result];
93
+ }
94
+ }
95
+ else {
96
+ return isEmptyObject(result) ? undefined : result;
97
+ }
98
+ }
99
+ export const walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = new Map()) => {
100
+ const primitive = isPrimitive(object);
101
+ if (!primitive) {
102
+ addIdentity(object, path, identities);
103
+ const seen = seenObjects.get(object);
104
+ if (seen) {
105
+ // short-circuit result if we've seen this object before
106
+ return dedupe
107
+ ? {
108
+ transformedValue: null,
109
+ }
110
+ : seen;
111
+ }
112
+ }
113
+ if (!isDeep(object, superJson)) {
114
+ const transformed = transformValue(object, superJson);
115
+ const result = transformed
116
+ ? {
117
+ transformedValue: transformed.value,
118
+ annotations: [transformed.type],
119
+ }
120
+ : {
121
+ transformedValue: object,
122
+ };
123
+ if (!primitive) {
124
+ seenObjects.set(object, result);
125
+ }
126
+ return result;
127
+ }
128
+ if (includes(objectsInThisPath, object)) {
129
+ // prevent circular references
130
+ return {
131
+ transformedValue: null,
132
+ };
133
+ }
134
+ const transformationResult = transformValue(object, superJson);
135
+ const transformed = transformationResult?.value ?? object;
136
+ const transformedValue = isArray(transformed) ? [] : {};
137
+ const innerAnnotations = {};
138
+ forEach(transformed, (value, index) => {
139
+ if (index === '__proto__' ||
140
+ index === 'constructor' ||
141
+ index === 'prototype') {
142
+ throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);
143
+ }
144
+ const recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects);
145
+ transformedValue[index] = recursiveResult.transformedValue;
146
+ if (isArray(recursiveResult.annotations)) {
147
+ innerAnnotations[index] = recursiveResult.annotations;
148
+ }
149
+ else if (isPlainObject(recursiveResult.annotations)) {
150
+ forEach(recursiveResult.annotations, (tree, key) => {
151
+ innerAnnotations[escapeKey(index) + '.' + key] = tree;
152
+ });
153
+ }
154
+ });
155
+ const result = isEmptyObject(innerAnnotations)
156
+ ? {
157
+ transformedValue,
158
+ annotations: !!transformationResult
159
+ ? [transformationResult.type]
160
+ : undefined,
161
+ }
162
+ : {
163
+ transformedValue,
164
+ annotations: !!transformationResult
165
+ ? [transformationResult.type, innerAnnotations]
166
+ : innerAnnotations,
167
+ };
168
+ if (!primitive) {
169
+ seenObjects.set(object, result);
170
+ }
171
+ return result;
172
+ };
173
+ //# sourceMappingURL=plainer.js.map
@@ -0,0 +1,26 @@
1
+ import { DoubleIndexedKV } from './double-indexed-kv.js';
2
+ export class Registry {
3
+ constructor(generateIdentifier) {
4
+ this.generateIdentifier = generateIdentifier;
5
+ this.kv = new DoubleIndexedKV();
6
+ }
7
+ register(value, identifier) {
8
+ if (this.kv.getByValue(value)) {
9
+ return;
10
+ }
11
+ if (!identifier) {
12
+ identifier = this.generateIdentifier(value);
13
+ }
14
+ this.kv.set(identifier, value);
15
+ }
16
+ clear() {
17
+ this.kv.clear();
18
+ }
19
+ getIdentifier(value) {
20
+ return this.kv.getByValue(value);
21
+ }
22
+ getValue(identifier) {
23
+ return this.kv.getByKey(identifier);
24
+ }
25
+ }
26
+ //# sourceMappingURL=registry.js.map