@mionjs/devtools 0.8.8 → 0.13.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 (388) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +34 -0
  3. package/dist/core/apply-edits.d.ts +8 -0
  4. package/dist/core/apply-edits.js +24 -0
  5. package/dist/core/apply-edits.js.map +1 -0
  6. package/dist/core/bundledApiStub.d.ts +4 -0
  7. package/dist/core/bundledApiStub.js +4 -0
  8. package/dist/core/bundledApiStub.js.map +1 -0
  9. package/dist/core/devReporter.d.ts +19 -0
  10. package/dist/core/devReporter.js +91 -0
  11. package/dist/core/devReporter.js.map +1 -0
  12. package/dist/core/diagnosticCatalog.d.ts +5 -0
  13. package/dist/core/diagnosticCatalog.js +18 -0
  14. package/dist/core/diagnosticCatalog.js.map +1 -0
  15. package/dist/core/downgradeErrors.d.ts +11 -0
  16. package/dist/core/downgradeErrors.js +34 -0
  17. package/dist/core/downgradeErrors.js.map +1 -0
  18. package/dist/core/edit-buffer.d.ts +26 -0
  19. package/dist/core/edit-buffer.js +209 -0
  20. package/dist/core/edit-buffer.js.map +1 -0
  21. package/dist/core/go-generated/diagnosticCatalog.generated.d.ts +9 -0
  22. package/dist/core/go-generated/diagnosticCatalog.generated.js +1008 -0
  23. package/dist/core/go-generated/diagnosticCatalog.generated.js.map +1 -0
  24. package/dist/core/go-generated/reflectionKind.generated.d.ts +60 -0
  25. package/dist/core/go-generated/reflectionKind.generated.js +60 -0
  26. package/dist/core/go-generated/reflectionKind.generated.js.map +1 -0
  27. package/dist/core/go-generated/runtypes-constants.generated.d.ts +197 -0
  28. package/dist/core/go-generated/runtypes-constants.generated.js +110 -0
  29. package/dist/core/go-generated/runtypes-constants.generated.js.map +1 -0
  30. package/dist/core/go-generated/tsconfig-plugin-keys.generated.d.ts +3 -0
  31. package/dist/core/go-generated/tsconfig-plugin-keys.generated.js +23 -0
  32. package/dist/core/go-generated/tsconfig-plugin-keys.generated.js.map +1 -0
  33. package/dist/core/groupedLog.d.ts +6 -0
  34. package/dist/core/groupedLog.js +163 -0
  35. package/dist/core/groupedLog.js.map +1 -0
  36. package/dist/core/levels.d.ts +6 -0
  37. package/dist/core/levels.js +22 -0
  38. package/dist/core/levels.js.map +1 -0
  39. package/dist/core/markerImports.d.ts +8 -0
  40. package/dist/core/markerImports.js +149 -0
  41. package/dist/core/markerImports.js.map +1 -0
  42. package/dist/core/option-guards.d.ts +4 -0
  43. package/dist/core/option-guards.js +12 -0
  44. package/dist/core/option-guards.js.map +1 -0
  45. package/dist/core/plugin-option-keys.d.ts +3 -0
  46. package/dist/core/plugin-option-keys.js +35 -0
  47. package/dist/core/plugin-option-keys.js.map +1 -0
  48. package/dist/core/protocol.d.ts +244 -0
  49. package/dist/core/protocol.js +23 -0
  50. package/dist/core/protocol.js.map +1 -0
  51. package/dist/core/resolver-client.d.ts +160 -0
  52. package/dist/core/resolver-client.js +354 -0
  53. package/dist/core/resolver-client.js.map +1 -0
  54. package/dist/core/scan-batcher.d.ts +6 -0
  55. package/dist/core/scan-batcher.js +36 -0
  56. package/dist/core/scan-batcher.js.map +1 -0
  57. package/dist/core/surface.d.ts +23 -0
  58. package/dist/core/surface.js +77 -0
  59. package/dist/core/surface.js.map +1 -0
  60. package/dist/core/type-deps.d.ts +11 -0
  61. package/dist/core/type-deps.js +72 -0
  62. package/dist/core/type-deps.js.map +1 -0
  63. package/dist/core/types.d.ts +13 -0
  64. package/dist/core/types.js +2 -0
  65. package/dist/core/types.js.map +1 -0
  66. package/dist/core/typescript-floor.d.ts +5 -0
  67. package/dist/core/typescript-floor.js +33 -0
  68. package/dist/core/typescript-floor.js.map +1 -0
  69. package/dist/core/unplugin.d.ts +67 -0
  70. package/dist/core/unplugin.js +636 -0
  71. package/dist/core/unplugin.js.map +1 -0
  72. package/dist/index.d.ts +3 -0
  73. package/dist/index.js +3 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/lint/diagnosticRouting.d.ts +28 -0
  76. package/dist/lint/diagnosticRouting.js +74 -0
  77. package/dist/lint/diagnosticRouting.js.map +1 -0
  78. package/dist/lint/index.d.ts +49 -0
  79. package/dist/lint/index.js +96 -0
  80. package/dist/lint/index.js.map +1 -0
  81. package/dist/lint/lint-worker.d.ts +2 -0
  82. package/dist/lint/lint-worker.js +116 -0
  83. package/dist/lint/lint-worker.js.map +1 -0
  84. package/dist/lint/prefilter.d.ts +7 -0
  85. package/dist/lint/prefilter.js +31 -0
  86. package/dist/lint/prefilter.js.map +1 -0
  87. package/dist/lint/session-protocol.d.ts +38 -0
  88. package/dist/lint/session-protocol.js +11 -0
  89. package/dist/lint/session-protocol.js.map +1 -0
  90. package/dist/lint/session.d.ts +27 -0
  91. package/dist/lint/session.js +149 -0
  92. package/dist/lint/session.js.map +1 -0
  93. package/dist/lint/spawn-shim.d.ts +2 -0
  94. package/dist/lint/spawn-shim.js +23 -0
  95. package/dist/lint/spawn-shim.js.map +1 -0
  96. package/dist/next/index.d.ts +11 -0
  97. package/dist/next/index.js +17 -0
  98. package/dist/next/index.js.map +1 -0
  99. package/dist/options.d.ts +29 -0
  100. package/dist/options.js +36 -0
  101. package/dist/options.js.map +1 -0
  102. package/dist/runtypes/bun.d.ts +25 -0
  103. package/dist/runtypes/bun.js +62 -0
  104. package/dist/runtypes/bun.js.map +1 -0
  105. package/dist/runtypes/esbuild.d.ts +4 -0
  106. package/dist/runtypes/esbuild.js +4 -0
  107. package/dist/runtypes/esbuild.js.map +1 -0
  108. package/dist/runtypes/next/broker.d.ts +15 -0
  109. package/dist/runtypes/next/broker.js +316 -0
  110. package/dist/runtypes/next/broker.js.map +1 -0
  111. package/dist/runtypes/next/index.d.ts +30 -0
  112. package/dist/runtypes/next/index.js +57 -0
  113. package/dist/runtypes/next/index.js.map +1 -0
  114. package/dist/runtypes/next/loader.d.ts +13 -0
  115. package/dist/runtypes/next/loader.js +64 -0
  116. package/dist/runtypes/next/loader.js.map +1 -0
  117. package/dist/runtypes/next/wire.d.ts +17 -0
  118. package/dist/runtypes/next/wire.js +15 -0
  119. package/dist/runtypes/next/wire.js.map +1 -0
  120. package/dist/runtypes/rolldown.d.ts +4 -0
  121. package/dist/runtypes/rolldown.js +4 -0
  122. package/dist/runtypes/rolldown.js.map +1 -0
  123. package/dist/runtypes/rollup.d.ts +4 -0
  124. package/dist/runtypes/rollup.js +4 -0
  125. package/dist/runtypes/rollup.js.map +1 -0
  126. package/dist/runtypes/rspack.d.ts +4 -0
  127. package/dist/runtypes/rspack.js +4 -0
  128. package/dist/runtypes/rspack.js.map +1 -0
  129. package/dist/runtypes/vite.d.ts +4 -0
  130. package/dist/runtypes/vite.js +4 -0
  131. package/dist/runtypes/vite.js.map +1 -0
  132. package/dist/runtypes/webpack.d.ts +4 -0
  133. package/dist/runtypes/webpack.js +4 -0
  134. package/dist/runtypes/webpack.js.map +1 -0
  135. package/dist/vite/buildEntries.d.ts +2 -0
  136. package/dist/vite/buildEntries.js +28 -0
  137. package/dist/vite/buildEntries.js.map +1 -0
  138. package/dist/vite/cjsPackageJsonPlugin.d.ts +3 -0
  139. package/dist/vite/cjsPackageJsonPlugin.js +12 -0
  140. package/dist/vite/cjsPackageJsonPlugin.js.map +1 -0
  141. package/dist/vite/index.d.ts +6 -0
  142. package/dist/vite/index.js +5 -0
  143. package/dist/vite/index.js.map +1 -0
  144. package/dist/vite/middlewareMode.d.ts +10 -0
  145. package/dist/vite/middlewareMode.js +227 -0
  146. package/dist/vite/middlewareMode.js.map +1 -0
  147. package/dist/vite/mionVitePlugin.d.ts +23 -0
  148. package/dist/vite/mionVitePlugin.js +115 -0
  149. package/dist/vite/mionVitePlugin.js.map +1 -0
  150. package/dist/vite/nodeWebBridge.d.ts +5 -0
  151. package/dist/vite/nodeWebBridge.js +59 -0
  152. package/dist/vite/nodeWebBridge.js.map +1 -0
  153. package/dist/vite/sfcTransform.d.ts +8 -0
  154. package/dist/vite/sfcTransform.js +142 -0
  155. package/dist/vite/sfcTransform.js.map +1 -0
  156. package/oxlint-recommended.json +11 -0
  157. package/package.json +91 -56
  158. package/build/eslint/cjs/index.cjs +0 -41
  159. package/build/eslint/cjs/index.cjs.map +0 -1
  160. package/build/eslint/cjs/package.json +0 -1
  161. package/build/eslint/cjs/src/eslint/index.cjs +0 -13
  162. package/build/eslint/cjs/src/eslint/index.cjs.map +0 -1
  163. package/build/eslint/cjs/src/eslint/index.d.ts +0 -4
  164. package/build/eslint/cjs/src/eslint/index.d.ts.map +0 -1
  165. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs +0 -121
  166. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs.map +0 -1
  167. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts +0 -8
  168. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
  169. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs +0 -71
  170. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs.map +0 -1
  171. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts +0 -4
  172. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
  173. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs +0 -220
  174. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs.map +0 -1
  175. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
  176. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
  177. package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs +0 -251
  178. package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs.map +0 -1
  179. package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts +0 -4
  180. package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts.map +0 -1
  181. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs +0 -72
  182. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs.map +0 -1
  183. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
  184. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
  185. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs +0 -220
  186. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs.map +0 -1
  187. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
  188. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
  189. package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs +0 -71
  190. package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs.map +0 -1
  191. package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts +0 -5
  192. package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts.map +0 -1
  193. package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs +0 -346
  194. package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs.map +0 -1
  195. package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts +0 -5
  196. package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts.map +0 -1
  197. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs +0 -328
  198. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs.map +0 -1
  199. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts +0 -5
  200. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
  201. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs +0 -52
  202. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs.map +0 -1
  203. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts +0 -4
  204. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
  205. package/build/eslint/cjs/src/pureFns/purityRules.cjs +0 -67
  206. package/build/eslint/cjs/src/pureFns/purityRules.cjs.map +0 -1
  207. package/build/eslint/cjs/src/pureFns/purityRules.d.ts +0 -5
  208. package/build/eslint/cjs/src/pureFns/purityRules.d.ts.map +0 -1
  209. package/build/eslint/esm/index.js +0 -42
  210. package/build/eslint/esm/index.js.map +0 -1
  211. package/build/eslint/esm/src/eslint/index.d.ts +0 -4
  212. package/build/eslint/esm/src/eslint/index.d.ts.map +0 -1
  213. package/build/eslint/esm/src/eslint/index.js +0 -14
  214. package/build/eslint/esm/src/eslint/index.js.map +0 -1
  215. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts +0 -8
  216. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
  217. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js +0 -122
  218. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js.map +0 -1
  219. package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts +0 -4
  220. package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
  221. package/build/eslint/esm/src/eslint/rules/formatTypeNames.js +0 -71
  222. package/build/eslint/esm/src/eslint/rules/formatTypeNames.js.map +0 -1
  223. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
  224. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
  225. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js +0 -221
  226. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js.map +0 -1
  227. package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts +0 -4
  228. package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts.map +0 -1
  229. package/build/eslint/esm/src/eslint/rules/no-type-imports.js +0 -252
  230. package/build/eslint/esm/src/eslint/rules/no-type-imports.js.map +0 -1
  231. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
  232. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
  233. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js +0 -73
  234. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js.map +0 -1
  235. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
  236. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
  237. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js +0 -221
  238. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js.map +0 -1
  239. package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts +0 -5
  240. package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts.map +0 -1
  241. package/build/eslint/esm/src/eslint/rules/no-vite-client.js +0 -72
  242. package/build/eslint/esm/src/eslint/rules/no-vite-client.js.map +0 -1
  243. package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts +0 -5
  244. package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts.map +0 -1
  245. package/build/eslint/esm/src/eslint/rules/pure-functions.js +0 -347
  246. package/build/eslint/esm/src/eslint/rules/pure-functions.js.map +0 -1
  247. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts +0 -5
  248. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
  249. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js +0 -329
  250. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js.map +0 -1
  251. package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts +0 -4
  252. package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
  253. package/build/eslint/esm/src/eslint/rules/type-formats-imports.js +0 -53
  254. package/build/eslint/esm/src/eslint/rules/type-formats-imports.js.map +0 -1
  255. package/build/eslint/esm/src/pureFns/purityRules.d.ts +0 -5
  256. package/build/eslint/esm/src/pureFns/purityRules.d.ts.map +0 -1
  257. package/build/eslint/esm/src/pureFns/purityRules.js +0 -67
  258. package/build/eslint/esm/src/pureFns/purityRules.js.map +0 -1
  259. package/build/vite-plugin/cjs/index.cjs +0 -13
  260. package/build/vite-plugin/cjs/index.cjs.map +0 -1
  261. package/build/vite-plugin/cjs/package.json +0 -1
  262. package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs +0 -65
  263. package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs.map +0 -1
  264. package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts +0 -5
  265. package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts.map +0 -1
  266. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs +0 -271
  267. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs.map +0 -1
  268. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
  269. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
  270. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs +0 -135
  271. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs.map +0 -1
  272. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts +0 -7
  273. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
  274. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs +0 -15
  275. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs.map +0 -1
  276. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
  277. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
  278. package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs +0 -29
  279. package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs.map +0 -1
  280. package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts +0 -13
  281. package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts.map +0 -1
  282. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs +0 -628
  283. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs.map +0 -1
  284. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts +0 -14
  285. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts.map +0 -1
  286. package/build/vite-plugin/cjs/src/vite-plugin/index.cjs +0 -13
  287. package/build/vite-plugin/cjs/src/vite-plugin/index.cjs.map +0 -1
  288. package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts +0 -6
  289. package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts.map +0 -1
  290. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs +0 -511
  291. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs.map +0 -1
  292. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts +0 -37
  293. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
  294. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs +0 -55
  295. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs.map +0 -1
  296. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts +0 -2
  297. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts.map +0 -1
  298. package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs +0 -166
  299. package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs.map +0 -1
  300. package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts +0 -11
  301. package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts.map +0 -1
  302. package/build/vite-plugin/cjs/src/vite-plugin/types.cjs +0 -2
  303. package/build/vite-plugin/cjs/src/vite-plugin/types.cjs.map +0 -1
  304. package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts +0 -60
  305. package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts.map +0 -1
  306. package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs +0 -2
  307. package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs.map +0 -1
  308. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs +0 -69
  309. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs.map +0 -1
  310. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts +0 -3
  311. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts.map +0 -1
  312. package/build/vite-plugin/esm/index.js +0 -13
  313. package/build/vite-plugin/esm/index.js.map +0 -1
  314. package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts +0 -5
  315. package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts.map +0 -1
  316. package/build/vite-plugin/esm/src/pureFns/purityRules.js +0 -65
  317. package/build/vite-plugin/esm/src/pureFns/purityRules.js.map +0 -1
  318. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
  319. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
  320. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js +0 -271
  321. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js.map +0 -1
  322. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts +0 -7
  323. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
  324. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js +0 -134
  325. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js.map +0 -1
  326. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
  327. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
  328. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js +0 -15
  329. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js.map +0 -1
  330. package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts +0 -13
  331. package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts.map +0 -1
  332. package/build/vite-plugin/esm/src/vite-plugin/constants.js +0 -29
  333. package/build/vite-plugin/esm/src/vite-plugin/constants.js.map +0 -1
  334. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts +0 -14
  335. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts.map +0 -1
  336. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js +0 -611
  337. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js.map +0 -1
  338. package/build/vite-plugin/esm/src/vite-plugin/index.d.ts +0 -6
  339. package/build/vite-plugin/esm/src/vite-plugin/index.d.ts.map +0 -1
  340. package/build/vite-plugin/esm/src/vite-plugin/index.js +0 -13
  341. package/build/vite-plugin/esm/src/vite-plugin/index.js.map +0 -1
  342. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts +0 -37
  343. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
  344. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js +0 -493
  345. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js.map +0 -1
  346. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts +0 -2
  347. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts.map +0 -1
  348. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js +0 -33
  349. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js.map +0 -1
  350. package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts +0 -11
  351. package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts.map +0 -1
  352. package/build/vite-plugin/esm/src/vite-plugin/transformers.js +0 -149
  353. package/build/vite-plugin/esm/src/vite-plugin/transformers.js.map +0 -1
  354. package/build/vite-plugin/esm/src/vite-plugin/types.d.ts +0 -60
  355. package/build/vite-plugin/esm/src/vite-plugin/types.d.ts.map +0 -1
  356. package/build/vite-plugin/esm/src/vite-plugin/types.js +0 -2
  357. package/build/vite-plugin/esm/src/vite-plugin/types.js.map +0 -1
  358. package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js +0 -2
  359. package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js.map +0 -1
  360. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts +0 -3
  361. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts.map +0 -1
  362. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js +0 -69
  363. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js.map +0 -1
  364. package/src/eslint/index.ts +0 -53
  365. package/src/eslint/rules/enforce-type-imports.ts +0 -157
  366. package/src/eslint/rules/formatTypeNames.ts +0 -92
  367. package/src/eslint/rules/no-mixed-union-properties.ts +0 -276
  368. package/src/eslint/rules/no-type-imports.ts +0 -386
  369. package/src/eslint/rules/no-typeof-runtype.ts +0 -112
  370. package/src/eslint/rules/no-unreachable-union-types.ts +0 -357
  371. package/src/eslint/rules/no-vite-client.ts +0 -101
  372. package/src/eslint/rules/pure-functions.ts +0 -523
  373. package/src/eslint/rules/strong-typed-routes.ts +0 -537
  374. package/src/eslint/rules/type-formats-imports.ts +0 -73
  375. package/src/pureFns/purityRules.ts +0 -76
  376. package/src/vite-plugin/README.md +0 -399
  377. package/src/vite-plugin/aotCacheGenerator.ts +0 -397
  378. package/src/vite-plugin/aotDiskCache.ts +0 -193
  379. package/src/vite-plugin/cjsPackageJsonPlugin.ts +0 -21
  380. package/src/vite-plugin/constants.ts +0 -50
  381. package/src/vite-plugin/extractPureFn.ts +0 -845
  382. package/src/vite-plugin/index.ts +0 -27
  383. package/src/vite-plugin/mionVitePlugin.ts +0 -738
  384. package/src/vite-plugin/resolveModule.ts +0 -50
  385. package/src/vite-plugin/transformers.ts +0 -209
  386. package/src/vite-plugin/types.ts +0 -182
  387. package/src/vite-plugin/virtual-modules.d.ts +0 -48
  388. package/src/vite-plugin/virtualModule.ts +0 -94
@@ -1,523 +0,0 @@
1
- /* ########
2
- * 2026 mion
3
- * Author: Ma-jerez
4
- * License: MIT
5
- * The software is provided "as is", without warranty of any kind.
6
- * ######## */
7
-
8
- import {TSESTree, TSESLint, AST_NODE_TYPES} from '@typescript-eslint/utils';
9
- import {ALLOWED_GLOBALS, FORBIDDEN_IDENTIFIERS, PURE_FN_SOURCE_PACKAGES} from '../../pureFns/purityRules.ts';
10
-
11
- type MessageIds =
12
- | 'purityThis'
13
- | 'purityAwait'
14
- | 'purityYield'
15
- | 'purityDynamicImport'
16
- | 'purityForbiddenIdentifier'
17
- | 'purityClosureVariable'
18
- | 'importedArgument'
19
- | 'unresolvedArgument';
20
-
21
- /** Cache of pure function imports from @mionjs/core and @mionjs/client */
22
- interface PureFnImports {
23
- /** Maps local name -> imported name for pureServerFn/registerPureFnFactory/mapFrom */
24
- pureFnNames: Map<string, string>;
25
- }
26
-
27
- /** Builds a cache of pure function imports from @mionjs/core and @mionjs/client */
28
- function buildPureFnImportCache(program: TSESTree.Program): PureFnImports {
29
- const pureFnNames = new Map<string, string>();
30
-
31
- for (const statement of program.body) {
32
- if (statement.type !== AST_NODE_TYPES.ImportDeclaration) continue;
33
- const source = statement.source.value;
34
- if (!PURE_FN_SOURCE_PACKAGES.includes(source as (typeof PURE_FN_SOURCE_PACKAGES)[number])) continue;
35
-
36
- for (const specifier of statement.specifiers) {
37
- if (specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.imported.type === AST_NODE_TYPES.Identifier) {
38
- const importedName = specifier.imported.name;
39
- if (importedName === 'pureServerFn' || importedName === 'registerPureFnFactory' || importedName === 'mapFrom') {
40
- pureFnNames.set(specifier.local.name, importedName);
41
- }
42
- }
43
- }
44
- }
45
-
46
- return {pureFnNames};
47
- }
48
-
49
- /** Collects all binding names from a pattern (handles destructuring) */
50
- function collectBindingNames(node: TSESTree.Node, scope: Set<string>): void {
51
- switch (node.type) {
52
- case AST_NODE_TYPES.Identifier:
53
- scope.add(node.name);
54
- break;
55
- case AST_NODE_TYPES.ObjectPattern:
56
- for (const prop of node.properties) {
57
- if (prop.type === AST_NODE_TYPES.Property) {
58
- collectBindingNames(prop.value, scope);
59
- } else if (prop.type === AST_NODE_TYPES.RestElement) {
60
- collectBindingNames(prop.argument, scope);
61
- }
62
- }
63
- break;
64
- case AST_NODE_TYPES.ArrayPattern:
65
- for (const element of node.elements) {
66
- if (element) collectBindingNames(element, scope);
67
- }
68
- break;
69
- case AST_NODE_TYPES.RestElement:
70
- collectBindingNames(node.argument, scope);
71
- break;
72
- case AST_NODE_TYPES.AssignmentPattern:
73
- collectBindingNames(node.left, scope);
74
- break;
75
- }
76
- }
77
-
78
- /** Collects all locally declared variable names from a node tree */
79
- function collectLocalDeclarations(node: TSESTree.Node, scope: Set<string>): void {
80
- if (node.type === AST_NODE_TYPES.VariableDeclarator) {
81
- collectBindingNames(node.id, scope);
82
- }
83
-
84
- if (node.type === AST_NODE_TYPES.FunctionDeclaration) {
85
- if (node.id) scope.add(node.id.name);
86
- for (const param of node.params) collectBindingNames(param, scope);
87
- }
88
-
89
- if (node.type === AST_NODE_TYPES.FunctionExpression) {
90
- if (node.id) scope.add(node.id.name);
91
- for (const param of node.params) collectBindingNames(param, scope);
92
- }
93
-
94
- if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
95
- for (const param of node.params) collectBindingNames(param, scope);
96
- }
97
-
98
- if (
99
- (node.type === AST_NODE_TYPES.ForOfStatement || node.type === AST_NODE_TYPES.ForInStatement) &&
100
- node.left.type === AST_NODE_TYPES.VariableDeclaration
101
- ) {
102
- for (const decl of node.left.declarations) {
103
- collectBindingNames(decl.id, scope);
104
- }
105
- }
106
-
107
- if (node.type === AST_NODE_TYPES.CatchClause && node.param) {
108
- collectBindingNames(node.param, scope);
109
- }
110
-
111
- // Recurse into children
112
- for (const key of Object.keys(node)) {
113
- if (key === 'parent') continue;
114
- const child = (node as unknown as Record<string, unknown>)[key];
115
- if (child && typeof child === 'object') {
116
- if (Array.isArray(child)) {
117
- for (const item of child) {
118
- if (item && typeof item === 'object' && 'type' in item) {
119
- collectLocalDeclarations(item as TSESTree.Node, scope);
120
- }
121
- }
122
- } else if ('type' in child) {
123
- collectLocalDeclarations(child as TSESTree.Node, scope);
124
- }
125
- }
126
- }
127
- }
128
-
129
- /** Collects the full local scope for a function node */
130
- function collectLocalScope(fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression): Set<string> {
131
- const scope = new Set<string>();
132
-
133
- // Add parameter names
134
- for (const param of fnNode.params) {
135
- collectBindingNames(param, scope);
136
- }
137
-
138
- // Add function name (for recursion)
139
- if (fnNode.type === AST_NODE_TYPES.FunctionExpression && fnNode.id) {
140
- scope.add(fnNode.id.name);
141
- }
142
-
143
- // Walk body collecting declarations
144
- collectLocalDeclarations(fnNode.body, scope);
145
-
146
- return scope;
147
- }
148
-
149
- /** Checks purity violations by traversing the function body AST */
150
- function checkPurityViolations(
151
- body: TSESTree.Node,
152
- localScope: Set<string>,
153
- fnTypeLabel: string,
154
- context: TSESLint.RuleContext<MessageIds, []>
155
- ): void {
156
- const forbiddenSet = FORBIDDEN_IDENTIFIERS;
157
-
158
- function visit(node: TSESTree.Node): void {
159
- if (node.type === AST_NODE_TYPES.ThisExpression) {
160
- context.report({node, messageId: 'purityThis', data: {fnType: fnTypeLabel}});
161
- }
162
-
163
- if (node.type === AST_NODE_TYPES.AwaitExpression) {
164
- context.report({node, messageId: 'purityAwait', data: {fnType: fnTypeLabel}});
165
- }
166
-
167
- if (node.type === AST_NODE_TYPES.YieldExpression) {
168
- context.report({node, messageId: 'purityYield', data: {fnType: fnTypeLabel}});
169
- }
170
-
171
- if (node.type === AST_NODE_TYPES.ImportExpression) {
172
- context.report({node, messageId: 'purityDynamicImport', data: {fnType: fnTypeLabel}});
173
- }
174
-
175
- if (node.type === AST_NODE_TYPES.Identifier) {
176
- const name = node.name;
177
-
178
- // Skip non-computed property access (obj.prop — only check 'obj')
179
- if (node.parent?.type === AST_NODE_TYPES.MemberExpression && node.parent.property === node && !node.parent.computed) {
180
- return;
181
- }
182
-
183
- // Skip non-computed, non-shorthand property keys in object literals
184
- if (
185
- node.parent?.type === AST_NODE_TYPES.Property &&
186
- node.parent.key === node &&
187
- !node.parent.computed &&
188
- !node.parent.shorthand
189
- ) {
190
- return;
191
- }
192
-
193
- // Check forbidden identifiers
194
- if (forbiddenSet.has(name)) {
195
- context.report({
196
- node,
197
- messageId: 'purityForbiddenIdentifier',
198
- data: {name, fnType: fnTypeLabel},
199
- });
200
- return;
201
- }
202
-
203
- // Check for closure variables (not local, not allowed global)
204
- if (!localScope.has(name) && !ALLOWED_GLOBALS.has(name)) {
205
- context.report({
206
- node,
207
- messageId: 'purityClosureVariable',
208
- data: {name, fnType: fnTypeLabel},
209
- });
210
- }
211
- }
212
-
213
- // Recurse into children (skip type-only AST subtrees)
214
- for (const key of Object.keys(node)) {
215
- if (
216
- key === 'parent' ||
217
- key === 'typeAnnotation' ||
218
- key === 'returnType' ||
219
- key === 'typeParameters' ||
220
- key === 'typeArguments'
221
- )
222
- continue;
223
- const child = (node as unknown as Record<string, unknown>)[key];
224
- if (child && typeof child === 'object') {
225
- if (Array.isArray(child)) {
226
- for (const item of child) {
227
- if (item && typeof item === 'object' && 'type' in item) {
228
- visit(item as TSESTree.Node);
229
- }
230
- }
231
- } else if ('type' in child) {
232
- visit(child as TSESTree.Node);
233
- }
234
- }
235
- }
236
- }
237
-
238
- visit(body);
239
- }
240
-
241
- /** Resolves a variable identifier to its initializer expression within the same module (searches all scopes) */
242
- function resolveVariableInitializer(name: string, program: TSESTree.Program): TSESTree.Expression | null {
243
- function search(node: TSESTree.Node): TSESTree.Expression | null {
244
- if (node.type === AST_NODE_TYPES.VariableDeclarator) {
245
- if (node.id.type === AST_NODE_TYPES.Identifier && node.id.name === name && node.init) {
246
- return node.init;
247
- }
248
- }
249
- for (const key of Object.keys(node)) {
250
- if (key === 'parent') continue;
251
- const child = (node as unknown as Record<string, unknown>)[key];
252
- if (child && typeof child === 'object') {
253
- if (Array.isArray(child)) {
254
- for (const item of child) {
255
- if (item && typeof item === 'object' && 'type' in item) {
256
- const result = search(item as TSESTree.Node);
257
- if (result) return result;
258
- }
259
- }
260
- } else if ('type' in child) {
261
- const result = search(child as TSESTree.Node);
262
- if (result) return result;
263
- }
264
- }
265
- }
266
- return null;
267
- }
268
- return search(program);
269
- }
270
-
271
- /** Extracts a function or object expression from a node, resolving variable references */
272
- function resolveToExpression(node: TSESTree.Node, program: TSESTree.Program): TSESTree.Expression | null {
273
- if (node.type === AST_NODE_TYPES.Identifier) {
274
- return resolveVariableInitializer(node.name, program);
275
- }
276
- return node as TSESTree.Expression;
277
- }
278
-
279
- /** Checks if an identifier name is an import from any module */
280
- function isImportedIdentifier(name: string, program: TSESTree.Program): boolean {
281
- for (const statement of program.body) {
282
- if (statement.type !== AST_NODE_TYPES.ImportDeclaration) continue;
283
- for (const specifier of statement.specifiers) {
284
- if (specifier.local.name === name) return true;
285
- }
286
- }
287
- return false;
288
- }
289
-
290
- /** Finds the unresolved identifier in a pure function argument */
291
- function findUnresolvedIdentifier(arg: TSESTree.Node, program: TSESTree.Program): {name: string; node: TSESTree.Node} | null {
292
- // Direct identifier: pureServerFn(myFn) or registerPureFnFactory('ns', 'id', myFn)
293
- if (arg.type === AST_NODE_TYPES.Identifier) {
294
- const resolved = resolveVariableInitializer(arg.name, program);
295
- if (!resolved) return {name: arg.name, node: arg};
296
-
297
- // Resolved to something but extraction still returned null — check object form
298
- if (resolved.type === AST_NODE_TYPES.ObjectExpression) {
299
- return findUnresolvedPureFnInObject(resolved, program);
300
- }
301
-
302
- // Resolved to something unexpected (call expression, etc.)
303
- return {name: arg.name, node: arg};
304
- }
305
-
306
- // Inline object: pureServerFn({ pureFn: importedFn })
307
- if (arg.type === AST_NODE_TYPES.ObjectExpression) {
308
- return findUnresolvedPureFnInObject(arg, program);
309
- }
310
-
311
- return null;
312
- }
313
-
314
- /** Finds unresolved pureFn identifier inside an object expression */
315
- function findUnresolvedPureFnInObject(
316
- obj: TSESTree.ObjectExpression,
317
- program: TSESTree.Program
318
- ): {name: string; node: TSESTree.Node} | null {
319
- for (const prop of obj.properties) {
320
- if (prop.type !== AST_NODE_TYPES.Property) continue;
321
- if (prop.key.type !== AST_NODE_TYPES.Identifier || prop.key.name !== 'pureFn') continue;
322
- if (prop.value.type === AST_NODE_TYPES.Identifier) {
323
- const resolved = resolveToExpression(prop.value, program);
324
- if (
325
- !resolved ||
326
- (resolved.type !== AST_NODE_TYPES.FunctionExpression && resolved.type !== AST_NODE_TYPES.ArrowFunctionExpression)
327
- ) {
328
- return {name: (prop.value as TSESTree.Identifier).name, node: prop.value};
329
- }
330
- }
331
- }
332
- return null;
333
- }
334
-
335
- /** Reports an error when a pure function argument cannot be resolved */
336
- function reportUnresolvedArgument(
337
- node: TSESTree.CallExpression,
338
- callee: string,
339
- program: TSESTree.Program,
340
- context: TSESLint.RuleContext<MessageIds, []>
341
- ): void {
342
- const argIndex = callee === 'registerPureFnFactory' ? 2 : callee === 'mapFrom' ? 1 : 0;
343
- const arg = node.arguments[argIndex];
344
- if (!arg) return;
345
-
346
- const identifierToCheck = findUnresolvedIdentifier(arg, program);
347
- if (!identifierToCheck) return;
348
-
349
- const name = identifierToCheck.name;
350
- const reportNode = identifierToCheck.node;
351
-
352
- if (isImportedIdentifier(name, program)) {
353
- context.report({node: reportNode, messageId: 'importedArgument', data: {callee, name}});
354
- } else {
355
- context.report({node: reportNode, messageId: 'unresolvedArgument', data: {callee, name}});
356
- }
357
- }
358
-
359
- /** Extracts function + isFactory from an object expression (PureFnDef) */
360
- function extractFromObjectExpression(
361
- obj: TSESTree.ObjectExpression,
362
- program: TSESTree.Program
363
- ): {fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression; isFactory: boolean} | null {
364
- let fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression | null = null;
365
- let isFactory = false;
366
-
367
- for (const prop of obj.properties) {
368
- if (prop.type !== AST_NODE_TYPES.Property) continue;
369
- if (prop.key.type !== AST_NODE_TYPES.Identifier) continue;
370
-
371
- if (prop.key.name === 'pureFn') {
372
- // pureFn value could be inline or a variable reference
373
- const resolved = resolveToExpression(prop.value, program);
374
- if (
375
- resolved &&
376
- (resolved.type === AST_NODE_TYPES.FunctionExpression || resolved.type === AST_NODE_TYPES.ArrowFunctionExpression)
377
- ) {
378
- fnNode = resolved;
379
- }
380
- }
381
-
382
- if (prop.key.name === 'isFactory') {
383
- if (prop.value.type === AST_NODE_TYPES.Literal && prop.value.value === true) {
384
- isFactory = true;
385
- }
386
- }
387
- }
388
-
389
- if (fnNode) return {fnNode, isFactory};
390
- return null;
391
- }
392
-
393
- /** Extracts the function node and isFactory flag from a pureServerFn() call */
394
- function extractPureServerFnTarget(
395
- node: TSESTree.CallExpression,
396
- program: TSESTree.Program
397
- ): {fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression; isFactory: boolean} | null {
398
- const arg = node.arguments[0];
399
- if (!arg) return null;
400
-
401
- // Resolve variable reference if needed
402
- const resolved = resolveToExpression(arg, program);
403
- if (!resolved) return null;
404
-
405
- // Direct function: pureServerFn(function() {}) or pureServerFn(() => {})
406
- if (resolved.type === AST_NODE_TYPES.FunctionExpression || resolved.type === AST_NODE_TYPES.ArrowFunctionExpression) {
407
- return {fnNode: resolved, isFactory: false};
408
- }
409
-
410
- // Object form: pureServerFn({ pureFn: fn, isFactory: bool })
411
- if (resolved.type === AST_NODE_TYPES.ObjectExpression) {
412
- return extractFromObjectExpression(resolved, program);
413
- }
414
-
415
- return null;
416
- }
417
-
418
- /** Extracts the factory function from a registerPureFnFactory() call */
419
- function extractFactoryFnTarget(
420
- node: TSESTree.CallExpression,
421
- program: TSESTree.Program
422
- ): {fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression; isFactory: true} | null {
423
- // registerPureFnFactory(namespace, functionID, factoryFn)
424
- const fnArg = node.arguments[2];
425
- if (!fnArg) return null;
426
-
427
- // Resolve variable reference if needed
428
- const resolved = resolveToExpression(fnArg, program);
429
- if (!resolved) return null;
430
-
431
- if (resolved.type === AST_NODE_TYPES.FunctionExpression || resolved.type === AST_NODE_TYPES.ArrowFunctionExpression) {
432
- return {fnNode: resolved, isFactory: true};
433
- }
434
-
435
- return null;
436
- }
437
-
438
- /** Extracts the mapper function from a mapFrom(source, mapper) call */
439
- function extractMapFromMapperTarget(
440
- node: TSESTree.CallExpression,
441
- program: TSESTree.Program
442
- ): {fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression; isFactory: boolean} | null {
443
- // mapFrom(source, mapper) - mapper is the 2nd argument
444
- const mapperArg = node.arguments[1];
445
- if (!mapperArg) return null;
446
-
447
- const resolved = resolveToExpression(mapperArg, program);
448
- if (!resolved) return null;
449
-
450
- if (resolved.type === AST_NODE_TYPES.FunctionExpression || resolved.type === AST_NODE_TYPES.ArrowFunctionExpression) {
451
- return {fnNode: resolved, isFactory: false};
452
- }
453
-
454
- return null;
455
- }
456
-
457
- const rule: TSESLint.RuleModule<MessageIds, []> = {
458
- meta: {
459
- type: 'problem',
460
- docs: {
461
- description:
462
- 'Validate that functions passed to pureServerFn(), registerPureFnFactory(), and mapFrom() are pure and do not use forbidden identifiers, closures, or side effects.',
463
- },
464
- messages: {
465
- purityThis: "'this' is not allowed in {{fnType}}",
466
- purityAwait: 'async/await is not allowed in {{fnType}}',
467
- purityYield: 'generators are not allowed in {{fnType}}',
468
- purityDynamicImport: 'Dynamic import() is not allowed in {{fnType}}',
469
- purityForbiddenIdentifier: '"{{name}}" is not allowed in {{fnType}}',
470
- purityClosureVariable:
471
- 'Closure variable "{{name}}" is not allowed in {{fnType}}. Pure functions cannot access outer scope variables.',
472
- importedArgument:
473
- '{{callee}}() argument "{{name}}" is imported from another module. Pure functions must be defined inline or as a variable in the same file.',
474
- unresolvedArgument:
475
- '{{callee}}() argument "{{name}}" could not be resolved to a variable declaration in this file. Pure functions must be defined inline or as a variable in the same file.',
476
- },
477
- schema: [],
478
- },
479
- defaultOptions: [],
480
- create(context) {
481
- let importCache: PureFnImports | null = null;
482
- let programNode: TSESTree.Program | null = null;
483
-
484
- return {
485
- Program(node) {
486
- programNode = node;
487
- importCache = buildPureFnImportCache(node);
488
- },
489
-
490
- CallExpression(node: TSESTree.CallExpression) {
491
- if (!importCache || !programNode || importCache.pureFnNames.size === 0) return;
492
- if (node.callee.type !== AST_NODE_TYPES.Identifier) return;
493
-
494
- const importedName = importCache.pureFnNames.get(node.callee.name);
495
- if (!importedName) return;
496
-
497
- let target: {
498
- fnNode: TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;
499
- isFactory: boolean;
500
- } | null = null;
501
-
502
- if (importedName === 'pureServerFn') {
503
- target = extractPureServerFnTarget(node, programNode);
504
- } else if (importedName === 'registerPureFnFactory') {
505
- target = extractFactoryFnTarget(node, programNode);
506
- } else if (importedName === 'mapFrom') {
507
- target = extractMapFromMapperTarget(node, programNode);
508
- }
509
-
510
- if (!target) {
511
- reportUnresolvedArgument(node, importedName, programNode, context);
512
- return;
513
- }
514
-
515
- const fnTypeLabel = target.isFactory ? 'factory functions' : 'pure functions';
516
- const localScope = collectLocalScope(target.fnNode);
517
- checkPurityViolations(target.fnNode.body, localScope, fnTypeLabel, context);
518
- },
519
- };
520
- },
521
- };
522
-
523
- export default rule;