callman-core 1.38.0 → 1.40.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 (309) hide show
  1. package/dist/host/connections.d.ts +7 -0
  2. package/dist/host/connections.d.ts.map +1 -1
  3. package/dist/host/connections.js +8 -0
  4. package/dist/host/connections.js.map +1 -1
  5. package/dist/host/db/connectionMapping.d.ts +3 -0
  6. package/dist/host/db/connectionMapping.d.ts.map +1 -1
  7. package/dist/host/db/connectionMapping.js +3 -0
  8. package/dist/host/db/connectionMapping.js.map +1 -1
  9. package/dist/host/db/dbErrors.d.ts +9 -0
  10. package/dist/host/db/dbErrors.d.ts.map +1 -0
  11. package/dist/host/db/dbErrors.js +126 -0
  12. package/dist/host/db/dbErrors.js.map +1 -0
  13. package/dist/host/db/mongoAdapter.d.ts.map +1 -1
  14. package/dist/host/db/mongoAdapter.js +12 -2
  15. package/dist/host/db/mongoAdapter.js.map +1 -1
  16. package/dist/host/db/mysqlAdapter.d.ts.map +1 -1
  17. package/dist/host/db/mysqlAdapter.js +2 -1
  18. package/dist/host/db/mysqlAdapter.js.map +1 -1
  19. package/dist/host/db/oracleAdapter.d.ts.map +1 -1
  20. package/dist/host/db/oracleAdapter.js +12 -1
  21. package/dist/host/db/oracleAdapter.js.map +1 -1
  22. package/dist/host/db/oracleConnectString.d.ts.map +1 -1
  23. package/dist/host/db/oracleConnectString.js +13 -4
  24. package/dist/host/db/oracleConnectString.js.map +1 -1
  25. package/dist/host/db/queryExecutor.d.ts.map +1 -1
  26. package/dist/host/db/queryExecutor.js +6 -0
  27. package/dist/host/db/queryExecutor.js.map +1 -1
  28. package/dist/host/db/types.d.ts +16 -0
  29. package/dist/host/db/types.d.ts.map +1 -1
  30. package/dist/host/index.d.ts +1 -0
  31. package/dist/host/index.d.ts.map +1 -1
  32. package/dist/host/index.js +2 -0
  33. package/dist/host/index.js.map +1 -1
  34. package/dist/http/transportError.d.ts +15 -0
  35. package/dist/http/transportError.d.ts.map +1 -0
  36. package/dist/http/transportError.js +70 -0
  37. package/dist/http/transportError.js.map +1 -0
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +1 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/mock-engine/auth.d.ts +29 -0
  43. package/dist/mock-engine/auth.d.ts.map +1 -0
  44. package/dist/mock-engine/auth.js +86 -0
  45. package/dist/mock-engine/auth.js.map +1 -0
  46. package/dist/mock-engine/conditions.d.ts +31 -0
  47. package/dist/mock-engine/conditions.d.ts.map +1 -0
  48. package/dist/mock-engine/conditions.js +210 -0
  49. package/dist/mock-engine/conditions.js.map +1 -0
  50. package/dist/mock-engine/constants.d.ts +28 -0
  51. package/dist/mock-engine/constants.d.ts.map +1 -0
  52. package/dist/mock-engine/constants.js +113 -0
  53. package/dist/mock-engine/constants.js.map +1 -0
  54. package/dist/mock-engine/context.d.ts +17 -0
  55. package/dist/mock-engine/context.d.ts.map +1 -0
  56. package/dist/mock-engine/context.js +92 -0
  57. package/dist/mock-engine/context.js.map +1 -0
  58. package/dist/mock-engine/data/actions.d.ts +4 -0
  59. package/dist/mock-engine/data/actions.d.ts.map +1 -0
  60. package/dist/mock-engine/data/actions.js +149 -0
  61. package/dist/mock-engine/data/actions.js.map +1 -0
  62. package/dist/mock-engine/data/query.d.ts +28 -0
  63. package/dist/mock-engine/data/query.d.ts.map +1 -0
  64. package/dist/mock-engine/data/query.js +402 -0
  65. package/dist/mock-engine/data/query.js.map +1 -0
  66. package/dist/mock-engine/data/record-codec.d.ts +28 -0
  67. package/dist/mock-engine/data/record-codec.d.ts.map +1 -0
  68. package/dist/mock-engine/data/record-codec.js +155 -0
  69. package/dist/mock-engine/data/record-codec.js.map +1 -0
  70. package/dist/mock-engine/data/resource-ops.d.ts +53 -0
  71. package/dist/mock-engine/data/resource-ops.d.ts.map +1 -0
  72. package/dist/mock-engine/data/resource-ops.js +461 -0
  73. package/dist/mock-engine/data/resource-ops.js.map +1 -0
  74. package/dist/mock-engine/data/seed.d.ts +21 -0
  75. package/dist/mock-engine/data/seed.d.ts.map +1 -0
  76. package/dist/mock-engine/data/seed.js +239 -0
  77. package/dist/mock-engine/data/seed.js.map +1 -0
  78. package/dist/mock-engine/data/validate-record.d.ts +30 -0
  79. package/dist/mock-engine/data/validate-record.d.ts.map +1 -0
  80. package/dist/mock-engine/data/validate-record.js +165 -0
  81. package/dist/mock-engine/data/validate-record.js.map +1 -0
  82. package/dist/mock-engine/definition.d.ts +31 -0
  83. package/dist/mock-engine/definition.d.ts.map +1 -0
  84. package/dist/mock-engine/definition.js +440 -0
  85. package/dist/mock-engine/definition.js.map +1 -0
  86. package/dist/mock-engine/engine.d.ts +75 -0
  87. package/dist/mock-engine/engine.d.ts.map +1 -0
  88. package/dist/mock-engine/engine.js +828 -0
  89. package/dist/mock-engine/engine.js.map +1 -0
  90. package/dist/mock-engine/faults.d.ts +38 -0
  91. package/dist/mock-engine/faults.d.ts.map +1 -0
  92. package/dist/mock-engine/faults.js +113 -0
  93. package/dist/mock-engine/faults.js.map +1 -0
  94. package/dist/mock-engine/helpers.d.ts +68 -0
  95. package/dist/mock-engine/helpers.d.ts.map +1 -0
  96. package/dist/mock-engine/helpers.js +388 -0
  97. package/dist/mock-engine/helpers.js.map +1 -0
  98. package/dist/mock-engine/import/build.d.ts +16 -0
  99. package/dist/mock-engine/import/build.d.ts.map +1 -0
  100. package/dist/mock-engine/import/build.js +435 -0
  101. package/dist/mock-engine/import/build.js.map +1 -0
  102. package/dist/mock-engine/import/index.d.ts +15 -0
  103. package/dist/mock-engine/import/index.d.ts.map +1 -0
  104. package/dist/mock-engine/import/index.js +92 -0
  105. package/dist/mock-engine/import/index.js.map +1 -0
  106. package/dist/mock-engine/import/openapi.d.ts +10 -0
  107. package/dist/mock-engine/import/openapi.d.ts.map +1 -0
  108. package/dist/mock-engine/import/openapi.js +199 -0
  109. package/dist/mock-engine/import/openapi.js.map +1 -0
  110. package/dist/mock-engine/import/paths.d.ts +16 -0
  111. package/dist/mock-engine/import/paths.d.ts.map +1 -0
  112. package/dist/mock-engine/import/paths.js +64 -0
  113. package/dist/mock-engine/import/paths.js.map +1 -0
  114. package/dist/mock-engine/import/postman.d.ts +21 -0
  115. package/dist/mock-engine/import/postman.d.ts.map +1 -0
  116. package/dist/mock-engine/import/postman.js +241 -0
  117. package/dist/mock-engine/import/postman.js.map +1 -0
  118. package/dist/mock-engine/import/report.d.ts +12 -0
  119. package/dist/mock-engine/import/report.d.ts.map +1 -0
  120. package/dist/mock-engine/import/report.js +39 -0
  121. package/dist/mock-engine/import/report.js.map +1 -0
  122. package/dist/mock-engine/import/types.d.ts +94 -0
  123. package/dist/mock-engine/import/types.d.ts.map +1 -0
  124. package/dist/mock-engine/import/types.js +6 -0
  125. package/dist/mock-engine/import/types.js.map +1 -0
  126. package/dist/mock-engine/index.d.ts +24 -0
  127. package/dist/mock-engine/index.d.ts.map +1 -0
  128. package/dist/mock-engine/index.js +27 -0
  129. package/dist/mock-engine/index.js.map +1 -0
  130. package/dist/mock-engine/legacy-builder.d.ts +27 -0
  131. package/dist/mock-engine/legacy-builder.d.ts.map +1 -0
  132. package/dist/mock-engine/legacy-builder.js +322 -0
  133. package/dist/mock-engine/legacy-builder.js.map +1 -0
  134. package/dist/mock-engine/memory-store.d.ts +73 -0
  135. package/dist/mock-engine/memory-store.d.ts.map +1 -0
  136. package/dist/mock-engine/memory-store.js +314 -0
  137. package/dist/mock-engine/memory-store.js.map +1 -0
  138. package/dist/mock-engine/node/ajv-body-validator.d.ts +13 -0
  139. package/dist/mock-engine/node/ajv-body-validator.d.ts.map +1 -0
  140. package/dist/mock-engine/node/ajv-body-validator.js +158 -0
  141. package/dist/mock-engine/node/ajv-body-validator.js.map +1 -0
  142. package/dist/mock-engine/node/file-store.d.ts +30 -0
  143. package/dist/mock-engine/node/file-store.d.ts.map +1 -0
  144. package/dist/mock-engine/node/file-store.js +116 -0
  145. package/dist/mock-engine/node/file-store.js.map +1 -0
  146. package/dist/mock-engine/node/index.d.ts +5 -0
  147. package/dist/mock-engine/node/index.d.ts.map +1 -0
  148. package/dist/mock-engine/node/index.js +8 -0
  149. package/dist/mock-engine/node/index.js.map +1 -0
  150. package/dist/mock-engine/node/node-http-adapter.d.ts +38 -0
  151. package/dist/mock-engine/node/node-http-adapter.d.ts.map +1 -0
  152. package/dist/mock-engine/node/node-http-adapter.js +215 -0
  153. package/dist/mock-engine/node/node-http-adapter.js.map +1 -0
  154. package/dist/mock-engine/node/vm-regex-runner.d.ts +14 -0
  155. package/dist/mock-engine/node/vm-regex-runner.d.ts.map +1 -0
  156. package/dist/mock-engine/node/vm-regex-runner.js +90 -0
  157. package/dist/mock-engine/node/vm-regex-runner.js.map +1 -0
  158. package/dist/mock-engine/render.d.ts +19 -0
  159. package/dist/mock-engine/render.d.ts.map +1 -0
  160. package/dist/mock-engine/render.js +57 -0
  161. package/dist/mock-engine/render.js.map +1 -0
  162. package/dist/mock-engine/routing.d.ts +48 -0
  163. package/dist/mock-engine/routing.d.ts.map +1 -0
  164. package/dist/mock-engine/routing.js +122 -0
  165. package/dist/mock-engine/routing.js.map +1 -0
  166. package/dist/mock-engine/templates.d.ts +58 -0
  167. package/dist/mock-engine/templates.d.ts.map +1 -0
  168. package/dist/mock-engine/templates.js +300 -0
  169. package/dist/mock-engine/templates.js.map +1 -0
  170. package/dist/mock-engine/testing/index.d.ts +13 -0
  171. package/dist/mock-engine/testing/index.d.ts.map +1 -0
  172. package/dist/mock-engine/testing/index.js +69 -0
  173. package/dist/mock-engine/testing/index.js.map +1 -0
  174. package/dist/mock-engine/types.d.ts +684 -0
  175. package/dist/mock-engine/types.d.ts.map +1 -0
  176. package/dist/mock-engine/types.js +7 -0
  177. package/dist/mock-engine/types.js.map +1 -0
  178. package/dist/mock-engine/util.d.ts +25 -0
  179. package/dist/mock-engine/util.d.ts.map +1 -0
  180. package/dist/mock-engine/util.js +143 -0
  181. package/dist/mock-engine/util.js.map +1 -0
  182. package/dist/openapi/index.d.ts +34 -0
  183. package/dist/openapi/index.d.ts.map +1 -0
  184. package/dist/openapi/index.js +246 -0
  185. package/dist/openapi/index.js.map +1 -0
  186. package/dist/runner/requestRunner.d.ts.map +1 -1
  187. package/dist/runner/requestRunner.js +6 -1
  188. package/dist/runner/requestRunner.js.map +1 -1
  189. package/dist/script/features/random.d.ts.map +1 -1
  190. package/dist/script/features/random.js +3 -1
  191. package/dist/script/features/random.js.map +1 -1
  192. package/dist/script/types.d.ts +5 -0
  193. package/dist/script/types.d.ts.map +1 -1
  194. package/dist/templating/postman-generators.d.ts +5 -0
  195. package/dist/templating/postman-generators.d.ts.map +1 -1
  196. package/dist/templating/postman-generators.js +19 -14
  197. package/dist/templating/postman-generators.js.map +1 -1
  198. package/dist/templating/random-generators.d.ts.map +1 -1
  199. package/dist/templating/random-generators.js +3 -1
  200. package/dist/templating/random-generators.js.map +1 -1
  201. package/dist/templating/random-source.d.ts +12 -0
  202. package/dist/templating/random-source.d.ts.map +1 -0
  203. package/dist/templating/random-source.js +38 -0
  204. package/dist/templating/random-source.js.map +1 -0
  205. package/dist-cjs/host/connections.js +8 -0
  206. package/dist-cjs/host/connections.js.map +1 -1
  207. package/dist-cjs/host/db/connectionMapping.js +3 -0
  208. package/dist-cjs/host/db/connectionMapping.js.map +1 -1
  209. package/dist-cjs/host/db/dbErrors.js +130 -0
  210. package/dist-cjs/host/db/dbErrors.js.map +1 -0
  211. package/dist-cjs/host/db/mongoAdapter.js +12 -2
  212. package/dist-cjs/host/db/mongoAdapter.js.map +1 -1
  213. package/dist-cjs/host/db/mysqlAdapter.js +2 -1
  214. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -1
  215. package/dist-cjs/host/db/oracleAdapter.js +12 -1
  216. package/dist-cjs/host/db/oracleAdapter.js.map +1 -1
  217. package/dist-cjs/host/db/oracleConnectString.js +13 -4
  218. package/dist-cjs/host/db/oracleConnectString.js.map +1 -1
  219. package/dist-cjs/host/db/queryExecutor.js +6 -0
  220. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  221. package/dist-cjs/host/index.js +5 -2
  222. package/dist-cjs/host/index.js.map +1 -1
  223. package/dist-cjs/http/transportError.js +75 -0
  224. package/dist-cjs/http/transportError.js.map +1 -0
  225. package/dist-cjs/index.js +4 -1
  226. package/dist-cjs/index.js.map +1 -1
  227. package/dist-cjs/mock-engine/auth.js +96 -0
  228. package/dist-cjs/mock-engine/auth.js.map +1 -0
  229. package/dist-cjs/mock-engine/conditions.js +216 -0
  230. package/dist-cjs/mock-engine/conditions.js.map +1 -0
  231. package/dist-cjs/mock-engine/constants.js +116 -0
  232. package/dist-cjs/mock-engine/constants.js.map +1 -0
  233. package/dist-cjs/mock-engine/context.js +99 -0
  234. package/dist-cjs/mock-engine/context.js.map +1 -0
  235. package/dist-cjs/mock-engine/data/actions.js +153 -0
  236. package/dist-cjs/mock-engine/data/actions.js.map +1 -0
  237. package/dist-cjs/mock-engine/data/query.js +413 -0
  238. package/dist-cjs/mock-engine/data/query.js.map +1 -0
  239. package/dist-cjs/mock-engine/data/record-codec.js +165 -0
  240. package/dist-cjs/mock-engine/data/record-codec.js.map +1 -0
  241. package/dist-cjs/mock-engine/data/resource-ops.js +476 -0
  242. package/dist-cjs/mock-engine/data/resource-ops.js.map +1 -0
  243. package/dist-cjs/mock-engine/data/seed.js +246 -0
  244. package/dist-cjs/mock-engine/data/seed.js.map +1 -0
  245. package/dist-cjs/mock-engine/data/validate-record.js +170 -0
  246. package/dist-cjs/mock-engine/data/validate-record.js.map +1 -0
  247. package/dist-cjs/mock-engine/definition.js +454 -0
  248. package/dist-cjs/mock-engine/definition.js.map +1 -0
  249. package/dist-cjs/mock-engine/engine.js +837 -0
  250. package/dist-cjs/mock-engine/engine.js.map +1 -0
  251. package/dist-cjs/mock-engine/faults.js +117 -0
  252. package/dist-cjs/mock-engine/faults.js.map +1 -0
  253. package/dist-cjs/mock-engine/helpers.js +399 -0
  254. package/dist-cjs/mock-engine/helpers.js.map +1 -0
  255. package/dist-cjs/mock-engine/import/build.js +439 -0
  256. package/dist-cjs/mock-engine/import/build.js.map +1 -0
  257. package/dist-cjs/mock-engine/import/index.js +120 -0
  258. package/dist-cjs/mock-engine/import/index.js.map +1 -0
  259. package/dist-cjs/mock-engine/import/openapi.js +203 -0
  260. package/dist-cjs/mock-engine/import/openapi.js.map +1 -0
  261. package/dist-cjs/mock-engine/import/paths.js +72 -0
  262. package/dist-cjs/mock-engine/import/paths.js.map +1 -0
  263. package/dist-cjs/mock-engine/import/postman.js +247 -0
  264. package/dist-cjs/mock-engine/import/postman.js.map +1 -0
  265. package/dist-cjs/mock-engine/import/report.js +43 -0
  266. package/dist-cjs/mock-engine/import/report.js.map +1 -0
  267. package/dist-cjs/mock-engine/import/types.js +7 -0
  268. package/dist-cjs/mock-engine/import/types.js.map +1 -0
  269. package/dist-cjs/mock-engine/index.js +81 -0
  270. package/dist-cjs/mock-engine/index.js.map +1 -0
  271. package/dist-cjs/mock-engine/legacy-builder.js +327 -0
  272. package/dist-cjs/mock-engine/legacy-builder.js.map +1 -0
  273. package/dist-cjs/mock-engine/memory-store.js +318 -0
  274. package/dist-cjs/mock-engine/memory-store.js.map +1 -0
  275. package/dist-cjs/mock-engine/node/ajv-body-validator.js +166 -0
  276. package/dist-cjs/mock-engine/node/ajv-body-validator.js.map +1 -0
  277. package/dist-cjs/mock-engine/node/file-store.js +123 -0
  278. package/dist-cjs/mock-engine/node/file-store.js.map +1 -0
  279. package/dist-cjs/mock-engine/node/index.js +16 -0
  280. package/dist-cjs/mock-engine/node/index.js.map +1 -0
  281. package/dist-cjs/mock-engine/node/node-http-adapter.js +219 -0
  282. package/dist-cjs/mock-engine/node/node-http-adapter.js.map +1 -0
  283. package/dist-cjs/mock-engine/node/vm-regex-runner.js +97 -0
  284. package/dist-cjs/mock-engine/node/vm-regex-runner.js.map +1 -0
  285. package/dist-cjs/mock-engine/render.js +64 -0
  286. package/dist-cjs/mock-engine/render.js.map +1 -0
  287. package/dist-cjs/mock-engine/routing.js +130 -0
  288. package/dist-cjs/mock-engine/routing.js.map +1 -0
  289. package/dist-cjs/mock-engine/templates.js +308 -0
  290. package/dist-cjs/mock-engine/templates.js.map +1 -0
  291. package/dist-cjs/mock-engine/testing/index.js +72 -0
  292. package/dist-cjs/mock-engine/testing/index.js.map +1 -0
  293. package/dist-cjs/mock-engine/types.js +8 -0
  294. package/dist-cjs/mock-engine/types.js.map +1 -0
  295. package/dist-cjs/mock-engine/util.js +166 -0
  296. package/dist-cjs/mock-engine/util.js.map +1 -0
  297. package/dist-cjs/openapi/index.js +257 -0
  298. package/dist-cjs/openapi/index.js.map +1 -0
  299. package/dist-cjs/runner/requestRunner.js +6 -1
  300. package/dist-cjs/runner/requestRunner.js.map +1 -1
  301. package/dist-cjs/script/features/random.js +3 -1
  302. package/dist-cjs/script/features/random.js.map +1 -1
  303. package/dist-cjs/templating/postman-generators.js +21 -15
  304. package/dist-cjs/templating/postman-generators.js.map +1 -1
  305. package/dist-cjs/templating/random-generators.js +3 -1
  306. package/dist-cjs/templating/random-generators.js.map +1 -1
  307. package/dist-cjs/templating/random-source.js +44 -0
  308. package/dist-cjs/templating/random-source.js.map +1 -0
  309. package/package.json +29 -1
@@ -0,0 +1,210 @@
1
+ // Variant/match conditions and the save-time regex safety check.
2
+ //
3
+ // A condition is an AND/OR group of field-operator-value rules read from the
4
+ // request scopes (headers, params, query, body) plus, in engine v2, the
5
+ // signed-in user (`auth.*`) and the test session (`session.id`). The
6
+ // `matches` operator runs through the injected `MockRegexRunner`, which the
7
+ // Node hosts back with a vm timeout so an author's pattern cannot pin the
8
+ // event loop on an anonymous caller's input.
9
+ import { lookupHeader, navigatePath } from "./util.js";
10
+ export const MAX_PATTERN_LENGTH = 512;
11
+ // The subject is truncated before matching: a 1 MB body field must not turn
12
+ // even a linear pattern into a long scan.
13
+ /** Subjects are truncated before matching so a 1 MB field cannot turn a linear pattern into a long scan. */
14
+ export const MAX_REGEX_SUBJECT_CHARS = 4_096;
15
+ // Reads a quantifier starting at `index`. Returns its length and whether it
16
+ // can repeat more than once (`?` and `{0,1}` cannot, so they never nest
17
+ // dangerously).
18
+ const readQuantifier = (source, index) => {
19
+ const char = source[index];
20
+ let length = 0;
21
+ let repeats = false;
22
+ if (char === "*" || char === "+") {
23
+ length = 1;
24
+ repeats = true;
25
+ }
26
+ else if (char === "?") {
27
+ length = 1;
28
+ }
29
+ else if (char === "{") {
30
+ const match = /^\{(\d+)(,(\d*))?\}/.exec(source.slice(index));
31
+ if (!match)
32
+ return null;
33
+ length = match[0].length;
34
+ const min = Number(match[1]);
35
+ const max = match[2] === undefined ? min : match[3] === "" ? Infinity : Number(match[3]);
36
+ repeats = max > 1;
37
+ }
38
+ else {
39
+ return null;
40
+ }
41
+ // Lazy / possessive-looking suffix (`*?`) — same repetition semantics.
42
+ if (source[index + length] === "?")
43
+ length += 1;
44
+ return { length, repeats };
45
+ };
46
+ /**
47
+ * Why a `matches` pattern is refused, or `null` when it is acceptable.
48
+ * Human-readable: the message is returned to the editor as a 400.
49
+ */
50
+ export const describeUnsafePattern = (source) => {
51
+ if (source.length > MAX_PATTERN_LENGTH) {
52
+ return `Pattern is longer than ${MAX_PATTERN_LENGTH} characters`;
53
+ }
54
+ try {
55
+ new RegExp(source);
56
+ }
57
+ catch (error) {
58
+ return `Invalid regular expression: ${error instanceof Error ? error.message : String(error)}`;
59
+ }
60
+ const stack = [{ repeats: false }];
61
+ let inClass = false;
62
+ for (let i = 0; i < source.length; i += 1) {
63
+ const char = source[i];
64
+ if (char === "\\") {
65
+ const next = source[i + 1] ?? "";
66
+ if (!inClass && (/[1-9]/.test(next) || next === "k")) {
67
+ return "Backreferences are not supported in mock patterns";
68
+ }
69
+ i += 1;
70
+ // An escaped atom outside a class can still be quantified.
71
+ if (!inClass) {
72
+ const quantifier = readQuantifier(source, i + 1);
73
+ if (quantifier) {
74
+ if (quantifier.repeats)
75
+ stack[stack.length - 1].repeats = true;
76
+ i += quantifier.length;
77
+ }
78
+ }
79
+ continue;
80
+ }
81
+ if (inClass) {
82
+ if (char === "]") {
83
+ inClass = false;
84
+ const quantifier = readQuantifier(source, i + 1);
85
+ if (quantifier) {
86
+ if (quantifier.repeats)
87
+ stack[stack.length - 1].repeats = true;
88
+ i += quantifier.length;
89
+ }
90
+ }
91
+ continue;
92
+ }
93
+ if (char === "[") {
94
+ inClass = true;
95
+ continue;
96
+ }
97
+ if (char === "(") {
98
+ stack.push({ repeats: false });
99
+ continue;
100
+ }
101
+ if (char === ")") {
102
+ const closed = stack.pop() ?? { repeats: false };
103
+ const parent = stack[stack.length - 1] ?? stack[0];
104
+ const quantifier = readQuantifier(source, i + 1);
105
+ if (quantifier) {
106
+ if (quantifier.repeats && closed.repeats) {
107
+ return "Pattern repeats a group that itself repeats (like (a+)+) — that can hang on crafted input; simplify it";
108
+ }
109
+ if (quantifier.repeats)
110
+ parent.repeats = true;
111
+ i += quantifier.length;
112
+ }
113
+ if (closed.repeats)
114
+ parent.repeats = true;
115
+ continue;
116
+ }
117
+ const quantifier = readQuantifier(source, i + 1);
118
+ if (quantifier) {
119
+ if (quantifier.repeats)
120
+ stack[stack.length - 1].repeats = true;
121
+ i += quantifier.length;
122
+ }
123
+ }
124
+ return null;
125
+ };
126
+ // ── Run-time evaluation ───────────────────────────────────────────────
127
+ /**
128
+ * A runner without a timeout, for hosts that cannot use `vm` (the renderer
129
+ * previews). Patterns were vetted by `describeUnsafePattern` at save time;
130
+ * the subject is truncated. Node hosts use the vm runner instead.
131
+ */
132
+ export const createBasicRegexRunner = () => {
133
+ const cache = new Map();
134
+ return {
135
+ test(pattern, subject) {
136
+ if (pattern.length > MAX_PATTERN_LENGTH * 4)
137
+ return false;
138
+ let compiled = cache.get(pattern);
139
+ if (compiled === undefined) {
140
+ try {
141
+ compiled = new RegExp(pattern);
142
+ }
143
+ catch {
144
+ compiled = null;
145
+ }
146
+ if (cache.size > 500)
147
+ cache.clear();
148
+ cache.set(pattern, compiled);
149
+ }
150
+ if (!compiled)
151
+ return false;
152
+ const input = subject.length > MAX_REGEX_SUBJECT_CHARS ? subject.slice(0, MAX_REGEX_SUBJECT_CHARS) : subject;
153
+ return compiled.test(input);
154
+ },
155
+ };
156
+ };
157
+ const resolveFieldValue = (field, ctx) => {
158
+ const segments = field.split(".");
159
+ const [head, ...rest] = segments;
160
+ switch (head) {
161
+ case "headers":
162
+ if (rest.length === 0)
163
+ return undefined;
164
+ return rest.length === 1
165
+ ? lookupHeader(ctx.headers, rest[0])
166
+ : navigatePath(lookupHeader(ctx.headers, rest[0]), rest.slice(1));
167
+ case "params":
168
+ return navigatePath(ctx.params, rest);
169
+ case "query":
170
+ return navigatePath(ctx.query, rest);
171
+ case "body":
172
+ return navigatePath(ctx.body, rest);
173
+ case "auth":
174
+ return navigatePath(ctx.auth ?? { authenticated: false }, rest);
175
+ case "session":
176
+ return navigatePath(ctx.session ?? { id: null }, rest);
177
+ default:
178
+ return undefined;
179
+ }
180
+ };
181
+ const isPresent = (value) => value !== undefined && value !== null && value !== "";
182
+ const stringify = (value) => typeof value === "object" && value !== null ? JSON.stringify(value) : String(value);
183
+ export const evaluateCondition = (condition, ctx, regex) => {
184
+ if (!condition || !Array.isArray(condition.rules) || condition.rules.length === 0)
185
+ return false;
186
+ const results = condition.rules.map((rule) => {
187
+ const fieldValue = resolveFieldValue(rule.field, ctx);
188
+ const ruleValue = rule.value ?? "";
189
+ switch (rule.operator) {
190
+ case "exists":
191
+ return isPresent(fieldValue);
192
+ case "not-exists":
193
+ return !isPresent(fieldValue);
194
+ case "equals":
195
+ return stringify(fieldValue) === String(ruleValue);
196
+ case "not-equals":
197
+ return stringify(fieldValue) !== String(ruleValue);
198
+ case "contains":
199
+ return stringify(fieldValue).includes(String(ruleValue));
200
+ case "starts-with":
201
+ return stringify(fieldValue).startsWith(String(ruleValue));
202
+ case "matches":
203
+ return regex.test(String(ruleValue), stringify(fieldValue));
204
+ default:
205
+ return false;
206
+ }
207
+ });
208
+ return condition.type === "all" ? results.every(Boolean) : results.some(Boolean);
209
+ };
210
+ //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/mock-engine/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { MockEngineLimits } from "./types.js";
2
+ export declare const MOCK_FIELD_TYPES: readonly ["string", "number", "integer", "boolean", "object", "array", "date", "datetime", "email", "uuid", "password"];
3
+ export declare const MOCK_ID_STRATEGIES: readonly ["uuid", "incremental", "objectId", "nanoid", "client"];
4
+ export declare const MOCK_DATA_OPERATIONS: readonly ["insert", "find", "findOne", "update", "delete", "count", "upsert"];
5
+ export declare const MOCK_RESOURCE_ENDPOINTS: readonly ["list", "get", "create", "replace", "patch", "delete"];
6
+ /** Faker hints offered by editors (any `$random*` token also works). */
7
+ export declare const MOCK_FAKER_HINTS: readonly ["$randomFirstName", "$randomLastName", "$randomFullName", "$randomUserName", "$randomEmail", "$randomPhoneNumber", "$randomPassword", "$randomUUID", "$randomInt", "$randomPrice", "$randomBoolean", "$randomCity", "$randomCountry", "$randomCountryCode", "$randomStreetAddress", "$randomZipCode", "$randomLatitude", "$randomLongitude", "$randomCompanyName", "$randomJobTitle", "$randomDepartment", "$randomProductName", "$randomProduct", "$randomCurrencyCode", "$randomColor", "$randomWord", "$randomWords", "$randomSentence", "$randomParagraph", "$randomUrl", "$randomDomainName", "$randomIP", "$randomImageUrl", "$randomDatePast", "$randomDateRecent", "$randomDateFuture", "$isoTimestamp", "$timestamp"];
8
+ /** Paths under this prefix are reserved for the engine's control endpoints. */
9
+ export declare const MOCK_CONTROL_PREFIX = "/__callman";
10
+ export declare const MOCK_SESSION_HEADER = "x-mock-session";
11
+ export declare const MOCK_SESSION_ID_PATTERN: RegExp;
12
+ export declare const MOCK_DEFAULT_NAMESPACE = "_";
13
+ export declare const MOCK_FIELD_NAME_PATTERN: RegExp;
14
+ export declare const MOCK_RESOURCE_NAME_PATTERN: RegExp;
15
+ export declare const DEFAULT_MOCK_ENGINE_LIMITS: MockEngineLimits;
16
+ /** Desktop defaults: one user's own machine, so larger. */
17
+ export declare const DESKTOP_MOCK_ENGINE_LIMITS: MockEngineLimits;
18
+ /** Hard ceilings the definition validator applies regardless of host limits. */
19
+ export declare const MOCK_DEFINITION_LIMITS: {
20
+ readonly maxRoutes: 500;
21
+ readonly maxResources: 50;
22
+ readonly maxFieldsPerResource: 100;
23
+ readonly maxVariantsPerRoute: 20;
24
+ readonly maxMatchRules: 10;
25
+ readonly maxFaultRules: 20;
26
+ readonly maxSeedRecords: 5000;
27
+ };
28
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/mock-engine/constants.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAiC,MAAM,YAAY,CAAC;AAElF,eAAO,MAAM,gBAAgB,yHAYgB,CAAC;AAE9C,eAAO,MAAM,kBAAkB,kEAMe,CAAC;AAE/C,eAAO,MAAM,oBAAoB,+EAAgF,CAAC;AAElH,eAAO,MAAM,uBAAuB,kEAAmE,CAAC;AAExG,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,0sBAuCnB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,eAAO,MAAM,uBAAuB,QAA4B,CAAC;AAEjE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAEvE,eAAO,MAAM,0BAA0B,QAA+B,CAAC;AAEvE,eAAO,MAAM,0BAA0B,EAAE,gBAiBxC,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,0BAA0B,EAAE,gBASxC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,sBAAsB;;;;;;;;CAQzB,CAAC"}
@@ -0,0 +1,113 @@
1
+ // Shared vocabularies and defaults. The MCP builds its zod enums from these
2
+ // tuples and the desktop builds its pickers from them, so every client speaks
3
+ // exactly the words the engine understands.
4
+ export const MOCK_FIELD_TYPES = [
5
+ "string",
6
+ "number",
7
+ "integer",
8
+ "boolean",
9
+ "object",
10
+ "array",
11
+ "date",
12
+ "datetime",
13
+ "email",
14
+ "uuid",
15
+ "password",
16
+ ];
17
+ export const MOCK_ID_STRATEGIES = [
18
+ "uuid",
19
+ "incremental",
20
+ "objectId",
21
+ "nanoid",
22
+ "client",
23
+ ];
24
+ export const MOCK_DATA_OPERATIONS = ["insert", "find", "findOne", "update", "delete", "count", "upsert"];
25
+ export const MOCK_RESOURCE_ENDPOINTS = ["list", "get", "create", "replace", "patch", "delete"];
26
+ /** Faker hints offered by editors (any `$random*` token also works). */
27
+ export const MOCK_FAKER_HINTS = [
28
+ "$randomFirstName",
29
+ "$randomLastName",
30
+ "$randomFullName",
31
+ "$randomUserName",
32
+ "$randomEmail",
33
+ "$randomPhoneNumber",
34
+ "$randomPassword",
35
+ "$randomUUID",
36
+ "$randomInt",
37
+ "$randomPrice",
38
+ "$randomBoolean",
39
+ "$randomCity",
40
+ "$randomCountry",
41
+ "$randomCountryCode",
42
+ "$randomStreetAddress",
43
+ "$randomZipCode",
44
+ "$randomLatitude",
45
+ "$randomLongitude",
46
+ "$randomCompanyName",
47
+ "$randomJobTitle",
48
+ "$randomDepartment",
49
+ "$randomProductName",
50
+ "$randomProduct",
51
+ "$randomCurrencyCode",
52
+ "$randomColor",
53
+ "$randomWord",
54
+ "$randomWords",
55
+ "$randomSentence",
56
+ "$randomParagraph",
57
+ "$randomUrl",
58
+ "$randomDomainName",
59
+ "$randomIP",
60
+ "$randomImageUrl",
61
+ "$randomDatePast",
62
+ "$randomDateRecent",
63
+ "$randomDateFuture",
64
+ "$isoTimestamp",
65
+ "$timestamp",
66
+ ];
67
+ /** Paths under this prefix are reserved for the engine's control endpoints. */
68
+ export const MOCK_CONTROL_PREFIX = "/__callman";
69
+ export const MOCK_SESSION_HEADER = "x-mock-session";
70
+ export const MOCK_SESSION_ID_PATTERN = /^[A-Za-z0-9._:-]{1,64}$/;
71
+ export const MOCK_DEFAULT_NAMESPACE = "_";
72
+ export const MOCK_FIELD_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
73
+ export const MOCK_RESOURCE_NAME_PATTERN = /^[a-z][a-zA-Z0-9_-]{0,39}$/;
74
+ export const DEFAULT_MOCK_ENGINE_LIMITS = {
75
+ maxRecordsPerResource: 1_000,
76
+ maxRecordsPerNamespace: 5_000,
77
+ maxRecordBytes: 16_384,
78
+ maxSessions: 20,
79
+ sessionIdleTtlMs: 60 * 60 * 1000,
80
+ maxDataOpsPerRequest: 25,
81
+ maxResponseBodyBytes: 102_400,
82
+ maxDelayMs: 60_000,
83
+ maxPageSize: 1_000,
84
+ maxFilterClauses: 20,
85
+ maxInValues: 100,
86
+ maxExpand: 3,
87
+ maxEmbedPerParent: 100,
88
+ maxCascadeDepth: 3,
89
+ maxCascadeRecords: 1_000,
90
+ maxSeedGenerate: 1_000,
91
+ };
92
+ /** Desktop defaults: one user's own machine, so larger. */
93
+ export const DESKTOP_MOCK_ENGINE_LIMITS = {
94
+ ...DEFAULT_MOCK_ENGINE_LIMITS,
95
+ maxRecordsPerResource: 10_000,
96
+ maxRecordsPerNamespace: 50_000,
97
+ maxRecordBytes: 65_536,
98
+ maxSessions: 50,
99
+ maxDataOpsPerRequest: 50,
100
+ maxDelayMs: 30_000,
101
+ maxSeedGenerate: 5_000,
102
+ };
103
+ /** Hard ceilings the definition validator applies regardless of host limits. */
104
+ export const MOCK_DEFINITION_LIMITS = {
105
+ maxRoutes: 500,
106
+ maxResources: 50,
107
+ maxFieldsPerResource: 100,
108
+ maxVariantsPerRoute: 20,
109
+ maxMatchRules: 10,
110
+ maxFaultRules: 20,
111
+ maxSeedRecords: 5_000,
112
+ };
113
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/mock-engine/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { MockCallCounters, MockClock, MockCryptoPort, MockEngineContext, MockEngineLimits, MockRandomSource } from "./types.js";
2
+ export declare const systemClock: MockClock;
3
+ export declare const cryptoRandom: MockRandomSource;
4
+ /** Deterministic PRNG (mulberry32) seeded by a string — seeds and tests. */
5
+ export declare const seededRandom: (seed: string) => MockRandomSource;
6
+ export declare const createMemoryCounters: () => MockCallCounters;
7
+ export declare const webCryptoPort: MockCryptoPort;
8
+ export interface CreateEngineContextInput extends Partial<Omit<MockEngineContext, "mockId" | "limits">> {
9
+ mockId: string;
10
+ limits?: Partial<MockEngineLimits>;
11
+ }
12
+ export declare const createMockEngineContext: (input: CreateEngineContextInput) => MockEngineContext;
13
+ /** Wrap a store so one request cannot run more than `max` store operations. */
14
+ export declare class MockOpBudgetExceeded extends Error {
15
+ constructor();
16
+ }
17
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/mock-engine/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,WAAW,EAAE,SAAqC,CAAC;AAQhE,eAAO,MAAM,YAAY,EAAE,gBAM1B,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,gBAgB3C,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,gBAoBvC,CAAC;AAKF,eAAO,MAAM,aAAa,EAAE,cAc3B,CAAC;AAEF,MAAM,WAAW,wBAAyB,SAAQ,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACrG,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,wBAAwB,KAAG,iBAQxE,CAAC;AAEH,+EAA+E;AAC/E,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C"}
@@ -0,0 +1,92 @@
1
+ // Default implementations of the engine ports. Hosts override what they
2
+ // need (the backend passes Redis counters, the vm regex runner, Ajv and a
3
+ // MongoDB store; the desktop passes the file store).
4
+ import { createBasicRegexRunner } from "./conditions.js";
5
+ import { DEFAULT_MOCK_ENGINE_LIMITS } from "./constants.js";
6
+ export const systemClock = { now: () => Date.now() };
7
+ const getCrypto = () => {
8
+ const c = globalThis.crypto;
9
+ if (!c || !c.subtle)
10
+ throw new Error("WebCrypto is not available in this runtime");
11
+ return c;
12
+ };
13
+ export const cryptoRandom = {
14
+ next: () => {
15
+ const values = new Uint32Array(1);
16
+ getCrypto().getRandomValues(values);
17
+ return values[0] / 0x1_0000_0000;
18
+ },
19
+ };
20
+ /** Deterministic PRNG (mulberry32) seeded by a string — seeds and tests. */
21
+ export const seededRandom = (seed) => {
22
+ let h = 1779033703 ^ seed.length;
23
+ for (let i = 0; i < seed.length; i += 1) {
24
+ h = Math.imul(h ^ seed.charCodeAt(i), 3432918353);
25
+ h = (h << 13) | (h >>> 19);
26
+ }
27
+ let state = h >>> 0;
28
+ return {
29
+ next: () => {
30
+ state = (state + 0x6d2b79f5) >>> 0;
31
+ let t = state;
32
+ t = Math.imul(t ^ (t >>> 15), t | 1);
33
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
34
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
35
+ },
36
+ };
37
+ };
38
+ export const createMemoryCounters = () => {
39
+ const counts = new Map();
40
+ const scopeKey = (scope) => `${scope.mockId}\u001f${scope.ns}`;
41
+ return {
42
+ async incr(scope, key) {
43
+ const id = scopeKey(scope);
44
+ let bucket = counts.get(id);
45
+ if (!bucket) {
46
+ if (counts.size > 10_000)
47
+ counts.clear();
48
+ bucket = new Map();
49
+ counts.set(id, bucket);
50
+ }
51
+ const next = (bucket.get(key) ?? 0) + 1;
52
+ bucket.set(key, next);
53
+ return next;
54
+ },
55
+ async reset(scope) {
56
+ counts.delete(scopeKey(scope));
57
+ },
58
+ };
59
+ };
60
+ const toArrayBuffer = (bytes) => bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
61
+ export const webCryptoPort = {
62
+ async hmacSha256(key, data) {
63
+ const subtle = getCrypto().subtle;
64
+ const cryptoKey = await subtle.importKey("raw", toArrayBuffer(key), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
65
+ return new Uint8Array(await subtle.sign("HMAC", cryptoKey, toArrayBuffer(data)));
66
+ },
67
+ async sha256(data) {
68
+ return new Uint8Array(await getCrypto().subtle.digest("SHA-256", toArrayBuffer(data)));
69
+ },
70
+ randomBytes(length) {
71
+ const out = new Uint8Array(length);
72
+ getCrypto().getRandomValues(out);
73
+ return out;
74
+ },
75
+ };
76
+ export const createMockEngineContext = (input) => ({
77
+ clock: systemClock,
78
+ random: cryptoRandom,
79
+ counters: createMemoryCounters(),
80
+ regex: createBasicRegexRunner(),
81
+ crypto: webCryptoPort,
82
+ ...input,
83
+ limits: { ...DEFAULT_MOCK_ENGINE_LIMITS, ...(input.limits ?? {}) },
84
+ });
85
+ /** Wrap a store so one request cannot run more than `max` store operations. */
86
+ export class MockOpBudgetExceeded extends Error {
87
+ constructor() {
88
+ super("Mock data operation budget exceeded");
89
+ this.name = "MockOpBudgetExceeded";
90
+ }
91
+ }
92
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/mock-engine/context.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,qDAAqD;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAW5D,MAAM,CAAC,MAAM,WAAW,GAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAEhE,MAAM,SAAS,GAAG,GAAW,EAAE;IAC7B,MAAM,CAAC,GAAI,UAAkC,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IACnC,CAAC;CACF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAoB,EAAE;IAC7D,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,KAAK,CAAC;YACd,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAqB,EAAE;IACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IACtD,MAAM,QAAQ,GAAG,CAAC,KAAqB,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC;IACvF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG;YACnB,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM;oBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK;YACf,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAe,EAAE,CACvD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAgB,CAAC;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI;QACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACxH,OAAO,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,IAAI;QACf,OAAO,IAAI,UAAU,CAAC,MAAM,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,WAAW,CAAC,MAAM;QAChB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAOF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAA+B,EAAqB,EAAE,CAAC,CAAC;IAC9F,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,oBAAoB,EAAE;IAChC,KAAK,EAAE,sBAAsB,EAAE;IAC/B,MAAM,EAAE,aAAa;IACrB,GAAG,KAAK;IACR,MAAM,EAAE,EAAE,GAAG,0BAA0B,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;CACnE,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { MockDataAction } from "../types.js";
2
+ import { type DataRuntime, type OpResult } from "./resource-ops.js";
3
+ export declare const runDataAction: (rt: DataRuntime, action: MockDataAction, rawQuery: Array<[string, string]>) => Promise<OpResult>;
4
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/mock-engine/data/actions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAuB,cAAc,EAAgC,MAAM,aAAa,CAAC;AAGrG,OAAO,EASL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAwD3B,eAAO,MAAM,aAAa,GAAU,IAAI,WAAW,EAAE,QAAQ,cAAc,EAAE,UAAU,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAG,OAAO,CAAC,QAAQ,CA4EhI,CAAC"}