@mnaoumov/typescript-dev-toolkit 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -1
  3. package/bundlers/esbuild-impl/change-extension-plugin/package.json +6 -0
  4. package/bundlers/esbuild-impl/custom-esbuild-options-plugin/package.json +6 -0
  5. package/bundlers/esbuild-impl/fix-esm-plugin/package.json +6 -0
  6. package/bundlers/esbuild-impl/index/package.json +6 -0
  7. package/bundlers/esbuild-impl/package.json +6 -0
  8. package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
  9. package/bundlers/esbuild-impl/svelte-wrapper-plugin/package.json +6 -0
  10. package/bundlers/index/package.json +6 -0
  11. package/bundlers/package.json +6 -0
  12. package/dist/lib/cjs/build.cjs +191 -0
  13. package/dist/lib/cjs/build.d.cts +59 -0
  14. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +139 -0
  15. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.d.cts +25 -0
  16. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +96 -0
  17. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.cts +14 -0
  18. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +106 -0
  19. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.d.cts +13 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +111 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +6 -0
  22. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +211 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +143 -0
  24. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +129 -0
  25. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +14 -0
  26. package/dist/lib/cjs/bundlers/index.cjs +99 -0
  27. package/dist/lib/cjs/bundlers/index.d.cts +2 -0
  28. package/dist/lib/cjs/check-project-types.cjs +163 -0
  29. package/dist/lib/cjs/check-project-types.d.cts +92 -0
  30. package/dist/lib/cjs/cli-utils.cjs +276 -0
  31. package/dist/lib/cjs/cli-utils.d.cts +123 -0
  32. package/dist/lib/cjs/code-generator.cjs +96 -0
  33. package/dist/lib/cjs/code-generator.d.cts +14 -0
  34. package/dist/lib/cjs/commitlint-config.cjs +110 -0
  35. package/dist/lib/cjs/commitlint-config.d.cts +14 -0
  36. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +110 -0
  37. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +37 -0
  38. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +126 -0
  39. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +40 -0
  40. package/dist/lib/cjs/env-toggle.cjs +133 -0
  41. package/dist/lib/cjs/env-toggle.d.cts +42 -0
  42. package/dist/lib/cjs/exec.cjs +455 -0
  43. package/dist/lib/cjs/exec.d.cts +162 -0
  44. package/dist/lib/cjs/forbidden-patterns.cjs +157 -0
  45. package/dist/lib/cjs/forbidden-patterns.d.cts +57 -0
  46. package/dist/lib/cjs/formatters/dprint.cjs +108 -0
  47. package/dist/lib/cjs/formatters/dprint.d.cts +33 -0
  48. package/dist/lib/cjs/formatters/index.cjs +99 -0
  49. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  50. package/dist/lib/cjs/fs.cjs +123 -0
  51. package/dist/lib/cjs/fs.d.cts +80 -0
  52. package/dist/lib/cjs/gate.cjs +140 -0
  53. package/dist/lib/cjs/gate.d.cts +93 -0
  54. package/dist/lib/cjs/git.cjs +109 -0
  55. package/dist/lib/cjs/git.d.cts +37 -0
  56. package/dist/lib/cjs/index.cjs +186 -0
  57. package/dist/lib/cjs/index.d.cts +35 -0
  58. package/dist/lib/cjs/json.cjs +141 -0
  59. package/dist/lib/cjs/json.d.cts +102 -0
  60. package/dist/lib/cjs/library-build.cjs +475 -0
  61. package/dist/lib/cjs/library-build.d.cts +97 -0
  62. package/dist/lib/cjs/linters/cspell-content.cjs +124 -0
  63. package/dist/lib/cjs/linters/cspell-content.d.cts +46 -0
  64. package/dist/lib/cjs/linters/cspell.cjs +103 -0
  65. package/dist/lib/cjs/linters/cspell.d.cts +36 -0
  66. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +94 -0
  67. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +49 -0
  68. package/dist/lib/cjs/linters/eslint-config.cjs +1068 -0
  69. package/dist/lib/cjs/linters/eslint-config.d.cts +123 -0
  70. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +130 -0
  71. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +27 -0
  72. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +116 -0
  73. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +26 -0
  74. package/dist/lib/cjs/linters/eslint-rules/index.cjs +132 -0
  75. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +13 -0
  76. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +175 -0
  77. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +10 -0
  78. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +290 -0
  79. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.d.cts +10 -0
  80. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +265 -0
  81. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.d.cts +41 -0
  82. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +134 -0
  83. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.d.cts +20 -0
  84. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +217 -0
  85. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.d.cts +36 -0
  86. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +126 -0
  87. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.d.cts +10 -0
  88. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +125 -0
  89. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +20 -0
  90. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +181 -0
  91. package/dist/lib/cjs/linters/eslint-rules/require-method-template.d.cts +14 -0
  92. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +217 -0
  93. package/dist/lib/cjs/linters/eslint-rules/require-super-call.d.cts +10 -0
  94. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +92 -0
  95. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.d.cts +18 -0
  96. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +92 -0
  97. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.d.cts +23 -0
  98. package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +20 -0
  99. package/dist/lib/cjs/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.cts +17 -0
  100. package/dist/lib/cjs/linters/eslint.cjs +122 -0
  101. package/dist/lib/cjs/linters/eslint.d.cts +35 -0
  102. package/dist/lib/cjs/linters/index.cjs +138 -0
  103. package/dist/lib/cjs/linters/index.d.cts +15 -0
  104. package/dist/lib/cjs/linters/lint-ignores.cjs +91 -0
  105. package/dist/lib/cjs/linters/lint-ignores.d.cts +30 -0
  106. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +169 -0
  107. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +11 -0
  108. package/dist/lib/cjs/linters/markdownlint-content.cjs +120 -0
  109. package/dist/lib/cjs/linters/markdownlint-content.d.cts +47 -0
  110. package/dist/lib/cjs/linters/markdownlint-ignores.cjs +95 -0
  111. package/dist/lib/cjs/linters/markdownlint-ignores.d.cts +35 -0
  112. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +99 -0
  113. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  114. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +152 -0
  115. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.d.cts +35 -0
  116. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +1344 -0
  117. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +67 -0
  118. package/dist/lib/cjs/linters/markdownlint.cjs +151 -0
  119. package/dist/lib/cjs/linters/markdownlint.d.cts +32 -0
  120. package/dist/lib/cjs/linters/over-exposure.cjs +685 -0
  121. package/dist/lib/cjs/linters/over-exposure.d.cts +357 -0
  122. package/dist/lib/cjs/nano-staged-config.cjs +148 -0
  123. package/dist/lib/cjs/nano-staged-config.d.cts +54 -0
  124. package/dist/lib/cjs/npm-publish.cjs +93 -0
  125. package/dist/lib/cjs/npm-publish.d.cts +19 -0
  126. package/dist/lib/cjs/npm-run.cjs +120 -0
  127. package/dist/lib/cjs/npm-run.d.cts +34 -0
  128. package/dist/lib/cjs/npm.cjs +200 -0
  129. package/dist/lib/cjs/npm.d.cts +168 -0
  130. package/dist/lib/cjs/package-lock-integrity.cjs +134 -0
  131. package/dist/lib/cjs/package-lock-integrity.d.cts +38 -0
  132. package/dist/lib/cjs/package-manager.cjs +291 -0
  133. package/dist/lib/cjs/package-manager.d.cts +93 -0
  134. package/dist/lib/cjs/released-issues.cjs +178 -0
  135. package/dist/lib/cjs/released-issues.d.cts +79 -0
  136. package/dist/lib/cjs/repo-paths.cjs +167 -0
  137. package/dist/lib/cjs/repo-paths.d.cts +318 -0
  138. package/dist/lib/cjs/root.cjs +150 -0
  139. package/dist/lib/cjs/root.d.cts +107 -0
  140. package/dist/lib/cjs/test-runners/index.cjs +102 -0
  141. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  142. package/dist/lib/cjs/test-runners/vitest-config.cjs +126 -0
  143. package/dist/lib/cjs/test-runners/vitest-config.d.cts +90 -0
  144. package/dist/lib/cjs/test-runners/vitest.cjs +115 -0
  145. package/dist/lib/cjs/test-runners/vitest.d.cts +52 -0
  146. package/dist/lib/cjs/validate-declarations.cjs +120 -0
  147. package/dist/lib/cjs/validate-declarations.d.cts +37 -0
  148. package/dist/lib/cjs/version.cjs +758 -0
  149. package/dist/lib/cjs/version.d.cts +418 -0
  150. package/dist/lib/esm/build.d.mts +59 -0
  151. package/dist/lib/esm/build.mjs +165 -0
  152. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.d.mts +25 -0
  153. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +101 -0
  154. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.d.mts +14 -0
  155. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +59 -0
  156. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.d.mts +13 -0
  157. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +69 -0
  158. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +6 -0
  159. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +60 -0
  160. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +143 -0
  161. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +176 -0
  162. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +14 -0
  163. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +82 -0
  164. package/dist/lib/esm/bundlers/index.d.mts +2 -0
  165. package/dist/lib/esm/bundlers/index.mjs +52 -0
  166. package/dist/lib/esm/check-project-types.d.mts +92 -0
  167. package/dist/lib/esm/check-project-types.mjs +123 -0
  168. package/dist/lib/esm/cli-utils.d.mts +123 -0
  169. package/dist/lib/esm/cli-utils.mjs +225 -0
  170. package/dist/lib/esm/code-generator.d.mts +14 -0
  171. package/dist/lib/esm/code-generator.mjs +59 -0
  172. package/dist/lib/esm/commitlint-config.d.mts +14 -0
  173. package/dist/lib/esm/commitlint-config.mjs +79 -0
  174. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +37 -0
  175. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +75 -0
  176. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +40 -0
  177. package/dist/lib/esm/commitlint-spellcheck-header.mjs +87 -0
  178. package/dist/lib/esm/env-toggle.d.mts +42 -0
  179. package/dist/lib/esm/env-toggle.mjs +84 -0
  180. package/dist/lib/esm/exec.d.mts +162 -0
  181. package/dist/lib/esm/exec.mjs +410 -0
  182. package/dist/lib/esm/forbidden-patterns.d.mts +57 -0
  183. package/dist/lib/esm/forbidden-patterns.mjs +108 -0
  184. package/dist/lib/esm/formatters/dprint.d.mts +33 -0
  185. package/dist/lib/esm/formatters/dprint.mjs +75 -0
  186. package/dist/lib/esm/formatters/index.d.mts +2 -0
  187. package/dist/lib/esm/formatters/index.mjs +52 -0
  188. package/dist/lib/esm/fs.d.mts +80 -0
  189. package/dist/lib/esm/fs.mjs +89 -0
  190. package/dist/lib/esm/gate.d.mts +93 -0
  191. package/dist/lib/esm/gate.mjs +106 -0
  192. package/dist/lib/esm/git.d.mts +37 -0
  193. package/dist/lib/esm/git.mjs +72 -0
  194. package/dist/lib/esm/index.d.mts +35 -0
  195. package/dist/lib/esm/index.mjs +110 -0
  196. package/dist/lib/esm/json.d.mts +102 -0
  197. package/dist/lib/esm/json.mjs +106 -0
  198. package/dist/lib/esm/library-build.d.mts +97 -0
  199. package/dist/lib/esm/library-build.mjs +435 -0
  200. package/dist/lib/esm/linters/cspell-content.d.mts +46 -0
  201. package/dist/lib/esm/linters/cspell-content.mjs +87 -0
  202. package/dist/lib/esm/linters/cspell.d.mts +36 -0
  203. package/dist/lib/esm/linters/cspell.mjs +69 -0
  204. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +49 -0
  205. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +57 -0
  206. package/dist/lib/esm/linters/eslint-config.d.mts +123 -0
  207. package/dist/lib/esm/linters/eslint-config.mjs +1022 -0
  208. package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +27 -0
  209. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +93 -0
  210. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +26 -0
  211. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +77 -0
  212. package/dist/lib/esm/linters/eslint-rules/index.d.mts +13 -0
  213. package/dist/lib/esm/linters/eslint-rules/index.mjs +74 -0
  214. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +10 -0
  215. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +144 -0
  216. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.d.mts +10 -0
  217. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +277 -0
  218. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.d.mts +41 -0
  219. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +227 -0
  220. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.d.mts +20 -0
  221. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +96 -0
  222. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.d.mts +36 -0
  223. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +179 -0
  224. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.d.mts +10 -0
  225. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +88 -0
  226. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +20 -0
  227. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +87 -0
  228. package/dist/lib/esm/linters/eslint-rules/require-method-template.d.mts +14 -0
  229. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +142 -0
  230. package/dist/lib/esm/linters/eslint-rules/require-super-call.d.mts +10 -0
  231. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +183 -0
  232. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.d.mts +18 -0
  233. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +55 -0
  234. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.d.mts +23 -0
  235. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +55 -0
  236. package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +20 -0
  237. package/dist/lib/esm/linters/eslint-types/@types/eslint-plugin-verify-tsdoc.d.mts +17 -0
  238. package/dist/lib/esm/linters/eslint.d.mts +35 -0
  239. package/dist/lib/esm/linters/eslint.mjs +88 -0
  240. package/dist/lib/esm/linters/index.d.mts +15 -0
  241. package/dist/lib/esm/linters/index.mjs +78 -0
  242. package/dist/lib/esm/linters/lint-ignores.d.mts +30 -0
  243. package/dist/lib/esm/linters/lint-ignores.mjs +54 -0
  244. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +11 -0
  245. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +122 -0
  246. package/dist/lib/esm/linters/markdownlint-content.d.mts +47 -0
  247. package/dist/lib/esm/linters/markdownlint-content.mjs +83 -0
  248. package/dist/lib/esm/linters/markdownlint-ignores.d.mts +35 -0
  249. package/dist/lib/esm/linters/markdownlint-ignores.mjs +57 -0
  250. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  251. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +52 -0
  252. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.d.mts +35 -0
  253. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +114 -0
  254. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +1344 -0
  255. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +67 -0
  256. package/dist/lib/esm/linters/markdownlint.d.mts +32 -0
  257. package/dist/lib/esm/linters/markdownlint.mjs +124 -0
  258. package/dist/lib/esm/linters/over-exposure.d.mts +357 -0
  259. package/dist/lib/esm/linters/over-exposure.mjs +672 -0
  260. package/dist/lib/esm/nano-staged-config.d.mts +54 -0
  261. package/dist/lib/esm/nano-staged-config.mjs +103 -0
  262. package/dist/lib/esm/npm-publish.d.mts +19 -0
  263. package/dist/lib/esm/npm-publish.mjs +56 -0
  264. package/dist/lib/esm/npm-run.d.mts +34 -0
  265. package/dist/lib/esm/npm-run.mjs +81 -0
  266. package/dist/lib/esm/npm.d.mts +168 -0
  267. package/dist/lib/esm/npm.mjs +155 -0
  268. package/dist/lib/esm/package-lock-integrity.d.mts +38 -0
  269. package/dist/lib/esm/package-lock-integrity.mjs +99 -0
  270. package/dist/lib/esm/package-manager.d.mts +93 -0
  271. package/dist/lib/esm/package-manager.mjs +245 -0
  272. package/dist/lib/esm/released-issues.d.mts +79 -0
  273. package/dist/lib/esm/released-issues.mjs +143 -0
  274. package/dist/lib/esm/repo-paths.d.mts +318 -0
  275. package/dist/lib/esm/repo-paths.mjs +130 -0
  276. package/dist/lib/esm/root.d.mts +107 -0
  277. package/dist/lib/esm/root.mjs +115 -0
  278. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  279. package/dist/lib/esm/test-runners/index.mjs +54 -0
  280. package/dist/lib/esm/test-runners/vitest-config.d.mts +90 -0
  281. package/dist/lib/esm/test-runners/vitest-config.mjs +86 -0
  282. package/dist/lib/esm/test-runners/vitest.d.mts +52 -0
  283. package/dist/lib/esm/test-runners/vitest.mjs +76 -0
  284. package/dist/lib/esm/validate-declarations.d.mts +37 -0
  285. package/dist/lib/esm/validate-declarations.mjs +87 -0
  286. package/dist/lib/esm/version.d.mts +418 -0
  287. package/dist/lib/esm/version.mjs +723 -0
  288. package/formatters/dprint/package.json +6 -0
  289. package/formatters/index/package.json +6 -0
  290. package/formatters/package.json +6 -0
  291. package/linters/cspell/package.json +6 -0
  292. package/linters/cspell-content/package.json +6 -0
  293. package/linters/eslint/package.json +6 -0
  294. package/linters/eslint-agnostic-core-boundary/package.json +6 -0
  295. package/linters/eslint-config/package.json +6 -0
  296. package/linters/eslint-no-restricted-syntax/package.json +6 -0
  297. package/linters/eslint-rules/in-house-plugin/package.json +6 -0
  298. package/linters/eslint-rules/index/package.json +6 -0
  299. package/linters/eslint-rules/no-async-callback-to-unsafe-return/package.json +6 -0
  300. package/linters/eslint-rules/no-unresolved-jsdoc-link/package.json +6 -0
  301. package/linters/eslint-rules/no-unused-params-members/package.json +6 -0
  302. package/linters/eslint-rules/no-used-underscore-variables/package.json +6 -0
  303. package/linters/eslint-rules/package.json +6 -0
  304. package/linters/eslint-rules/params-options-name-match/package.json +6 -0
  305. package/linters/eslint-rules/prefer-noop-async/package.json +6 -0
  306. package/linters/eslint-rules/readonly-params-options-result-members/package.json +6 -0
  307. package/linters/eslint-rules/require-method-template/package.json +6 -0
  308. package/linters/eslint-rules/require-super-call/package.json +6 -0
  309. package/linters/eslint-rules/rule-tester-helper/package.json +6 -0
  310. package/linters/eslint-rules/ts-estree-node/package.json +6 -0
  311. package/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs/package.json +4 -0
  312. package/linters/eslint-types/@types/eslint-plugin-verify-tsdoc/package.json +4 -0
  313. package/linters/index/package.json +6 -0
  314. package/linters/lint-ignores/package.json +6 -0
  315. package/linters/markdownlint/package.json +6 -0
  316. package/linters/markdownlint-cli2-config/package.json +6 -0
  317. package/linters/markdownlint-content/package.json +6 -0
  318. package/linters/markdownlint-ignores/package.json +6 -0
  319. package/linters/markdownlint-rules/index/package.json +6 -0
  320. package/linters/markdownlint-rules/no-soft-break-in-paragraph/package.json +6 -0
  321. package/linters/markdownlint-rules/package.json +6 -0
  322. package/linters/markdownlint-types/@types/markdownlint-cli2/package.json +4 -0
  323. package/linters/markdownlint-types/@types/markdownlint-cli2-config-schema/package.json +4 -0
  324. package/linters/over-exposure/package.json +6 -0
  325. package/linters/package.json +6 -0
  326. package/package.json +329 -13
  327. package/test-runners/index/package.json +6 -0
  328. package/test-runners/package.json +6 -0
  329. package/test-runners/vitest/package.json +6 -0
  330. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,123 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains utility classes and functions for managing task results, including
6
+ * success, exit codes, and chaining multiple tasks.
7
+ */
8
+ import type { MaybeReturn } from '@mnaoumov/typescript-lib/type';
9
+ import type { Promisable } from 'type-fest';
10
+ /**
11
+ * Abstract class representing the result of a task. Includes methods for handling success,
12
+ * exit codes, and chaining tasks.
13
+ */
14
+ export declare abstract class CliTaskResult {
15
+ /**
16
+ * Chains multiple tasks together, executing them sequentially until one fails.
17
+ *
18
+ * @param tasks - An array of task functions that return a {@link CliTaskResult} or `void`.
19
+ * @returns A {@link Promise} that resolves with the first failed {@link CliTaskResult} or a success result.
20
+ */
21
+ static chain(tasks: (() => Promisable<MaybeReturn<CliTaskResult>>)[]): Promise<CliTaskResult>;
22
+ /**
23
+ * Creates a {@link CliTaskResult} that does not exit the process.
24
+ *
25
+ * @returns A {@link CliTaskResult} that does not exit the process.
26
+ */
27
+ static DoNotExit(): CliTaskResult;
28
+ /**
29
+ * A failure result of a CLI task.
30
+ *
31
+ * @returns The failure result.
32
+ */
33
+ static Failure(): CliTaskResult;
34
+ /**
35
+ * Creates a {@link CliTaskResult} based on an exit code.
36
+ *
37
+ * @param exitCode - The exit code to represent.
38
+ * @returns A {@link CliTaskResult} representing the exit code.
39
+ */
40
+ static FromExitCode(exitCode: number): CliTaskResult;
41
+ /**
42
+ * Creates a CliTaskResult representing a successful task result.
43
+ *
44
+ * @param isSuccess - A boolean indicating whether the task was successful. Default is `true`.
45
+ * @returns A CliTaskResult object representing a successful task result.
46
+ */
47
+ static Success(isSuccess?: boolean): CliTaskResult;
48
+ /**
49
+ * Exits the process based on the task result.
50
+ */
51
+ abstract exit(): void;
52
+ /**
53
+ * Throws an error if the task was not successful.
54
+ */
55
+ throwOnFailure(): void;
56
+ /**
57
+ * Determines if the task was successful.
58
+ *
59
+ * @returns `true` if the task was successful, otherwise `false`.
60
+ */
61
+ protected abstract isSuccessful(): boolean;
62
+ }
63
+ /**
64
+ * Converts an array of command-line arguments into a single command-line string
65
+ * using the `CommandLineToArgvW` convention (the standard used by the
66
+ * Microsoft C runtime and most Windows programs).
67
+ *
68
+ * Implements the ArgvQuote algorithm from
69
+ * {@link https://learn.microsoft.com/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way | Everyone quotes command line arguments the wrong way}:
70
+ * backslashes before quotes and at the end of a quoted argument are doubled.
71
+ *
72
+ * This produces a shell-agnostic command line. Callers that route through
73
+ * a specific shell (cmd.exe, PowerShell, sh) must apply shell-specific
74
+ * escaping on top — see {@link cmdEscapeCommandLine}.
75
+ *
76
+ * @param $arguments - The array of command-line arguments to convert.
77
+ * @returns A string representing the command-line invocation.
78
+ */
79
+ export declare function toCommandLine($arguments: string[]): string;
80
+ /**
81
+ * Converts an array of command-line arguments into a single command-line string
82
+ * quoted for a POSIX shell (`sh`, `bash`, `zsh`, ...).
83
+ *
84
+ * Each argument is wrapped in single quotes unless it consists solely of
85
+ * characters that are safe unquoted, mirroring Python's `shlex.quote`. A literal
86
+ * single quote inside an argument is emitted as the `'\''` idiom (close the
87
+ * quoted span, add an escaped literal quote, reopen), so the shell reproduces the
88
+ * argument verbatim — no variable expansion (`$`), command substitution
89
+ * (`` ` ``), globbing (`*`, `?`, `[`), or word splitting.
90
+ *
91
+ * Use this on platforms where the command is executed through `sh -c`. On
92
+ * Windows, use {@link toCommandLine} plus {@link cmdEscapeCommandLine} instead —
93
+ * the two conventions are not interchangeable.
94
+ *
95
+ * @param $arguments - The array of command-line arguments to convert.
96
+ * @returns A string representing the command-line invocation for a POSIX shell.
97
+ */
98
+ export declare function toPosixCommandLine($arguments: string[]): string;
99
+ /**
100
+ * Escapes `cmd.exe` metacharacters with `^` so that `cmd.exe` passes them
101
+ * through literally. This is necessary because `cmd.exe`'s `"` handling
102
+ * differs from `CommandLineToArgvW` and cannot be relied upon.
103
+ *
104
+ * Apply this to a command line string that will be executed via `cmd.exe`
105
+ * (e.g., `spawn(cmd, [], { shell: true })` on Windows).
106
+ *
107
+ * @param commandLine - The already-quoted command line string.
108
+ * @returns The string with all cmd metacharacters `^`-escaped.
109
+ */
110
+ export declare function cmdEscapeCommandLine(commandLine: string): string;
111
+ /**
112
+ * Wraps a CLI task function to ensure it runs safely and handles its {@link CliTaskResult}.
113
+ *
114
+ * Honors the per-script off switch first: when the npm script currently running has been switched off —
115
+ * `LINT_MD=0 npm run lint:md`, see {@link getDisabledScriptEnvVariableName} — the task is not executed and
116
+ * the process exits successfully. Because every `scripts/*.ts` entry point already funnels through here, no
117
+ * script has to opt in, and each `npm run` sub-step of a composite script (e.g. `build`) carries its own
118
+ * switch.
119
+ *
120
+ * @param taskFunction - The task function to execute, which may return a {@link CliTaskResult} or `void`.
121
+ * @returns A {@link Promise} that resolves when the task is completed and exits with the appropriate status.
122
+ */
123
+ export declare function wrapCliTask(taskFunction: () => Promisable<MaybeReturn<CliTaskResult>>): Promise<void>;
@@ -0,0 +1,225 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ const existingProcess = globalThis.process;
23
+
24
+ if (!existingProcess) {
25
+ globalThis.process = browserProcess;
26
+ return;
27
+ }
28
+
29
+ if (existingProcess.versions?.node) {
30
+ return;
31
+ }
32
+
33
+ const existingProcessRecord = existingProcess;
34
+
35
+ for (const [key, value] of Object.entries(browserProcess)) {
36
+ existingProcessRecord[key] ??= value;
37
+ }
38
+
39
+ existingProcessRecord['browser'] = true;
40
+ }
41
+
42
+ (function initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { enableLibraryDebuggers } from "@mnaoumov/typescript-lib/debug";
49
+ import { printError } from "@mnaoumov/typescript-lib/error";
50
+ import { noop } from "@mnaoumov/typescript-lib/function";
51
+ import { replaceAll } from "@mnaoumov/typescript-lib/string";
52
+ import process from "node:process";
53
+ import { getDisabledScriptEnvVariableName } from "./env-toggle.mjs";
54
+ class CliTaskResult {
55
+ /**
56
+ * Chains multiple tasks together, executing them sequentially until one fails.
57
+ *
58
+ * @param tasks - An array of task functions that return a {@link CliTaskResult} or `void`.
59
+ * @returns A {@link Promise} that resolves with the first failed {@link CliTaskResult} or a success result.
60
+ */
61
+ static async chain(tasks) {
62
+ for (const task of tasks) {
63
+ const result = await wrapResult(task);
64
+ if (!result.isSuccessful()) {
65
+ return result;
66
+ }
67
+ }
68
+ return this.Success();
69
+ }
70
+ /**
71
+ * Creates a {@link CliTaskResult} that does not exit the process.
72
+ *
73
+ * @returns A {@link CliTaskResult} that does not exit the process.
74
+ */
75
+ static DoNotExit() {
76
+ return new DoNotExitTaskResult();
77
+ }
78
+ /**
79
+ * A failure result of a CLI task.
80
+ *
81
+ * @returns The failure result.
82
+ */
83
+ static Failure() {
84
+ return this.Success(false);
85
+ }
86
+ /**
87
+ * Creates a {@link CliTaskResult} based on an exit code.
88
+ *
89
+ * @param exitCode - The exit code to represent.
90
+ * @returns A {@link CliTaskResult} representing the exit code.
91
+ */
92
+ static FromExitCode(exitCode) {
93
+ return new ExitCodeTaskResult(exitCode);
94
+ }
95
+ /**
96
+ * Creates a CliTaskResult representing a successful task result.
97
+ *
98
+ * @param isSuccess - A boolean indicating whether the task was successful. Default is `true`.
99
+ * @returns A CliTaskResult object representing a successful task result.
100
+ */
101
+ static Success(isSuccess = true) {
102
+ return new SuccessTaskResult(isSuccess);
103
+ }
104
+ /**
105
+ * Throws an error if the task was not successful.
106
+ */
107
+ throwOnFailure() {
108
+ if (!this.isSuccessful()) {
109
+ throw new Error("Task failed");
110
+ }
111
+ }
112
+ }
113
+ class DoNotExitTaskResult extends CliTaskResult {
114
+ /**
115
+ * Does not exit the process.
116
+ */
117
+ exit() {
118
+ noop();
119
+ }
120
+ isSuccessful() {
121
+ return true;
122
+ }
123
+ }
124
+ class ExitCodeTaskResult extends CliTaskResult {
125
+ constructor(exitCode) {
126
+ super();
127
+ this.exitCode = exitCode;
128
+ }
129
+ exitCode;
130
+ /**
131
+ * Exits the process with the specified exit code.
132
+ */
133
+ exit() {
134
+ process.exit(this.exitCode);
135
+ }
136
+ isSuccessful() {
137
+ return this.exitCode === 0;
138
+ }
139
+ }
140
+ class SuccessTaskResult extends CliTaskResult {
141
+ constructor(_isSuccessful) {
142
+ super();
143
+ this._isSuccessful = _isSuccessful;
144
+ }
145
+ _isSuccessful;
146
+ /**
147
+ * Exits the process based on the success of the task.
148
+ */
149
+ exit() {
150
+ process.exit(this._isSuccessful ? 0 : 1);
151
+ }
152
+ isSuccessful() {
153
+ return this._isSuccessful;
154
+ }
155
+ }
156
+ function toCommandLine($arguments) {
157
+ return $arguments.map((argument) => argvQuote(argument)).join(" ");
158
+ }
159
+ function toPosixCommandLine($arguments) {
160
+ return $arguments.map((argument) => posixQuote(argument)).join(" ");
161
+ }
162
+ const POSIX_SAFE_ARG_RE = /^[\w@%+=:,./-]+$/;
163
+ const SINGLE_QUOTE_RE = /'/g;
164
+ const POSIX_ESCAPED_SINGLE_QUOTE = String.raw`'\''`;
165
+ function argvQuote(argument) {
166
+ if (argument.length > 0 && !/[\s\t\n\v"]/.test(argument)) {
167
+ return argument;
168
+ }
169
+ const BACKSLASH_ESCAPE_FACTOR = 2;
170
+ let result = '"';
171
+ for (let index = 0; index < argument.length; index++) {
172
+ let numberBackslashes = 0;
173
+ while (index < argument.length && argument[index] === "\\") {
174
+ index++;
175
+ numberBackslashes++;
176
+ }
177
+ if (index === argument.length) {
178
+ result += "\\".repeat(numberBackslashes * BACKSLASH_ESCAPE_FACTOR);
179
+ break;
180
+ }
181
+ const ch = argument.charAt(index);
182
+ result += ch === '"' ? `${"\\".repeat(numberBackslashes * BACKSLASH_ESCAPE_FACTOR + 1)}"` : "\\".repeat(numberBackslashes) + ch;
183
+ }
184
+ result += '"';
185
+ return result;
186
+ }
187
+ function posixQuote(argument) {
188
+ return POSIX_SAFE_ARG_RE.test(argument) ? argument : `'${replaceAll({ $string: argument, replacer: POSIX_ESCAPED_SINGLE_QUOTE, searchValue: SINGLE_QUOTE_RE })}'`;
189
+ }
190
+ const CMD_META_RE = /[()%!^"<>&|]/g;
191
+ function cmdEscapeCommandLine(commandLine) {
192
+ return replaceAll({
193
+ $string: commandLine,
194
+ replacer: "^$&",
195
+ searchValue: CMD_META_RE
196
+ });
197
+ }
198
+ async function wrapCliTask(taskFunction) {
199
+ const disabledScriptEnvVariableName = getDisabledScriptEnvVariableName();
200
+ if (disabledScriptEnvVariableName !== null) {
201
+ process.stdout.write(`Skipped (${disabledScriptEnvVariableName} is off).
202
+ `);
203
+ CliTaskResult.Success().exit();
204
+ return;
205
+ }
206
+ enableLibraryDebuggers();
207
+ const result = await wrapResult(taskFunction);
208
+ result.exit();
209
+ }
210
+ async function wrapResult(taskFunction) {
211
+ try {
212
+ return await taskFunction() ?? CliTaskResult.Success();
213
+ } catch (error) {
214
+ printError(new Error("An error occurred during task execution", { cause: error }));
215
+ return CliTaskResult.Failure();
216
+ }
217
+ }
218
+ export {
219
+ CliTaskResult,
220
+ cmdEscapeCommandLine,
221
+ toCommandLine,
222
+ toPosixCommandLine,
223
+ wrapCliTask
224
+ };
225
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NsaS11dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0YXNrIHJlc3VsdHMsIGluY2x1ZGluZ1xuICogc3VjY2VzcywgZXhpdCBjb2RlcywgYW5kIGNoYWluaW5nIG11bHRpcGxlIHRhc2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBlbmFibGVMaWJyYXJ5RGVidWdnZXJzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IHByaW50RXJyb3IgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZXJyb3InO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBnZXREaXNhYmxlZFNjcmlwdEVudlZhcmlhYmxlTmFtZSB9IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSB0YXNrLiBJbmNsdWRlcyBtZXRob2RzIGZvciBoYW5kbGluZyBzdWNjZXNzLFxuICogZXhpdCBjb2RlcywgYW5kIGNoYWluaW5nIHRhc2tzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpVGFza1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBDaGFpbnMgbXVsdGlwbGUgdGFza3MgdG9nZXRoZXIsIGV4ZWN1dGluZyB0aGVtIHNlcXVlbnRpYWxseSB1bnRpbCBvbmUgZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrcyAtIEFuIGFycmF5IG9mIHRhc2sgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGB2b2lkYC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBmaXJzdCBmYWlsZWQge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGEgc3VjY2VzcyByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNoYWluKHRhc2tzOiAoKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pW10pOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+IHtcbiAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBSZXN1bHQodGFzayk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLlN1Y2Nlc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gdGhhdCBkb2VzIG5vdCBleGl0IHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBEb05vdEV4aXQoKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBEb05vdEV4aXRUYXNrUmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQSBmYWlsdXJlIHJlc3VsdCBvZiBhIENMSSB0YXNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZmFpbHVyZSByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZhaWx1cmUoKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuU3VjY2VzcyhmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBiYXNlZCBvbiBhbiBleGl0IGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBleGl0Q29kZSAtIFRoZSBleGl0IGNvZGUgdG8gcmVwcmVzZW50LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBDbGlUYXNrUmVzdWx0fSByZXByZXNlbnRpbmcgdGhlIGV4aXQgY29kZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRnJvbUV4aXRDb2RlKGV4aXRDb2RlOiBudW1iZXIpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IEV4aXRDb2RlVGFza1Jlc3VsdChleGl0Q29kZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsaVRhc2tSZXN1bHQgcmVwcmVzZW50aW5nIGEgc3VjY2Vzc2Z1bCB0YXNrIHJlc3VsdC5cbiAgICpcbiAgICogQHBhcmFtIGlzU3VjY2VzcyAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRhc2sgd2FzIHN1Y2Nlc3NmdWwuIERlZmF1bHQgaXMgYHRydWVgLlxuICAgKiBAcmV0dXJucyBBIENsaVRhc2tSZXN1bHQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIFN1Y2Nlc3MoaXNTdWNjZXNzID0gdHJ1ZSk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgU3VjY2Vzc1Rhc2tSZXN1bHQoaXNTdWNjZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGl0cyB0aGUgcHJvY2VzcyBiYXNlZCBvbiB0aGUgdGFzayByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZXhpdCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHRhc2sgd2FzIG5vdCBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIHRocm93T25GYWlsdXJlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYXNrIGZhaWxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgd2FzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGlzU3VjY2Vzc2Z1bCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgdGFzayByZXN1bHQgdGhhdCBkb2VzIG5vdCBleGl0IHRoZSBwcm9jZXNzLlxuICovXG5jbGFzcyBEb05vdEV4aXRUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBEb2VzIG5vdCBleGl0IHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGV4aXQoKTogdm9pZCB7XG4gICAgbm9vcCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzU3VjY2Vzc2Z1bCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgdGFzayByZXN1bHQgYmFzZWQgb24gYW4gZXhpdCBjb2RlLlxuICovXG5jbGFzcyBFeGl0Q29kZVRhc2tSZXN1bHQgZXh0ZW5kcyBDbGlUYXNrUmVzdWx0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZXhpdENvZGU6IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGV4aXQgY29kZS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBleGl0KCk6IHZvaWQge1xuICAgIHByb2Nlc3MuZXhpdCh0aGlzLmV4aXRDb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhpdENvZGUgPT09IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRhc2sgcmVzdWx0IGJhc2VkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cbiAqL1xuY2xhc3MgU3VjY2Vzc1Rhc2tSZXN1bHQgZXh0ZW5kcyBDbGlUYXNrUmVzdWx0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2lzU3VjY2Vzc2Z1bDogYm9vbGVhbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb2YgdGhlIHRhc2suXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5faXNTdWNjZXNzZnVsID8gMCA6IDEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzU3VjY2Vzc2Z1bCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdWNjZXNzZnVsO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBzdHJpbmdcbiAqIHVzaW5nIHRoZSBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBjb252ZW50aW9uICh0aGUgc3RhbmRhcmQgdXNlZCBieSB0aGVcbiAqIE1pY3Jvc29mdCBDIHJ1bnRpbWUgYW5kIG1vc3QgV2luZG93cyBwcm9ncmFtcykuXG4gKlxuICogSW1wbGVtZW50cyB0aGUgQXJndlF1b3RlIGFsZ29yaXRobSBmcm9tXG4gKiB7QGxpbmsgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2FyY2hpdmUvYmxvZ3MvdHdpc3R5bGl0dGxlcGFzc2FnZXNhbGxhbGlrZS9ldmVyeW9uZS1xdW90ZXMtY29tbWFuZC1saW5lLWFyZ3VtZW50cy10aGUtd3Jvbmctd2F5IHwgRXZlcnlvbmUgcXVvdGVzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdGhlIHdyb25nIHdheX06XG4gKiBiYWNrc2xhc2hlcyBiZWZvcmUgcXVvdGVzIGFuZCBhdCB0aGUgZW5kIG9mIGEgcXVvdGVkIGFyZ3VtZW50IGFyZSBkb3VibGVkLlxuICpcbiAqIFRoaXMgcHJvZHVjZXMgYSBzaGVsbC1hZ25vc3RpYyBjb21tYW5kIGxpbmUuIENhbGxlcnMgdGhhdCByb3V0ZSB0aHJvdWdoXG4gKiBhIHNwZWNpZmljIHNoZWxsIChjbWQuZXhlLCBQb3dlclNoZWxsLCBzaCkgbXVzdCBhcHBseSBzaGVsbC1zcGVjaWZpY1xuICogZXNjYXBpbmcgb24gdG9wIFx1MjAxNCBzZWUge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfS5cbiAqXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbW1hbmQtbGluZSBpbnZvY2F0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db21tYW5kTGluZSgkYXJndW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiAkYXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGFyZ3ZRdW90ZShhcmd1bWVudCkpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGludG8gYSBzaW5nbGUgY29tbWFuZC1saW5lIHN0cmluZ1xuICogcXVvdGVkIGZvciBhIFBPU0lYIHNoZWxsIChgc2hgLCBgYmFzaGAsIGB6c2hgLCAuLi4pLlxuICpcbiAqIEVhY2ggYXJndW1lbnQgaXMgd3JhcHBlZCBpbiBzaW5nbGUgcXVvdGVzIHVubGVzcyBpdCBjb25zaXN0cyBzb2xlbHkgb2ZcbiAqIGNoYXJhY3RlcnMgdGhhdCBhcmUgc2FmZSB1bnF1b3RlZCwgbWlycm9yaW5nIFB5dGhvbidzIGBzaGxleC5xdW90ZWAuIEEgbGl0ZXJhbFxuICogc2luZ2xlIHF1b3RlIGluc2lkZSBhbiBhcmd1bWVudCBpcyBlbWl0dGVkIGFzIHRoZSBgJ1xcJydgIGlkaW9tIChjbG9zZSB0aGVcbiAqIHF1b3RlZCBzcGFuLCBhZGQgYW4gZXNjYXBlZCBsaXRlcmFsIHF1b3RlLCByZW9wZW4pLCBzbyB0aGUgc2hlbGwgcmVwcm9kdWNlcyB0aGVcbiAqIGFyZ3VtZW50IHZlcmJhdGltIFx1MjAxNCBubyB2YXJpYWJsZSBleHBhbnNpb24gKGAkYCksIGNvbW1hbmQgc3Vic3RpdHV0aW9uXG4gKiAoYGAgYCBgYCksIGdsb2JiaW5nIChgKmAsIGA/YCwgYFtgKSwgb3Igd29yZCBzcGxpdHRpbmcuXG4gKlxuICogVXNlIHRoaXMgb24gcGxhdGZvcm1zIHdoZXJlIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIHRocm91Z2ggYHNoIC1jYC4gT25cbiAqIFdpbmRvd3MsIHVzZSB7QGxpbmsgdG9Db21tYW5kTGluZX0gcGx1cyB7QGxpbmsgY21kRXNjYXBlQ29tbWFuZExpbmV9IGluc3RlYWQgXHUyMDE0XG4gKiB0aGUgdHdvIGNvbnZlbnRpb25zIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICpcbiAqIEBwYXJhbSAkYXJndW1lbnRzIC0gVGhlIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29tbWFuZC1saW5lIGludm9jYXRpb24gZm9yIGEgUE9TSVggc2hlbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bvc2l4Q29tbWFuZExpbmUoJGFyZ3VtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gJGFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBwb3NpeFF1b3RlKGFyZ3VtZW50KSkuam9pbignICcpO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgYW4gYXJndW1lbnQgdGhhdCBpcyBlbnRpcmVseSBjb21wb3NlZCBvZiBjaGFyYWN0ZXJzIHNhZmUgdG8gcGFzcyB0byBhXG4gKiBQT1NJWCBzaGVsbCB1bnF1b3RlZC4gTWlycm9ycyB0aGUgc2FmZSBzZXQgdXNlZCBieSBQeXRob24ncyBgc2hsZXgucXVvdGVgLlxuICovXG5jb25zdCBQT1NJWF9TQUZFX0FSR19SRSA9IC9eW1xcd0AlKz06LC4vLV0rJC87XG5cbi8qKlxuICogTWF0Y2hlcyBhIGxpdGVyYWwgc2luZ2xlIHF1b3RlLCBmb3IgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGAnXFwnJ2AgaWRpb20uXG4gKi9cbmNvbnN0IFNJTkdMRV9RVU9URV9SRSA9IC8nL2c7XG5cbi8qKlxuICogVGhlIHJlcGxhY2VtZW50IGZvciBhIGxpdGVyYWwgc2luZ2xlIHF1b3RlIGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgUE9TSVggc3BhbjpcbiAqIGNsb3NlIHRoZSBzcGFuLCBhZGQgYW4gZXNjYXBlZCBsaXRlcmFsIHF1b3RlLCByZW9wZW4gdGhlIHNwYW4uXG4gKi9cbmNvbnN0IFBPU0lYX0VTQ0FQRURfU0lOR0xFX1FVT1RFID0gU3RyaW5nLnJhd2AnXFwnJ2A7XG5cbi8qKlxuICogUXVvdGVzIGEgc2luZ2xlIGFyZ3VtZW50IHNvIHRoYXQgYENvbW1hbmRMaW5lVG9Bcmd2V2Agd2lsbCBkZWNvZGUgaXRcbiAqIHVuY2hhbmdlZC4gSW1wbGVtZW50cyB0aGUgQXJndlF1b3RlIGFsZ29yaXRobSBmcm9tXG4gKiB7QGxpbmsgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2FyY2hpdmUvYmxvZ3MvdHdpc3R5bGl0dGxlcGFzc2FnZXNhbGxhbGlrZS9ldmVyeW9uZS1xdW90ZXMtY29tbWFuZC1saW5lLWFyZ3VtZW50cy10aGUtd3Jvbmctd2F5IHwgRXZlcnlvbmUgcXVvdGVzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdGhlIHdyb25nIHdheX0uXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IC0gVGhlIHJhdyBhcmd1bWVudCBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcXVvdGVkIGFyZ3VtZW50IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYXJndlF1b3RlKGFyZ3VtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYXJndW1lbnQubGVuZ3RoID4gMCAmJiAhL1tcXHNcXHRcXG5cXHZcIl0vLnRlc3QoYXJndW1lbnQpKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50O1xuICB9XG5cbiAgY29uc3QgQkFDS1NMQVNIX0VTQ0FQRV9GQUNUT1IgPSAyO1xuICBsZXQgcmVzdWx0ID0gJ1wiJztcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxldCBudW1iZXJCYWNrc2xhc2hlcyA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgYXJndW1lbnQubGVuZ3RoICYmIGFyZ3VtZW50W2luZGV4XSA9PT0gJ1xcXFwnKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgbnVtYmVyQmFja3NsYXNoZXMrKztcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IGFyZ3VtZW50Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0ICs9ICdcXFxcJy5yZXBlYXQobnVtYmVyQmFja3NsYXNoZXMgKiBCQUNLU0xBU0hfRVNDQVBFX0ZBQ1RPUik7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBjaCA9IGFyZ3VtZW50LmNoYXJBdChpbmRleCk7XG4gICAgcmVzdWx0ICs9IGNoID09PSAnXCInID8gYCR7J1xcXFwnLnJlcGVhdChudW1iZXJCYWNrc2xhc2hlcyAqIEJBQ0tTTEFTSF9FU0NBUEVfRkFDVE9SICsgMSl9XCJgIDogJ1xcXFwnLnJlcGVhdChudW1iZXJCYWNrc2xhc2hlcykgKyBjaDtcbiAgfVxuXG4gIHJlc3VsdCArPSAnXCInO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFF1b3RlcyBhIHNpbmdsZSBhcmd1bWVudCBmb3IgYSBQT1NJWCBzaGVsbCBzbyBpdCBpcyBwYXNzZWQgdGhyb3VnaCB2ZXJiYXRpbS5cbiAqIEFuIGVtcHR5IGFyZ3VtZW50IGJlY29tZXMgYCcnYDsgYW4gYXJndW1lbnQgb2Ygb25seSBzYWZlIGNoYXJhY3RlcnMgaXNcbiAqIHJldHVybmVkIHVuY2hhbmdlZDsgYW55dGhpbmcgZWxzZSBpcyBzaW5nbGUtcXVvdGVkLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSByYXcgYXJndW1lbnQgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHF1b3RlZCBhcmd1bWVudCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHBvc2l4UXVvdGUoYXJndW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBQT1NJWF9TQUZFX0FSR19SRS50ZXN0KGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogYCcke3JlcGxhY2VBbGwoeyAkc3RyaW5nOiBhcmd1bWVudCwgcmVwbGFjZXI6IFBPU0lYX0VTQ0FQRURfU0lOR0xFX1FVT1RFLCBzZWFyY2hWYWx1ZTogU0lOR0xFX1FVT1RFX1JFIH0pfSdgO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgYGNtZC5leGVgIG1ldGFjaGFyYWN0ZXJzIHRoYXQgbXVzdCBiZSBgXmAtZXNjYXBlZC5cbiAqL1xuY29uc3QgQ01EX01FVEFfUkUgPSAvWygpJSFeXCI8PiZ8XS9nO1xuXG4vKipcbiAqIEVzY2FwZXMgYGNtZC5leGVgIG1ldGFjaGFyYWN0ZXJzIHdpdGggYF5gIHNvIHRoYXQgYGNtZC5leGVgIHBhc3NlcyB0aGVtXG4gKiB0aHJvdWdoIGxpdGVyYWxseS4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgY21kLmV4ZWAncyBgXCJgIGhhbmRsaW5nXG4gKiBkaWZmZXJzIGZyb20gYENvbW1hbmRMaW5lVG9Bcmd2V2AgYW5kIGNhbm5vdCBiZSByZWxpZWQgdXBvbi5cbiAqXG4gKiBBcHBseSB0aGlzIHRvIGEgY29tbWFuZCBsaW5lIHN0cmluZyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgdmlhIGBjbWQuZXhlYFxuICogKGUuZy4sIGBzcGF3bihjbWQsIFtdLCB7IHNoZWxsOiB0cnVlIH0pYCBvbiBXaW5kb3dzKS5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZExpbmUgLSBUaGUgYWxyZWFkeS1xdW90ZWQgY29tbWFuZCBsaW5lIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBhbGwgY21kIG1ldGFjaGFyYWN0ZXJzIGBeYC1lc2NhcGVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgY21kYCBuYW1lcyBXaW5kb3dzIGBjbWQuZXhlYCwgbm90IGFuIGFiYnJldmlhdGlvbiBvZiBgY29tbWFuZGAuXG5leHBvcnQgZnVuY3Rpb24gY21kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZExpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb21tYW5kTGluZSxcbiAgICByZXBsYWNlcjogJ14kJicsXG4gICAgc2VhcmNoVmFsdWU6IENNRF9NRVRBX1JFXG4gIH0pO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgQ0xJIHRhc2sgZnVuY3Rpb24gdG8gZW5zdXJlIGl0IHJ1bnMgc2FmZWx5IGFuZCBoYW5kbGVzIGl0cyB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0uXG4gKlxuICogSG9ub3JzIHRoZSBwZXItc2NyaXB0IG9mZiBzd2l0Y2ggZmlyc3Q6IHdoZW4gdGhlIG5wbSBzY3JpcHQgY3VycmVudGx5IHJ1bm5pbmcgaGFzIGJlZW4gc3dpdGNoZWQgb2ZmIFx1MjAxNFxuICogYExJTlRfTUQ9MCBucG0gcnVuIGxpbnQ6bWRgLCBzZWUge0BsaW5rIGdldERpc2FibGVkU2NyaXB0RW52VmFyaWFibGVOYW1lfSBcdTIwMTQgdGhlIHRhc2sgaXMgbm90IGV4ZWN1dGVkIGFuZFxuICogdGhlIHByb2Nlc3MgZXhpdHMgc3VjY2Vzc2Z1bGx5LiBCZWNhdXNlIGV2ZXJ5IGBzY3JpcHRzLyoudHNgIGVudHJ5IHBvaW50IGFscmVhZHkgZnVubmVscyB0aHJvdWdoIGhlcmUsIG5vXG4gKiBzY3JpcHQgaGFzIHRvIG9wdCBpbiwgYW5kIGVhY2ggYG5wbSBydW5gIHN1Yi1zdGVwIG9mIGEgY29tcG9zaXRlIHNjcmlwdCAoZS5nLiBgYnVpbGRgKSBjYXJyaWVzIGl0cyBvd25cbiAqIHN3aXRjaC5cbiAqXG4gKiBAcGFyYW0gdGFza0Z1bmN0aW9uIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSwgd2hpY2ggbWF5IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkIGFuZCBleGl0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cmFwQ2xpVGFzayh0YXNrRnVuY3Rpb246ICgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRpc2FibGVkU2NyaXB0RW52VmFyaWFibGVOYW1lID0gZ2V0RGlzYWJsZWRTY3JpcHRFbnZWYXJpYWJsZU5hbWUoKTtcbiAgaWYgKGRpc2FibGVkU2NyaXB0RW52VmFyaWFibGVOYW1lICE9PSBudWxsKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFNraXBwZWQgKCR7ZGlzYWJsZWRTY3JpcHRFbnZWYXJpYWJsZU5hbWV9IGlzIG9mZikuXFxuYCk7XG4gICAgQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKCkuZXhpdCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcFJlc3VsdCh0YXNrRnVuY3Rpb24pO1xuICByZXN1bHQuZXhpdCgpO1xufVxuXG4vKipcbiAqIFNhZmVseSBleGVjdXRlcyBhIHRhc2sgZnVuY3Rpb24gYW5kIHJldHVybnMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0uIElmIHRoZSB0YXNrIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvcixcbiAqIEFuIGVycm9yIGlzIGNhdWdodCwgYW5kIGEgZmFpbHVyZSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHRhc2tGdW5jdGlvbiAtIFRoZSB0YXNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gcmVwcmVzZW50aW5nIHRoZSBvdXRjb21lIG9mIHRoZSB0YXNrLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cmFwUmVzdWx0KHRhc2tGdW5jdGlvbjogKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHRhc2tGdW5jdGlvbigpKSBhcyBDbGlUYXNrUmVzdWx0IHwgdW5kZWZpbmVkID8/IENsaVRhc2tSZXN1bHQuU3VjY2VzcygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGFzayBleGVjdXRpb24nLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgcmV0dXJuIENsaVRhc2tSZXN1bHQuRmFpbHVyZSgpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -0,0 +1,14 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains utility functions for code generation.
6
+ */
7
+ /**
8
+ * Generates a file at the specified path with the provided lines of code.
9
+ *
10
+ * @param path - The path where the file will be generated.
11
+ * @param lines - An array of strings representing the lines of code to be written in the file.
12
+ * @returns A {@link Promise} that resolves when the file generation is complete.
13
+ */
14
+ export declare function generate(path: string, lines: string[]): Promise<void>;
@@ -0,0 +1,59 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ const existingProcess = globalThis.process;
23
+
24
+ if (!existingProcess) {
25
+ globalThis.process = browserProcess;
26
+ return;
27
+ }
28
+
29
+ if (existingProcess.versions?.node) {
30
+ return;
31
+ }
32
+
33
+ const existingProcessRecord = existingProcess;
34
+
35
+ for (const [key, value] of Object.entries(browserProcess)) {
36
+ existingProcessRecord[key] ??= value;
37
+ }
38
+
39
+ existingProcessRecord['browser'] = true;
40
+ }
41
+
42
+ (function initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { writeFile } from "node:fs/promises";
49
+ async function generate(path, lines) {
50
+ if (lines.at(-1)) {
51
+ lines.push("");
52
+ }
53
+ lines.unshift("/* THIS IS A GENERATED/BUNDLED FILE BY BUILD SCRIPT */", "");
54
+ await writeFile(path, lines.join("\n"), "utf-8");
55
+ }
56
+ export {
57
+ generate
58
+ };
59
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvZGUtZ2VuZXJhdG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNvZGUgZ2VuZXJhdGlvbi5cbiAqL1xuXG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCB3aXRoIHRoZSBwcm92aWRlZCBsaW5lcyBvZiBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggd2hlcmUgdGhlIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gKiBAcGFyYW0gbGluZXMgLSBBbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgbGluZXMgb2YgY29kZSB0byBiZSB3cml0dGVuIGluIHRoZSBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGdlbmVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZShwYXRoOiBzdHJpbmcsIGxpbmVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobGluZXMuYXQoLTEpKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cbiAgbGluZXMudW5zaGlmdCgnLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovJywgJycpO1xuICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLGlCQUFpQjtBQVMxQixlQUFzQixTQUFTLE1BQWMsT0FBZ0M7QUFDM0UsTUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHO0FBQ2hCLFVBQU0sS0FBSyxFQUFFO0FBQUEsRUFDZjtBQUNBLFFBQU0sUUFBUSwwREFBMEQsRUFBRTtBQUMxRSxRQUFNLFVBQVUsTUFBTSxNQUFNLEtBQUssSUFBSSxHQUFHLE9BQU87QUFDakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,14 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Shared commitlint configuration for Conventional Commits.
6
+ */
7
+ import type { UserConfig } from '@commitlint/types';
8
+ /**
9
+ * Commitlint configuration extending `@commitlint/config-conventional`, plus a rule refusing a message whose
10
+ * header, body or footer matches the unpublished forbidden-patterns list (a no-op when none is configured), and
11
+ * a rule spellchecking the header the way the release spellchecks the changelog bullet it becomes (a no-op in a
12
+ * project with no `spellcheck` script).
13
+ */
14
+ export declare const obsidianDevUtilsConfig: UserConfig;
@@ -0,0 +1,79 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ const existingProcess = globalThis.process;
23
+
24
+ if (!existingProcess) {
25
+ globalThis.process = browserProcess;
26
+ return;
27
+ }
28
+
29
+ if (existingProcess.versions?.node) {
30
+ return;
31
+ }
32
+
33
+ const existingProcessRecord = existingProcess;
34
+
35
+ for (const [key, value] of Object.entries(browserProcess)) {
36
+ existingProcessRecord[key] ??= value;
37
+ }
38
+
39
+ existingProcessRecord['browser'] = true;
40
+ }
41
+
42
+ (function initEsm() {
43
+ ensureDisposeSymbols();
44
+ ensureBrowserProcess();
45
+ })();
46
+ })();
47
+
48
+ import { castTo } from "@mnaoumov/typescript-lib/object-utils";
49
+ import {
50
+ forbiddenPatternsPlugin,
51
+ NO_FORBIDDEN_PATTERNS_RULE_NAME
52
+ } from "./commitlint-forbidden-patterns.mjs";
53
+ import {
54
+ SPELLCHECK_HEADER_RULE_NAME,
55
+ spellcheckHeaderPlugin
56
+ } from "./commitlint-spellcheck-header.mjs";
57
+ const ERROR_SEVERITY_LEVEL = 2;
58
+ const ERROR_SEVERITY = castTo(ERROR_SEVERITY_LEVEL);
59
+ const obsidianDevUtilsConfig = {
60
+ extends: ["@commitlint/config-conventional"],
61
+ // ONE plugin object, never two: `@commitlint/load` stores every inline plugin under the same `local` key, so a
62
+ // second object silently replaces the first and its rule then fails as "Found rules without implementation".
63
+ plugins: [
64
+ {
65
+ rules: {
66
+ ...forbiddenPatternsPlugin.rules,
67
+ ...spellcheckHeaderPlugin.rules
68
+ }
69
+ }
70
+ ],
71
+ rules: {
72
+ [NO_FORBIDDEN_PATTERNS_RULE_NAME]: [ERROR_SEVERITY, "always"],
73
+ [SPELLCHECK_HEADER_RULE_NAME]: [ERROR_SEVERITY, "always"]
74
+ }
75
+ };
76
+ export {
77
+ obsidianDevUtilsConfig
78
+ };
79
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1pdGxpbnQtY29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2hhcmVkIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbiBmb3IgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERlY2xhcmF0aXZlIGNvbW1pdGxpbnQgY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBjb21taXRsaW50LCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlQ29uZmlnU2V2ZXJpdHksXG4gIFVzZXJDb25maWdcbn0gZnJvbSAnQGNvbW1pdGxpbnQvdHlwZXMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcblxuaW1wb3J0IHtcbiAgZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4sXG4gIE5PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVcbn0gZnJvbSAnLi9jb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucy50cyc7XG5pbXBvcnQge1xuICBTUEVMTENIRUNLX0hFQURFUl9SVUxFX05BTUUsXG4gIHNwZWxsY2hlY2tIZWFkZXJQbHVnaW5cbn0gZnJvbSAnLi9jb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyLnRzJztcblxuLypcbiAqIGBSdWxlQ29uZmlnU2V2ZXJpdHkuRXJyb3JgLiBUaGUgZW51bSBsaXZlcyBpbiBhIHBhY2thZ2UgdGhpcyBsaWJyYXJ5IG9ubHkgaGFzIGFzIGEgZGV2RGVwZW5kZW5jeSwgc28gaXRzIHZhbHVlIGNhbm5vdCBiZSBpbXBvcnRlZCBhdCBydW50aW1lLlxuICovXG5jb25zdCBFUlJPUl9TRVZFUklUWV9MRVZFTCA9IDI7XG5jb25zdCBFUlJPUl9TRVZFUklUWSA9IGNhc3RUbzxSdWxlQ29uZmlnU2V2ZXJpdHk+KEVSUk9SX1NFVkVSSVRZX0xFVkVMKTtcblxuLyoqXG4gKiBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZXh0ZW5kaW5nIGBAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsYCwgcGx1cyBhIHJ1bGUgcmVmdXNpbmcgYSBtZXNzYWdlIHdob3NlXG4gKiBoZWFkZXIsIGJvZHkgb3IgZm9vdGVyIG1hdGNoZXMgdGhlIHVucHVibGlzaGVkIGZvcmJpZGRlbi1wYXR0ZXJucyBsaXN0IChhIG5vLW9wIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkKSwgYW5kXG4gKiBhIHJ1bGUgc3BlbGxjaGVja2luZyB0aGUgaGVhZGVyIHRoZSB3YXkgdGhlIHJlbGVhc2Ugc3BlbGxjaGVja3MgdGhlIGNoYW5nZWxvZyBidWxsZXQgaXQgYmVjb21lcyAoYSBuby1vcCBpbiBhXG4gKiBwcm9qZWN0IHdpdGggbm8gYHNwZWxsY2hlY2tgIHNjcmlwdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzQ29uZmlnOiBVc2VyQ29uZmlnID0ge1xuICBleHRlbmRzOiBbJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWwnXSxcbiAgLy8gT05FIHBsdWdpbiBvYmplY3QsIG5ldmVyIHR3bzogYEBjb21taXRsaW50L2xvYWRgIHN0b3JlcyBldmVyeSBpbmxpbmUgcGx1Z2luIHVuZGVyIHRoZSBzYW1lIGBsb2NhbGAga2V5LCBzbyBhXG4gIC8vIHNlY29uZCBvYmplY3Qgc2lsZW50bHkgcmVwbGFjZXMgdGhlIGZpcnN0IGFuZCBpdHMgcnVsZSB0aGVuIGZhaWxzIGFzIFwiRm91bmQgcnVsZXMgd2l0aG91dCBpbXBsZW1lbnRhdGlvblwiLlxuICBwbHVnaW5zOiBbXG4gICAge1xuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLi4uZm9yYmlkZGVuUGF0dGVybnNQbHVnaW4ucnVsZXMsXG4gICAgICAgIC4uLnNwZWxsY2hlY2tIZWFkZXJQbHVnaW4ucnVsZXNcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIHJ1bGVzOiB7XG4gICAgW05PX0ZPUkJJRERFTl9QQVRURVJOU19SVUxFX05BTUVdOiBbRVJST1JfU0VWRVJJVFksICdhbHdheXMnXSxcbiAgICBbU1BFTExDSEVDS19IRUFERVJfUlVMRV9OQU1FXTogW0VSUk9SX1NFVkVSSVRZLCAnYWx3YXlzJ11cbiAgfVxufTtcblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsU0FBUyxjQUFjO0FBRXZCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUCxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLGlCQUFpQixPQUEyQixvQkFBb0I7QUFRL0QsTUFBTSx5QkFBcUM7QUFBQSxFQUNoRCxTQUFTLENBQUMsaUNBQWlDO0FBQUE7QUFBQTtBQUFBLEVBRzNDLFNBQVM7QUFBQSxJQUNQO0FBQUEsTUFDRSxPQUFPO0FBQUEsUUFDTCxHQUFHLHdCQUF3QjtBQUFBLFFBQzNCLEdBQUcsdUJBQXVCO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsQ0FBQywrQkFBK0IsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsSUFDNUQsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLGdCQUFnQixRQUFRO0FBQUEsRUFDMUQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,37 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * A commitlint rule that refuses a commit message matching a pattern from the UNPUBLISHED forbidden-patterns
6
+ * list — in its header, its body or its footer.
7
+ *
8
+ * The release already refuses a changelog section carrying such a pattern, but a changelog section holds commit
9
+ * SUBJECTS only, so a body line was never scanned by anything: it reached the public history the moment the
10
+ * commit was pushed, and a pushed commit with descendants cannot be cleaned without rewriting published history.
11
+ * The commit-msg hook is the one point where a body is checked before it exists anywhere else.
12
+ *
13
+ * The list comes from the same place as the release's: the file named by the `FORBIDDEN_PATTERNS_FILE`
14
+ * environment variable (see `forbidden-patterns.ts`). The rule passes when nothing is configured, so a consumer
15
+ * who has not set it sees no change at all.
16
+ */
17
+ import type { AsyncRule, Plugin, RuleOutcome } from '@commitlint/types';
18
+ /**
19
+ * The name the rule is registered under.
20
+ */
21
+ export declare const NO_FORBIDDEN_PATTERNS_RULE_NAME = "obsidian-dev-utils/no-forbidden-patterns";
22
+ type Commit = Parameters<AsyncRule>[0];
23
+ /**
24
+ * Checks the whole commit message — header, body and footer — against the forbidden patterns.
25
+ *
26
+ * Only the `always` condition is meaningful: `never` would require every line to carry a forbidden pattern, so
27
+ * it is treated the same way rather than inverted.
28
+ *
29
+ * @param commit - The parsed commit.
30
+ * @returns A {@link Promise} that resolves to the rule outcome, naming each offending line and what matched.
31
+ */
32
+ export declare function noForbiddenPatternsRule(commit: Commit): Promise<RuleOutcome>;
33
+ /**
34
+ * The commitlint plugin carrying {@link noForbiddenPatternsRule}.
35
+ */
36
+ export declare const forbiddenPatternsPlugin: Plugin;
37
+ export {};