@d-es-ign/stryker-js-instrumenter 9.6.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 (327) hide show
  1. package/LICENSE +201 -0
  2. package/dist/src/create-instrumenter.d.ts +16 -0
  3. package/dist/src/create-instrumenter.d.ts.map +1 -0
  4. package/dist/src/create-instrumenter.js +15 -0
  5. package/dist/src/create-instrumenter.js.map +1 -0
  6. package/dist/src/disable-type-checks.d.ts +11 -0
  7. package/dist/src/disable-type-checks.d.ts.map +1 -0
  8. package/dist/src/disable-type-checks.js +125 -0
  9. package/dist/src/disable-type-checks.js.map +1 -0
  10. package/dist/src/file.d.ts +6 -0
  11. package/dist/src/file.d.ts.map +1 -0
  12. package/dist/src/file.js +2 -0
  13. package/dist/src/file.js.map +1 -0
  14. package/dist/src/frameworks/angular-ignorer.d.ts +16 -0
  15. package/dist/src/frameworks/angular-ignorer.d.ts.map +1 -0
  16. package/dist/src/frameworks/angular-ignorer.js +85 -0
  17. package/dist/src/frameworks/angular-ignorer.js.map +1 -0
  18. package/dist/src/frameworks/index.d.ts +4 -0
  19. package/dist/src/frameworks/index.d.ts.map +1 -0
  20. package/dist/src/frameworks/index.js +7 -0
  21. package/dist/src/frameworks/index.js.map +1 -0
  22. package/dist/src/index.d.ts +9 -0
  23. package/dist/src/index.d.ts.map +1 -0
  24. package/dist/src/index.js +8 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/instrument-result.d.ts +7 -0
  27. package/dist/src/instrument-result.d.ts.map +1 -0
  28. package/dist/src/instrument-result.js +2 -0
  29. package/dist/src/instrument-result.js.map +1 -0
  30. package/dist/src/instrumenter-options.d.ts +5 -0
  31. package/dist/src/instrumenter-options.d.ts.map +1 -0
  32. package/dist/src/instrumenter-options.js +2 -0
  33. package/dist/src/instrumenter-options.js.map +1 -0
  34. package/dist/src/instrumenter-tokens.d.ts +6 -0
  35. package/dist/src/instrumenter-tokens.d.ts.map +1 -0
  36. package/dist/src/instrumenter-tokens.js +6 -0
  37. package/dist/src/instrumenter-tokens.js.map +1 -0
  38. package/dist/src/instrumenter.d.ts +24 -0
  39. package/dist/src/instrumenter.d.ts.map +1 -0
  40. package/dist/src/instrumenter.js +76 -0
  41. package/dist/src/instrumenter.js.map +1 -0
  42. package/dist/src/mutant-placers/expression-mutant-placer.d.ts +10 -0
  43. package/dist/src/mutant-placers/expression-mutant-placer.d.ts.map +1 -0
  44. package/dist/src/mutant-placers/expression-mutant-placer.js +144 -0
  45. package/dist/src/mutant-placers/expression-mutant-placer.js.map +1 -0
  46. package/dist/src/mutant-placers/index.d.ts +5 -0
  47. package/dist/src/mutant-placers/index.d.ts.map +1 -0
  48. package/dist/src/mutant-placers/index.js +11 -0
  49. package/dist/src/mutant-placers/index.js.map +1 -0
  50. package/dist/src/mutant-placers/mutant-placer.d.ts +8 -0
  51. package/dist/src/mutant-placers/mutant-placer.d.ts.map +1 -0
  52. package/dist/src/mutant-placers/mutant-placer.js +2 -0
  53. package/dist/src/mutant-placers/mutant-placer.js.map +1 -0
  54. package/dist/src/mutant-placers/statement-mutant-placer.d.ts +8 -0
  55. package/dist/src/mutant-placers/statement-mutant-placer.d.ts.map +1 -0
  56. package/dist/src/mutant-placers/statement-mutant-placer.js +24 -0
  57. package/dist/src/mutant-placers/statement-mutant-placer.js.map +1 -0
  58. package/dist/src/mutant-placers/switch-case-mutant-placer.d.ts +14 -0
  59. package/dist/src/mutant-placers/switch-case-mutant-placer.d.ts.map +1 -0
  60. package/dist/src/mutant-placers/switch-case-mutant-placer.js +29 -0
  61. package/dist/src/mutant-placers/switch-case-mutant-placer.js.map +1 -0
  62. package/dist/src/mutant-placers/throw-placement-error.d.ts +5 -0
  63. package/dist/src/mutant-placers/throw-placement-error.d.ts.map +1 -0
  64. package/dist/src/mutant-placers/throw-placement-error.js +17 -0
  65. package/dist/src/mutant-placers/throw-placement-error.js.map +1 -0
  66. package/dist/src/mutant.d.ts +27 -0
  67. package/dist/src/mutant.d.ts.map +1 -0
  68. package/dist/src/mutant.js +80 -0
  69. package/dist/src/mutant.js.map +1 -0
  70. package/dist/src/mutators/arithmetic-operator-mutator.d.ts +3 -0
  71. package/dist/src/mutators/arithmetic-operator-mutator.d.ts.map +1 -0
  72. package/dist/src/mutators/arithmetic-operator-mutator.js +34 -0
  73. package/dist/src/mutators/arithmetic-operator-mutator.js.map +1 -0
  74. package/dist/src/mutators/array-declaration-mutator.d.ts +3 -0
  75. package/dist/src/mutators/array-declaration-mutator.d.ts.map +1 -0
  76. package/dist/src/mutators/array-declaration-mutator.js +26 -0
  77. package/dist/src/mutators/array-declaration-mutator.js.map +1 -0
  78. package/dist/src/mutators/arrow-function-mutator.d.ts +3 -0
  79. package/dist/src/mutators/arrow-function-mutator.d.ts.map +1 -0
  80. package/dist/src/mutators/arrow-function-mutator.js +14 -0
  81. package/dist/src/mutators/arrow-function-mutator.js.map +1 -0
  82. package/dist/src/mutators/assignment-operator-mutator.d.ts +3 -0
  83. package/dist/src/mutators/assignment-operator-mutator.d.ts.map +1 -0
  84. package/dist/src/mutators/assignment-operator-mutator.js +42 -0
  85. package/dist/src/mutators/assignment-operator-mutator.js.map +1 -0
  86. package/dist/src/mutators/block-statement-mutator.d.ts +3 -0
  87. package/dist/src/mutators/block-statement-mutator.d.ts.map +1 -0
  88. package/dist/src/mutators/block-statement-mutator.js +63 -0
  89. package/dist/src/mutators/block-statement-mutator.js.map +1 -0
  90. package/dist/src/mutators/boolean-literal-mutator.d.ts +3 -0
  91. package/dist/src/mutators/boolean-literal-mutator.d.ts.map +1 -0
  92. package/dist/src/mutators/boolean-literal-mutator.js +17 -0
  93. package/dist/src/mutators/boolean-literal-mutator.js.map +1 -0
  94. package/dist/src/mutators/conditional-expression-mutator.d.ts +3 -0
  95. package/dist/src/mutators/conditional-expression-mutator.d.ts.map +1 -0
  96. package/dist/src/mutators/conditional-expression-mutator.js +81 -0
  97. package/dist/src/mutators/conditional-expression-mutator.js.map +1 -0
  98. package/dist/src/mutators/equality-operator-mutator.d.ts +3 -0
  99. package/dist/src/mutators/equality-operator-mutator.d.ts.map +1 -0
  100. package/dist/src/mutators/equality-operator-mutator.js +28 -0
  101. package/dist/src/mutators/equality-operator-mutator.js.map +1 -0
  102. package/dist/src/mutators/index.d.ts +4 -0
  103. package/dist/src/mutators/index.d.ts.map +1 -0
  104. package/dist/src/mutators/index.js +4 -0
  105. package/dist/src/mutators/index.js.map +1 -0
  106. package/dist/src/mutators/logical-operator-mutator.d.ts +3 -0
  107. package/dist/src/mutators/logical-operator-mutator.d.ts.map +1 -0
  108. package/dist/src/mutators/logical-operator-mutator.js +21 -0
  109. package/dist/src/mutators/logical-operator-mutator.js.map +1 -0
  110. package/dist/src/mutators/method-expression-mutator.d.ts +3 -0
  111. package/dist/src/mutators/method-expression-mutator.d.ts.map +1 -0
  112. package/dist/src/mutators/method-expression-mutator.js +65 -0
  113. package/dist/src/mutators/method-expression-mutator.js.map +1 -0
  114. package/dist/src/mutators/mutate.d.ts +3 -0
  115. package/dist/src/mutators/mutate.d.ts.map +1 -0
  116. package/dist/src/mutators/mutate.js +35 -0
  117. package/dist/src/mutators/mutate.js.map +1 -0
  118. package/dist/src/mutators/mutator-options.d.ts +5 -0
  119. package/dist/src/mutators/mutator-options.d.ts.map +1 -0
  120. package/dist/src/mutators/mutator-options.js +2 -0
  121. package/dist/src/mutators/mutator-options.js.map +1 -0
  122. package/dist/src/mutators/node-mutator.d.ts +6 -0
  123. package/dist/src/mutators/node-mutator.d.ts.map +1 -0
  124. package/dist/src/mutators/node-mutator.js +2 -0
  125. package/dist/src/mutators/node-mutator.js.map +1 -0
  126. package/dist/src/mutators/object-literal-mutator.d.ts +3 -0
  127. package/dist/src/mutators/object-literal-mutator.d.ts.map +1 -0
  128. package/dist/src/mutators/object-literal-mutator.js +11 -0
  129. package/dist/src/mutators/object-literal-mutator.js.map +1 -0
  130. package/dist/src/mutators/optional-chaining-mutator.d.ts +15 -0
  131. package/dist/src/mutators/optional-chaining-mutator.d.ts.map +1 -0
  132. package/dist/src/mutators/optional-chaining-mutator.js +28 -0
  133. package/dist/src/mutators/optional-chaining-mutator.js.map +1 -0
  134. package/dist/src/mutators/regex-mutator.d.ts +3 -0
  135. package/dist/src/mutators/regex-mutator.d.ts.map +1 -0
  136. package/dist/src/mutators/regex-mutator.js +53 -0
  137. package/dist/src/mutators/regex-mutator.js.map +1 -0
  138. package/dist/src/mutators/string-literal-mutator.d.ts +3 -0
  139. package/dist/src/mutators/string-literal-mutator.d.ts.map +1 -0
  140. package/dist/src/mutators/string-literal-mutator.js +36 -0
  141. package/dist/src/mutators/string-literal-mutator.js.map +1 -0
  142. package/dist/src/mutators/unary-operator-mutator.d.ts +3 -0
  143. package/dist/src/mutators/unary-operator-mutator.d.ts.map +1 -0
  144. package/dist/src/mutators/unary-operator-mutator.js +27 -0
  145. package/dist/src/mutators/unary-operator-mutator.js.map +1 -0
  146. package/dist/src/mutators/update-operator-mutator.d.ts +3 -0
  147. package/dist/src/mutators/update-operator-mutator.d.ts.map +1 -0
  148. package/dist/src/mutators/update-operator-mutator.js +17 -0
  149. package/dist/src/mutators/update-operator-mutator.js.map +1 -0
  150. package/dist/src/parsers/create-parser.d.ts +5 -0
  151. package/dist/src/parsers/create-parser.d.ts.map +1 -0
  152. package/dist/src/parsers/create-parser.js +58 -0
  153. package/dist/src/parsers/create-parser.js.map +1 -0
  154. package/dist/src/parsers/html-parser.d.ts +4 -0
  155. package/dist/src/parsers/html-parser.d.ts.map +1 -0
  156. package/dist/src/parsers/html-parser.js +96 -0
  157. package/dist/src/parsers/html-parser.js.map +1 -0
  158. package/dist/src/parsers/index.d.ts +5 -0
  159. package/dist/src/parsers/index.d.ts.map +1 -0
  160. package/dist/src/parsers/index.js +3 -0
  161. package/dist/src/parsers/index.js.map +1 -0
  162. package/dist/src/parsers/js-parser.d.ts +4 -0
  163. package/dist/src/parsers/js-parser.d.ts.map +1 -0
  164. package/dist/src/parsers/js-parser.js +50 -0
  165. package/dist/src/parsers/js-parser.js.map +1 -0
  166. package/dist/src/parsers/parse-error.d.ts +5 -0
  167. package/dist/src/parsers/parse-error.d.ts.map +1 -0
  168. package/dist/src/parsers/parse-error.js +6 -0
  169. package/dist/src/parsers/parse-error.js.map +1 -0
  170. package/dist/src/parsers/parser-context.d.ts +6 -0
  171. package/dist/src/parsers/parser-context.d.ts.map +1 -0
  172. package/dist/src/parsers/parser-context.js +2 -0
  173. package/dist/src/parsers/parser-context.js.map +1 -0
  174. package/dist/src/parsers/parser-options.d.ts +4 -0
  175. package/dist/src/parsers/parser-options.d.ts.map +1 -0
  176. package/dist/src/parsers/parser-options.js +2 -0
  177. package/dist/src/parsers/parser-options.js.map +1 -0
  178. package/dist/src/parsers/svelte-parser.d.ts +4 -0
  179. package/dist/src/parsers/svelte-parser.d.ts.map +1 -0
  180. package/dist/src/parsers/svelte-parser.js +169 -0
  181. package/dist/src/parsers/svelte-parser.js.map +1 -0
  182. package/dist/src/parsers/ts-parser.d.ts +9 -0
  183. package/dist/src/parsers/ts-parser.d.ts.map +1 -0
  184. package/dist/src/parsers/ts-parser.js +54 -0
  185. package/dist/src/parsers/ts-parser.js.map +1 -0
  186. package/dist/src/printers/html-printer.d.ts +4 -0
  187. package/dist/src/printers/html-printer.d.ts.map +1 -0
  188. package/dist/src/printers/html-printer.js +15 -0
  189. package/dist/src/printers/html-printer.js.map +1 -0
  190. package/dist/src/printers/index.d.ts +7 -0
  191. package/dist/src/printers/index.d.ts.map +1 -0
  192. package/dist/src/printers/index.js +23 -0
  193. package/dist/src/printers/index.js.map +1 -0
  194. package/dist/src/printers/js-printer.d.ts +4 -0
  195. package/dist/src/printers/js-printer.d.ts.map +1 -0
  196. package/dist/src/printers/js-printer.js +6 -0
  197. package/dist/src/printers/js-printer.js.map +1 -0
  198. package/dist/src/printers/svelte-printer.d.ts +4 -0
  199. package/dist/src/printers/svelte-printer.d.ts.map +1 -0
  200. package/dist/src/printers/svelte-printer.js +28 -0
  201. package/dist/src/printers/svelte-printer.js.map +1 -0
  202. package/dist/src/printers/ts-printer.d.ts +4 -0
  203. package/dist/src/printers/ts-printer.d.ts.map +1 -0
  204. package/dist/src/printers/ts-printer.js +9 -0
  205. package/dist/src/printers/ts-printer.js.map +1 -0
  206. package/dist/src/syntax/index.d.ts +86 -0
  207. package/dist/src/syntax/index.d.ts.map +1 -0
  208. package/dist/src/syntax/index.js +9 -0
  209. package/dist/src/syntax/index.js.map +1 -0
  210. package/dist/src/transformers/babel-transformer.d.ts +4 -0
  211. package/dist/src/transformers/babel-transformer.d.ts.map +1 -0
  212. package/dist/src/transformers/babel-transformer.js +142 -0
  213. package/dist/src/transformers/babel-transformer.js.map +1 -0
  214. package/dist/src/transformers/directive-bookkeeper.d.ts +19 -0
  215. package/dist/src/transformers/directive-bookkeeper.d.ts.map +1 -0
  216. package/dist/src/transformers/directive-bookkeeper.js +108 -0
  217. package/dist/src/transformers/directive-bookkeeper.js.map +1 -0
  218. package/dist/src/transformers/html-transformer.d.ts +4 -0
  219. package/dist/src/transformers/html-transformer.d.ts.map +1 -0
  220. package/dist/src/transformers/html-transformer.js +6 -0
  221. package/dist/src/transformers/html-transformer.js.map +1 -0
  222. package/dist/src/transformers/ignorer-bookkeeper.d.ts +18 -0
  223. package/dist/src/transformers/ignorer-bookkeeper.d.ts.map +1 -0
  224. package/dist/src/transformers/ignorer-bookkeeper.js +29 -0
  225. package/dist/src/transformers/ignorer-bookkeeper.js.map +1 -0
  226. package/dist/src/transformers/index.d.ts +6 -0
  227. package/dist/src/transformers/index.d.ts.map +1 -0
  228. package/dist/src/transformers/index.js +4 -0
  229. package/dist/src/transformers/index.js.map +1 -0
  230. package/dist/src/transformers/mutant-collector.d.ts +19 -0
  231. package/dist/src/transformers/mutant-collector.d.ts.map +1 -0
  232. package/dist/src/transformers/mutant-collector.js +25 -0
  233. package/dist/src/transformers/mutant-collector.js.map +1 -0
  234. package/dist/src/transformers/svelte-transformer.d.ts +4 -0
  235. package/dist/src/transformers/svelte-transformer.d.ts.map +1 -0
  236. package/dist/src/transformers/svelte-transformer.js +46 -0
  237. package/dist/src/transformers/svelte-transformer.js.map +1 -0
  238. package/dist/src/transformers/transformer-options.d.ts +6 -0
  239. package/dist/src/transformers/transformer-options.d.ts.map +1 -0
  240. package/dist/src/transformers/transformer-options.js +2 -0
  241. package/dist/src/transformers/transformer-options.js.map +1 -0
  242. package/dist/src/transformers/transformer.d.ts +22 -0
  243. package/dist/src/transformers/transformer.d.ts.map +1 -0
  244. package/dist/src/transformers/transformer.js +30 -0
  245. package/dist/src/transformers/transformer.js.map +1 -0
  246. package/dist/src/util/binary-operator.d.ts +2 -0
  247. package/dist/src/util/binary-operator.d.ts.map +1 -0
  248. package/dist/src/util/binary-operator.js +2 -0
  249. package/dist/src/util/binary-operator.js.map +1 -0
  250. package/dist/src/util/index.d.ts +4 -0
  251. package/dist/src/util/index.d.ts.map +1 -0
  252. package/dist/src/util/index.js +4 -0
  253. package/dist/src/util/index.js.map +1 -0
  254. package/dist/src/util/position-converter.d.ts +16 -0
  255. package/dist/src/util/position-converter.d.ts.map +1 -0
  256. package/dist/src/util/position-converter.js +126 -0
  257. package/dist/src/util/position-converter.js.map +1 -0
  258. package/dist/src/util/syntax-helpers.d.ts +60 -0
  259. package/dist/src/util/syntax-helpers.d.ts.map +1 -0
  260. package/dist/src/util/syntax-helpers.js +217 -0
  261. package/dist/src/util/syntax-helpers.js.map +1 -0
  262. package/package.json +64 -0
  263. package/src/create-instrumenter.ts +30 -0
  264. package/src/disable-type-checks.ts +153 -0
  265. package/src/file.ts +6 -0
  266. package/src/frameworks/angular-ignorer.ts +129 -0
  267. package/src/frameworks/index.ts +9 -0
  268. package/src/index.ts +8 -0
  269. package/src/instrument-result.ts +8 -0
  270. package/src/instrumenter-options.ts +5 -0
  271. package/src/instrumenter-tokens.ts +5 -0
  272. package/src/instrumenter.ts +100 -0
  273. package/src/mutant-placers/expression-mutant-placer.ts +210 -0
  274. package/src/mutant-placers/index.ts +12 -0
  275. package/src/mutant-placers/mutant-placer.ts +9 -0
  276. package/src/mutant-placers/statement-mutant-placer.ts +39 -0
  277. package/src/mutant-placers/switch-case-mutant-placer.ts +41 -0
  278. package/src/mutant-placers/throw-placement-error.ts +34 -0
  279. package/src/mutant.ts +101 -0
  280. package/src/mutators/arithmetic-operator-mutator.ts +51 -0
  281. package/src/mutators/array-declaration-mutator.ts +36 -0
  282. package/src/mutators/arrow-function-mutator.ts +22 -0
  283. package/src/mutators/assignment-operator-mutator.ts +59 -0
  284. package/src/mutators/block-statement-mutator.ts +89 -0
  285. package/src/mutators/boolean-literal-mutator.ts +24 -0
  286. package/src/mutators/conditional-expression-mutator.ts +92 -0
  287. package/src/mutators/equality-operator-mutator.ts +35 -0
  288. package/src/mutators/index.ts +3 -0
  289. package/src/mutators/logical-operator-mutator.ts +29 -0
  290. package/src/mutators/method-expression-mutator.ts +99 -0
  291. package/src/mutators/mutate.ts +36 -0
  292. package/src/mutators/mutator-options.ts +4 -0
  293. package/src/mutators/node-mutator.ts +6 -0
  294. package/src/mutators/object-literal-mutator.ts +15 -0
  295. package/src/mutators/optional-chaining-mutator.ts +39 -0
  296. package/src/mutators/regex-mutator.ts +69 -0
  297. package/src/mutators/string-literal-mutator.ts +49 -0
  298. package/src/mutators/unary-operator-mutator.ts +39 -0
  299. package/src/mutators/update-operator-mutator.ts +26 -0
  300. package/src/parsers/create-parser.ts +78 -0
  301. package/src/parsers/html-parser.ts +138 -0
  302. package/src/parsers/index.ts +5 -0
  303. package/src/parsers/js-parser.ts +58 -0
  304. package/src/parsers/parse-error.ts +9 -0
  305. package/src/parsers/parser-context.ts +15 -0
  306. package/src/parsers/parser-options.ts +3 -0
  307. package/src/parsers/svelte-parser.ts +255 -0
  308. package/src/parsers/ts-parser.ts +69 -0
  309. package/src/printers/html-printer.ts +20 -0
  310. package/src/printers/index.ts +33 -0
  311. package/src/printers/js-printer.ts +11 -0
  312. package/src/printers/svelte-printer.ts +34 -0
  313. package/src/printers/ts-printer.ts +14 -0
  314. package/src/syntax/index.ts +97 -0
  315. package/src/transformers/babel-transformer.ts +217 -0
  316. package/src/transformers/directive-bookkeeper.ts +173 -0
  317. package/src/transformers/html-transformer.ts +13 -0
  318. package/src/transformers/ignorer-bookkeeper.ts +41 -0
  319. package/src/transformers/index.ts +6 -0
  320. package/src/transformers/mutant-collector.ts +44 -0
  321. package/src/transformers/svelte-transformer.ts +57 -0
  322. package/src/transformers/transformer-options.ts +7 -0
  323. package/src/transformers/transformer.ts +54 -0
  324. package/src/util/binary-operator.ts +23 -0
  325. package/src/util/index.ts +3 -0
  326. package/src/util/position-converter.ts +145 -0
  327. package/src/util/syntax-helpers.ts +301 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Position } from '@stryker-mutator/api/core';
2
+ /**
3
+ * A class that can convert a string offset back to line / column.
4
+ * Grabbed from TypeScript code base
5
+ * @see https://github.com/microsoft/TypeScript/blob/aa9b6953441b53f8b14072c047f0519b611150c4/src/compiler/scanner.ts#L503
6
+ */
7
+ export declare class PositionConverter {
8
+ private readonly text;
9
+ private _lineStarts?;
10
+ private get lineStarts();
11
+ constructor(text: string);
12
+ positionFromOffset(offset: number): Position;
13
+ private computeLineOfPosition;
14
+ private computeLineStarts;
15
+ }
16
+ //# sourceMappingURL=position-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position-converter.d.ts","sourceRoot":"","sources":["../../../src/util/position-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;GAIG;AACH,qBAAa,iBAAiB;IAQhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,KAAK,UAAU,GAKrB;gBAC4B,IAAI,EAAE,MAAM;IAElC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAQnD,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,iBAAiB;CAiC1B"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * A class that can convert a string offset back to line / column.
3
+ * Grabbed from TypeScript code base
4
+ * @see https://github.com/microsoft/TypeScript/blob/aa9b6953441b53f8b14072c047f0519b611150c4/src/compiler/scanner.ts#L503
5
+ */
6
+ export class PositionConverter {
7
+ text;
8
+ _lineStarts;
9
+ get lineStarts() {
10
+ if (!this._lineStarts) {
11
+ this._lineStarts = this.computeLineStarts(this.text);
12
+ }
13
+ return this._lineStarts;
14
+ }
15
+ constructor(text) {
16
+ this.text = text;
17
+ }
18
+ positionFromOffset(offset) {
19
+ const lineNumber = this.computeLineOfPosition(offset);
20
+ return {
21
+ line: lineNumber,
22
+ column: offset - this.lineStarts[lineNumber],
23
+ };
24
+ }
25
+ computeLineOfPosition(offset) {
26
+ let lineNumber = binarySearch(this.lineStarts, offset);
27
+ if (lineNumber < 0) {
28
+ // If the actual position was not found,
29
+ // the binary search returns the 2's-complement of the next line start
30
+ // e.g. if the line starts at [5, 10, 23, 80] and the position requested was 20
31
+ // then the search will return -2.
32
+ //
33
+ // We want the index of the previous line start, so we subtract 1.
34
+ // Review 2's-complement if this is confusing.
35
+ lineNumber = ~lineNumber - 1;
36
+ if (lineNumber === -1) {
37
+ throw new Error('position cannot precede the beginning of the file');
38
+ }
39
+ }
40
+ return lineNumber;
41
+ }
42
+ computeLineStarts(text) {
43
+ const result = [];
44
+ let pos = 0;
45
+ let lineStart = 0;
46
+ while (pos < text.length) {
47
+ const ch = text.charCodeAt(pos);
48
+ pos++;
49
+ switch (ch) {
50
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
51
+ case 13 /* CharacterCodes.carriageReturn */: {
52
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
53
+ if (text.charCodeAt(pos) === 10 /* CharacterCodes.lineFeed */) {
54
+ pos++;
55
+ }
56
+ // falls through
57
+ }
58
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
59
+ case 10 /* CharacterCodes.lineFeed */:
60
+ result.push(lineStart);
61
+ lineStart = pos;
62
+ break;
63
+ default:
64
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
65
+ if (ch > 127 /* CharacterCodes.maxAsciiCharacter */ && isLineBreak(ch)) {
66
+ result.push(lineStart);
67
+ lineStart = pos;
68
+ }
69
+ break;
70
+ }
71
+ }
72
+ result.push(lineStart);
73
+ return result;
74
+ }
75
+ }
76
+ function binarySearch(array, value) {
77
+ if (!array.length) {
78
+ return -1;
79
+ }
80
+ let low = 0;
81
+ let high = array.length - 1;
82
+ while (low <= high) {
83
+ const middle = low + ((high - low) >> 1);
84
+ const midKey = compare(array[middle], value);
85
+ switch (midKey) {
86
+ case -1 /* Comparison.LessThan */:
87
+ low = middle + 1;
88
+ break;
89
+ case 0 /* Comparison.EqualTo */:
90
+ return middle;
91
+ case 1 /* Comparison.GreaterThan */:
92
+ high = middle - 1;
93
+ break;
94
+ }
95
+ }
96
+ return ~low;
97
+ }
98
+ function compare(a, b) {
99
+ return a < b
100
+ ? -1 /* Comparison.LessThan */
101
+ : a > b
102
+ ? 1 /* Comparison.GreaterThan */
103
+ : 0 /* Comparison.EqualTo */;
104
+ }
105
+ function isLineBreak(ch) {
106
+ // ES5 7.3:
107
+ // The ECMAScript line terminator characters are listed in Table 3.
108
+ // Table 3: Line Terminator Characters
109
+ // Code Unit Value Name Formal Name
110
+ // \u000A Line Feed <LF>
111
+ // \u000D Carriage Return <CR>
112
+ // \u2028 Line separator <LS>
113
+ // \u2029 Paragraph separator <PS>
114
+ // Only the characters in Table 3 are treated as line terminators. Other new line or line
115
+ // breaking characters are treated as white space but not as line terminators.
116
+ return (
117
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
118
+ ch === 10 /* CharacterCodes.lineFeed */ ||
119
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
120
+ ch === 13 /* CharacterCodes.carriageReturn */ ||
121
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
122
+ ch === 8232 /* CharacterCodes.lineSeparator */ ||
123
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
124
+ ch === 8233 /* CharacterCodes.paragraphSeparator */);
125
+ }
126
+ //# sourceMappingURL=position-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position-converter.js","sourceRoot":"","sources":["../../../src/util/position-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { INSTRUMENTER_CONSTANTS as ID } from '@stryker-mutator/api/core';
2
+ import babel from '@babel/core';
3
+ import { I } from '@stryker-mutator/util';
4
+ import { Mutant } from '../mutant.js';
5
+ import { MutantCollector } from '../transformers/index.js';
6
+ import { MutatorOptions } from '../mutators/index.js';
7
+ export { ID };
8
+ /**
9
+ * Returns syntax for the header if JS/TS files
10
+ */
11
+ export declare const instrumentationBabelHeader: readonly babel.types.Statement[];
12
+ /**
13
+ * returns syntax for `global.activeMutant === $mutantId`
14
+ * @param mutantId The id of the mutant to switch
15
+ */
16
+ export declare function mutantTestExpression(mutantId: string): babel.types.CallExpression;
17
+ interface Position {
18
+ line: number;
19
+ column: number;
20
+ }
21
+ export declare function eqNode<T extends babel.types.Node>(a: T, b: babel.types.Node): b is T;
22
+ export declare function offsetLocations(file: babel.types.File, { position, line, column, }: {
23
+ position: number;
24
+ line: number;
25
+ column: number;
26
+ }): void;
27
+ /**
28
+ * Returns a sequence of mutation coverage counters with an optional last expression.
29
+ *
30
+ * @example (global.__coverMutant__(0, 1), 40 + 2)
31
+ * @param mutants The mutants for which covering syntax needs to be generated
32
+ * @param targetExpression The original expression
33
+ */
34
+ export declare function mutationCoverageSequenceExpression(mutants: Iterable<Mutant>, targetExpression?: babel.types.Expression): babel.types.Expression;
35
+ export declare function isTypeNode(path: babel.NodePath): boolean;
36
+ export declare function isImportDeclaration(path: babel.NodePath): boolean;
37
+ /**
38
+ * A location of an ast node in a file
39
+ */
40
+ export interface SourceLocationInFile {
41
+ end: Position;
42
+ start: Position;
43
+ }
44
+ /**
45
+ * Determines if a location (needle) is included in an other location (haystack)
46
+ * @param haystack The range to look in
47
+ * @param needle the range to search for
48
+ */
49
+ export declare function locationIncluded(haystack: SourceLocationInFile, needle: SourceLocationInFile): boolean;
50
+ /**
51
+ * Determines if two locations overlap with each other
52
+ */
53
+ export declare function locationOverlaps(a: SourceLocationInFile, b: SourceLocationInFile): boolean;
54
+ /**
55
+ * Helper for `types.cloneNode(node, deep: true, withoutLocations: false);`
56
+ */
57
+ export declare function deepCloneNode<TNode extends babel.types.Node>(node: TNode): TNode;
58
+ export declare function placeHeaderIfNeeded(mutantCollector: I<MutantCollector>, originFileName: string, options: MutatorOptions, root: babel.types.File): void;
59
+ export declare function placeHeader(root: babel.types.File): void;
60
+ //# sourceMappingURL=syntax-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-helpers.d.ts","sourceRoot":"","sources":["../../../src/util/syntax-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,EAAE,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAc,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,EAAE,EAAE,CAAC;AAQd;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAiDrB,SAAS,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC,KAAK,CAAC,cAAc,CAI5B;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAgB,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,EAC/C,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GAClB,CAAC,IAAI,CAAC,CAER;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EACtB,EACE,QAAQ,EACR,IAAI,EACJ,MAAM,GACP,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD,IAAI,CAsBN;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EACzB,gBAAgB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,GACxC,KAAK,CAAC,KAAK,CAAC,UAAU,CAWxB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAQxD;AAkDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAIjE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAUT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,oBAAoB,EACvB,CAAC,EAAE,oBAAoB,GACtB,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,EAC1D,IAAI,EAAE,KAAK,GACV,KAAK,CAEP;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,EACnC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GACrB,IAAI,CAKN;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAYxD"}
@@ -0,0 +1,217 @@
1
+ import { INSTRUMENTER_CONSTANTS as ID } from '@stryker-mutator/api/core';
2
+ import babel from '@babel/core';
3
+ import { deepFreeze } from '@stryker-mutator/util';
4
+ export { ID };
5
+ const STRYKER_NAMESPACE_HELPER = 'stryNS_9fa48';
6
+ const COVER_MUTANT_HELPER = 'stryCov_9fa48';
7
+ const IS_MUTANT_ACTIVE_HELPER = 'stryMutAct_9fa48';
8
+ const { types, traverse } = babel;
9
+ /**
10
+ * Returns syntax for the header if JS/TS files
11
+ */
12
+ export const instrumentationBabelHeader = deepFreeze(
13
+ // `globalThis` implementation is based on core-js's implementation. See https://github.com/stryker-mutator/stryker-js/issues/4035
14
+ babel.parse(`function ${STRYKER_NAMESPACE_HELPER}(){
15
+ var g = typeof globalThis === 'object' && globalThis && globalThis.Math === Math && globalThis || new Function("return this")();
16
+ var ns = g.${ID.NAMESPACE} || (g.${ID.NAMESPACE} = {});
17
+ if (ns.${ID.ACTIVE_MUTANT} === undefined && g.process && g.process.env && g.process.env.${ID.ACTIVE_MUTANT_ENV_VARIABLE}) {
18
+ ns.${ID.ACTIVE_MUTANT} = g.process.env.${ID.ACTIVE_MUTANT_ENV_VARIABLE};
19
+ }
20
+ function retrieveNS(){
21
+ return ns;
22
+ }
23
+ ${STRYKER_NAMESPACE_HELPER} = retrieveNS;
24
+ return retrieveNS();
25
+ }
26
+ ${STRYKER_NAMESPACE_HELPER}();
27
+
28
+ function ${COVER_MUTANT_HELPER}() {
29
+ var ns = ${STRYKER_NAMESPACE_HELPER}();
30
+ var cov = ns.${ID.MUTATION_COVERAGE_OBJECT} || (ns.${ID.MUTATION_COVERAGE_OBJECT} = { static: {}, perTest: {} });
31
+ function cover() {
32
+ var c = cov.static;
33
+ if (ns.${ID.CURRENT_TEST_ID}) {
34
+ c = cov.perTest[ns.${ID.CURRENT_TEST_ID}] = cov.perTest[ns.${ID.CURRENT_TEST_ID}] || {};
35
+ }
36
+ var a = arguments;
37
+ for(var i=0; i < a.length; i++){
38
+ c[a[i]] = (c[a[i]] || 0) + 1;
39
+ }
40
+ }
41
+ ${COVER_MUTANT_HELPER} = cover;
42
+ cover.apply(null, arguments);
43
+ }
44
+ function ${IS_MUTANT_ACTIVE_HELPER}(id) {
45
+ var ns = ${STRYKER_NAMESPACE_HELPER}();
46
+ function isActive(id) {
47
+ if (ns.${ID.ACTIVE_MUTANT} === id) {
48
+ if (ns.${ID.HIT_COUNT} !== void 0 && ++ns.${ID.HIT_COUNT} > ns.${ID.HIT_LIMIT}) {
49
+ throw new Error('Stryker: Hit count limit reached (' + ns.${ID.HIT_COUNT} + ')');
50
+ }
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ ${IS_MUTANT_ACTIVE_HELPER} = isActive;
56
+ return isActive(id);
57
+ }`, { configFile: false, browserslistConfigFile: false, env: { targets: {} } })).program.body; // cast here, otherwise the thing gets unwieldy to handle
58
+ /**
59
+ * returns syntax for `global.activeMutant === $mutantId`
60
+ * @param mutantId The id of the mutant to switch
61
+ */
62
+ export function mutantTestExpression(mutantId) {
63
+ return types.callExpression(types.identifier(IS_MUTANT_ACTIVE_HELPER), [
64
+ types.stringLiteral(mutantId),
65
+ ]);
66
+ }
67
+ function eqLocation(a, b) {
68
+ function eqPosition(start, end) {
69
+ return start.column === end.column && start.line === end.line;
70
+ }
71
+ return eqPosition(a.start, b.start) && eqPosition(a.end, b.end);
72
+ }
73
+ export function eqNode(a, b) {
74
+ return a.type === b.type && !!a.loc && !!b.loc && eqLocation(a.loc, b.loc);
75
+ }
76
+ export function offsetLocations(file, { position, line, column, }) {
77
+ const offsetNode = (node) => {
78
+ node.start += position;
79
+ node.end += position;
80
+ // we need to subtract 1, as lines always start at 1
81
+ node.loc.start.line += line - 1;
82
+ node.loc.end.line += line - 1;
83
+ if (node.loc.start.line === line) {
84
+ node.loc.start.column += column;
85
+ }
86
+ if (node.loc.end.line === line) {
87
+ node.loc.end.column += column;
88
+ }
89
+ };
90
+ traverse(file, {
91
+ enter(path) {
92
+ offsetNode(path.node);
93
+ },
94
+ });
95
+ // Don't forget the file itself!
96
+ file.start += position;
97
+ file.end += position;
98
+ }
99
+ /**
100
+ * Returns a sequence of mutation coverage counters with an optional last expression.
101
+ *
102
+ * @example (global.__coverMutant__(0, 1), 40 + 2)
103
+ * @param mutants The mutants for which covering syntax needs to be generated
104
+ * @param targetExpression The original expression
105
+ */
106
+ export function mutationCoverageSequenceExpression(mutants, targetExpression) {
107
+ const mutantIds = [...mutants].map((mutant) => types.stringLiteral(mutant.id));
108
+ const sequence = [
109
+ types.callExpression(types.identifier(COVER_MUTANT_HELPER), mutantIds),
110
+ ];
111
+ if (targetExpression) {
112
+ sequence.push(targetExpression);
113
+ }
114
+ return types.sequenceExpression(sequence);
115
+ }
116
+ export function isTypeNode(path) {
117
+ return (path.isTypeAnnotation() ||
118
+ flowTypeAnnotationNodeTypes.includes(path.node.type) ||
119
+ tsTypeAnnotationNodeTypes.includes(path.node.type) ||
120
+ isDeclareVariableStatement(path) ||
121
+ isDeclareModule(path));
122
+ }
123
+ /**
124
+ * Determines whether or not it is a declare variable statement node.
125
+ * @example
126
+ * declare const foo: 'foo';
127
+ */
128
+ function isDeclareVariableStatement(path) {
129
+ return path.isVariableDeclaration() && path.node.declare === true;
130
+ }
131
+ /**
132
+ * Determines whether or not a node is a string literal that is the name of a module.
133
+ * @example
134
+ * declare module "express" {};
135
+ */
136
+ function isDeclareModule(path) {
137
+ return path.isTSModuleDeclaration() && (path.node.declare ?? false);
138
+ }
139
+ const tsTypeAnnotationNodeTypes = Object.freeze([
140
+ 'TSAsExpression',
141
+ 'TSInterfaceDeclaration',
142
+ 'TSTypeAnnotation',
143
+ 'TSTypeAliasDeclaration',
144
+ 'TSEnumDeclaration',
145
+ 'TSDeclareFunction',
146
+ 'TSTypeParameterInstantiation',
147
+ 'TSTypeParameterDeclaration',
148
+ ]);
149
+ const flowTypeAnnotationNodeTypes = Object.freeze([
150
+ 'DeclareClass',
151
+ 'DeclareFunction',
152
+ 'DeclareInterface',
153
+ 'DeclareModule',
154
+ 'DeclareModuleExports',
155
+ 'DeclareTypeAlias',
156
+ 'DeclareOpaqueType',
157
+ 'DeclareVariable',
158
+ 'DeclareExportDeclaration',
159
+ 'DeclareExportAllDeclaration',
160
+ 'InterfaceDeclaration',
161
+ 'OpaqueType',
162
+ 'TypeAlias',
163
+ 'InterfaceDeclaration',
164
+ ]);
165
+ export function isImportDeclaration(path) {
166
+ return (types.isTSImportEqualsDeclaration(path.node) || path.isImportDeclaration());
167
+ }
168
+ /**
169
+ * Determines if a location (needle) is included in an other location (haystack)
170
+ * @param haystack The range to look in
171
+ * @param needle the range to search for
172
+ */
173
+ export function locationIncluded(haystack, needle) {
174
+ const startIncluded = haystack.start.line < needle.start.line ||
175
+ (haystack.start.line === needle.start.line &&
176
+ haystack.start.column <= needle.start.column);
177
+ const endIncluded = haystack.end.line > needle.end.line ||
178
+ (haystack.end.line === needle.end.line &&
179
+ haystack.end.column >= needle.end.column);
180
+ return startIncluded && endIncluded;
181
+ }
182
+ /**
183
+ * Determines if two locations overlap with each other
184
+ */
185
+ export function locationOverlaps(a, b) {
186
+ const startIncluded = a.start.line < b.end.line ||
187
+ (a.start.line === b.end.line && a.start.column <= b.end.column);
188
+ const endIncluded = a.end.line > b.start.line ||
189
+ (a.end.line === b.start.line && a.end.column >= b.start.column);
190
+ return startIncluded && endIncluded;
191
+ }
192
+ /**
193
+ * Helper for `types.cloneNode(node, deep: true, withoutLocations: false);`
194
+ */
195
+ export function deepCloneNode(node) {
196
+ return types.cloneNode(node, /* deep */ true, /* withoutLocations */ false);
197
+ }
198
+ export function placeHeaderIfNeeded(mutantCollector, originFileName, options, root) {
199
+ if (mutantCollector.hasPlacedMutants(originFileName) && !options.noHeader) {
200
+ // Be sure to leave comments like `// @flow` in.
201
+ placeHeader(root);
202
+ }
203
+ }
204
+ export function placeHeader(root) {
205
+ let header = instrumentationBabelHeader;
206
+ if (Array.isArray(root.program.body[0]?.leadingComments)) {
207
+ header = [
208
+ {
209
+ ...instrumentationBabelHeader[0],
210
+ leadingComments: root.program.body[0]?.leadingComments,
211
+ },
212
+ ...instrumentationBabelHeader.slice(1),
213
+ ];
214
+ }
215
+ root.program.body.unshift(...header);
216
+ }
217
+ //# sourceMappingURL=syntax-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-helpers.js","sourceRoot":"","sources":["../../../src/util/syntax-helpers.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@d-es-ign/stryker-js-instrumenter",
3
+ "version": "9.6.0",
4
+ "description": "The code instrumenter used in Stryker, the JavaScript mutation testing framework",
5
+ "main": "dist/src/index.js",
6
+ "type": "module",
7
+ "files": [
8
+ "dist/src",
9
+ "src"
10
+ ],
11
+ "exports": {
12
+ ".": "./dist/src/index.js",
13
+ "./package.json": "./package.json"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/stryker-mutator/stryker-js.git",
18
+ "directory": "packages/instrumenter"
19
+ },
20
+ "engines": {
21
+ "node": ">=20.0.0"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "author": "Nico Jansen <jansennico@gmail.com>",
27
+ "contributors": [
28
+ "Simon de Lang <simondelang@gmail.com>",
29
+ "Nico Jansen <jansennico@gmail.com>"
30
+ ],
31
+ "license": "Apache-2.0",
32
+ "bugs": {
33
+ "url": "https://github.com/stryker-mutator/stryker-js/issues"
34
+ },
35
+ "homepage": "https://stryker-mutator.io",
36
+ "dependencies": {
37
+ "@babel/core": "~7.29.0",
38
+ "@babel/generator": "~7.29.0",
39
+ "@babel/parser": "~7.29.0",
40
+ "@babel/plugin-proposal-decorators": "~7.29.0",
41
+ "@babel/plugin-transform-explicit-resource-management": "^7.28.0",
42
+ "@babel/preset-typescript": "~7.28.0",
43
+ "@d-es-ign/stryker-js-api": "9.6.0",
44
+ "@d-es-ign/stryker-js-util": "9.6.0",
45
+ "angular-html-parser": "~10.4.0",
46
+ "semver": "~7.7.0",
47
+ "tslib": "2.8.1",
48
+ "weapon-regex": "~1.3.2"
49
+ },
50
+ "devDependencies": {
51
+ "@babel/preset-react": "7.28.5",
52
+ "@d-es-ign/stryker-js-test-helpers": "9.6.0",
53
+ "@types/babel__core": "7.20.5",
54
+ "@types/babel__generator": "7.27.0",
55
+ "@types/estree": "1.0.8",
56
+ "@types/semver": "7.7.1",
57
+ "svelte": "5.53.5"
58
+ },
59
+ "scripts": {
60
+ "test": "c8 npm run mocha",
61
+ "mocha": "mocha",
62
+ "stryker": "node ../core/bin/stryker.js run"
63
+ }
64
+ }
@@ -0,0 +1,30 @@
1
+ import {
2
+ BaseContext,
3
+ commonTokens,
4
+ Injector,
5
+ tokens,
6
+ } from '@stryker-mutator/api/plugin';
7
+
8
+ import { instrumenterTokens } from './instrumenter-tokens.js';
9
+ import { createParser } from './parsers/index.js';
10
+ import { print } from './printers/index.js';
11
+ import { transform } from './transformers/index.js';
12
+
13
+ import { Instrumenter } from './index.js';
14
+
15
+ export interface InstrumenterContext extends BaseContext {
16
+ [instrumenterTokens.createParser]: typeof createParser;
17
+ [instrumenterTokens.print]: typeof print;
18
+ [instrumenterTokens.transform]: typeof transform;
19
+ }
20
+
21
+ createInstrumenter.inject = tokens(commonTokens.injector);
22
+ export function createInstrumenter(
23
+ injector: Injector<BaseContext>,
24
+ ): Instrumenter {
25
+ return injector
26
+ .provideValue(instrumenterTokens.print, print)
27
+ .provideValue(instrumenterTokens.createParser, createParser)
28
+ .provideValue(instrumenterTokens.transform, transform)
29
+ .injectClass(Instrumenter);
30
+ }