modality-ts 0.0.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/checker/encode/index.d.ts +2 -0
  4. package/dist/checker/encode/index.d.ts.map +1 -0
  5. package/dist/checker/encode/index.js +2 -0
  6. package/dist/checker/encode/index.js.map +1 -0
  7. package/dist/checker/index.d.ts +6 -0
  8. package/dist/checker/index.d.ts.map +1 -0
  9. package/dist/checker/index.js +6 -0
  10. package/dist/checker/index.js.map +1 -0
  11. package/dist/checker/monitors/index.d.ts +2 -0
  12. package/dist/checker/monitors/index.d.ts.map +1 -0
  13. package/dist/checker/monitors/index.js +2 -0
  14. package/dist/checker/monitors/index.js.map +1 -0
  15. package/dist/checker/search/eval.d.ts +16 -0
  16. package/dist/checker/search/eval.d.ts.map +1 -0
  17. package/dist/checker/search/eval.js +254 -0
  18. package/dist/checker/search/eval.js.map +1 -0
  19. package/dist/checker/search/index.d.ts +43 -0
  20. package/dist/checker/search/index.d.ts.map +1 -0
  21. package/dist/checker/search/index.js +532 -0
  22. package/dist/checker/search/index.js.map +1 -0
  23. package/dist/checker/slicing/index.d.ts +2 -0
  24. package/dist/checker/slicing/index.d.ts.map +1 -0
  25. package/dist/checker/slicing/index.js +2 -0
  26. package/dist/checker/slicing/index.js.map +1 -0
  27. package/dist/checker/traces/index.d.ts +2 -0
  28. package/dist/checker/traces/index.d.ts.map +1 -0
  29. package/dist/checker/traces/index.js +2 -0
  30. package/dist/checker/traces/index.js.map +1 -0
  31. package/dist/extraction/index.d.ts +31 -0
  32. package/dist/extraction/index.d.ts.map +1 -0
  33. package/dist/extraction/index.js +2254 -0
  34. package/dist/extraction/index.js.map +1 -0
  35. package/dist/extraction/pipeline/index.d.ts +45 -0
  36. package/dist/extraction/pipeline/index.d.ts.map +1 -0
  37. package/dist/extraction/pipeline/index.js +101 -0
  38. package/dist/extraction/pipeline/index.js.map +1 -0
  39. package/dist/extraction/spi/index.d.ts +99 -0
  40. package/dist/extraction/spi/index.d.ts.map +1 -0
  41. package/dist/extraction/spi/index.js +2 -0
  42. package/dist/extraction/spi/index.js.map +1 -0
  43. package/dist/harness/index.d.ts +109 -0
  44. package/dist/harness/index.d.ts.map +1 -0
  45. package/dist/harness/index.js +377 -0
  46. package/dist/harness/index.js.map +1 -0
  47. package/dist/kernel/artifacts/index.d.ts +11 -0
  48. package/dist/kernel/artifacts/index.d.ts.map +1 -0
  49. package/dist/kernel/artifacts/index.js +127 -0
  50. package/dist/kernel/artifacts/index.js.map +1 -0
  51. package/dist/kernel/index.d.ts +10 -0
  52. package/dist/kernel/index.d.ts.map +1 -0
  53. package/dist/kernel/index.js +10 -0
  54. package/dist/kernel/index.js.map +1 -0
  55. package/dist/kernel/ir/canonical.d.ts +5 -0
  56. package/dist/kernel/ir/canonical.d.ts.map +1 -0
  57. package/dist/kernel/ir/canonical.js +47 -0
  58. package/dist/kernel/ir/canonical.js.map +1 -0
  59. package/dist/kernel/ir/domains.d.ts +9 -0
  60. package/dist/kernel/ir/domains.d.ts.map +1 -0
  61. package/dist/kernel/ir/domains.js +102 -0
  62. package/dist/kernel/ir/domains.js.map +1 -0
  63. package/dist/kernel/ir/types.d.ts +224 -0
  64. package/dist/kernel/ir/types.d.ts.map +1 -0
  65. package/dist/kernel/ir/types.js +2 -0
  66. package/dist/kernel/ir/types.js.map +1 -0
  67. package/dist/kernel/ir/validator.d.ts +11 -0
  68. package/dist/kernel/ir/validator.d.ts.map +1 -0
  69. package/dist/kernel/ir/validator.js +674 -0
  70. package/dist/kernel/ir/validator.js.map +1 -0
  71. package/dist/kernel/overlay/index.d.ts +18 -0
  72. package/dist/kernel/overlay/index.d.ts.map +1 -0
  73. package/dist/kernel/overlay/index.js +59 -0
  74. package/dist/kernel/overlay/index.js.map +1 -0
  75. package/dist/kernel/props/index.d.ts +71 -0
  76. package/dist/kernel/props/index.d.ts.map +1 -0
  77. package/dist/kernel/props/index.js +122 -0
  78. package/dist/kernel/props/index.js.map +1 -0
  79. package/dist/kernel/report/types.d.ts +115 -0
  80. package/dist/kernel/report/types.d.ts.map +1 -0
  81. package/dist/kernel/report/types.js +2 -0
  82. package/dist/kernel/report/types.js.map +1 -0
  83. package/dist/kernel/trace/types.d.ts +19 -0
  84. package/dist/kernel/trace/types.d.ts.map +1 -0
  85. package/dist/kernel/trace/types.js +2 -0
  86. package/dist/kernel/trace/types.js.map +1 -0
  87. package/dist/modality/check.d.ts +3 -0
  88. package/dist/modality/check.d.ts.map +1 -0
  89. package/dist/modality/check.js +2 -0
  90. package/dist/modality/check.js.map +1 -0
  91. package/dist/modality/ci.d.ts +3 -0
  92. package/dist/modality/ci.d.ts.map +1 -0
  93. package/dist/modality/ci.js +2 -0
  94. package/dist/modality/ci.js.map +1 -0
  95. package/dist/modality/cli.d.ts +3 -0
  96. package/dist/modality/cli.d.ts.map +1 -0
  97. package/dist/modality/cli.js +223 -0
  98. package/dist/modality/cli.js.map +1 -0
  99. package/dist/modality/codegen/model.d.ts +3 -0
  100. package/dist/modality/codegen/model.d.ts.map +1 -0
  101. package/dist/modality/codegen/model.js +59 -0
  102. package/dist/modality/codegen/model.js.map +1 -0
  103. package/dist/modality/codegen/replay-test.d.ts +10 -0
  104. package/dist/modality/codegen/replay-test.d.ts.map +1 -0
  105. package/dist/modality/codegen/replay-test.js +104 -0
  106. package/dist/modality/codegen/replay-test.js.map +1 -0
  107. package/dist/modality/conform.d.ts +3 -0
  108. package/dist/modality/conform.d.ts.map +1 -0
  109. package/dist/modality/conform.js +2 -0
  110. package/dist/modality/conform.js.map +1 -0
  111. package/dist/modality/export-tla.d.ts +3 -0
  112. package/dist/modality/export-tla.d.ts.map +1 -0
  113. package/dist/modality/export-tla.js +2 -0
  114. package/dist/modality/export-tla.js.map +1 -0
  115. package/dist/modality/extract.d.ts +3 -0
  116. package/dist/modality/extract.d.ts.map +1 -0
  117. package/dist/modality/extract.js +2 -0
  118. package/dist/modality/extract.js.map +1 -0
  119. package/dist/modality/features/check/command.d.ts +23 -0
  120. package/dist/modality/features/check/command.d.ts.map +1 -0
  121. package/dist/modality/features/check/command.js +174 -0
  122. package/dist/modality/features/check/command.js.map +1 -0
  123. package/dist/modality/features/check/index.d.ts +3 -0
  124. package/dist/modality/features/check/index.d.ts.map +1 -0
  125. package/dist/modality/features/check/index.js +2 -0
  126. package/dist/modality/features/check/index.js.map +1 -0
  127. package/dist/modality/features/ci/command.d.ts +23 -0
  128. package/dist/modality/features/ci/command.d.ts.map +1 -0
  129. package/dist/modality/features/ci/command.js +176 -0
  130. package/dist/modality/features/ci/command.js.map +1 -0
  131. package/dist/modality/features/ci/index.d.ts +3 -0
  132. package/dist/modality/features/ci/index.d.ts.map +1 -0
  133. package/dist/modality/features/ci/index.js +2 -0
  134. package/dist/modality/features/ci/index.js.map +1 -0
  135. package/dist/modality/features/conform/command.d.ts +35 -0
  136. package/dist/modality/features/conform/command.d.ts.map +1 -0
  137. package/dist/modality/features/conform/command.js +162 -0
  138. package/dist/modality/features/conform/command.js.map +1 -0
  139. package/dist/modality/features/conform/index.d.ts +3 -0
  140. package/dist/modality/features/conform/index.d.ts.map +1 -0
  141. package/dist/modality/features/conform/index.js +2 -0
  142. package/dist/modality/features/conform/index.js.map +1 -0
  143. package/dist/modality/features/export/command.d.ts +13 -0
  144. package/dist/modality/features/export/command.d.ts.map +1 -0
  145. package/dist/modality/features/export/command.js +250 -0
  146. package/dist/modality/features/export/command.js.map +1 -0
  147. package/dist/modality/features/export/index.d.ts +3 -0
  148. package/dist/modality/features/export/index.d.ts.map +1 -0
  149. package/dist/modality/features/export/index.js +2 -0
  150. package/dist/modality/features/export/index.js.map +1 -0
  151. package/dist/modality/features/extract/command.d.ts +37 -0
  152. package/dist/modality/features/extract/command.d.ts.map +1 -0
  153. package/dist/modality/features/extract/command.js +443 -0
  154. package/dist/modality/features/extract/command.js.map +1 -0
  155. package/dist/modality/features/extract/index.d.ts +3 -0
  156. package/dist/modality/features/extract/index.d.ts.map +1 -0
  157. package/dist/modality/features/extract/index.js +2 -0
  158. package/dist/modality/features/extract/index.js.map +1 -0
  159. package/dist/modality/features/replay/command.d.ts +16 -0
  160. package/dist/modality/features/replay/command.d.ts.map +1 -0
  161. package/dist/modality/features/replay/command.js +50 -0
  162. package/dist/modality/features/replay/command.js.map +1 -0
  163. package/dist/modality/features/replay/index.d.ts +3 -0
  164. package/dist/modality/features/replay/index.d.ts.map +1 -0
  165. package/dist/modality/features/replay/index.js +2 -0
  166. package/dist/modality/features/replay/index.js.map +1 -0
  167. package/dist/modality/overlay.d.ts +3 -0
  168. package/dist/modality/overlay.d.ts.map +1 -0
  169. package/dist/modality/overlay.js +9 -0
  170. package/dist/modality/overlay.js.map +1 -0
  171. package/dist/modality/registry/index.d.ts +22 -0
  172. package/dist/modality/registry/index.d.ts.map +1 -0
  173. package/dist/modality/registry/index.js +89 -0
  174. package/dist/modality/registry/index.js.map +1 -0
  175. package/dist/modality/replay.d.ts +3 -0
  176. package/dist/modality/replay.d.ts.map +1 -0
  177. package/dist/modality/replay.js +2 -0
  178. package/dist/modality/replay.js.map +1 -0
  179. package/dist/runtime/index.d.ts +53 -0
  180. package/dist/runtime/index.d.ts.map +1 -0
  181. package/dist/runtime/index.js +83 -0
  182. package/dist/runtime/index.js.map +1 -0
  183. package/dist/sources/jotai/harness.d.ts +13 -0
  184. package/dist/sources/jotai/harness.d.ts.map +1 -0
  185. package/dist/sources/jotai/harness.js +20 -0
  186. package/dist/sources/jotai/harness.js.map +1 -0
  187. package/dist/sources/jotai/index.d.ts +11 -0
  188. package/dist/sources/jotai/index.d.ts.map +1 -0
  189. package/dist/sources/jotai/index.js +405 -0
  190. package/dist/sources/jotai/index.js.map +1 -0
  191. package/dist/sources/router/harness.d.ts +9 -0
  192. package/dist/sources/router/harness.d.ts.map +1 -0
  193. package/dist/sources/router/harness.js +32 -0
  194. package/dist/sources/router/harness.js.map +1 -0
  195. package/dist/sources/router/index.d.ts +15 -0
  196. package/dist/sources/router/index.d.ts.map +1 -0
  197. package/dist/sources/router/index.js +41 -0
  198. package/dist/sources/router/index.js.map +1 -0
  199. package/dist/sources/swr/harness.d.ts +12 -0
  200. package/dist/sources/swr/harness.d.ts.map +1 -0
  201. package/dist/sources/swr/harness.js +25 -0
  202. package/dist/sources/swr/harness.js.map +1 -0
  203. package/dist/sources/swr/index.d.ts +51 -0
  204. package/dist/sources/swr/index.d.ts.map +1 -0
  205. package/dist/sources/swr/index.js +428 -0
  206. package/dist/sources/swr/index.js.map +1 -0
  207. package/dist/sources/use-state/harness.d.ts +12 -0
  208. package/dist/sources/use-state/harness.d.ts.map +1 -0
  209. package/dist/sources/use-state/harness.js +19 -0
  210. package/dist/sources/use-state/harness.js.map +1 -0
  211. package/dist/sources/use-state/index.d.ts +9 -0
  212. package/dist/sources/use-state/index.d.ts.map +1 -0
  213. package/dist/sources/use-state/index.js +248 -0
  214. package/dist/sources/use-state/index.js.map +1 -0
  215. package/package.json +136 -0
@@ -0,0 +1,405 @@
1
+ import * as ts from "typescript";
2
+ import * as harness from "./harness.js";
3
+ export function jotaiSource() {
4
+ return {
5
+ id: "jotai",
6
+ version: "0.1.0",
7
+ packageNames: ["jotai"],
8
+ discover: (ctx) => discoverJotaiAtoms(ctx.sourceText, ctx.fileName),
9
+ writeChannels: (ctx) => discoverJotaiWriteChannels(ctx.sourceText, ctx.fileName),
10
+ safetyWarnings: (ctx) => discoverJotaiSafetyWarnings(ctx.sourceText, ctx.fileName),
11
+ harness,
12
+ conformance: {
13
+ testedVersions: "jotai>=2"
14
+ }
15
+ };
16
+ }
17
+ export default jotaiSource;
18
+ export function discoverJotaiSafetyWarnings(sourceText, fileName = "state.ts") {
19
+ const source = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
20
+ const warnings = [];
21
+ for (const statement of source.statements) {
22
+ if (!ts.isImportDeclaration(statement) || !isJotaiModule(statement.moduleSpecifier))
23
+ continue;
24
+ const bindings = statement.importClause?.namedBindings;
25
+ if (!bindings || !ts.isNamedImports(bindings))
26
+ continue;
27
+ for (const specifier of bindings.elements) {
28
+ const imported = specifier.propertyName?.text ?? specifier.name.text;
29
+ if (imported !== "getDefaultStore")
30
+ continue;
31
+ warnings.push({
32
+ message: "Global taint jotai:getDefaultStore",
33
+ source: { file: fileName, ...lineAndColumn(source, specifier) }
34
+ });
35
+ }
36
+ }
37
+ return warnings;
38
+ }
39
+ export function discoverJotaiAtoms(sourceText, fileName = "state.ts") {
40
+ const source = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
41
+ const importedAtomNames = atomImportNames(source);
42
+ if (importedAtomNames.size === 0)
43
+ return [];
44
+ const decls = [];
45
+ const visit = (node) => {
46
+ if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer && isAtomCall(node.initializer, importedAtomNames)) {
47
+ const origin = { file: fileName, ...lineAndColumn(source, node) };
48
+ const domain = inferAtomDomain(node.initializer);
49
+ const variable = {
50
+ id: `atom:${node.name.text}`,
51
+ domain,
52
+ origin,
53
+ scope: { kind: "global" },
54
+ initial: initialValueForAtom(node.initializer, domain)
55
+ };
56
+ decls.push({
57
+ id: variable.id,
58
+ kind: "jotai/atom",
59
+ var: variable,
60
+ origin,
61
+ metadata: { atomName: node.name.text }
62
+ });
63
+ }
64
+ ts.forEachChild(node, visit);
65
+ };
66
+ visit(source);
67
+ return decls;
68
+ }
69
+ export function discoverJotaiWriteChannels(sourceText, fileName = "state.ts") {
70
+ const source = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
71
+ const setters = setAtomImportNames(source);
72
+ const defaultStoreGetters = getDefaultStoreImportNames(source);
73
+ if (setters.useAtom.size === 0 && setters.useSetAtom.size === 0 && defaultStoreGetters.size === 0)
74
+ return [];
75
+ const channels = [];
76
+ const defaultStoreNames = new Set();
77
+ const visit = (node) => {
78
+ if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer && isGetDefaultStoreCall(node.initializer, defaultStoreGetters)) {
79
+ defaultStoreNames.add(node.name.text);
80
+ }
81
+ if (ts.isVariableDeclaration(node) && ts.isArrayBindingPattern(node.name) && node.initializer && isUseAtomLikeCall(node.initializer, setters.useAtom)) {
82
+ const atomArg = node.initializer.arguments[0];
83
+ const setter = node.name.elements.at(-1);
84
+ if (atomArg && ts.isIdentifier(atomArg) && setter && ts.isBindingElement(setter) && ts.isIdentifier(setter.name)) {
85
+ channels.push({
86
+ id: `atom:${atomArg.text}.setter`,
87
+ varId: `atom:${atomArg.text}`,
88
+ symbolName: setter.name.text,
89
+ source: { file: fileName, ...lineAndColumn(source, node) }
90
+ });
91
+ }
92
+ }
93
+ if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer && isUseAtomLikeCall(node.initializer, setters.useSetAtom)) {
94
+ const atomArg = node.initializer.arguments[0];
95
+ if (atomArg && ts.isIdentifier(atomArg)) {
96
+ channels.push({
97
+ id: `atom:${atomArg.text}.setter`,
98
+ varId: `atom:${atomArg.text}`,
99
+ symbolName: node.name.text,
100
+ source: { file: fileName, ...lineAndColumn(source, node) }
101
+ });
102
+ }
103
+ }
104
+ if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "set" && ts.isIdentifier(node.expression.expression) && defaultStoreNames.has(node.expression.expression.text)) {
105
+ const atomArg = node.arguments[0];
106
+ if (atomArg && ts.isIdentifier(atomArg)) {
107
+ channels.push({
108
+ id: `atom:${atomArg.text}.store-set`,
109
+ varId: `atom:${atomArg.text}`,
110
+ symbolName: `${node.expression.expression.text}.set:${atomArg.text}`,
111
+ source: { file: fileName, ...lineAndColumn(source, node) }
112
+ });
113
+ }
114
+ }
115
+ ts.forEachChild(node, visit);
116
+ };
117
+ visit(source);
118
+ return channels;
119
+ }
120
+ function getDefaultStoreImportNames(source) {
121
+ const names = new Set();
122
+ for (const statement of source.statements) {
123
+ if (!ts.isImportDeclaration(statement) || !isJotaiModule(statement.moduleSpecifier))
124
+ continue;
125
+ const bindings = statement.importClause?.namedBindings;
126
+ if (!bindings || !ts.isNamedImports(bindings))
127
+ continue;
128
+ for (const specifier of bindings.elements) {
129
+ const imported = specifier.propertyName?.text ?? specifier.name.text;
130
+ if (imported === "getDefaultStore")
131
+ names.add(specifier.name.text);
132
+ }
133
+ }
134
+ return names;
135
+ }
136
+ function atomImportNames(source) {
137
+ const names = new Set();
138
+ for (const statement of source.statements) {
139
+ if (!ts.isImportDeclaration(statement) || !isJotaiModule(statement.moduleSpecifier))
140
+ continue;
141
+ const bindings = statement.importClause?.namedBindings;
142
+ if (!bindings || !ts.isNamedImports(bindings))
143
+ continue;
144
+ for (const specifier of bindings.elements) {
145
+ if ((specifier.propertyName?.text ?? specifier.name.text) === "atom")
146
+ names.add(specifier.name.text);
147
+ }
148
+ }
149
+ return names;
150
+ }
151
+ function setAtomImportNames(source) {
152
+ const useAtom = new Set();
153
+ const useSetAtom = new Set();
154
+ for (const statement of source.statements) {
155
+ if (!ts.isImportDeclaration(statement) || !isJotaiModule(statement.moduleSpecifier))
156
+ continue;
157
+ const bindings = statement.importClause?.namedBindings;
158
+ if (!bindings || !ts.isNamedImports(bindings))
159
+ continue;
160
+ for (const specifier of bindings.elements) {
161
+ const imported = specifier.propertyName?.text ?? specifier.name.text;
162
+ if (imported === "useAtom")
163
+ useAtom.add(specifier.name.text);
164
+ if (imported === "useSetAtom")
165
+ useSetAtom.add(specifier.name.text);
166
+ }
167
+ }
168
+ return { useAtom, useSetAtom };
169
+ }
170
+ function isJotaiModule(moduleSpecifier) {
171
+ return ts.isStringLiteral(moduleSpecifier) && moduleSpecifier.text === "jotai";
172
+ }
173
+ function isAtomCall(node, atomNames) {
174
+ return ts.isCallExpression(node) && ts.isIdentifier(node.expression) && atomNames.has(node.expression.text);
175
+ }
176
+ function isUseAtomLikeCall(node, names) {
177
+ return ts.isCallExpression(node) && ts.isIdentifier(node.expression) && names.has(node.expression.text);
178
+ }
179
+ function isGetDefaultStoreCall(node, names) {
180
+ return ts.isCallExpression(node) && ts.isIdentifier(node.expression) && names.has(node.expression.text);
181
+ }
182
+ function inferAtomDomain(call) {
183
+ const typeArg = call.typeArguments?.[0];
184
+ if (typeArg)
185
+ return inferDomainFromTypeNode(typeArg);
186
+ const initial = call.arguments[0];
187
+ if (!initial)
188
+ return { kind: "tokens", count: 1 };
189
+ if (initial.kind === ts.SyntaxKind.TrueKeyword || initial.kind === ts.SyntaxKind.FalseKeyword)
190
+ return { kind: "bool" };
191
+ if (ts.isStringLiteral(initial))
192
+ return { kind: "enum", values: [initial.text] };
193
+ if (ts.isNumericLiteral(initial))
194
+ return { kind: "boundedInt", min: Number(initial.text), max: Number(initial.text) };
195
+ if (initial.kind === ts.SyntaxKind.NullKeyword)
196
+ return { kind: "option", inner: { kind: "tokens", count: 1 } };
197
+ if (ts.isArrayLiteralExpression(initial))
198
+ return { kind: "lengthCat" };
199
+ if (ts.isObjectLiteralExpression(initial))
200
+ return domainFromObjectLiteral(initial);
201
+ return { kind: "tokens", count: 1 };
202
+ }
203
+ function initialValueForAtom(call, domain) {
204
+ const initial = call.arguments[0];
205
+ if (!initial)
206
+ return firstValue(domain);
207
+ if (initial.kind === ts.SyntaxKind.TrueKeyword)
208
+ return true;
209
+ if (initial.kind === ts.SyntaxKind.FalseKeyword)
210
+ return false;
211
+ if (ts.isStringLiteral(initial))
212
+ return initial.text;
213
+ if (ts.isNumericLiteral(initial))
214
+ return Number(initial.text);
215
+ if (initial.kind === ts.SyntaxKind.NullKeyword)
216
+ return null;
217
+ if (ts.isArrayLiteralExpression(initial))
218
+ return initial.elements.length === 0 ? "0" : initial.elements.length === 1 ? "1" : "many";
219
+ if (ts.isObjectLiteralExpression(initial))
220
+ return valueFromObjectLiteral(initial, domain);
221
+ return firstValue(domain);
222
+ }
223
+ function inferDomainFromTypeNode(node) {
224
+ if (!node)
225
+ return { kind: "tokens", count: 1 };
226
+ switch (node.kind) {
227
+ case ts.SyntaxKind.BooleanKeyword:
228
+ return { kind: "bool" };
229
+ case ts.SyntaxKind.StringKeyword:
230
+ case ts.SyntaxKind.NumberKeyword:
231
+ case ts.SyntaxKind.AnyKeyword:
232
+ case ts.SyntaxKind.UnknownKeyword:
233
+ return { kind: "tokens", count: 1 };
234
+ case ts.SyntaxKind.LiteralType:
235
+ return domainFromLiteralType(node);
236
+ case ts.SyntaxKind.UnionType:
237
+ return domainFromUnion(node);
238
+ case ts.SyntaxKind.TypeLiteral:
239
+ return domainFromTypeLiteral(node);
240
+ case ts.SyntaxKind.ArrayType:
241
+ return { kind: "lengthCat" };
242
+ case ts.SyntaxKind.TypeReference:
243
+ return domainFromTypeReference(node);
244
+ default:
245
+ return { kind: "tokens", count: 1 };
246
+ }
247
+ }
248
+ function domainFromLiteralType(node) {
249
+ const lit = node.literal;
250
+ if (lit.kind === ts.SyntaxKind.TrueKeyword || lit.kind === ts.SyntaxKind.FalseKeyword)
251
+ return { kind: "bool" };
252
+ if (ts.isStringLiteral(lit))
253
+ return { kind: "enum", values: [lit.text] };
254
+ if (ts.isNumericLiteral(lit))
255
+ return { kind: "boundedInt", min: Number(lit.text), max: Number(lit.text) };
256
+ if (lit.kind === ts.SyntaxKind.NullKeyword)
257
+ return { kind: "option", inner: { kind: "tokens", count: 1 } };
258
+ return { kind: "tokens", count: 1 };
259
+ }
260
+ function domainFromUnion(node) {
261
+ const nonNull = node.types.filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword && !(ts.isLiteralTypeNode(part) && part.literal.kind === ts.SyntaxKind.NullKeyword));
262
+ if (nonNull.length !== node.types.length && nonNull.length === 1) {
263
+ return { kind: "option", inner: inferDomainFromTypeNode(nonNull[0]) };
264
+ }
265
+ const literalValues = [];
266
+ const numericValues = [];
267
+ for (const part of node.types) {
268
+ if (!ts.isLiteralTypeNode(part))
269
+ return taggedUnionFrom(node) ?? { kind: "tokens", count: 1 };
270
+ const lit = part.literal;
271
+ if (ts.isStringLiteral(lit))
272
+ literalValues.push(lit.text);
273
+ else if (ts.isNumericLiteral(lit))
274
+ numericValues.push(Number(lit.text));
275
+ else
276
+ return taggedUnionFrom(node) ?? { kind: "tokens", count: 1 };
277
+ }
278
+ if (numericValues.length === node.types.length)
279
+ return { kind: "boundedInt", min: Math.min(...numericValues), max: Math.max(...numericValues) };
280
+ return { kind: "enum", values: literalValues };
281
+ }
282
+ function taggedUnionFrom(node) {
283
+ const members = node.types.filter(ts.isTypeLiteralNode);
284
+ if (members.length !== node.types.length)
285
+ return undefined;
286
+ const tagCandidates = new Map();
287
+ for (const member of members) {
288
+ for (const prop of member.members.filter(ts.isPropertySignature)) {
289
+ if (!prop.type || !ts.isIdentifier(prop.name) || !ts.isLiteralTypeNode(prop.type) || !ts.isStringLiteral(prop.type.literal))
290
+ continue;
291
+ const set = tagCandidates.get(prop.name.text) ?? new Set();
292
+ set.add(prop.type.literal.text);
293
+ tagCandidates.set(prop.name.text, set);
294
+ }
295
+ }
296
+ const tag = [...tagCandidates].find(([, values]) => values.size === members.length)?.[0];
297
+ if (!tag)
298
+ return undefined;
299
+ const variants = {};
300
+ for (const member of members) {
301
+ const tagProp = member.members.find((prop) => ts.isPropertySignature(prop) && ts.isIdentifier(prop.name) && prop.name.text === tag);
302
+ if (!tagProp?.type || !ts.isLiteralTypeNode(tagProp.type) || !ts.isStringLiteral(tagProp.type.literal))
303
+ return undefined;
304
+ variants[tagProp.type.literal.text] = domainFromTypeLiteral(member, tag);
305
+ }
306
+ return { kind: "tagged", tag, variants };
307
+ }
308
+ function domainFromTypeLiteral(node, omitField) {
309
+ const fields = {};
310
+ for (const member of node.members) {
311
+ if (!ts.isPropertySignature(member) || !member.type || !ts.isIdentifier(member.name) || member.name.text === omitField)
312
+ continue;
313
+ fields[member.name.text] = inferDomainFromTypeNode(member.type);
314
+ }
315
+ return { kind: "record", fields };
316
+ }
317
+ function domainFromObjectLiteral(node) {
318
+ const fields = {};
319
+ for (const prop of node.properties) {
320
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
321
+ continue;
322
+ fields[prop.name.text] = domainFromExpression(prop.initializer);
323
+ }
324
+ return { kind: "record", fields };
325
+ }
326
+ function domainFromExpression(expr) {
327
+ if (expr.kind === ts.SyntaxKind.TrueKeyword || expr.kind === ts.SyntaxKind.FalseKeyword)
328
+ return { kind: "bool" };
329
+ if (ts.isStringLiteral(expr))
330
+ return { kind: "enum", values: [expr.text] };
331
+ if (ts.isNumericLiteral(expr))
332
+ return { kind: "boundedInt", min: Number(expr.text), max: Number(expr.text) };
333
+ if (expr.kind === ts.SyntaxKind.NullKeyword)
334
+ return { kind: "option", inner: { kind: "tokens", count: 1 } };
335
+ if (ts.isArrayLiteralExpression(expr))
336
+ return { kind: "lengthCat" };
337
+ if (ts.isObjectLiteralExpression(expr))
338
+ return domainFromObjectLiteral(expr);
339
+ return { kind: "tokens", count: 1 };
340
+ }
341
+ function domainFromTypeReference(node) {
342
+ const name = node.typeName.getText();
343
+ if ((name === "Array" || name === "ReadonlyArray") && node.typeArguments?.length === 1)
344
+ return { kind: "lengthCat" };
345
+ return { kind: "tokens", count: 1 };
346
+ }
347
+ function valueFromObjectLiteral(node, domain) {
348
+ const values = {};
349
+ for (const prop of node.properties) {
350
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
351
+ continue;
352
+ values[prop.name.text] = valueFromExpression(prop.initializer);
353
+ }
354
+ if (domain.kind === "tagged" && !(domain.tag in values)) {
355
+ const tag = Object.keys(domain.variants)[0] ?? "unknown";
356
+ return { ...values, [domain.tag]: tag };
357
+ }
358
+ return values;
359
+ }
360
+ function valueFromExpression(expr) {
361
+ if (expr.kind === ts.SyntaxKind.TrueKeyword)
362
+ return true;
363
+ if (expr.kind === ts.SyntaxKind.FalseKeyword)
364
+ return false;
365
+ if (ts.isStringLiteral(expr))
366
+ return expr.text;
367
+ if (ts.isNumericLiteral(expr))
368
+ return Number(expr.text);
369
+ if (expr.kind === ts.SyntaxKind.NullKeyword)
370
+ return null;
371
+ if (ts.isArrayLiteralExpression(expr))
372
+ return expr.elements.length === 0 ? "0" : expr.elements.length === 1 ? "1" : "many";
373
+ if (ts.isObjectLiteralExpression(expr))
374
+ return valueFromObjectLiteral(expr, domainFromObjectLiteral(expr));
375
+ return "tok1";
376
+ }
377
+ function firstValue(domain) {
378
+ switch (domain.kind) {
379
+ case "bool":
380
+ return false;
381
+ case "enum":
382
+ return domain.values[0] ?? "";
383
+ case "boundedInt":
384
+ return domain.min;
385
+ case "option":
386
+ return null;
387
+ case "record":
388
+ return Object.fromEntries(Object.entries(domain.fields).map(([key, field]) => [key, firstValue(field)]));
389
+ case "tagged": {
390
+ const [tagValue, variant] = Object.entries(domain.variants)[0] ?? ["unknown", { kind: "record", fields: {} }];
391
+ return { ...firstValue(variant), [domain.tag]: tagValue };
392
+ }
393
+ case "tokens":
394
+ return domain.names?.[0] ?? "tok1";
395
+ case "lengthCat":
396
+ return "0";
397
+ case "boundedList":
398
+ return [];
399
+ }
400
+ }
401
+ function lineAndColumn(source, node) {
402
+ const pos = source.getLineAndCharacterOfPosition(node.getStart(source));
403
+ return { line: pos.line + 1, column: pos.character + 1 };
404
+ }
405
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/jotai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { HarnessCtx, HarnessHooks, ObservedRead } from "modality-ts/extraction/spi";
2
+ export interface RouterHarnessHooks extends HarnessHooks {
3
+ route: string;
4
+ history: string[];
5
+ }
6
+ export declare function setup(ctx: HarnessCtx): RouterHarnessHooks;
7
+ export declare function observe(handles: HarnessHooks, varId?: string): ObservedRead | "unobservable";
8
+ export declare function navigate(handles: HarnessHooks, mode: "push" | "replace" | "back", to?: string): void;
9
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../src/sources/router/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGzF,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,kBAAkB,CAKzD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,SAAc,GAAG,YAAY,GAAG,cAAc,CAKjG;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAUpG"}
@@ -0,0 +1,32 @@
1
+ export function setup(ctx) {
2
+ return {
3
+ route: typeof ctx.initialState?.["sys:route"] === "string" ? ctx.initialState["sys:route"] : "/",
4
+ history: Array.isArray(ctx.initialState?.["sys:history"]) ? [...ctx.initialState["sys:history"].filter(isString)] : []
5
+ };
6
+ }
7
+ export function observe(handles, varId = "sys:route") {
8
+ const router = handles;
9
+ if (varId === "sys:route")
10
+ return { value: router.route };
11
+ if (varId === "sys:history")
12
+ return { value: router.history };
13
+ return "unobservable";
14
+ }
15
+ export function navigate(handles, mode, to) {
16
+ const router = handles;
17
+ if (mode === "back") {
18
+ const previous = router.history.pop();
19
+ if (previous !== undefined)
20
+ router.route = previous;
21
+ return;
22
+ }
23
+ if (!to)
24
+ return;
25
+ if (mode === "push")
26
+ router.history.push(router.route);
27
+ router.route = to;
28
+ }
29
+ function isString(value) {
30
+ return typeof value === "string";
31
+ }
32
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../src/sources/router/harness.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,KAAK,CAAC,GAAe;IACnC,OAAO;QACL,KAAK,EAAE,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;QAChG,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;KACvH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAqB,EAAE,KAAK,GAAG,WAAW;IAChE,MAAM,MAAM,GAAG,OAA6B,CAAC;IAC7C,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1D,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9D,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAqB,EAAE,IAAiC,EAAE,EAAW;IAC5F,MAAM,MAAM,GAAG,OAA6B,CAAC;IAC7C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QACpD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,IAAI,IAAI,KAAK,MAAM;QAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { RouterPlugin, ResolvedOptions } from "modality-ts/extraction/spi";
2
+ import type { StateVarDecl } from "modality-ts/kernel";
3
+ export interface RouterSourceOptions {
4
+ id?: string;
5
+ packageNames?: readonly string[];
6
+ historyMaxLen?: number;
7
+ }
8
+ export declare function routerSource(options?: RouterSourceOptions): RouterPlugin;
9
+ export default routerSource;
10
+ export declare function routeVars(routes: readonly string[], options: ResolvedOptions): readonly StateVarDecl[];
11
+ export declare function navigationCall(callee: string, args: readonly unknown[]): {
12
+ mode: "push" | "replace" | "back";
13
+ to?: string;
14
+ } | "unsupported";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sources/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvE,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAU5E;AAED,eAAe,YAAY,CAAC;AAE5B,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,SAAS,YAAY,EAAE,CAatG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAO3I"}
@@ -0,0 +1,41 @@
1
+ import * as harness from "./harness.js";
2
+ export function routerSource(options = {}) {
3
+ const historyMaxLen = options.historyMaxLen ?? 4;
4
+ return {
5
+ id: options.id ?? "router",
6
+ version: "0.1.0",
7
+ packageNames: options.packageNames ?? ["react-router", "react-router-dom"],
8
+ routeVars: (routes, resolvedOptions) => routeVars(routes, { ...resolvedOptions, bounds: { ...resolvedOptions.bounds, maxHistory: resolvedOptions.bounds?.maxHistory ?? historyMaxLen } }),
9
+ navigationCall,
10
+ harness
11
+ };
12
+ }
13
+ export default routerSource;
14
+ export function routeVars(routes, options) {
15
+ const values = uniqueRoutes(routes, options.route);
16
+ const routeDomain = { kind: "enum", values };
17
+ return [
18
+ { id: "sys:route", domain: routeDomain, origin: "system", scope: { kind: "global" }, initial: options.route },
19
+ {
20
+ id: "sys:history",
21
+ domain: { kind: "boundedList", inner: routeDomain, maxLen: options.bounds?.maxHistory ?? 4 },
22
+ origin: "system",
23
+ scope: { kind: "global" },
24
+ initial: []
25
+ }
26
+ ];
27
+ }
28
+ export function navigationCall(callee, args) {
29
+ if (callee === "navigate" && args.length === 1 && typeof args[0] === "string")
30
+ return { mode: "push", to: args[0] };
31
+ if ((callee.endsWith(".push") || callee.endsWith(".replace")) && args.length === 1 && typeof args[0] === "string") {
32
+ return { mode: callee.endsWith(".replace") ? "replace" : "push", to: args[0] };
33
+ }
34
+ if (callee.endsWith(".back") && args.length === 0)
35
+ return { mode: "back" };
36
+ return "unsupported";
37
+ }
38
+ function uniqueRoutes(routes, initialRoute) {
39
+ return [...new Set([initialRoute, ...routes])];
40
+ }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/router/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAQxC,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IACjD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ;QAC1B,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC;QAC1E,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,UAAU,IAAI,aAAa,EAAE,EAAE,CAAC;QACzL,cAAc;QACd,OAAO;KACR,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC;AAE5B,MAAM,UAAU,SAAS,CAAC,MAAyB,EAAE,OAAwB;IAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,WAAW,GAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC7D,OAAO;QACL,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;QAC7G;YACE,EAAE,EAAE,aAAa;YACjB,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE;YAC5F,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAwB;IACrE,IAAI,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACpH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAClH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB,EAAE,YAAoB;IACnE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HarnessCtx, HarnessHooks, ObservedRead, WitnessFactory } from "modality-ts/extraction/spi";
2
+ import type { AbstractDomain, ModelState, Value } from "modality-ts/kernel";
3
+ export interface SwrHarnessHooks extends HarnessHooks {
4
+ initialState: ModelState;
5
+ cache: Map<string, Value>;
6
+ }
7
+ export declare function setup(ctx: HarnessCtx & {
8
+ cache?: Map<string, Value> | Record<string, Value>;
9
+ }): SwrHarnessHooks;
10
+ export declare function observe(varId: string, handles: HarnessHooks): ObservedRead | "unobservable";
11
+ export declare function witness(_domain: AbstractDomain, _varId: string): WitnessFactory | undefined;
12
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../src/sources/swr/harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzG,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,YAAY,EAAE,UAAU,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,GAAG,eAAe,CAK/G;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,cAAc,CAO3F;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE3F"}
@@ -0,0 +1,25 @@
1
+ export function setup(ctx) {
2
+ return {
3
+ initialState: ctx.initialState ?? {},
4
+ cache: ctx.cache instanceof Map ? ctx.cache : new Map(Object.entries(ctx.cache ?? {}))
5
+ };
6
+ }
7
+ export function observe(varId, handles) {
8
+ const swr = handles;
9
+ if (swr.cache.has(varId))
10
+ return { value: swr.cache.get(varId) };
11
+ const key = cacheKeyForVar(varId);
12
+ if (key && swr.cache.has(key))
13
+ return { value: swr.cache.get(key) };
14
+ if (varId in swr.initialState)
15
+ return { value: swr.initialState[varId] };
16
+ return "unobservable";
17
+ }
18
+ export function witness(_domain, _varId) {
19
+ return undefined;
20
+ }
21
+ function cacheKeyForVar(varId) {
22
+ const match = /^swr:(.+):data$/.exec(varId);
23
+ return match?.[1];
24
+ }
25
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../src/sources/swr/harness.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,KAAK,CAAC,GAAwE;IAC5F,OAAO;QACL,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,KAAK,EAAE,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,OAAqB;IAC1D,MAAM,GAAG,GAAG,OAA0B,CAAC;IACvC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,EAAE,CAAC;IACrE,IAAI,KAAK,IAAI,GAAG,CAAC,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,CAAE,EAAE,CAAC;IAC1E,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAuB,EAAE,MAAc;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}