@hanseltime/template-repo-sync 2.2.1 → 2.4.0-alpha.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 (293) hide show
  1. package/CHANGELOG.md +43 -45
  2. package/dist/cjs/checkout-drivers/git-checkout.js +37 -0
  3. package/dist/cjs/checkout-drivers/git-checkout.spec.js +60 -0
  4. package/dist/cjs/checkout-drivers/index.js +21 -0
  5. package/dist/cjs/checkout-drivers/types.js +11 -0
  6. package/dist/cjs/clone-drivers/git-clone.js +25 -0
  7. package/dist/cjs/clone-drivers/index.js +21 -0
  8. package/dist/cjs/clone-drivers/types.js +8 -0
  9. package/dist/cjs/diff-drivers/git-diff.js +30 -0
  10. package/dist/cjs/diff-drivers/git-diff.spec.js +138 -0
  11. package/dist/cjs/diff-drivers/index.js +21 -0
  12. package/dist/cjs/diff-drivers/types.js +6 -0
  13. package/dist/cjs/formatting/index.js +21 -0
  14. package/dist/cjs/formatting/infer-json-indent.js +26 -0
  15. package/dist/cjs/formatting/infer-json-indent.spec.js +50 -0
  16. package/dist/cjs/formatting/sync-results-to-md.js +62 -0
  17. package/dist/cjs/formatting/sync-results-to-md.spec.js +45 -0
  18. package/dist/cjs/index.js +22 -0
  19. package/dist/cjs/load-plugin.js +44 -0
  20. package/dist/cjs/match.js +51 -0
  21. package/dist/cjs/match.spec.js +75 -0
  22. package/dist/cjs/merge-file.js +91 -0
  23. package/dist/cjs/merge-file.spec.js +508 -0
  24. package/dist/cjs/plugins/index.js +20 -0
  25. package/dist/cjs/plugins/json-merge.js +228 -0
  26. package/dist/cjs/plugins/json-merge.spec.js +514 -0
  27. package/dist/cjs/ref-drivers/git-current-ref.js +18 -0
  28. package/dist/cjs/ref-drivers/git-current-ref.spec.js +15 -0
  29. package/dist/cjs/ref-drivers/index.js +20 -0
  30. package/dist/cjs/ref-drivers/types.js +11 -0
  31. package/dist/cjs/template-sync.js +236 -0
  32. package/dist/cjs/template-sync.spec.js +521 -0
  33. package/dist/cjs/test-utils/index.js +26 -0
  34. package/dist/cjs/types.js +12 -0
  35. package/dist/esm/checkout-drivers/git-checkout.mjs +27 -0
  36. package/dist/esm/checkout-drivers/git-checkout.spec.mjs +56 -0
  37. package/dist/esm/checkout-drivers/index.mjs +4 -0
  38. package/dist/esm/checkout-drivers/types.mjs +8 -0
  39. package/dist/esm/clone-drivers/git-clone.mjs +15 -0
  40. package/dist/esm/clone-drivers/index.mjs +4 -0
  41. package/dist/esm/clone-drivers/types.mjs +8 -0
  42. package/dist/esm/diff-drivers/git-diff.mjs +26 -0
  43. package/dist/esm/diff-drivers/git-diff.spec.mjs +93 -0
  44. package/dist/esm/diff-drivers/index.mjs +4 -0
  45. package/dist/esm/diff-drivers/types.mjs +6 -0
  46. package/dist/esm/formatting/index.mjs +4 -0
  47. package/dist/esm/formatting/infer-json-indent.mjs +16 -0
  48. package/dist/esm/formatting/infer-json-indent.spec.mjs +46 -0
  49. package/dist/esm/formatting/sync-results-to-md.mjs +52 -0
  50. package/dist/esm/formatting/sync-results-to-md.spec.mjs +41 -0
  51. package/dist/esm/index.mjs +5 -0
  52. package/dist/esm/load-plugin.mjs +40 -0
  53. package/dist/esm/match.mjs +40 -0
  54. package/dist/esm/match.spec.mjs +71 -0
  55. package/dist/esm/merge-file.mjs +88 -0
  56. package/dist/esm/merge-file.spec.mjs +504 -0
  57. package/dist/esm/plugins/index.mjs +10 -0
  58. package/dist/esm/plugins/json-merge.mjs +164 -0
  59. package/dist/esm/plugins/json-merge.spec.mjs +469 -0
  60. package/dist/esm/ref-drivers/git-current-ref.mjs +8 -0
  61. package/dist/esm/ref-drivers/git-current-ref.spec.mjs +11 -0
  62. package/dist/esm/ref-drivers/index.mjs +3 -0
  63. package/dist/esm/ref-drivers/types.mjs +8 -0
  64. package/dist/esm/template-sync.mjs +174 -0
  65. package/dist/esm/template-sync.spec.mjs +517 -0
  66. package/dist/esm/test-utils/index.mjs +10 -0
  67. package/dist/esm/types.mjs +9 -0
  68. package/{lib/cjs → dist/types}/checkout-drivers/git-checkout.d.ts +1 -0
  69. package/dist/types/checkout-drivers/git-checkout.d.ts.map +1 -0
  70. package/dist/types/checkout-drivers/git-checkout.spec.d.ts +2 -0
  71. package/dist/types/checkout-drivers/git-checkout.spec.d.ts.map +1 -0
  72. package/{lib/cjs → dist/types}/checkout-drivers/index.d.ts +1 -0
  73. package/dist/types/checkout-drivers/index.d.ts.map +1 -0
  74. package/{lib/cjs → dist/types}/checkout-drivers/types.d.ts +1 -0
  75. package/dist/types/checkout-drivers/types.d.ts.map +1 -0
  76. package/{lib/cjs → dist/types}/clone-drivers/git-clone.d.ts +2 -1
  77. package/dist/types/clone-drivers/git-clone.d.ts.map +1 -0
  78. package/{lib/cjs → dist/types}/clone-drivers/index.d.ts +2 -1
  79. package/dist/types/clone-drivers/index.d.ts.map +1 -0
  80. package/{lib/cjs → dist/types}/clone-drivers/types.d.ts +1 -0
  81. package/dist/types/clone-drivers/types.d.ts.map +1 -0
  82. package/{lib/cjs → dist/types}/diff-drivers/git-diff.d.ts +1 -0
  83. package/dist/types/diff-drivers/git-diff.d.ts.map +1 -0
  84. package/dist/types/diff-drivers/git-diff.spec.d.ts +2 -0
  85. package/dist/types/diff-drivers/git-diff.spec.d.ts.map +1 -0
  86. package/{lib/cjs → dist/types}/diff-drivers/index.d.ts +2 -1
  87. package/dist/types/diff-drivers/index.d.ts.map +1 -0
  88. package/{lib/cjs → dist/types}/diff-drivers/types.d.ts +1 -0
  89. package/dist/types/diff-drivers/types.d.ts.map +1 -0
  90. package/{lib/cjs → dist/types}/formatting/index.d.ts +2 -1
  91. package/dist/types/formatting/index.d.ts.map +1 -0
  92. package/{lib/cjs → dist/types}/formatting/infer-json-indent.d.ts +1 -0
  93. package/dist/types/formatting/infer-json-indent.d.ts.map +1 -0
  94. package/dist/types/formatting/infer-json-indent.spec.d.ts +2 -0
  95. package/dist/types/formatting/infer-json-indent.spec.d.ts.map +1 -0
  96. package/dist/types/formatting/sync-results-to-md.d.ts +3 -0
  97. package/dist/types/formatting/sync-results-to-md.d.ts.map +1 -0
  98. package/dist/types/formatting/sync-results-to-md.spec.d.ts +2 -0
  99. package/dist/types/formatting/sync-results-to-md.spec.d.ts.map +1 -0
  100. package/{lib/cjs → dist/types}/index.d.ts +3 -2
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/{lib/cjs → dist/types}/load-plugin.d.ts +2 -1
  103. package/dist/types/load-plugin.d.ts.map +1 -0
  104. package/{lib/cjs → dist/types}/match.d.ts +1 -0
  105. package/dist/types/match.d.ts.map +1 -0
  106. package/dist/types/match.spec.d.ts +2 -0
  107. package/dist/types/match.spec.d.ts.map +1 -0
  108. package/{lib/cjs → dist/types}/merge-file.d.ts +3 -2
  109. package/dist/types/merge-file.d.ts.map +1 -0
  110. package/dist/types/merge-file.spec.d.ts +2 -0
  111. package/dist/types/merge-file.spec.d.ts.map +1 -0
  112. package/{lib/cjs → dist/types}/plugins/index.d.ts +2 -1
  113. package/dist/types/plugins/index.d.ts.map +1 -0
  114. package/{lib/cjs → dist/types}/plugins/json-merge.d.ts +2 -1
  115. package/dist/types/plugins/json-merge.d.ts.map +1 -0
  116. package/dist/types/plugins/json-merge.spec.d.ts +2 -0
  117. package/dist/types/plugins/json-merge.spec.d.ts.map +1 -0
  118. package/{lib/cjs → dist/types}/ref-drivers/git-current-ref.d.ts +1 -0
  119. package/dist/types/ref-drivers/git-current-ref.d.ts.map +1 -0
  120. package/dist/types/ref-drivers/git-current-ref.spec.d.ts +2 -0
  121. package/dist/types/ref-drivers/git-current-ref.spec.d.ts.map +1 -0
  122. package/{lib/cjs → dist/types}/ref-drivers/index.d.ts +1 -0
  123. package/dist/types/ref-drivers/index.d.ts.map +1 -0
  124. package/{lib/cjs → dist/types}/ref-drivers/types.d.ts +1 -0
  125. package/dist/types/ref-drivers/types.d.ts.map +1 -0
  126. package/{lib/cjs → dist/types}/template-sync.d.ts +6 -5
  127. package/dist/types/template-sync.d.ts.map +1 -0
  128. package/dist/types/template-sync.spec.d.ts +2 -0
  129. package/dist/types/template-sync.spec.d.ts.map +1 -0
  130. package/{lib/cjs → dist/types}/test-utils/index.d.ts +1 -0
  131. package/dist/types/test-utils/index.d.ts.map +1 -0
  132. package/{lib/cjs → dist/types}/types.d.ts +1 -0
  133. package/dist/types/types.d.ts.map +1 -0
  134. package/package.json +26 -23
  135. package/.eslintrc.js +0 -10
  136. package/.github/CODEOWNERS +0 -6
  137. package/.github/workflows/pr-checks.yaml +0 -12
  138. package/.github/workflows/release.yaml +0 -47
  139. package/.github/workflows/test-flow.yaml +0 -63
  140. package/.husky/commit-msg +0 -4
  141. package/.prettierignore +0 -1
  142. package/.prettierrc +0 -1
  143. package/action.yml +0 -13
  144. package/commitlint.config.js +0 -3
  145. package/docs/merge-plugins/CURRENT_PLUGINS.md +0 -168
  146. package/docs/merge-plugins/PLUGIN_DEVELOPMENT.md +0 -122
  147. package/docs/merge-plugins/README.md +0 -75
  148. package/jest.config.js +0 -19
  149. package/lib/cjs/checkout-drivers/git-checkout.js +0 -29
  150. package/lib/cjs/checkout-drivers/index.js +0 -18
  151. package/lib/cjs/checkout-drivers/types.js +0 -2
  152. package/lib/cjs/clone-drivers/git-clone.js +0 -17
  153. package/lib/cjs/clone-drivers/index.js +0 -18
  154. package/lib/cjs/clone-drivers/types.js +0 -2
  155. package/lib/cjs/diff-drivers/git-diff.js +0 -41
  156. package/lib/cjs/diff-drivers/index.js +0 -18
  157. package/lib/cjs/diff-drivers/types.js +0 -2
  158. package/lib/cjs/formatting/index.js +0 -18
  159. package/lib/cjs/formatting/infer-json-indent.js +0 -18
  160. package/lib/cjs/formatting/sync-results-to-md.d.ts +0 -2
  161. package/lib/cjs/formatting/sync-results-to-md.js +0 -57
  162. package/lib/cjs/index.js +0 -19
  163. package/lib/cjs/load-plugin.js +0 -69
  164. package/lib/cjs/match.js +0 -45
  165. package/lib/cjs/merge-file.js +0 -98
  166. package/lib/cjs/plugins/index.js +0 -11
  167. package/lib/cjs/plugins/json-merge.js +0 -208
  168. package/lib/cjs/ref-drivers/git-current-ref.js +0 -12
  169. package/lib/cjs/ref-drivers/index.js +0 -17
  170. package/lib/cjs/ref-drivers/types.js +0 -2
  171. package/lib/cjs/template-sync.js +0 -163
  172. package/lib/cjs/test-utils/index.js +0 -10
  173. package/lib/cjs/types.js +0 -2
  174. package/lib/esm/checkout-drivers/git-checkout.js +0 -29
  175. package/lib/esm/checkout-drivers/index.js +0 -18
  176. package/lib/esm/checkout-drivers/types.js +0 -2
  177. package/lib/esm/clone-drivers/git-clone.js +0 -17
  178. package/lib/esm/clone-drivers/index.js +0 -18
  179. package/lib/esm/clone-drivers/types.js +0 -2
  180. package/lib/esm/diff-drivers/git-diff.js +0 -41
  181. package/lib/esm/diff-drivers/index.js +0 -18
  182. package/lib/esm/diff-drivers/types.js +0 -2
  183. package/lib/esm/formatting/index.js +0 -18
  184. package/lib/esm/formatting/infer-json-indent.js +0 -18
  185. package/lib/esm/formatting/sync-results-to-md.js +0 -57
  186. package/lib/esm/index.js +0 -19
  187. package/lib/esm/load-plugin.js +0 -46
  188. package/lib/esm/match.js +0 -45
  189. package/lib/esm/merge-file.js +0 -98
  190. package/lib/esm/plugins/index.js +0 -11
  191. package/lib/esm/plugins/json-merge.js +0 -208
  192. package/lib/esm/ref-drivers/git-current-ref.js +0 -12
  193. package/lib/esm/ref-drivers/index.js +0 -17
  194. package/lib/esm/ref-drivers/types.js +0 -2
  195. package/lib/esm/template-sync.js +0 -163
  196. package/lib/esm/test-utils/index.js +0 -10
  197. package/lib/esm/types.js +0 -2
  198. package/release.config.js +0 -40
  199. package/src/checkout-drivers/git-checkout.spec.ts +0 -69
  200. package/src/checkout-drivers/git-checkout.ts +0 -38
  201. package/src/checkout-drivers/index.ts +0 -2
  202. package/src/checkout-drivers/types.ts +0 -14
  203. package/src/clone-drivers/git-clone.ts +0 -20
  204. package/src/clone-drivers/index.ts +0 -2
  205. package/src/clone-drivers/types.ts +0 -20
  206. package/src/diff-drivers/git-diff.spec.ts +0 -73
  207. package/src/diff-drivers/git-diff.ts +0 -39
  208. package/src/diff-drivers/index.ts +0 -2
  209. package/src/diff-drivers/types.ts +0 -14
  210. package/src/formatting/__snapshots__/sync-results-to-md.spec.ts.snap +0 -39
  211. package/src/formatting/index.ts +0 -2
  212. package/src/formatting/infer-json-indent.spec.ts +0 -49
  213. package/src/formatting/infer-json-indent.ts +0 -16
  214. package/src/formatting/sync-results-to-md.spec.ts +0 -31
  215. package/src/formatting/sync-results-to-md.ts +0 -63
  216. package/src/index.ts +0 -3
  217. package/src/load-plugin.ts +0 -51
  218. package/src/match.spec.ts +0 -68
  219. package/src/match.ts +0 -52
  220. package/src/merge-file.spec.ts +0 -506
  221. package/src/merge-file.ts +0 -154
  222. package/src/plugins/index.ts +0 -12
  223. package/src/plugins/json-merge.spec.ts +0 -436
  224. package/src/plugins/json-merge.ts +0 -215
  225. package/src/ref-drivers/git-current-ref.spec.ts +0 -12
  226. package/src/ref-drivers/git-current-ref.ts +0 -9
  227. package/src/ref-drivers/index.ts +0 -1
  228. package/src/ref-drivers/types.ts +0 -10
  229. package/src/template-sync.spec.ts +0 -509
  230. package/src/template-sync.ts +0 -256
  231. package/src/test-utils/index.ts +0 -13
  232. package/src/types.ts +0 -129
  233. package/templatesync.local.json +0 -15
  234. package/test-fixtures/downstream/README.md +0 -3
  235. package/test-fixtures/downstream/package.json +0 -18
  236. package/test-fixtures/downstream/plugins/custom-plugin.js +0 -11
  237. package/test-fixtures/downstream/src/index.js +0 -2
  238. package/test-fixtures/downstream/src/index.ts +0 -1
  239. package/test-fixtures/downstream/src/templated.js +0 -2
  240. package/test-fixtures/downstream/src/templated.ts +0 -1
  241. package/test-fixtures/downstream/templatesync.json +0 -16
  242. package/test-fixtures/downstream/templatesync.local.json +0 -10
  243. package/test-fixtures/dummy-plugin.js +0 -8
  244. package/test-fixtures/glob-test/folder1/something.js +0 -1
  245. package/test-fixtures/glob-test/folder1/something.ts +0 -0
  246. package/test-fixtures/glob-test/toplevel.js +0 -0
  247. package/test-fixtures/glob-test/toplevel.txt +0 -0
  248. package/test-fixtures/template/custom-bin/something.txt +0 -1
  249. package/test-fixtures/template/package.json +0 -17
  250. package/test-fixtures/template/src/index.js +0 -2
  251. package/test-fixtures/template/src/index.ts +0 -1
  252. package/test-fixtures/template/src/templated.js +0 -2
  253. package/test-fixtures/template/src/templated.ts +0 -1
  254. package/test-fixtures/template/templatesync.json +0 -16
  255. package/test-fixtures/testGitRepo/README.md +0 -17
  256. package/test-fixtures/testGitRepo/gitDir/COMMIT_EDITMSG +0 -14
  257. package/test-fixtures/testGitRepo/gitDir/HEAD +0 -1
  258. package/test-fixtures/testGitRepo/gitDir/config +0 -7
  259. package/test-fixtures/testGitRepo/gitDir/description +0 -1
  260. package/test-fixtures/testGitRepo/gitDir/hooks/applypatch-msg.sample +0 -15
  261. package/test-fixtures/testGitRepo/gitDir/hooks/commit-msg.sample +0 -24
  262. package/test-fixtures/testGitRepo/gitDir/hooks/fsmonitor-watchman.sample +0 -174
  263. package/test-fixtures/testGitRepo/gitDir/hooks/post-update.sample +0 -8
  264. package/test-fixtures/testGitRepo/gitDir/hooks/pre-applypatch.sample +0 -14
  265. package/test-fixtures/testGitRepo/gitDir/hooks/pre-commit.sample +0 -49
  266. package/test-fixtures/testGitRepo/gitDir/hooks/pre-merge-commit.sample +0 -13
  267. package/test-fixtures/testGitRepo/gitDir/hooks/pre-push.sample +0 -53
  268. package/test-fixtures/testGitRepo/gitDir/hooks/pre-rebase.sample +0 -169
  269. package/test-fixtures/testGitRepo/gitDir/hooks/pre-receive.sample +0 -24
  270. package/test-fixtures/testGitRepo/gitDir/hooks/prepare-commit-msg.sample +0 -42
  271. package/test-fixtures/testGitRepo/gitDir/hooks/push-to-checkout.sample +0 -78
  272. package/test-fixtures/testGitRepo/gitDir/hooks/sendemail-validate.sample +0 -77
  273. package/test-fixtures/testGitRepo/gitDir/hooks/update.sample +0 -128
  274. package/test-fixtures/testGitRepo/gitDir/index +0 -0
  275. package/test-fixtures/testGitRepo/gitDir/info/exclude +0 -6
  276. package/test-fixtures/testGitRepo/gitDir/logs/HEAD +0 -5
  277. package/test-fixtures/testGitRepo/gitDir/logs/refs/heads/master +0 -2
  278. package/test-fixtures/testGitRepo/gitDir/logs/refs/heads/test-branch +0 -2
  279. package/test-fixtures/testGitRepo/gitDir/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  280. package/test-fixtures/testGitRepo/gitDir/objects/6e/187bee8d02f39d0a1be8331dd8fe6a00c9b613 +0 -0
  281. package/test-fixtures/testGitRepo/gitDir/objects/73/185f1f3f5a6345e087d9f46dc4af77cc59449f +0 -2
  282. package/test-fixtures/testGitRepo/gitDir/objects/90/e7ea1089f939840e9649fd617584c1ad117159 +0 -3
  283. package/test-fixtures/testGitRepo/gitDir/objects/ba/99a452b9097047e9bfa8d5a08b3e452fcb364a +0 -0
  284. package/test-fixtures/testGitRepo/gitDir/objects/c5/8d400177cd5180b8566f82a127fafc5bf394b7 +0 -0
  285. package/test-fixtures/testGitRepo/gitDir/objects/e2/e668265db019249a7e8296d85f79000e3d71cf +0 -0
  286. package/test-fixtures/testGitRepo/gitDir/objects/e4/243e430c1ab69f3e344249f5b1859e90abc883 +0 -1
  287. package/test-fixtures/testGitRepo/gitDir/objects/ec/6c1cb72312605282ac61858cf1eaf1ea9f1d02 +0 -0
  288. package/test-fixtures/testGitRepo/gitDir/objects/fc/89cecc4ac0b5b075bd7d0ce9e09b2f50598b82 +0 -0
  289. package/test-fixtures/testGitRepo/gitDir/refs/heads/master +0 -1
  290. package/test-fixtures/testGitRepo/gitDir/refs/heads/test-branch +0 -1
  291. package/tsconfig.cjs.json +0 -12
  292. package/tsconfig.esm.json +0 -10
  293. package/tsconfig.json +0 -22
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "inferJSONIndent", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return inferJSONIndent;
9
+ }
10
+ });
11
+ const spacingRegex = /[{[]\n?(?<spacing>\s+)["tf\d]/;
12
+ function inferJSONIndent(rawJSON) {
13
+ const match = spacingRegex.exec(rawJSON);
14
+ if (!match?.groups?.spacing) {
15
+ // eslint-disable-next-line no-console
16
+ console.warn(`Could not find json indentation for json string: ${rawJSON.slice(40)} ... \nDefaulting to 4 spaces`);
17
+ // Four spaces
18
+ return " ";
19
+ }
20
+ const spacing = match.groups.spacing;
21
+ // Handle the case where there were multiple newlines before a value
22
+ const lastNewLine = spacing.lastIndexOf("\n");
23
+ return match?.groups.spacing.slice(lastNewLine >= 0 ? lastNewLine + 1 : 0);
24
+ }
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0aW5nL2luZmVyLWpzb24taW5kZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNwYWNpbmdSZWdleCA9IC9be1tdXFxuPyg/PHNwYWNpbmc+XFxzKylbXCJ0ZlxcZF0vO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmVySlNPTkluZGVudChyYXdKU09OOiBzdHJpbmcpIHtcblx0Y29uc3QgbWF0Y2ggPSBzcGFjaW5nUmVnZXguZXhlYyhyYXdKU09OKTtcblx0aWYgKCFtYXRjaD8uZ3JvdXBzPy5zcGFjaW5nKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRgQ291bGQgbm90IGZpbmQganNvbiBpbmRlbnRhdGlvbiBmb3IganNvbiBzdHJpbmc6ICR7cmF3SlNPTi5zbGljZSg0MCl9IC4uLiBcXG5EZWZhdWx0aW5nIHRvIDQgc3BhY2VzYCxcblx0XHQpO1xuXHRcdC8vIEZvdXIgc3BhY2VzXG5cdFx0cmV0dXJuIFwiICAgIFwiO1xuXHR9XG5cdGNvbnN0IHNwYWNpbmcgPSBtYXRjaC5ncm91cHMuc3BhY2luZztcblx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIHdlcmUgbXVsdGlwbGUgbmV3bGluZXMgYmVmb3JlIGEgdmFsdWVcblx0Y29uc3QgbGFzdE5ld0xpbmUgPSBzcGFjaW5nLmxhc3RJbmRleE9mKFwiXFxuXCIpO1xuXHRyZXR1cm4gbWF0Y2g/Lmdyb3Vwcy5zcGFjaW5nLnNsaWNlKGxhc3ROZXdMaW5lID49IDAgPyBsYXN0TmV3TGluZSArIDEgOiAwKTtcbn1cbiJdLCJuYW1lcyI6WyJpbmZlckpTT05JbmRlbnQiLCJzcGFjaW5nUmVnZXgiLCJyYXdKU09OIiwibWF0Y2giLCJleGVjIiwiZ3JvdXBzIiwic3BhY2luZyIsImNvbnNvbGUiLCJ3YXJuIiwic2xpY2UiLCJsYXN0TmV3TGluZSIsImxhc3RJbmRleE9mIl0sIm1hcHBpbmdzIjoiOzs7OytCQUNnQkE7OztlQUFBQTs7O0FBRGhCLE1BQU1DLGVBQWU7QUFDZCxTQUFTRCxnQkFBZ0JFLE9BQWU7SUFDOUMsTUFBTUMsUUFBUUYsYUFBYUcsSUFBSSxDQUFDRjtJQUNoQyxJQUFJLENBQUNDLE9BQU9FLFFBQVFDLFNBQVM7UUFDNUIsc0NBQXNDO1FBQ3RDQyxRQUFRQyxJQUFJLENBQ1gsQ0FBQyxpREFBaUQsRUFBRU4sUUFBUU8sS0FBSyxDQUFDLElBQUksNkJBQTZCLENBQUM7UUFFckcsY0FBYztRQUNkLE9BQU87SUFDUjtJQUNBLE1BQU1ILFVBQVVILE1BQU1FLE1BQU0sQ0FBQ0MsT0FBTztJQUNwQyxvRUFBb0U7SUFDcEUsTUFBTUksY0FBY0osUUFBUUssV0FBVyxDQUFDO0lBQ3hDLE9BQU9SLE9BQU9FLE9BQU9DLFFBQVFHLE1BQU1DLGVBQWUsSUFBSUEsY0FBYyxJQUFJO0FBQ3pFIn0=
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _inferjsonindent = require("./infer-json-indent");
6
+ const withNewLine = `{
7
+
8
+ "whoa": true,
9
+ "thing": here,
10
+ "something": {
11
+ "nested": false
12
+ }
13
+ }`;
14
+ const fourSpaces = `{
15
+ "whoa": true,
16
+ "thing": here,
17
+ "something": {
18
+ "nested": false
19
+ }
20
+ }`;
21
+ const tabSpaces = `{
22
+ "whoa": true,
23
+ "thing": here,
24
+ "something": {
25
+ "nested": false
26
+ }
27
+ }`;
28
+ const twoSpaces = `{
29
+ "whoa": true,
30
+ "thing": here,
31
+ "something": {
32
+ "nested": false
33
+ }
34
+ }`;
35
+ describe("inferJSONIndent", ()=>{
36
+ it("returns spaces when the first indent is spaces with a new line", ()=>{
37
+ expect((0, _inferjsonindent.inferJSONIndent)(withNewLine)).toBe(" ");
38
+ });
39
+ it("returns spaces when the first indent is spaces", ()=>{
40
+ expect((0, _inferjsonindent.inferJSONIndent)(fourSpaces)).toBe(" ");
41
+ });
42
+ it("returns spaces when the first indent is spaces", ()=>{
43
+ expect((0, _inferjsonindent.inferJSONIndent)(twoSpaces)).toBe(" ");
44
+ });
45
+ it("returns tabs when the first indent is a tab", ()=>{
46
+ expect((0, _inferjsonindent.inferJSONIndent)(tabSpaces)).toBe("\t");
47
+ });
48
+ });
49
+
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0aW5nL2luZmVyLWpzb24taW5kZW50LnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5mZXJKU09OSW5kZW50IH0gZnJvbSBcIi4vaW5mZXItanNvbi1pbmRlbnRcIjtcblxuY29uc3Qgd2l0aE5ld0xpbmUgPSBge1xuXG4gICAgXCJ3aG9hXCI6IHRydWUsXG4gICAgXCJ0aGluZ1wiOiBoZXJlLFxuICAgIFwic29tZXRoaW5nXCI6IHtcbiAgICAgICAgXCJuZXN0ZWRcIjogZmFsc2VcbiAgICB9XG59YDtcblxuY29uc3QgZm91clNwYWNlcyA9IGB7XG4gICAgXCJ3aG9hXCI6IHRydWUsXG4gICAgXCJ0aGluZ1wiOiBoZXJlLFxuICAgIFwic29tZXRoaW5nXCI6IHtcbiAgICAgICAgXCJuZXN0ZWRcIjogZmFsc2VcbiAgICB9XG59YDtcblxuY29uc3QgdGFiU3BhY2VzID0gYHtcblx0XCJ3aG9hXCI6IHRydWUsXG5cdFwidGhpbmdcIjogaGVyZSxcblx0XCJzb21ldGhpbmdcIjoge1xuXHRcdFwibmVzdGVkXCI6IGZhbHNlXG5cdH1cbn1gO1xuXG5jb25zdCB0d29TcGFjZXMgPSBge1xuICBcIndob2FcIjogdHJ1ZSxcbiAgXCJ0aGluZ1wiOiBoZXJlLFxuICBcInNvbWV0aGluZ1wiOiB7XG4gICAgXCJuZXN0ZWRcIjogZmFsc2VcbiAgfVxufWA7XG5cbmRlc2NyaWJlKFwiaW5mZXJKU09OSW5kZW50XCIsICgpID0+IHtcblx0aXQoXCJyZXR1cm5zIHNwYWNlcyB3aGVuIHRoZSBmaXJzdCBpbmRlbnQgaXMgc3BhY2VzIHdpdGggYSBuZXcgbGluZVwiLCAoKSA9PiB7XG5cdFx0ZXhwZWN0KGluZmVySlNPTkluZGVudCh3aXRoTmV3TGluZSkpLnRvQmUoXCIgICAgXCIpO1xuXHR9KTtcblx0aXQoXCJyZXR1cm5zIHNwYWNlcyB3aGVuIHRoZSBmaXJzdCBpbmRlbnQgaXMgc3BhY2VzXCIsICgpID0+IHtcblx0XHRleHBlY3QoaW5mZXJKU09OSW5kZW50KGZvdXJTcGFjZXMpKS50b0JlKFwiICAgIFwiKTtcblx0fSk7XG5cdGl0KFwicmV0dXJucyBzcGFjZXMgd2hlbiB0aGUgZmlyc3QgaW5kZW50IGlzIHNwYWNlc1wiLCAoKSA9PiB7XG5cdFx0ZXhwZWN0KGluZmVySlNPTkluZGVudCh0d29TcGFjZXMpKS50b0JlKFwiICBcIik7XG5cdH0pO1xuXHRpdChcInJldHVybnMgdGFicyB3aGVuIHRoZSBmaXJzdCBpbmRlbnQgaXMgYSB0YWJcIiwgKCkgPT4ge1xuXHRcdGV4cGVjdChpbmZlckpTT05JbmRlbnQodGFiU3BhY2VzKSkudG9CZShcIlxcdFwiKTtcblx0fSk7XG59KTtcbiJdLCJuYW1lcyI6WyJ3aXRoTmV3TGluZSIsImZvdXJTcGFjZXMiLCJ0YWJTcGFjZXMiLCJ0d29TcGFjZXMiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwiaW5mZXJKU09OSW5kZW50IiwidG9CZSJdLCJtYXBwaW5ncyI6Ijs7OztpQ0FBZ0M7QUFFaEMsTUFBTUEsY0FBYyxDQUFDOzs7Ozs7O0NBT3BCLENBQUM7QUFFRixNQUFNQyxhQUFhLENBQUM7Ozs7OztDQU1uQixDQUFDO0FBRUYsTUFBTUMsWUFBWSxDQUFDOzs7Ozs7Q0FNbEIsQ0FBQztBQUVGLE1BQU1DLFlBQVksQ0FBQzs7Ozs7O0NBTWxCLENBQUM7QUFFRkMsU0FBUyxtQkFBbUI7SUFDM0JDLEdBQUcsa0VBQWtFO1FBQ3BFQyxPQUFPQyxJQUFBQSxnQ0FBZSxFQUFDUCxjQUFjUSxJQUFJLENBQUM7SUFDM0M7SUFDQUgsR0FBRyxrREFBa0Q7UUFDcERDLE9BQU9DLElBQUFBLGdDQUFlLEVBQUNOLGFBQWFPLElBQUksQ0FBQztJQUMxQztJQUNBSCxHQUFHLGtEQUFrRDtRQUNwREMsT0FBT0MsSUFBQUEsZ0NBQWUsRUFBQ0osWUFBWUssSUFBSSxDQUFDO0lBQ3pDO0lBQ0FILEdBQUcsK0NBQStDO1FBQ2pEQyxPQUFPQyxJQUFBQSxnQ0FBZSxFQUFDTCxZQUFZTSxJQUFJLENBQUM7SUFDekM7QUFDRCJ9
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "syncResultsToMd", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return syncResultsToMd;
9
+ }
10
+ });
11
+ const _templatesync = require("../template-sync");
12
+ function syncResultsToMd(result) {
13
+ return `# ${_templatesync.TEMPLATE_SYNC_LOCAL_CONFIG}
14
+
15
+ ## Stopped the following files from syncing:
16
+
17
+ ${result.localSkipFiles.reduce((s, file)=>{
18
+ return `${s}* ${file}\n`;
19
+ }, "")}
20
+
21
+ ## Changed the following files from what they would have synced:
22
+
23
+ ${Object.keys(result.localFileChanges).reduce((s, file)=>{
24
+ return `${s}${file}
25
+ \`\`\`diff
26
+ ${result.localFileChanges[file].reduce((diffS, change)=>{
27
+ return `${diffS}\n${makeChangeIntoDiffLines(change)}`;
28
+ }, "")}
29
+ \`\`\``;
30
+ }, "")}
31
+
32
+ ## Files Modified (${result.modifiedFiles.total})
33
+
34
+ Added:
35
+ ${result.modifiedFiles.added.reduce((s, f)=>{
36
+ return `${s}\n- ${f}`;
37
+ }, "")}
38
+
39
+ Modified:
40
+ ${result.modifiedFiles.modified.reduce((s, f)=>{
41
+ return `${s}\n- ${f}`;
42
+ }, "")}
43
+
44
+ Deleted:
45
+ ${result.modifiedFiles.deleted.reduce((s, f)=>{
46
+ return `${s}\n- ${f}`;
47
+ }, "")}
48
+ `;
49
+ }
50
+ function makeChangeIntoDiffLines(change, nonchangeMax = 3) {
51
+ const operator = change.added ? "+" : change.removed ? "-" : "";
52
+ if (!operator && nonchangeMax > 0 && change.count && change.count > nonchangeMax) {
53
+ const lines = change.value.split("\n");
54
+ const partial = lines.slice(lines.length - nonchangeMax);
55
+ return `...\n${partial.join("\n")}\n`;
56
+ }
57
+ return change.value.split("\n").reduce((s, line)=>{
58
+ return `${s}${operator}${line}\n`;
59
+ }, "");
60
+ }
61
+
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0aW5nL3N5bmMtcmVzdWx0cy10by1tZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoYW5nZSB9IGZyb20gXCJkaWZmXCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlU3luY1JldHVybiB9IGZyb20gXCIuLi90ZW1wbGF0ZS1zeW5jXCI7XG5pbXBvcnQgeyBURU1QTEFURV9TWU5DX0xPQ0FMX0NPTkZJRyB9IGZyb20gXCIuLi90ZW1wbGF0ZS1zeW5jXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jUmVzdWx0c1RvTWQocmVzdWx0OiBUZW1wbGF0ZVN5bmNSZXR1cm4pIHtcblx0cmV0dXJuIGAjICR7VEVNUExBVEVfU1lOQ19MT0NBTF9DT05GSUd9IFxuXG4jIyBTdG9wcGVkIHRoZSBmb2xsb3dpbmcgZmlsZXMgZnJvbSBzeW5jaW5nOlxuXG4ke3Jlc3VsdC5sb2NhbFNraXBGaWxlcy5yZWR1Y2UoKHMsIGZpbGUpID0+IHtcblx0cmV0dXJuIGAke3N9KiAke2ZpbGV9XFxuYDtcbn0sIFwiXCIpfVxuXG4jIyBDaGFuZ2VkIHRoZSBmb2xsb3dpbmcgZmlsZXMgZnJvbSB3aGF0IHRoZXkgd291bGQgaGF2ZSBzeW5jZWQ6XG5cbiR7T2JqZWN0LmtleXMocmVzdWx0LmxvY2FsRmlsZUNoYW5nZXMpLnJlZHVjZSgocywgZmlsZSkgPT4ge1xuXHRyZXR1cm4gYCR7c30ke2ZpbGV9XG5cXGBcXGBcXGBkaWZmXG4ke3Jlc3VsdC5sb2NhbEZpbGVDaGFuZ2VzW2ZpbGVdLnJlZHVjZSgoZGlmZlMsIGNoYW5nZSkgPT4ge1xuXHRyZXR1cm4gYCR7ZGlmZlN9XFxuJHttYWtlQ2hhbmdlSW50b0RpZmZMaW5lcyhjaGFuZ2UpfWA7XG59LCBcIlwiKX1cblxcYFxcYFxcYGA7XG59LCBcIlwiKX1cblxuIyMgRmlsZXMgTW9kaWZpZWQgKCR7cmVzdWx0Lm1vZGlmaWVkRmlsZXMudG90YWx9KVxuXG5BZGRlZDpcbiR7cmVzdWx0Lm1vZGlmaWVkRmlsZXMuYWRkZWQucmVkdWNlKChzLCBmKSA9PiB7XG5cdHJldHVybiBgJHtzfVxcbi0gJHtmfWA7XG59LCBcIlwiKX1cblxuTW9kaWZpZWQ6XG4ke3Jlc3VsdC5tb2RpZmllZEZpbGVzLm1vZGlmaWVkLnJlZHVjZSgocywgZikgPT4ge1xuXHRyZXR1cm4gYCR7c31cXG4tICR7Zn1gO1xufSwgXCJcIil9XG5cbkRlbGV0ZWQ6XG4ke3Jlc3VsdC5tb2RpZmllZEZpbGVzLmRlbGV0ZWQucmVkdWNlKChzLCBmKSA9PiB7XG5cdHJldHVybiBgJHtzfVxcbi0gJHtmfWA7XG59LCBcIlwiKX1cbmA7XG59XG5cbmZ1bmN0aW9uIG1ha2VDaGFuZ2VJbnRvRGlmZkxpbmVzKGNoYW5nZTogQ2hhbmdlLCBub25jaGFuZ2VNYXggPSAzKSB7XG5cdGNvbnN0IG9wZXJhdG9yID0gY2hhbmdlLmFkZGVkID8gXCIrXCIgOiBjaGFuZ2UucmVtb3ZlZCA/IFwiLVwiIDogXCJcIjtcblxuXHRpZiAoXG5cdFx0IW9wZXJhdG9yICYmXG5cdFx0bm9uY2hhbmdlTWF4ID4gMCAmJlxuXHRcdGNoYW5nZS5jb3VudCAmJlxuXHRcdGNoYW5nZS5jb3VudCA+IG5vbmNoYW5nZU1heFxuXHQpIHtcblx0XHRjb25zdCBsaW5lcyA9IGNoYW5nZS52YWx1ZS5zcGxpdChcIlxcblwiKTtcblx0XHRjb25zdCBwYXJ0aWFsID0gbGluZXMuc2xpY2UobGluZXMubGVuZ3RoIC0gbm9uY2hhbmdlTWF4KTtcblx0XHRyZXR1cm4gYC4uLlxcbiR7cGFydGlhbC5qb2luKFwiXFxuXCIpfVxcbmA7XG5cdH1cblxuXHRyZXR1cm4gY2hhbmdlLnZhbHVlLnNwbGl0KFwiXFxuXCIpLnJlZHVjZSgocywgbGluZSkgPT4ge1xuXHRcdHJldHVybiBgJHtzfSR7b3BlcmF0b3J9JHtsaW5lfVxcbmA7XG5cdH0sIFwiXCIpO1xufVxuIl0sIm5hbWVzIjpbInN5bmNSZXN1bHRzVG9NZCIsInJlc3VsdCIsIlRFTVBMQVRFX1NZTkNfTE9DQUxfQ09ORklHIiwibG9jYWxTa2lwRmlsZXMiLCJyZWR1Y2UiLCJzIiwiZmlsZSIsIk9iamVjdCIsImtleXMiLCJsb2NhbEZpbGVDaGFuZ2VzIiwiZGlmZlMiLCJjaGFuZ2UiLCJtYWtlQ2hhbmdlSW50b0RpZmZMaW5lcyIsIm1vZGlmaWVkRmlsZXMiLCJ0b3RhbCIsImFkZGVkIiwiZiIsIm1vZGlmaWVkIiwiZGVsZXRlZCIsIm5vbmNoYW5nZU1heCIsIm9wZXJhdG9yIiwicmVtb3ZlZCIsImNvdW50IiwibGluZXMiLCJ2YWx1ZSIsInNwbGl0IiwicGFydGlhbCIsInNsaWNlIiwibGVuZ3RoIiwiam9pbiIsImxpbmUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBSWdCQTs7O2VBQUFBOzs7OEJBRjJCO0FBRXBDLFNBQVNBLGdCQUFnQkMsTUFBMEI7SUFDekQsT0FBTyxDQUFDLEVBQUUsRUFBRUMsd0NBQTBCLENBQUM7Ozs7QUFJeEMsRUFBRUQsT0FBT0UsY0FBYyxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsR0FBR0M7UUFDbEMsT0FBTyxHQUFHRCxFQUFFLEVBQUUsRUFBRUMsS0FBSyxFQUFFLENBQUM7SUFDekIsR0FBRyxJQUFJOzs7O0FBSVAsRUFBRUMsT0FBT0MsSUFBSSxDQUFDUCxPQUFPUSxnQkFBZ0IsRUFBRUwsTUFBTSxDQUFDLENBQUNDLEdBQUdDO1FBQ2pELE9BQU8sR0FBR0QsSUFBSUMsS0FBSzs7QUFFcEIsRUFBRUwsT0FBT1EsZ0JBQWdCLENBQUNILEtBQUssQ0FBQ0YsTUFBTSxDQUFDLENBQUNNLE9BQU9DO1lBQzlDLE9BQU8sR0FBR0QsTUFBTSxFQUFFLEVBQUVFLHdCQUF3QkQsU0FBUztRQUN0RCxHQUFHLElBQUk7TUFDRCxDQUFDO0lBQ1AsR0FBRyxJQUFJOzttQkFFWSxFQUFFVixPQUFPWSxhQUFhLENBQUNDLEtBQUssQ0FBQzs7O0FBR2hELEVBQUViLE9BQU9ZLGFBQWEsQ0FBQ0UsS0FBSyxDQUFDWCxNQUFNLENBQUMsQ0FBQ0MsR0FBR1c7UUFDdkMsT0FBTyxHQUFHWCxFQUFFLElBQUksRUFBRVcsR0FBRztJQUN0QixHQUFHLElBQUk7OztBQUdQLEVBQUVmLE9BQU9ZLGFBQWEsQ0FBQ0ksUUFBUSxDQUFDYixNQUFNLENBQUMsQ0FBQ0MsR0FBR1c7UUFDMUMsT0FBTyxHQUFHWCxFQUFFLElBQUksRUFBRVcsR0FBRztJQUN0QixHQUFHLElBQUk7OztBQUdQLEVBQUVmLE9BQU9ZLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDZCxNQUFNLENBQUMsQ0FBQ0MsR0FBR1c7UUFDekMsT0FBTyxHQUFHWCxFQUFFLElBQUksRUFBRVcsR0FBRztJQUN0QixHQUFHLElBQUk7QUFDUCxDQUFDO0FBQ0Q7QUFFQSxTQUFTSix3QkFBd0JELE1BQWMsRUFBRVEsZUFBZSxDQUFDO0lBQ2hFLE1BQU1DLFdBQVdULE9BQU9JLEtBQUssR0FBRyxNQUFNSixPQUFPVSxPQUFPLEdBQUcsTUFBTTtJQUU3RCxJQUNDLENBQUNELFlBQ0RELGVBQWUsS0FDZlIsT0FBT1csS0FBSyxJQUNaWCxPQUFPVyxLQUFLLEdBQUdILGNBQ2Q7UUFDRCxNQUFNSSxRQUFRWixPQUFPYSxLQUFLLENBQUNDLEtBQUssQ0FBQztRQUNqQyxNQUFNQyxVQUFVSCxNQUFNSSxLQUFLLENBQUNKLE1BQU1LLE1BQU0sR0FBR1Q7UUFDM0MsT0FBTyxDQUFDLEtBQUssRUFBRU8sUUFBUUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RDO0lBRUEsT0FBT2xCLE9BQU9hLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLE1BQU1yQixNQUFNLENBQUMsQ0FBQ0MsR0FBR3lCO1FBQzFDLE9BQU8sR0FBR3pCLElBQUllLFdBQVdVLEtBQUssRUFBRSxDQUFDO0lBQ2xDLEdBQUc7QUFDSiJ9
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _syncresultstomd = require("./sync-results-to-md");
6
+ describe("syncResultsToMd", ()=>{
7
+ it("snapshots", ()=>{
8
+ expect((0, _syncresultstomd.syncResultsToMd)({
9
+ localSkipFiles: [
10
+ "src/file1.ts"
11
+ ],
12
+ localFileChanges: {
13
+ "package.json": [
14
+ {
15
+ count: 8,
16
+ value: "my thing",
17
+ added: true
18
+ },
19
+ {
20
+ count: 10,
21
+ value: "your thang",
22
+ removed: true
23
+ }
24
+ ]
25
+ },
26
+ modifiedFiles: {
27
+ added: [
28
+ "src/something.ts",
29
+ "new_settings.toml"
30
+ ],
31
+ deleted: [
32
+ "TODO.md",
33
+ "throwaway.ts"
34
+ ],
35
+ modified: [
36
+ "something.txt",
37
+ ".env"
38
+ ],
39
+ total: 6
40
+ }
41
+ })).toMatchSnapshot();
42
+ });
43
+ });
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0aW5nL3N5bmMtcmVzdWx0cy10by1tZC5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN5bmNSZXN1bHRzVG9NZCB9IGZyb20gXCIuL3N5bmMtcmVzdWx0cy10by1tZFwiO1xuXG5kZXNjcmliZShcInN5bmNSZXN1bHRzVG9NZFwiLCAoKSA9PiB7XG5cdGl0KFwic25hcHNob3RzXCIsICgpID0+IHtcblx0XHRleHBlY3QoXG5cdFx0XHRzeW5jUmVzdWx0c1RvTWQoe1xuXHRcdFx0XHRsb2NhbFNraXBGaWxlczogW1wic3JjL2ZpbGUxLnRzXCJdLFxuXHRcdFx0XHRsb2NhbEZpbGVDaGFuZ2VzOiB7XG5cdFx0XHRcdFx0XCJwYWNrYWdlLmpzb25cIjogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjb3VudDogOCxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwibXkgdGhpbmdcIixcblx0XHRcdFx0XHRcdFx0YWRkZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjb3VudDogMTAsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBcInlvdXIgdGhhbmdcIixcblx0XHRcdFx0XHRcdFx0cmVtb3ZlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kaWZpZWRGaWxlczoge1xuXHRcdFx0XHRcdGFkZGVkOiBbXCJzcmMvc29tZXRoaW5nLnRzXCIsIFwibmV3X3NldHRpbmdzLnRvbWxcIl0sXG5cdFx0XHRcdFx0ZGVsZXRlZDogW1wiVE9ETy5tZFwiLCBcInRocm93YXdheS50c1wiXSxcblx0XHRcdFx0XHRtb2RpZmllZDogW1wic29tZXRoaW5nLnR4dFwiLCBcIi5lbnZcIl0sXG5cdFx0XHRcdFx0dG90YWw6IDYsXG5cdFx0XHRcdH0sXG5cdFx0XHR9KSxcblx0XHQpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuXHR9KTtcbn0pO1xuIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJleHBlY3QiLCJzeW5jUmVzdWx0c1RvTWQiLCJsb2NhbFNraXBGaWxlcyIsImxvY2FsRmlsZUNoYW5nZXMiLCJjb3VudCIsInZhbHVlIiwiYWRkZWQiLCJyZW1vdmVkIiwibW9kaWZpZWRGaWxlcyIsImRlbGV0ZWQiLCJtb2RpZmllZCIsInRvdGFsIiwidG9NYXRjaFNuYXBzaG90Il0sIm1hcHBpbmdzIjoiOzs7O2lDQUFnQztBQUVoQ0EsU0FBUyxtQkFBbUI7SUFDM0JDLEdBQUcsYUFBYTtRQUNmQyxPQUNDQyxJQUFBQSxnQ0FBZSxFQUFDO1lBQ2ZDLGdCQUFnQjtnQkFBQzthQUFlO1lBQ2hDQyxrQkFBa0I7Z0JBQ2pCLGdCQUFnQjtvQkFDZjt3QkFDQ0MsT0FBTzt3QkFDUEMsT0FBTzt3QkFDUEMsT0FBTztvQkFDUjtvQkFDQTt3QkFDQ0YsT0FBTzt3QkFDUEMsT0FBTzt3QkFDUEUsU0FBUztvQkFDVjtpQkFDQTtZQUNGO1lBQ0FDLGVBQWU7Z0JBQ2RGLE9BQU87b0JBQUM7b0JBQW9CO2lCQUFvQjtnQkFDaERHLFNBQVM7b0JBQUM7b0JBQVc7aUJBQWU7Z0JBQ3BDQyxVQUFVO29CQUFDO29CQUFpQjtpQkFBTztnQkFDbkNDLE9BQU87WUFDUjtRQUNELElBQ0NDLGVBQWU7SUFDbEI7QUFDRCJ9
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./formatting"), exports);
6
+ _export_star(require("./template-sync"), exports);
7
+ _export_star(require("./types"), exports);
8
+ function _export_star(from, to) {
9
+ Object.keys(from).forEach(function(k) {
10
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
+ Object.defineProperty(to, k, {
12
+ enumerable: true,
13
+ get: function() {
14
+ return from[k];
15
+ }
16
+ });
17
+ }
18
+ });
19
+ return from;
20
+ }
21
+
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9mb3JtYXR0aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS1zeW5jXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWM7cUJBQ0E7cUJBQ0EifQ==
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "loadPlugin", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return loadPlugin;
9
+ }
10
+ });
11
+ const _fs = require("fs");
12
+ const _path = require("path");
13
+ const _plugins = require("./plugins");
14
+ async function loadPlugin(mergeConfig, configDir) {
15
+ if (mergeConfig.plugin.startsWith("_")) {
16
+ const defaultHandler = Object.values(_plugins.defaultExtensionMap).find((el)=>el.builtinName === mergeConfig.plugin);
17
+ if (!defaultHandler) {
18
+ throw new Error(`No builtin merge function supplied for ${mergeConfig.plugin}. Cannot have merge config without custom plugin supplied.`);
19
+ }
20
+ return defaultHandler;
21
+ }
22
+ let handler;
23
+ // First check if this is a local .js file
24
+ const localPath = (0, _path.resolve)(configDir, mergeConfig.plugin);
25
+ const importPath = (0, _fs.existsSync)(localPath) ? localPath : mergeConfig.plugin;
26
+ try {
27
+ // Sad workaround for testing since dynamic import segfaults
28
+ if (process.env.JEST_WORKER_ID !== undefined) {
29
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
30
+ handler = require(importPath);
31
+ } else {
32
+ handler = await import(importPath);
33
+ }
34
+ if (!handler.merge) {
35
+ handler = handler.default;
36
+ }
37
+ } catch (err) {
38
+ console.error(err);
39
+ throw err;
40
+ }
41
+ return handler;
42
+ }
43
+
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2FkLXBsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGRlZmF1bHRFeHRlbnNpb25NYXAgfSBmcm9tIFwiLi9wbHVnaW5zXCI7XG5pbXBvcnQgdHlwZSB7IE1lcmdlQ29uZmlnLCBNZXJnZVBsdWdpbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogTG9hZHMgdGhlIHBsdWdpbiBhc3NvY2lhdGVkIHdpdGggdGhlIG1lcmdlIGNvbmZpZ1xuICogQHBhcmFtIG1lcmdlQ29uZmlnXG4gKiBAcGFyYW0gZm9yRXh0XG4gKiBAcGFyYW0gY29uZmlnRGlyXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBsdWdpbjxUPihcblx0bWVyZ2VDb25maWc6IE1lcmdlQ29uZmlnPFQ+LFxuXHRjb25maWdEaXI6IHN0cmluZyxcbik6IFByb21pc2U8TWVyZ2VQbHVnaW48VD4+IHtcblx0aWYgKG1lcmdlQ29uZmlnLnBsdWdpbi5zdGFydHNXaXRoKFwiX1wiKSkge1xuXHRcdGNvbnN0IGRlZmF1bHRIYW5kbGVyID0gT2JqZWN0LnZhbHVlcyhkZWZhdWx0RXh0ZW5zaW9uTWFwKS5maW5kKFxuXHRcdFx0KGVsKSA9PiBlbC5idWlsdGluTmFtZSA9PT0gbWVyZ2VDb25maWcucGx1Z2luLFxuXHRcdCk7XG5cdFx0aWYgKCFkZWZhdWx0SGFuZGxlcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgTm8gYnVpbHRpbiBtZXJnZSBmdW5jdGlvbiBzdXBwbGllZCBmb3IgJHttZXJnZUNvbmZpZy5wbHVnaW59LiAgQ2Fubm90IGhhdmUgbWVyZ2UgY29uZmlnIHdpdGhvdXQgY3VzdG9tIHBsdWdpbiBzdXBwbGllZC5gLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRIYW5kbGVyIGFzIE1lcmdlUGx1Z2luPFQ+O1xuXHR9XG5cblx0bGV0IGhhbmRsZXI6IE1lcmdlUGx1Z2luPHVua25vd24+O1xuXHQvLyBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGEgbG9jYWwgLmpzIGZpbGVcblx0Y29uc3QgbG9jYWxQYXRoID0gcmVzb2x2ZShjb25maWdEaXIsIG1lcmdlQ29uZmlnLnBsdWdpbik7XG5cdGNvbnN0IGltcG9ydFBhdGggPSBleGlzdHNTeW5jKGxvY2FsUGF0aCkgPyBsb2NhbFBhdGggOiBtZXJnZUNvbmZpZy5wbHVnaW47XG5cdHRyeSB7XG5cdFx0Ly8gU2FkIHdvcmthcm91bmQgZm9yIHRlc3Rpbmcgc2luY2UgZHluYW1pYyBpbXBvcnQgc2VnZmF1bHRzXG5cdFx0aWYgKHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5cdFx0XHRoYW5kbGVyID0gcmVxdWlyZShpbXBvcnRQYXRoKSBhcyBNZXJnZVBsdWdpbjx1bmtub3duPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGFuZGxlciA9IChhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCkpIGFzIE1lcmdlUGx1Z2luPHVua25vd24+O1xuXHRcdH1cblx0XHRpZiAoIWhhbmRsZXIubWVyZ2UpIHtcblx0XHRcdGhhbmRsZXIgPSAoaGFuZGxlciBhcyB1bmtub3duIGFzIHsgZGVmYXVsdDogTWVyZ2VQbHVnaW48dW5rbm93bj4gfSlcblx0XHRcdFx0LmRlZmF1bHQ7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0dGhyb3cgZXJyO1xuXHR9XG5cblx0cmV0dXJuIGhhbmRsZXIgYXMgTWVyZ2VQbHVnaW48VD47XG59XG4iXSwibmFtZXMiOlsibG9hZFBsdWdpbiIsIm1lcmdlQ29uZmlnIiwiY29uZmlnRGlyIiwicGx1Z2luIiwic3RhcnRzV2l0aCIsImRlZmF1bHRIYW5kbGVyIiwiT2JqZWN0IiwidmFsdWVzIiwiZGVmYXVsdEV4dGVuc2lvbk1hcCIsImZpbmQiLCJlbCIsImJ1aWx0aW5OYW1lIiwiRXJyb3IiLCJoYW5kbGVyIiwibG9jYWxQYXRoIiwicmVzb2x2ZSIsImltcG9ydFBhdGgiLCJleGlzdHNTeW5jIiwicHJvY2VzcyIsImVudiIsIkpFU1RfV09SS0VSX0lEIiwidW5kZWZpbmVkIiwicmVxdWlyZSIsIm1lcmdlIiwiZGVmYXVsdCIsImVyciIsImNvbnNvbGUiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFZc0JBOzs7ZUFBQUE7OztvQkFaSztzQkFDSDt5QkFDWTtBQVU3QixlQUFlQSxXQUNyQkMsV0FBMkIsRUFDM0JDLFNBQWlCO0lBRWpCLElBQUlELFlBQVlFLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLE1BQU07UUFDdkMsTUFBTUMsaUJBQWlCQyxPQUFPQyxNQUFNLENBQUNDLDRCQUFtQixFQUFFQyxJQUFJLENBQzdELENBQUNDLEtBQU9BLEdBQUdDLFdBQVcsS0FBS1YsWUFBWUUsTUFBTTtRQUU5QyxJQUFJLENBQUNFLGdCQUFnQjtZQUNwQixNQUFNLElBQUlPLE1BQ1QsQ0FBQyx1Q0FBdUMsRUFBRVgsWUFBWUUsTUFBTSxDQUFDLDJEQUEyRCxDQUFDO1FBRTNIO1FBQ0EsT0FBT0U7SUFDUjtJQUVBLElBQUlRO0lBQ0osMENBQTBDO0lBQzFDLE1BQU1DLFlBQVlDLElBQUFBLGFBQU8sRUFBQ2IsV0FBV0QsWUFBWUUsTUFBTTtJQUN2RCxNQUFNYSxhQUFhQyxJQUFBQSxjQUFVLEVBQUNILGFBQWFBLFlBQVliLFlBQVlFLE1BQU07SUFDekUsSUFBSTtRQUNILDREQUE0RDtRQUM1RCxJQUFJZSxRQUFRQyxHQUFHLENBQUNDLGNBQWMsS0FBS0MsV0FBVztZQUM3Qyw4REFBOEQ7WUFDOURSLFVBQVVTLFFBQVFOO1FBQ25CLE9BQU87WUFDTkgsVUFBVyxNQUFNLE1BQU0sQ0FBQ0c7UUFDekI7UUFDQSxJQUFJLENBQUNILFFBQVFVLEtBQUssRUFBRTtZQUNuQlYsVUFBVSxBQUFDQSxRQUNUVyxPQUFPO1FBQ1Y7SUFDRCxFQUFFLE9BQU9DLEtBQUs7UUFDYkMsUUFBUUMsS0FBSyxDQUFDRjtRQUNkLE1BQU1BO0lBQ1A7SUFFQSxPQUFPWjtBQUNSIn0=
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ getAllFilesInDir: function() {
13
+ return getAllFilesInDir;
14
+ },
15
+ invertMatchPatterns: function() {
16
+ return invertMatchPatterns;
17
+ }
18
+ });
19
+ const _fs = require("fs");
20
+ const _micromatch = require("micromatch");
21
+ const _path = require("path");
22
+ function invertMatchPatterns(patterns) {
23
+ return patterns.map((pattern)=>{
24
+ if (pattern.startsWith("!")) {
25
+ return pattern.slice(1);
26
+ }
27
+ return `!${pattern}`;
28
+ });
29
+ }
30
+ function getAllFilesInDir(dir, ignorePatterns) {
31
+ return recurseDirsForFiles(dir, ignorePatterns);
32
+ }
33
+ function recurseDirsForFiles(dirpath, ignorePatterns, relativeRoot = "") {
34
+ return (0, _fs.readdirSync)(dirpath, {
35
+ withFileTypes: true
36
+ }).reduce((files, f)=>{
37
+ const relPath = (0, _path.join)(relativeRoot, f.name);
38
+ if ((0, _micromatch.some)(relPath, ignorePatterns)) {
39
+ return files;
40
+ }
41
+ // Ensure we aren't ignoring these folders explicitly
42
+ if (f.isDirectory()) {
43
+ files.push(...recurseDirsForFiles((0, _path.join)(dirpath, f.name), ignorePatterns, relPath));
44
+ } else {
45
+ files.push(relPath);
46
+ }
47
+ return files;
48
+ }, []);
49
+ }
50
+
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkZGlyU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgc29tZSB9IGZyb20gXCJtaWNyb21hdGNoXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydE1hdGNoUGF0dGVybnMocGF0dGVybnM6IHN0cmluZ1tdKSB7XG5cdHJldHVybiBwYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IHtcblx0XHRpZiAocGF0dGVybi5zdGFydHNXaXRoKFwiIVwiKSkge1xuXHRcdFx0cmV0dXJuIHBhdHRlcm4uc2xpY2UoMSk7XG5cdFx0fVxuXHRcdHJldHVybiBgISR7cGF0dGVybn1gO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSByZWN1cnNpdmVseSB3aGlsZSBhdm9pZGluZyBhbnkgbWljcm9tYXRjaCBwYXR0ZXJuc1xuICogdGhhdCB3b3VsZCBtYXRjaCBmb3IgaWdub3JpbmdcbiAqXG4gKiBAcGFyYW0gZGlyXG4gKiBAcGFyYW0gaWdub3JlUGF0dGVybnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxGaWxlc0luRGlyKFxuXHRkaXI6IHN0cmluZyxcblx0aWdub3JlUGF0dGVybnM6IHN0cmluZ1tdLFxuKTogc3RyaW5nW10ge1xuXHRyZXR1cm4gcmVjdXJzZURpcnNGb3JGaWxlcyhkaXIsIGlnbm9yZVBhdHRlcm5zKTtcbn1cblxuZnVuY3Rpb24gcmVjdXJzZURpcnNGb3JGaWxlcyhcblx0ZGlycGF0aDogc3RyaW5nLFxuXHRpZ25vcmVQYXR0ZXJuczogc3RyaW5nW10sXG5cdHJlbGF0aXZlUm9vdCA9IFwiXCIsXG4pOiBzdHJpbmdbXSB7XG5cdHJldHVybiByZWFkZGlyU3luYyhkaXJwYXRoLCB7XG5cdFx0d2l0aEZpbGVUeXBlczogdHJ1ZSxcblx0fSkucmVkdWNlKChmaWxlcywgZikgPT4ge1xuXHRcdGNvbnN0IHJlbFBhdGggPSBqb2luKHJlbGF0aXZlUm9vdCwgZi5uYW1lKTtcblx0XHRpZiAoc29tZShyZWxQYXRoLCBpZ25vcmVQYXR0ZXJucykpIHtcblx0XHRcdHJldHVybiBmaWxlcztcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgd2UgYXJlbid0IGlnbm9yaW5nIHRoZXNlIGZvbGRlcnMgZXhwbGljaXRseVxuXHRcdGlmIChmLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRcdGZpbGVzLnB1c2goXG5cdFx0XHRcdC4uLnJlY3Vyc2VEaXJzRm9yRmlsZXMoam9pbihkaXJwYXRoLCBmLm5hbWUpLCBpZ25vcmVQYXR0ZXJucywgcmVsUGF0aCksXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWxlcy5wdXNoKHJlbFBhdGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsZXM7XG5cdH0sIFtdIGFzIHN0cmluZ1tdKTtcbn1cbiJdLCJuYW1lcyI6WyJnZXRBbGxGaWxlc0luRGlyIiwiaW52ZXJ0TWF0Y2hQYXR0ZXJucyIsInBhdHRlcm5zIiwibWFwIiwicGF0dGVybiIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImRpciIsImlnbm9yZVBhdHRlcm5zIiwicmVjdXJzZURpcnNGb3JGaWxlcyIsImRpcnBhdGgiLCJyZWxhdGl2ZVJvb3QiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJyZWR1Y2UiLCJmaWxlcyIsImYiLCJyZWxQYXRoIiwiam9pbiIsIm5hbWUiLCJzb21lIiwiaXNEaXJlY3RvcnkiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXFCZ0JBLGdCQUFnQjtlQUFoQkE7O0lBakJBQyxtQkFBbUI7ZUFBbkJBOzs7b0JBSlk7NEJBQ1A7c0JBQ0E7QUFFZCxTQUFTQSxvQkFBb0JDLFFBQWtCO0lBQ3JELE9BQU9BLFNBQVNDLEdBQUcsQ0FBQyxDQUFDQztRQUNwQixJQUFJQSxRQUFRQyxVQUFVLENBQUMsTUFBTTtZQUM1QixPQUFPRCxRQUFRRSxLQUFLLENBQUM7UUFDdEI7UUFDQSxPQUFPLENBQUMsQ0FBQyxFQUFFRixTQUFTO0lBQ3JCO0FBQ0Q7QUFVTyxTQUFTSixpQkFDZk8sR0FBVyxFQUNYQyxjQUF3QjtJQUV4QixPQUFPQyxvQkFBb0JGLEtBQUtDO0FBQ2pDO0FBRUEsU0FBU0Msb0JBQ1JDLE9BQWUsRUFDZkYsY0FBd0IsRUFDeEJHLGVBQWUsRUFBRTtJQUVqQixPQUFPQyxJQUFBQSxlQUFXLEVBQUNGLFNBQVM7UUFDM0JHLGVBQWU7SUFDaEIsR0FBR0MsTUFBTSxDQUFDLENBQUNDLE9BQU9DO1FBQ2pCLE1BQU1DLFVBQVVDLElBQUFBLFVBQUksRUFBQ1AsY0FBY0ssRUFBRUcsSUFBSTtRQUN6QyxJQUFJQyxJQUFBQSxnQkFBSSxFQUFDSCxTQUFTVCxpQkFBaUI7WUFDbEMsT0FBT087UUFDUjtRQUVBLHFEQUFxRDtRQUNyRCxJQUFJQyxFQUFFSyxXQUFXLElBQUk7WUFDcEJOLE1BQU1PLElBQUksSUFDTmIsb0JBQW9CUyxJQUFBQSxVQUFJLEVBQUNSLFNBQVNNLEVBQUVHLElBQUksR0FBR1gsZ0JBQWdCUztRQUVoRSxPQUFPO1lBQ05GLE1BQU1PLElBQUksQ0FBQ0w7UUFDWjtRQUNBLE9BQU9GO0lBQ1IsR0FBRyxFQUFFO0FBQ04ifQ==
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _path = require("path");
6
+ const _match = require("./match");
7
+ const _testutils = require("./test-utils");
8
+ const TEST_GLOB_DIR = (0, _path.resolve)(_testutils.TEST_FIXTURES_DIR, "glob-test");
9
+ describe("getAllFilesInDir", ()=>{
10
+ it("gets all files in the directory with no ignores", ()=>{
11
+ const files = (0, _match.getAllFilesInDir)(TEST_GLOB_DIR, []);
12
+ expect(files).toEqual(expect.arrayContaining([
13
+ "folder1/something.js",
14
+ "folder1/something.ts",
15
+ "toplevel.js",
16
+ "toplevel.txt"
17
+ ]));
18
+ try {
19
+ expect(files.length).toBe(4);
20
+ } catch (err) {
21
+ console.error("All found files: " + files);
22
+ throw err;
23
+ }
24
+ });
25
+ it("gets all files in the directory that do not match the ignore (single)", ()=>{
26
+ const files = (0, _match.getAllFilesInDir)(TEST_GLOB_DIR, [
27
+ "**/*.ts"
28
+ ]);
29
+ expect(files).toEqual(expect.arrayContaining([
30
+ "folder1/something.js",
31
+ "toplevel.js",
32
+ "toplevel.txt"
33
+ ]));
34
+ try {
35
+ expect(files.length).toBe(3);
36
+ } catch (err) {
37
+ console.error("All found files: " + files);
38
+ throw err;
39
+ }
40
+ });
41
+ it("gets all files in the directory that do not match the ignore (multiple)", ()=>{
42
+ const files = (0, _match.getAllFilesInDir)(TEST_GLOB_DIR, [
43
+ "**/*.ts",
44
+ "**/*.txt"
45
+ ]);
46
+ expect(files).toEqual(expect.arrayContaining([
47
+ "folder1/something.js",
48
+ "toplevel.js"
49
+ ]));
50
+ try {
51
+ expect(files.length).toBe(2);
52
+ } catch (err) {
53
+ console.error("All found files: " + files);
54
+ throw err;
55
+ }
56
+ });
57
+ it("gets all files in the directory that do not match the ignore with a folder level directive (multiple)", ()=>{
58
+ const files = (0, _match.getAllFilesInDir)(TEST_GLOB_DIR, [
59
+ "**/*.ts",
60
+ "**/*.txt",
61
+ "folder1"
62
+ ]);
63
+ expect(files).toEqual(expect.arrayContaining([
64
+ "toplevel.js"
65
+ ]));
66
+ try {
67
+ expect(files.length).toBe(1);
68
+ } catch (err) {
69
+ console.error("All found files: " + files);
70
+ throw err;
71
+ }
72
+ });
73
+ });
74
+
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRjaC5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZ2V0QWxsRmlsZXNJbkRpciB9IGZyb20gXCIuL21hdGNoXCI7XG5pbXBvcnQgeyBURVNUX0ZJWFRVUkVTX0RJUiB9IGZyb20gXCIuL3Rlc3QtdXRpbHNcIjtcblxuY29uc3QgVEVTVF9HTE9CX0RJUiA9IHJlc29sdmUoVEVTVF9GSVhUVVJFU19ESVIsIFwiZ2xvYi10ZXN0XCIpO1xuXG5kZXNjcmliZShcImdldEFsbEZpbGVzSW5EaXJcIiwgKCkgPT4ge1xuXHRpdChcImdldHMgYWxsIGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgd2l0aCBubyBpZ25vcmVzXCIsICgpID0+IHtcblx0XHRjb25zdCBmaWxlcyA9IGdldEFsbEZpbGVzSW5EaXIoVEVTVF9HTE9CX0RJUiwgW10pO1xuXHRcdGV4cGVjdChmaWxlcykudG9FcXVhbChcblx0XHRcdGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuXHRcdFx0XHRcImZvbGRlcjEvc29tZXRoaW5nLmpzXCIsXG5cdFx0XHRcdFwiZm9sZGVyMS9zb21ldGhpbmcudHNcIixcblx0XHRcdFx0XCJ0b3BsZXZlbC5qc1wiLFxuXHRcdFx0XHRcInRvcGxldmVsLnR4dFwiLFxuXHRcdFx0XSksXG5cdFx0KTtcblx0XHR0cnkge1xuXHRcdFx0ZXhwZWN0KGZpbGVzLmxlbmd0aCkudG9CZSg0KTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBbGwgZm91bmQgZmlsZXM6IFwiICsgZmlsZXMpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fSk7XG5cdGl0KFwiZ2V0cyBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgaWdub3JlIChzaW5nbGUpXCIsICgpID0+IHtcblx0XHRjb25zdCBmaWxlcyA9IGdldEFsbEZpbGVzSW5EaXIoVEVTVF9HTE9CX0RJUiwgW1wiKiovKi50c1wiXSk7XG5cdFx0ZXhwZWN0KGZpbGVzKS50b0VxdWFsKFxuXHRcdFx0ZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG5cdFx0XHRcdFwiZm9sZGVyMS9zb21ldGhpbmcuanNcIixcblx0XHRcdFx0XCJ0b3BsZXZlbC5qc1wiLFxuXHRcdFx0XHRcInRvcGxldmVsLnR4dFwiLFxuXHRcdFx0XSksXG5cdFx0KTtcblx0XHR0cnkge1xuXHRcdFx0ZXhwZWN0KGZpbGVzLmxlbmd0aCkudG9CZSgzKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBbGwgZm91bmQgZmlsZXM6IFwiICsgZmlsZXMpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fSk7XG5cdGl0KFwiZ2V0cyBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgaWdub3JlIChtdWx0aXBsZSlcIiwgKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVzID0gZ2V0QWxsRmlsZXNJbkRpcihURVNUX0dMT0JfRElSLCBbXCIqKi8qLnRzXCIsIFwiKiovKi50eHRcIl0pO1xuXHRcdGV4cGVjdChmaWxlcykudG9FcXVhbChcblx0XHRcdGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1wiZm9sZGVyMS9zb21ldGhpbmcuanNcIiwgXCJ0b3BsZXZlbC5qc1wiXSksXG5cdFx0KTtcblx0XHR0cnkge1xuXHRcdFx0ZXhwZWN0KGZpbGVzLmxlbmd0aCkudG9CZSgyKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBbGwgZm91bmQgZmlsZXM6IFwiICsgZmlsZXMpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fSk7XG5cblx0aXQoXCJnZXRzIGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgZG8gbm90IG1hdGNoIHRoZSBpZ25vcmUgd2l0aCBhIGZvbGRlciBsZXZlbCBkaXJlY3RpdmUgKG11bHRpcGxlKVwiLCAoKSA9PiB7XG5cdFx0Y29uc3QgZmlsZXMgPSBnZXRBbGxGaWxlc0luRGlyKFRFU1RfR0xPQl9ESVIsIFtcblx0XHRcdFwiKiovKi50c1wiLFxuXHRcdFx0XCIqKi8qLnR4dFwiLFxuXHRcdFx0XCJmb2xkZXIxXCIsXG5cdFx0XSk7XG5cdFx0ZXhwZWN0KGZpbGVzKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1widG9wbGV2ZWwuanNcIl0pKTtcblx0XHR0cnkge1xuXHRcdFx0ZXhwZWN0KGZpbGVzLmxlbmd0aCkudG9CZSgxKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJBbGwgZm91bmQgZmlsZXM6IFwiICsgZmlsZXMpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fSk7XG59KTtcbiJdLCJuYW1lcyI6WyJURVNUX0dMT0JfRElSIiwicmVzb2x2ZSIsIlRFU1RfRklYVFVSRVNfRElSIiwiZGVzY3JpYmUiLCJpdCIsImZpbGVzIiwiZ2V0QWxsRmlsZXNJbkRpciIsImV4cGVjdCIsInRvRXF1YWwiLCJhcnJheUNvbnRhaW5pbmciLCJsZW5ndGgiLCJ0b0JlIiwiZXJyIiwiY29uc29sZSIsImVycm9yIl0sIm1hcHBpbmdzIjoiOzs7O3NCQUF3Qjt1QkFDUzsyQkFDQztBQUVsQyxNQUFNQSxnQkFBZ0JDLElBQUFBLGFBQU8sRUFBQ0MsNEJBQWlCLEVBQUU7QUFFakRDLFNBQVMsb0JBQW9CO0lBQzVCQyxHQUFHLG1EQUFtRDtRQUNyRCxNQUFNQyxRQUFRQyxJQUFBQSx1QkFBZ0IsRUFBQ04sZUFBZSxFQUFFO1FBQ2hETyxPQUFPRixPQUFPRyxPQUFPLENBQ3BCRCxPQUFPRSxlQUFlLENBQUM7WUFDdEI7WUFDQTtZQUNBO1lBQ0E7U0FDQTtRQUVGLElBQUk7WUFDSEYsT0FBT0YsTUFBTUssTUFBTSxFQUFFQyxJQUFJLENBQUM7UUFDM0IsRUFBRSxPQUFPQyxLQUFLO1lBQ2JDLFFBQVFDLEtBQUssQ0FBQyxzQkFBc0JUO1lBQ3BDLE1BQU1PO1FBQ1A7SUFDRDtJQUNBUixHQUFHLHlFQUF5RTtRQUMzRSxNQUFNQyxRQUFRQyxJQUFBQSx1QkFBZ0IsRUFBQ04sZUFBZTtZQUFDO1NBQVU7UUFDekRPLE9BQU9GLE9BQU9HLE9BQU8sQ0FDcEJELE9BQU9FLGVBQWUsQ0FBQztZQUN0QjtZQUNBO1lBQ0E7U0FDQTtRQUVGLElBQUk7WUFDSEYsT0FBT0YsTUFBTUssTUFBTSxFQUFFQyxJQUFJLENBQUM7UUFDM0IsRUFBRSxPQUFPQyxLQUFLO1lBQ2JDLFFBQVFDLEtBQUssQ0FBQyxzQkFBc0JUO1lBQ3BDLE1BQU1PO1FBQ1A7SUFDRDtJQUNBUixHQUFHLDJFQUEyRTtRQUM3RSxNQUFNQyxRQUFRQyxJQUFBQSx1QkFBZ0IsRUFBQ04sZUFBZTtZQUFDO1lBQVc7U0FBVztRQUNyRU8sT0FBT0YsT0FBT0csT0FBTyxDQUNwQkQsT0FBT0UsZUFBZSxDQUFDO1lBQUM7WUFBd0I7U0FBYztRQUUvRCxJQUFJO1lBQ0hGLE9BQU9GLE1BQU1LLE1BQU0sRUFBRUMsSUFBSSxDQUFDO1FBQzNCLEVBQUUsT0FBT0MsS0FBSztZQUNiQyxRQUFRQyxLQUFLLENBQUMsc0JBQXNCVDtZQUNwQyxNQUFNTztRQUNQO0lBQ0Q7SUFFQVIsR0FBRyx5R0FBeUc7UUFDM0csTUFBTUMsUUFBUUMsSUFBQUEsdUJBQWdCLEVBQUNOLGVBQWU7WUFDN0M7WUFDQTtZQUNBO1NBQ0E7UUFDRE8sT0FBT0YsT0FBT0csT0FBTyxDQUFDRCxPQUFPRSxlQUFlLENBQUM7WUFBQztTQUFjO1FBQzVELElBQUk7WUFDSEYsT0FBT0YsTUFBTUssTUFBTSxFQUFFQyxJQUFJLENBQUM7UUFDM0IsRUFBRSxPQUFPQyxLQUFLO1lBQ2JDLFFBQVFDLEtBQUssQ0FBQyxzQkFBc0JUO1lBQ3BDLE1BQU1PO1FBQ1A7SUFDRDtBQUNEIn0=
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "mergeFile", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return mergeFile;
9
+ }
10
+ });
11
+ const _diff = require("diff");
12
+ const _fs = require("fs");
13
+ const _promises = require("fs/promises");
14
+ const _fsextra = require("fs-extra");
15
+ const _micromatch = require("micromatch");
16
+ const _path = require("path");
17
+ const _loadplugin = require("./load-plugin");
18
+ async function mergeFile(relPath, context) {
19
+ const { localTemplateSyncConfig, templateSyncConfig, tempCloneDir, cwd } = context;
20
+ if ((0, _micromatch.some)(relPath, localTemplateSyncConfig.ignore)) {
21
+ return {
22
+ ignoredDueToLocal: true
23
+ };
24
+ }
25
+ const ext = (0, _path.extname)(relPath);
26
+ const filePath = (0, _path.join)(cwd, relPath);
27
+ const templatePath = (0, _path.join)(tempCloneDir, relPath);
28
+ // Unless there's a need, we remove files that were deleted and don't pass them to plugins yet
29
+ if (context.fileOperation === "deleted") {
30
+ if ((0, _fs.existsSync)(filePath)) {
31
+ await (0, _promises.rm)(filePath);
32
+ }
33
+ return {
34
+ ignoredDueToLocal: false,
35
+ localChanges: []
36
+ };
37
+ }
38
+ const mergeConfig = templateSyncConfig.merge?.find((mc)=>(0, _micromatch.isMatch)(relPath, mc.glob));
39
+ const localMergeConfig = localTemplateSyncConfig.merge?.find((mc)=>(0, _micromatch.isMatch)(relPath, mc.glob));
40
+ const mergeHandler = mergeConfig ? await (0, _loadplugin.loadPlugin)(mergeConfig, tempCloneDir) : undefined;
41
+ const localMergeHandler = localMergeConfig ? await (0, _loadplugin.loadPlugin)(localMergeConfig, cwd) : undefined;
42
+ // Either write the merge or write the file
43
+ let fileContents;
44
+ const localChanges = [];
45
+ if ((0, _fs.existsSync)(filePath) && (mergeHandler || localMergeHandler)) {
46
+ const originalCurrentFile = (await (0, _promises.readFile)(filePath)).toString();
47
+ if (mergeHandler) {
48
+ fileContents = await safeMerge(mergeHandler, mergeConfig?.plugin ?? `default for ${ext}`, originalCurrentFile, (await (0, _promises.readFile)(templatePath)).toString(), {
49
+ relFilePath: relPath,
50
+ mergeArguments: mergeConfig?.options ?? {},
51
+ isLocalOptions: false
52
+ });
53
+ } else {
54
+ // Apply overwrite if we didn't set up merge
55
+ fileContents = (await (0, _promises.readFile)(templatePath)).toString();
56
+ }
57
+ // We apply the localMerge Config to the fileContent output by the template merge
58
+ if (localMergeHandler) {
59
+ const localContents = await safeMerge(localMergeHandler, localMergeConfig?.plugin ?? `default for ${ext}`, originalCurrentFile, fileContents, {
60
+ relFilePath: relPath,
61
+ mergeArguments: localMergeConfig?.options ?? {},
62
+ isLocalOptions: true
63
+ });
64
+ localChanges.push(...(0, _diff.diffLines)(fileContents, localContents));
65
+ fileContents = localContents;
66
+ }
67
+ } else {
68
+ // Just perform simple overwrite
69
+ fileContents = (await (0, _promises.readFile)(templatePath)).toString();
70
+ }
71
+ await (0, _fsextra.outputFile)(filePath, fileContents);
72
+ return {
73
+ ignoredDueToLocal: false,
74
+ localChanges
75
+ };
76
+ }
77
+ /**
78
+ * Simple helper function to ensure that we don't let bad plugins corrupt the call flow
79
+ * @param plugin
80
+ */ async function safeMerge(plugin, pluginPath, current, fromTemplate, context) {
81
+ const ret = await plugin.merge(current, fromTemplate, context);
82
+ if (typeof ret !== "string") {
83
+ throw new Error(`Plugin ${pluginPath} did not return string for merge function! This is not allowed!`);
84
+ }
85
+ if (!ret) {
86
+ throw new Error(`Plugin ${pluginPath} should not make a merge be an empty string!`);
87
+ }
88
+ return ret;
89
+ }
90
+
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXJnZS1maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2hhbmdlIH0gZnJvbSBcImRpZmZcIjtcbmltcG9ydCB7IGRpZmZMaW5lcyB9IGZyb20gXCJkaWZmXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IG91dHB1dEZpbGUgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7IGlzTWF0Y2gsIHNvbWUgfSBmcm9tIFwibWljcm9tYXRjaFwiO1xuaW1wb3J0IHsgZXh0bmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2FkUGx1Z2luIH0gZnJvbSBcIi4vbG9hZC1wbHVnaW5cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnLCBGaWxlT3BlcmF0aW9uLCBNZXJnZUNvbnRleHQsIE1lcmdlUGx1Z2luIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW50ZXJmYWNlIE1lcmdlRmlsZU9wdGlvbnMge1xuXHRsb2NhbFRlbXBsYXRlU3luY0NvbmZpZzogQ29uZmlnO1xuXHR0ZW1wbGF0ZVN5bmNDb25maWc6IENvbmZpZztcblx0dGVtcENsb25lRGlyOiBzdHJpbmc7XG5cdGN3ZDogc3RyaW5nO1xuXHRmaWxlT3BlcmF0aW9uOiBGaWxlT3BlcmF0aW9uO1xufVxuXG5pbnRlcmZhY2UgTWVyZ2VGaWxlUmV0dXJuIHtcblx0LyoqXG5cdCAqIElmIHRoZSBmaWxlIHdhcyBpZ25vcmVkIGR1ZSB0byB0aGUgbG9jYWwgY29uZmlnXG5cdCAqL1xuXHRpZ25vcmVkRHVlVG9Mb2NhbDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIE9ubHkgYXZhaWxhYmxlIGlmIHRoZSBmaWxlIHdhc24ndCBpZ25vcmVkLCB0aGlzIGlzIGEgbGlzdCBvZiBsaW5lRGlmZnNcblx0ICogZnJvbSB0aGUgZGlmZiBsaWJyYXJ5IHRoYXQgd2VyZSBhcHBsaWVkIHRvIHdoYXQgd291bGQndmUgYmVlbiBjaGFuZ2VkIGJ5XG5cdCAqIHRoZSBiYXNlIHRlbXBsYXRlc3luYyByZXBvXG5cdCAqL1xuXHRsb2NhbENoYW5nZXM/OiBDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBtZXJnZSB0byBhIGZpbGUgYWNjb3JkaW5nIHRvIHRoZSBjb250ZXh0IGluZm9ybWF0aW9uLlxuICpcbiAqIFJldHVybnMgdHJ1ZSBpZiBtZXJnZWQgYW5kIGZhbHNlIGlmIHNraXBwZWRcbiAqIEBwYXJhbSByZWxQYXRoXG4gKiBAcGFyYW0gY29udGV4dFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1lcmdlRmlsZShcblx0cmVsUGF0aDogc3RyaW5nLFxuXHRjb250ZXh0OiBNZXJnZUZpbGVPcHRpb25zLFxuKTogUHJvbWlzZTxNZXJnZUZpbGVSZXR1cm4+IHtcblx0Y29uc3QgeyBsb2NhbFRlbXBsYXRlU3luY0NvbmZpZywgdGVtcGxhdGVTeW5jQ29uZmlnLCB0ZW1wQ2xvbmVEaXIsIGN3ZCB9ID1cblx0XHRjb250ZXh0O1xuXG5cdGlmIChzb21lKHJlbFBhdGgsIGxvY2FsVGVtcGxhdGVTeW5jQ29uZmlnLmlnbm9yZSkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWdub3JlZER1ZVRvTG9jYWw6IHRydWUsXG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0IGV4dCA9IGV4dG5hbWUocmVsUGF0aCk7XG5cdGNvbnN0IGZpbGVQYXRoID0gam9pbihjd2QsIHJlbFBhdGgpO1xuXHRjb25zdCB0ZW1wbGF0ZVBhdGggPSBqb2luKHRlbXBDbG9uZURpciwgcmVsUGF0aCk7XG5cblx0Ly8gVW5sZXNzIHRoZXJlJ3MgYSBuZWVkLCB3ZSByZW1vdmUgZmlsZXMgdGhhdCB3ZXJlIGRlbGV0ZWQgYW5kIGRvbid0IHBhc3MgdGhlbSB0byBwbHVnaW5zIHlldFxuXHRpZiAoY29udGV4dC5maWxlT3BlcmF0aW9uID09PSBcImRlbGV0ZWRcIikge1xuXHRcdGlmIChleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuXHRcdFx0YXdhaXQgcm0oZmlsZVBhdGgpO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0aWdub3JlZER1ZVRvTG9jYWw6IGZhbHNlLFxuXHRcdFx0bG9jYWxDaGFuZ2VzOiBbXSxcblx0XHR9O1xuXHR9XG5cblx0Y29uc3QgbWVyZ2VDb25maWcgPSB0ZW1wbGF0ZVN5bmNDb25maWcubWVyZ2U/LmZpbmQoKG1jKSA9PlxuXHRcdGlzTWF0Y2gocmVsUGF0aCwgbWMuZ2xvYiksXG5cdCk7XG5cdGNvbnN0IGxvY2FsTWVyZ2VDb25maWcgPSBsb2NhbFRlbXBsYXRlU3luY0NvbmZpZy5tZXJnZT8uZmluZCgobWMpID0+XG5cdFx0aXNNYXRjaChyZWxQYXRoLCBtYy5nbG9iKSxcblx0KTtcblxuXHRjb25zdCBtZXJnZUhhbmRsZXIgPSBtZXJnZUNvbmZpZ1xuXHRcdD8gYXdhaXQgbG9hZFBsdWdpbihtZXJnZUNvbmZpZywgdGVtcENsb25lRGlyKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBsb2NhbE1lcmdlSGFuZGxlciA9IGxvY2FsTWVyZ2VDb25maWdcblx0XHQ/IGF3YWl0IGxvYWRQbHVnaW4obG9jYWxNZXJnZUNvbmZpZywgY3dkKVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdC8vIEVpdGhlciB3cml0ZSB0aGUgbWVyZ2Ugb3Igd3JpdGUgdGhlIGZpbGVcblx0bGV0IGZpbGVDb250ZW50czogc3RyaW5nO1xuXHRjb25zdCBsb2NhbENoYW5nZXM6IENoYW5nZVtdID0gW107XG5cdGlmIChleGlzdHNTeW5jKGZpbGVQYXRoKSAmJiAobWVyZ2VIYW5kbGVyIHx8IGxvY2FsTWVyZ2VIYW5kbGVyKSkge1xuXHRcdGNvbnN0IG9yaWdpbmFsQ3VycmVudEZpbGUgPSAoYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpKS50b1N0cmluZygpO1xuXHRcdGlmIChtZXJnZUhhbmRsZXIpIHtcblx0XHRcdGZpbGVDb250ZW50cyA9IGF3YWl0IHNhZmVNZXJnZShcblx0XHRcdFx0bWVyZ2VIYW5kbGVyLFxuXHRcdFx0XHRtZXJnZUNvbmZpZz8ucGx1Z2luID8/IGBkZWZhdWx0IGZvciAke2V4dH1gLFxuXHRcdFx0XHRvcmlnaW5hbEN1cnJlbnRGaWxlLFxuXHRcdFx0XHQoYXdhaXQgcmVhZEZpbGUodGVtcGxhdGVQYXRoKSkudG9TdHJpbmcoKSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHJlbEZpbGVQYXRoOiByZWxQYXRoLFxuXHRcdFx0XHRcdG1lcmdlQXJndW1lbnRzOiBtZXJnZUNvbmZpZz8ub3B0aW9ucyA/PyB7fSxcblx0XHRcdFx0XHRpc0xvY2FsT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBcHBseSBvdmVyd3JpdGUgaWYgd2UgZGlkbid0IHNldCB1cCBtZXJnZVxuXHRcdFx0ZmlsZUNvbnRlbnRzID0gKGF3YWl0IHJlYWRGaWxlKHRlbXBsYXRlUGF0aCkpLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgYXBwbHkgdGhlIGxvY2FsTWVyZ2UgQ29uZmlnIHRvIHRoZSBmaWxlQ29udGVudCBvdXRwdXQgYnkgdGhlIHRlbXBsYXRlIG1lcmdlXG5cdFx0aWYgKGxvY2FsTWVyZ2VIYW5kbGVyKSB7XG5cdFx0XHRjb25zdCBsb2NhbENvbnRlbnRzID0gYXdhaXQgc2FmZU1lcmdlKFxuXHRcdFx0XHRsb2NhbE1lcmdlSGFuZGxlcixcblx0XHRcdFx0bG9jYWxNZXJnZUNvbmZpZz8ucGx1Z2luID8/IGBkZWZhdWx0IGZvciAke2V4dH1gLFxuXHRcdFx0XHRvcmlnaW5hbEN1cnJlbnRGaWxlLFxuXHRcdFx0XHRmaWxlQ29udGVudHMsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRyZWxGaWxlUGF0aDogcmVsUGF0aCxcblx0XHRcdFx0XHRtZXJnZUFyZ3VtZW50czogbG9jYWxNZXJnZUNvbmZpZz8ub3B0aW9ucyA/PyB7fSxcblx0XHRcdFx0XHRpc0xvY2FsT3B0aW9uczogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cdFx0XHRsb2NhbENoYW5nZXMucHVzaCguLi5kaWZmTGluZXMoZmlsZUNvbnRlbnRzLCBsb2NhbENvbnRlbnRzKSk7XG5cdFx0XHRmaWxlQ29udGVudHMgPSBsb2NhbENvbnRlbnRzO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBKdXN0IHBlcmZvcm0gc2ltcGxlIG92ZXJ3cml0ZVxuXHRcdGZpbGVDb250ZW50cyA9IChhd2FpdCByZWFkRmlsZSh0ZW1wbGF0ZVBhdGgpKS50b1N0cmluZygpO1xuXHR9XG5cdGF3YWl0IG91dHB1dEZpbGUoZmlsZVBhdGgsIGZpbGVDb250ZW50cyk7XG5cdHJldHVybiB7XG5cdFx0aWdub3JlZER1ZVRvTG9jYWw6IGZhbHNlLFxuXHRcdGxvY2FsQ2hhbmdlcyxcblx0fTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgaGVscGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGxldCBiYWQgcGx1Z2lucyBjb3JydXB0IHRoZSBjYWxsIGZsb3dcbiAqIEBwYXJhbSBwbHVnaW5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2FmZU1lcmdlKFxuXHRwbHVnaW46IE1lcmdlUGx1Z2luPHVua25vd24+LFxuXHRwbHVnaW5QYXRoOiBzdHJpbmcsXG5cdGN1cnJlbnQ6IHN0cmluZyxcblx0ZnJvbVRlbXBsYXRlOiBzdHJpbmcsXG5cdGNvbnRleHQ6IE1lcmdlQ29udGV4dCxcbikge1xuXHRjb25zdCByZXQgPSBhd2FpdCBwbHVnaW4ubWVyZ2UoY3VycmVudCwgZnJvbVRlbXBsYXRlLCBjb250ZXh0KTtcblx0aWYgKHR5cGVvZiByZXQgIT09IFwic3RyaW5nXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgUGx1Z2luICR7cGx1Z2luUGF0aH0gZGlkIG5vdCByZXR1cm4gc3RyaW5nIGZvciBtZXJnZSBmdW5jdGlvbiEgIFRoaXMgaXMgbm90IGFsbG93ZWQhYCxcblx0XHQpO1xuXHR9XG5cblx0aWYgKCFyZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgUGx1Z2luICR7cGx1Z2luUGF0aH0gc2hvdWxkIG5vdCBtYWtlIGEgbWVyZ2UgYmUgYW4gZW1wdHkgc3RyaW5nIWAsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gcmV0IGFzIHN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJtZXJnZUZpbGUiLCJyZWxQYXRoIiwiY29udGV4dCIsImxvY2FsVGVtcGxhdGVTeW5jQ29uZmlnIiwidGVtcGxhdGVTeW5jQ29uZmlnIiwidGVtcENsb25lRGlyIiwiY3dkIiwic29tZSIsImlnbm9yZSIsImlnbm9yZWREdWVUb0xvY2FsIiwiZXh0IiwiZXh0bmFtZSIsImZpbGVQYXRoIiwiam9pbiIsInRlbXBsYXRlUGF0aCIsImZpbGVPcGVyYXRpb24iLCJleGlzdHNTeW5jIiwicm0iLCJsb2NhbENoYW5nZXMiLCJtZXJnZUNvbmZpZyIsIm1lcmdlIiwiZmluZCIsIm1jIiwiaXNNYXRjaCIsImdsb2IiLCJsb2NhbE1lcmdlQ29uZmlnIiwibWVyZ2VIYW5kbGVyIiwibG9hZFBsdWdpbiIsInVuZGVmaW5lZCIsImxvY2FsTWVyZ2VIYW5kbGVyIiwiZmlsZUNvbnRlbnRzIiwib3JpZ2luYWxDdXJyZW50RmlsZSIsInJlYWRGaWxlIiwidG9TdHJpbmciLCJzYWZlTWVyZ2UiLCJwbHVnaW4iLCJyZWxGaWxlUGF0aCIsIm1lcmdlQXJndW1lbnRzIiwib3B0aW9ucyIsImlzTG9jYWxPcHRpb25zIiwibG9jYWxDb250ZW50cyIsInB1c2giLCJkaWZmTGluZXMiLCJvdXRwdXRGaWxlIiwicGx1Z2luUGF0aCIsImN1cnJlbnQiLCJmcm9tVGVtcGxhdGUiLCJyZXQiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1Q3NCQTs7O2VBQUFBOzs7c0JBdENJO29CQUNDOzBCQUNFO3lCQUNGOzRCQUNHO3NCQUNBOzRCQUNIO0FBZ0NwQixlQUFlQSxVQUNyQkMsT0FBZSxFQUNmQyxPQUF5QjtJQUV6QixNQUFNLEVBQUVDLHVCQUF1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