bingo-handlebars 0.1.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 (215) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +13 -0
  3. package/lib/createHandlebars.d.ts +3 -0
  4. package/lib/createHandlebars.d.ts.map +1 -0
  5. package/lib/createHandlebars.js +18 -0
  6. package/lib/createHandlebars.js.map +1 -0
  7. package/lib/creators/assertNoDuplicateBlocks.d.ts +3 -0
  8. package/lib/creators/assertNoDuplicateBlocks.d.ts.map +1 -0
  9. package/lib/creators/assertNoDuplicateBlocks.js +13 -0
  10. package/lib/creators/assertNoDuplicateBlocks.js.map +1 -0
  11. package/lib/creators/assertNoPresetOption.d.ts +4 -0
  12. package/lib/creators/assertNoPresetOption.d.ts.map +1 -0
  13. package/lib/creators/assertNoPresetOption.js +8 -0
  14. package/lib/creators/assertNoPresetOption.js.map +1 -0
  15. package/lib/creators/createBase.d.ts +4 -0
  16. package/lib/creators/createBase.d.ts.map +1 -0
  17. package/lib/creators/createBase.js +63 -0
  18. package/lib/creators/createBase.js.map +1 -0
  19. package/lib/creators/createBase.test.d.ts +2 -0
  20. package/lib/creators/createBase.test.d.ts.map +1 -0
  21. package/lib/creators/createBase.test.js +56 -0
  22. package/lib/creators/createBase.test.js.map +1 -0
  23. package/lib/creators/utils.d.ts +4 -0
  24. package/lib/creators/utils.d.ts.map +1 -0
  25. package/lib/creators/utils.js +8 -0
  26. package/lib/creators/utils.js.map +1 -0
  27. package/lib/executeTemplate.d.ts +2 -0
  28. package/lib/executeTemplate.d.ts.map +1 -0
  29. package/lib/executeTemplate.js +5 -0
  30. package/lib/executeTemplate.js.map +1 -0
  31. package/lib/executeTemplate.test copy.d.ts +2 -0
  32. package/lib/executeTemplate.test copy.d.ts.map +1 -0
  33. package/lib/executeTemplate.test copy.js +22 -0
  34. package/lib/executeTemplate.test copy.js.map +1 -0
  35. package/lib/executeTemplate.test.d.ts +2 -0
  36. package/lib/executeTemplate.test.d.ts.map +1 -0
  37. package/lib/executeTemplate.test.js +11 -0
  38. package/lib/executeTemplate.test.js.map +1 -0
  39. package/lib/executeTemplatesRecursive.d.ts +3 -0
  40. package/lib/executeTemplatesRecursive.d.ts.map +1 -0
  41. package/lib/executeTemplatesRecursive.js +16 -0
  42. package/lib/executeTemplatesRecursive.js.map +1 -0
  43. package/lib/executeTemplatesRecursive.test.d.ts +2 -0
  44. package/lib/executeTemplatesRecursive.test.d.ts.map +1 -0
  45. package/lib/executeTemplatesRecursive.test.js +32 -0
  46. package/lib/executeTemplatesRecursive.test.js.map +1 -0
  47. package/lib/getFileFromPath.d.ts +3 -0
  48. package/lib/getFileFromPath.d.ts.map +1 -0
  49. package/lib/getFileFromPath.js +17 -0
  50. package/lib/getFileFromPath.js.map +1 -0
  51. package/lib/getSourceFromDirectory.d.ts +3 -0
  52. package/lib/getSourceFromDirectory.d.ts.map +1 -0
  53. package/lib/getSourceFromDirectory.js +18 -0
  54. package/lib/getSourceFromDirectory.js.map +1 -0
  55. package/lib/getSourceFromDirectory.test.d.ts +2 -0
  56. package/lib/getSourceFromDirectory.test.d.ts.map +1 -0
  57. package/lib/getSourceFromDirectory.test.js +35 -0
  58. package/lib/getSourceFromDirectory.test.js.map +1 -0
  59. package/lib/getSourceFromPath.d.ts +3 -0
  60. package/lib/getSourceFromPath.d.ts.map +1 -0
  61. package/lib/getSourceFromPath.js +14 -0
  62. package/lib/getSourceFromPath.js.map +1 -0
  63. package/lib/getSourceFromPath.test.d.ts +2 -0
  64. package/lib/getSourceFromPath.test.d.ts.map +1 -0
  65. package/lib/getSourceFromPath.test.js +5 -0
  66. package/lib/getSourceFromPath.test.js.map +1 -0
  67. package/lib/handlebars copy.d.ts +2 -0
  68. package/lib/handlebars copy.d.ts.map +1 -0
  69. package/lib/handlebars copy.js +13 -0
  70. package/lib/handlebars copy.js.map +1 -0
  71. package/lib/handlebars.d.ts +2 -0
  72. package/lib/handlebars.d.ts.map +1 -0
  73. package/lib/handlebars.js +10 -0
  74. package/lib/handlebars.js.map +1 -0
  75. package/lib/handlebars.test.d.ts +2 -0
  76. package/lib/handlebars.test.d.ts.map +1 -0
  77. package/lib/handlebars.test.js +24 -0
  78. package/lib/handlebars.test.js.map +1 -0
  79. package/lib/index.d.ts +3 -0
  80. package/lib/index.d.ts.map +1 -0
  81. package/lib/index.js +3 -0
  82. package/lib/index.js.map +1 -0
  83. package/lib/loadHandlebars.d.ts +2 -0
  84. package/lib/loadHandlebars.d.ts.map +1 -0
  85. package/lib/loadHandlebars.js +20 -0
  86. package/lib/loadHandlebars.js.map +1 -0
  87. package/lib/loadHandlebars.test.d.ts +2 -0
  88. package/lib/loadHandlebars.test.d.ts.map +1 -0
  89. package/lib/loadHandlebars.test.js +30 -0
  90. package/lib/loadHandlebars.test.js.map +1 -0
  91. package/lib/mergers/mergeAddons.d.ts +3 -0
  92. package/lib/mergers/mergeAddons.d.ts.map +1 -0
  93. package/lib/mergers/mergeAddons.js +37 -0
  94. package/lib/mergers/mergeAddons.js.map +1 -0
  95. package/lib/mergers/mergeAddons.test.d.ts +2 -0
  96. package/lib/mergers/mergeAddons.test.d.ts.map +1 -0
  97. package/lib/mergers/mergeAddons.test.js +174 -0
  98. package/lib/mergers/mergeAddons.test.js.map +1 -0
  99. package/lib/mergers/mergeAddonsIfUpdated.d.ts +2 -0
  100. package/lib/mergers/mergeAddonsIfUpdated.d.ts.map +1 -0
  101. package/lib/mergers/mergeAddonsIfUpdated.js +53 -0
  102. package/lib/mergers/mergeAddonsIfUpdated.js.map +1 -0
  103. package/lib/mergers/mergeAddonsIfUpdated.test.d.ts +2 -0
  104. package/lib/mergers/mergeAddonsIfUpdated.test.d.ts.map +1 -0
  105. package/lib/mergers/mergeAddonsIfUpdated.test.js +51 -0
  106. package/lib/mergers/mergeAddonsIfUpdated.test.js.map +1 -0
  107. package/lib/mergers/mergeBlockCreations.d.ts +9 -0
  108. package/lib/mergers/mergeBlockCreations.d.ts.map +1 -0
  109. package/lib/mergers/mergeBlockCreations.js +10 -0
  110. package/lib/mergers/mergeBlockCreations.js.map +1 -0
  111. package/lib/predicates/isBase.d.ts +3 -0
  112. package/lib/predicates/isBase.d.ts.map +1 -0
  113. package/lib/predicates/isBase.js +10 -0
  114. package/lib/predicates/isBase.js.map +1 -0
  115. package/lib/predicates/isBase.test.d.ts +2 -0
  116. package/lib/predicates/isBase.test.d.ts.map +1 -0
  117. package/lib/predicates/isBase.test.js +21 -0
  118. package/lib/predicates/isBase.test.js.map +1 -0
  119. package/lib/predicates/isPreset.d.ts +3 -0
  120. package/lib/predicates/isPreset.d.ts.map +1 -0
  121. package/lib/predicates/isPreset.js +13 -0
  122. package/lib/predicates/isPreset.js.map +1 -0
  123. package/lib/predicates/isPreset.test.d.ts +2 -0
  124. package/lib/predicates/isPreset.test.d.ts.map +1 -0
  125. package/lib/predicates/isPreset.test.js +25 -0
  126. package/lib/predicates/isPreset.test.js.map +1 -0
  127. package/lib/predicates/isPresetAbout.d.ts +3 -0
  128. package/lib/predicates/isPresetAbout.d.ts.map +1 -0
  129. package/lib/predicates/isPresetAbout.js +4 -0
  130. package/lib/predicates/isPresetAbout.js.map +1 -0
  131. package/lib/predicates/isPresetAbout.test.d.ts +2 -0
  132. package/lib/predicates/isPresetAbout.test.d.ts.map +1 -0
  133. package/lib/predicates/isPresetAbout.test.js +16 -0
  134. package/lib/predicates/isPresetAbout.test.js.map +1 -0
  135. package/lib/producers/applyBlockModifications.d.ts +4 -0
  136. package/lib/producers/applyBlockModifications.d.ts.map +1 -0
  137. package/lib/producers/applyBlockModifications.js +14 -0
  138. package/lib/producers/applyBlockModifications.js.map +1 -0
  139. package/lib/producers/applyBlockModifications.test.d.ts +2 -0
  140. package/lib/producers/applyBlockModifications.test.d.ts.map +1 -0
  141. package/lib/producers/applyBlockModifications.test.js +42 -0
  142. package/lib/producers/applyBlockModifications.test.js.map +1 -0
  143. package/lib/producers/getUpdatedBlockAddons.d.ts +9 -0
  144. package/lib/producers/getUpdatedBlockAddons.d.ts.map +1 -0
  145. package/lib/producers/getUpdatedBlockAddons.js +20 -0
  146. package/lib/producers/getUpdatedBlockAddons.js.map +1 -0
  147. package/lib/producers/produceBlock.d.ts +15 -0
  148. package/lib/producers/produceBlock.d.ts.map +1 -0
  149. package/lib/producers/produceBlock.js +14 -0
  150. package/lib/producers/produceBlock.js.map +1 -0
  151. package/lib/producers/produceBlocks.d.ts +11 -0
  152. package/lib/producers/produceBlocks.d.ts.map +1 -0
  153. package/lib/producers/produceBlocks.js +46 -0
  154. package/lib/producers/produceBlocks.js.map +1 -0
  155. package/lib/producers/produceBlocks.test.d.ts +2 -0
  156. package/lib/producers/produceBlocks.test.d.ts.map +1 -0
  157. package/lib/producers/produceBlocks.test.js +145 -0
  158. package/lib/producers/produceBlocks.test.js.map +1 -0
  159. package/lib/producers/producePreset.d.ts +10 -0
  160. package/lib/producers/producePreset.d.ts.map +1 -0
  161. package/lib/producers/producePreset.js +20 -0
  162. package/lib/producers/producePreset.js.map +1 -0
  163. package/lib/producers/producePreset.test.d.ts +2 -0
  164. package/lib/producers/producePreset.test.d.ts.map +1 -0
  165. package/lib/producers/producePreset.test.js +88 -0
  166. package/lib/producers/producePreset.test.js.map +1 -0
  167. package/lib/producers/produceStratumTemplate.d.ts +15 -0
  168. package/lib/producers/produceStratumTemplate.d.ts.map +1 -0
  169. package/lib/producers/produceStratumTemplate.js +17 -0
  170. package/lib/producers/produceStratumTemplate.js.map +1 -0
  171. package/lib/producers/produceStratumTemplate.test.d.ts +2 -0
  172. package/lib/producers/produceStratumTemplate.test.d.ts.map +1 -0
  173. package/lib/producers/produceStratumTemplate.test.js +134 -0
  174. package/lib/producers/produceStratumTemplate.test.js.map +1 -0
  175. package/lib/runners/runBlock.d.ts +17 -0
  176. package/lib/runners/runBlock.d.ts.map +1 -0
  177. package/lib/runners/runBlock.js +11 -0
  178. package/lib/runners/runBlock.js.map +1 -0
  179. package/lib/runners/runBlock.test.d.ts +2 -0
  180. package/lib/runners/runBlock.test.d.ts.map +1 -0
  181. package/lib/runners/runBlock.test.js +136 -0
  182. package/lib/runners/runBlock.test.js.map +1 -0
  183. package/lib/types/bases.d.ts +25 -0
  184. package/lib/types/bases.d.ts.map +1 -0
  185. package/lib/types/bases.js +2 -0
  186. package/lib/types/bases.js.map +1 -0
  187. package/lib/types/blocks.d.ts +51 -0
  188. package/lib/types/blocks.d.ts.map +1 -0
  189. package/lib/types/blocks.js +2 -0
  190. package/lib/types/blocks.js.map +1 -0
  191. package/lib/types/creations.d.ts +10 -0
  192. package/lib/types/creations.d.ts.map +1 -0
  193. package/lib/types/creations.js +2 -0
  194. package/lib/types/creations.js.map +1 -0
  195. package/lib/types/presets.d.ts +16 -0
  196. package/lib/types/presets.d.ts.map +1 -0
  197. package/lib/types/presets.js +2 -0
  198. package/lib/types/presets.js.map +1 -0
  199. package/lib/types/settings.d.ts +9 -0
  200. package/lib/types/settings.d.ts.map +1 -0
  201. package/lib/types/settings.js +2 -0
  202. package/lib/types/settings.js.map +1 -0
  203. package/lib/types/templates.d.ts +31 -0
  204. package/lib/types/templates.d.ts.map +1 -0
  205. package/lib/types/templates.js +2 -0
  206. package/lib/types/templates.js.map +1 -0
  207. package/lib/utils.ts/getPresetByName.d.ts +4 -0
  208. package/lib/utils.ts/getPresetByName.d.ts.map +1 -0
  209. package/lib/utils.ts/getPresetByName.js +7 -0
  210. package/lib/utils.ts/getPresetByName.js.map +1 -0
  211. package/lib/utils.ts/slugifyPresetName.d.ts +2 -0
  212. package/lib/utils.ts/slugifyPresetName.d.ts.map +1 -0
  213. package/lib/utils.ts/slugifyPresetName.js +6 -0
  214. package/lib/utils.ts/slugifyPresetName.js.map +1 -0
  215. package/package.json +38 -0
package/LICENSE.md ADDED
@@ -0,0 +1,20 @@
1
+ # MIT License
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ <h1 align="center">bingo-handlebars</h1>
2
+
3
+ <p align="center">Use <a href="https://handlebarsjs.com/">Handlebars</a> templates for files in <a href="https://create.bingo">Bingo</a> templates. 🥸</p>
4
+
5
+ <p align="center">
6
+ <a href="https://github.com/JoshuaKGoldberg/bingo/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="🤝 Code of Conduct: Kept" src="https://img.shields.io/badge/%F0%9F%A4%9D_code_of_conduct-kept-21bb42" /></a>
7
+ <a href="https://codecov.io/gh/JoshuaKGoldberg/bingo" target="_blank"><img alt="🧪 Coverage" src="https://img.shields.io/codecov/c/github/JoshuaKGoldberg/bingo?label=%F0%9F%A7%AA%20coverage" /></a>
8
+ <a href="https://github.com/JoshuaKGoldberg/bingo/blob/main/LICENSE.md" target="_blank"><img alt="📝 License: MIT" src="https://img.shields.io/badge/%F0%9F%93%9D_license-MIT-21bb42.svg"></a>
9
+ <a href="http://npmjs.com/package/bingo-testers"><img alt="📦 npm version" src="https://img.shields.io/npm/v/bingo-testers?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
10
+ <img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
11
+ </p>
12
+
13
+ See **[create.bingo > Templating Engines > Handlebars](https://create.bingo/engines/handlebars)** for documentation.
@@ -0,0 +1,3 @@
1
+ import Handlebars from "handlebars";
2
+ export declare function loadHandlebars(directoryPath: string, instance?: typeof Handlebars): Promise<(sourcePath: string, options?: object) => import("bingo-fs").CreatedFileEntry | undefined>;
3
+ //# sourceMappingURL=createHandlebars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHandlebars.d.ts","sourceRoot":"","sources":["../src/createHandlebars.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AAKpC,wBAAsB,cAAc,CACnC,aAAa,EAAE,MAAM,EACrB,QAAQ,oBAA0B,wBAgBK,MAAM,YAAY,MAAM,sDAI/D"}
@@ -0,0 +1,18 @@
1
+ import { intake } from "bingo-fs";
2
+ import Handlebars from "handlebars";
3
+ import { executeTemplatesRecursive } from "./executeTemplatesRecursive.js";
4
+ import { getFileFromPath } from "./getFileFromPath.js";
5
+ export async function loadHandlebars(directoryPath, instance = Handlebars.noConflict()) {
6
+ const sources = await intake(directoryPath);
7
+ if (Array.isArray(sources)) {
8
+ throw new Error(`loadHandlebars() must be given a path to a directory, but '${directoryPath}' is a file.`);
9
+ }
10
+ if (typeof sources !== "object") {
11
+ throw new Error(`loadHandlebars() must be given a path to a directory, but '${directoryPath}' does not exist.`);
12
+ }
13
+ return function handlebars(sourcePath, options) {
14
+ const source = getFileFromPath(sources, sourcePath);
15
+ return executeTemplatesRecursive(instance, source, options);
16
+ };
17
+ }
18
+ //# sourceMappingURL=createHandlebars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHandlebars.js","sourceRoot":"","sources":["../src/createHandlebars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,aAAqB,EACrB,QAAQ,GAAG,UAAU,CAAC,UAAU,EAAE;IAElC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAE5C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACd,8DAA8D,aAAa,cAAc,CACzF,CAAC;IACH,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACd,8DAA8D,aAAa,mBAAmB,CAC9F,CAAC;IACH,CAAC;IAED,OAAO,SAAS,UAAU,CAAC,UAAkB,EAAE,OAAgB;QAC9D,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { PresetDefinition } from "../types/presets.js";
2
+ export declare function assertNoDuplicateBlocks<Options extends object>(presetDefinition: PresetDefinition<Options>): void;
3
+ //# sourceMappingURL=assertNoDuplicateBlocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNoDuplicateBlocks.d.ts","sourceRoot":"","sources":["../../src/creators/assertNoDuplicateBlocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAC7D,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAY3C"}
@@ -0,0 +1,13 @@
1
+ export function assertNoDuplicateBlocks(presetDefinition) {
2
+ const presetName = getName(presetDefinition);
3
+ const seen = new Set();
4
+ for (const block of presetDefinition.blocks) {
5
+ if (seen.has(block)) {
6
+ throw new Error(`Preset ${presetName} has duplicate Block: ${getName(block)}`);
7
+ }
8
+ }
9
+ }
10
+ function getName(value) {
11
+ return value.about?.name ?? "(anonymous)";
12
+ }
13
+ //# sourceMappingURL=assertNoDuplicateBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNoDuplicateBlocks.js","sourceRoot":"","sources":["../../src/creators/assertNoDuplicateBlocks.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,uBAAuB,CACtC,gBAA2C;IAE3C,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACd,UAAU,UAAU,yBAAyB,OAAO,CAAC,KAAK,CAAC,EAAE,CAC7D,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,OAAO,CAAC,KAA4B;IAC5C,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { AnyShape } from "bingo";
2
+ import { BaseDefinition } from "../types/bases.js";
3
+ export declare function assertNoPresetOption<OptionsShape extends AnyShape>(baseDefinition: BaseDefinition<OptionsShape>): void;
4
+ //# sourceMappingURL=assertNoPresetOption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNoPresetOption.d.ts","sourceRoot":"","sources":["../../src/creators/assertNoPresetOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,YAAY,SAAS,QAAQ,EACjE,cAAc,EAAE,cAAc,CAAC,YAAY,CAAC,QAO5C"}
@@ -0,0 +1,8 @@
1
+ export function assertNoPresetOption(baseDefinition) {
2
+ // https://github.com/typescript-eslint/typescript-eslint/issues/6632
3
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
4
+ if (baseDefinition.options.preset) {
5
+ throw new Error(`Bases should not declare a preset option.`);
6
+ }
7
+ }
8
+ //# sourceMappingURL=assertNoPresetOption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNoPresetOption.js","sourceRoot":"","sources":["../../src/creators/assertNoPresetOption.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,oBAAoB,CACnC,cAA4C;IAE5C,qEAAqE;IACrE,uEAAuE;IACvE,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { AnyShape } from "bingo";
2
+ import { Base, BaseDefinition } from "../types/bases.js";
3
+ export declare function createBase<OptionsShape extends AnyShape>(baseDefinition: BaseDefinition<OptionsShape>): Base<OptionsShape>;
4
+ //# sourceMappingURL=createBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBase.d.ts","sourceRoot":"","sources":["../../src/creators/createBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAInE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAmBzD,wBAAgB,UAAU,CAAC,YAAY,SAAS,QAAQ,EACvD,cAAc,EAAE,cAAc,CAAC,YAAY,CAAC,GAC1C,IAAI,CAAC,YAAY,CAAC,CA6FpB"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ import { produceStratumTemplate } from "../producers/produceStratumTemplate.js";
3
+ import { slugifyPresetName } from "../utils.ts/slugifyPresetName.js";
4
+ import { assertNoDuplicateBlocks } from "./assertNoDuplicateBlocks.js";
5
+ import { assertNoPresetOption } from "./assertNoPresetOption.js";
6
+ import { applyZodDefaults, isDefinitionWithAddons } from "./utils.js";
7
+ export function createBase(baseDefinition) {
8
+ assertNoPresetOption(baseDefinition);
9
+ function createBlock(blockDefinition) {
10
+ // Blocks without Addons can't be called as functions.
11
+ if (!isDefinitionWithAddons(blockDefinition)) {
12
+ return blockDefinition;
13
+ }
14
+ const addonsSchema = blockDefinition.addons;
15
+ // Blocks with Addons do need to be callable as functions...
16
+ function block(addons) {
17
+ return { addons, block };
18
+ }
19
+ // ...and also still have the Block Definition properties.
20
+ Object.assign(block, blockDefinition);
21
+ block.produce = (context) => {
22
+ return blockDefinition.produce({
23
+ ...context,
24
+ addons: applyZodDefaults(addonsSchema, context.addons),
25
+ });
26
+ };
27
+ return block;
28
+ }
29
+ function createPreset(presetDefinition) {
30
+ assertNoDuplicateBlocks(presetDefinition);
31
+ return {
32
+ ...presetDefinition,
33
+ base,
34
+ };
35
+ }
36
+ function createStratumTemplate(templateDefinition) {
37
+ const presetOption = z
38
+ .union(templateDefinition.presets.map((preset) => z.literal(slugifyPresetName(preset.about.name))))
39
+ .describe("starting set of tooling to use");
40
+ const template = {
41
+ ...templateDefinition,
42
+ base,
43
+ options: {
44
+ ...base.options,
45
+ preset: presetOption.default(slugifyPresetName((templateDefinition.suggested ?? templateDefinition.presets[0])
46
+ .about.name)), // TODO: why don't the types allow a ZodDefault here?
47
+ },
48
+ prepare: base.prepare,
49
+ produce(context) {
50
+ return produceStratumTemplate(template, context);
51
+ },
52
+ };
53
+ return template;
54
+ }
55
+ const base = {
56
+ ...baseDefinition,
57
+ createBlock,
58
+ createPreset,
59
+ createStratumTemplate,
60
+ };
61
+ return base;
62
+ }
63
+ //# sourceMappingURL=createBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBase.js","sourceRoot":"","sources":["../../src/creators/createBase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAehF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,UAAU,UAAU,CACzB,cAA4C;IAI5C,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAQrC,SAAS,WAAW,CACnB,eAEwC;QAExC,sDAAsD;QACtD,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,OAAO,eAAe,CAAC;QACxB,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;QAI5C,4DAA4D;QAC5D,SAAS,KAAK,CAAC,MAAc;YAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAEtC,KAAK,CAAC,OAAO,GAAG,CAAC,OAAgD,EAAE,EAAE;YACpE,OAAO,eAAe,CAAC,OAAO,CAAC;gBAC9B,GAAG,OAAO;gBACV,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC;aACtD,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,KAAyC,CAAC;IAClD,CAAC;IAED,SAAS,YAAY,CACpB,gBAA2C;QAE3C,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAE1C,OAAO;YACN,GAAG,gBAAgB;YACnB,IAAI;SACJ,CAAC;IACH,CAAC;IAED,SAAS,qBAAqB,CAC7B,kBAA2D;QAE3D,MAAM,YAAY,GAAG,CAAC;aACpB,KAAK,CACL,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACzC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACtB,CAC1B;aACA,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAkC;YAC/C,GAAG,kBAAkB;YACrB,IAAI;YACJ,OAAO,EAAE;gBACR,GAAG,IAAI,CAAC,OAAO;gBACf,MAAM,EAAE,YAAY,CAAC,OAAO,CAC3B,iBAAiB,CAChB,CAAC,kBAAkB,CAAC,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;qBAC7D,KAAK,CAAC,IAAI,CACZ,CAC+C,EAAE,qDAAqD;aACxG;YACD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,CAAC,OAAO;gBACd,OAAO,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;SACD,CAAC;QAEF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAuB;QAChC,GAAG,cAAc;QACjB,WAAW;QACX,YAAY;QACZ,qBAAqB;KACrB,CAAC;IAEF,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createBase.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBase.test.d.ts","sourceRoot":"","sources":["../../src/creators/createBase.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { z } from "zod";
3
+ import { createBase } from "./createBase.js";
4
+ const base = createBase({
5
+ options: { name: z.string() },
6
+ });
7
+ describe("createBase", () => {
8
+ describe("createBlock", () => {
9
+ describe("without Addons", () => {
10
+ it("produces without Addons", () => {
11
+ const block = base.createBlock({
12
+ produce({ options }) {
13
+ return {
14
+ files: {
15
+ "name.txt": options.name,
16
+ },
17
+ };
18
+ },
19
+ });
20
+ const production = block.produce({ options: { name: "abc" } });
21
+ expect(production).toEqual({
22
+ files: {
23
+ "name.txt": "abc",
24
+ },
25
+ });
26
+ });
27
+ });
28
+ describe("with Addons", () => {
29
+ it("applies Zod defaults when producing with Addons", () => {
30
+ const block = base.createBlock({
31
+ addons: {
32
+ names: z.array(z.string()).default([]),
33
+ },
34
+ produce({ addons, options }) {
35
+ const { names } = addons;
36
+ return {
37
+ files: {
38
+ "names.txt": [options.name, ...names].join("\n"),
39
+ },
40
+ };
41
+ },
42
+ });
43
+ const production = block.produce({
44
+ addons: { names: ["def"] },
45
+ options: { name: "abc" },
46
+ });
47
+ expect(production).toEqual({
48
+ files: {
49
+ "names.txt": "abc\ndef",
50
+ },
51
+ });
52
+ });
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=createBase.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBase.test.js","sourceRoot":"","sources":["../../src/creators/createBase.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,IAAI,GAAG,UAAU,CAAC;IACvB,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;CAC7B,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC5B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC9B,OAAO,CAAC,EAAE,OAAO,EAAE;wBAClB,OAAO;4BACN,KAAK,EAAE;gCACN,UAAU,EAAE,OAAO,CAAC,IAAI;6BACxB;yBACD,CAAC;oBACH,CAAC;iBACD,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAE/D,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBAC1B,KAAK,EAAE;wBACN,UAAU,EAAE,KAAK;qBACjB;iBACD,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;YAC5B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;gBAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC9B,MAAM,EAAE;wBACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;qBACtC;oBACD,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE;wBAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;wBAEzB,OAAO;4BACN,KAAK,EAAE;gCACN,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;6BAChD;yBACD,CAAC;oBACH,CAAC;iBACD,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;oBAChC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;oBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;iBACxB,CAAC,CAAC;gBAEH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBAC1B,KAAK,EAAE;wBACN,WAAW,EAAE,UAAU;qBACvB;iBACD,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { AnyOptionalShape, InferredObject } from "bingo";
2
+ export declare function applyZodDefaults<Shape extends AnyOptionalShape>(shape: Shape, value: InferredObject<Shape> | undefined): InferredObject<Shape>;
3
+ export declare function isDefinitionWithAddons(definition: object): definition is object & Record<"addons", unknown>;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/creators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGzD,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,gBAAgB,EAC9D,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,GACtC,cAAc,CAAC,KAAK,CAAC,CAEvB;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,oDAExD"}
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export function applyZodDefaults(shape, value) {
3
+ return z.object(shape).parse(value ?? {});
4
+ }
5
+ export function isDefinitionWithAddons(definition) {
6
+ return "addons" in definition;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/creators/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,gBAAgB,CAC/B,KAAY,EACZ,KAAwC;IAExC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAA0B,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACxD,OAAO,QAAQ,IAAI,UAAU,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function executeTemplate(source: string, options?: object): string;
2
+ //# sourceMappingURL=executeTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.d.ts","sourceRoot":"","sources":["../src/executeTemplate.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,UAE/D"}
@@ -0,0 +1,5 @@
1
+ import Handlebars from "handlebars";
2
+ export function executeTemplate(source, options) {
3
+ return Handlebars.compile(source)(options);
4
+ }
5
+ //# sourceMappingURL=executeTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.js","sourceRoot":"","sources":["../src/executeTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAAgB;IAC/D,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=executeTemplate.test%20copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.test copy.d.ts","sourceRoot":"","sources":["../src/executeTemplate.test copy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { executeTemplate } from "./executeTemplate.js";
3
+ const mockCompile = vi.fn();
4
+ vi.mock("handlebars", () => ({
5
+ get default() {
6
+ return {
7
+ compile: mockCompile,
8
+ };
9
+ },
10
+ }));
11
+ describe("executeTemplate", () => {
12
+ it("passes options to the template", () => {
13
+ const options = { abc: 123 };
14
+ const sourcePath = "file.hbs";
15
+ const template = vi.fn();
16
+ mockCompile.mockReturnValueOnce(template);
17
+ executeTemplate(sourcePath, options);
18
+ expect(mockCompile).toHaveBeenCalledWith(sourcePath);
19
+ expect(template).toHaveBeenCalledWith(options);
20
+ });
21
+ });
22
+ //# sourceMappingURL=executeTemplate.test%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.test copy.js","sourceRoot":"","sources":["../src/executeTemplate.test copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE5B,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,IAAI,OAAO;QACV,OAAO;YACN,OAAO,EAAE,WAAW;SACpB,CAAC;IACH,CAAC;CACD,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,UAAU,CAAC;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEzB,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE1C,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=executeTemplate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.test.d.ts","sourceRoot":"","sources":["../src/executeTemplate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { executeTemplate } from "./executeTemplate.js";
3
+ describe("executeTemplate", () => {
4
+ it("passes options to the template", () => {
5
+ const source = "{{abc}}";
6
+ const options = { abc: 123 };
7
+ const actual = executeTemplate(source, options);
8
+ expect(actual).toBe("123");
9
+ });
10
+ });
11
+ //# sourceMappingURL=executeTemplate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplate.test.js","sourceRoot":"","sources":["../src/executeTemplate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CreatedEntry } from "bingo-fs";
2
+ export declare function executeTemplatesRecursive(source: CreatedEntry | undefined, options: object | undefined): CreatedEntry | undefined;
3
+ //# sourceMappingURL=executeTemplatesRecursive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplatesRecursive.d.ts","sourceRoot":"","sources":["../src/executeTemplatesRecursive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GACzB,YAAY,GAAG,SAAS,CAiB1B"}
@@ -0,0 +1,16 @@
1
+ import { executeTemplate } from "./executeTemplate.js";
2
+ export function executeTemplatesRecursive(source, options) {
3
+ if (!source) {
4
+ return source;
5
+ }
6
+ if (Array.isArray(source)) {
7
+ return source.length === 1
8
+ ? [executeTemplate(source[0], options)]
9
+ : [executeTemplate(source[0], options), source[1]];
10
+ }
11
+ return Object.fromEntries(Object.entries(source).map(([key, value]) => [
12
+ key.replace(/\.hbs$/i, ""),
13
+ executeTemplatesRecursive(value, options),
14
+ ]));
15
+ }
16
+ //# sourceMappingURL=executeTemplatesRecursive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplatesRecursive.js","sourceRoot":"","sources":["../src/executeTemplatesRecursive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CACxC,MAAgC,EAChC,OAA2B;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1B,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC;KACzC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=executeTemplatesRecursive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplatesRecursive.test.d.ts","sourceRoot":"","sources":["../src/executeTemplatesRecursive.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { executeTemplatesRecursive } from "./executeTemplatesRecursive.js";
3
+ const options = {
4
+ abc: 123,
5
+ };
6
+ describe("executeTemplatesRecursive", () => {
7
+ it("returns undefined when given undefined", () => {
8
+ const actual = executeTemplatesRecursive(undefined, options);
9
+ expect(actual).toBeUndefined();
10
+ });
11
+ it("executes a template when source is an file with no options", () => {
12
+ const actual = executeTemplatesRecursive(["{{abc}}"], options);
13
+ expect(actual).toEqual(["123"]);
14
+ });
15
+ it("executes a template when source is an file with options", () => {
16
+ const actual = executeTemplatesRecursive(["{{abc}}", { executable: true }], options);
17
+ expect(actual).toEqual(["123", { executable: true }]);
18
+ });
19
+ it("executes templates when source is a directory", () => {
20
+ const actual = executeTemplatesRecursive({
21
+ files: {
22
+ "first.hbs.txt": ["{{abc}}", { executable: true }],
23
+ },
24
+ }, options);
25
+ expect(actual).toEqual({
26
+ files: {
27
+ "first.hbs.txt": ["123", { executable: true }],
28
+ },
29
+ });
30
+ });
31
+ });
32
+ //# sourceMappingURL=executeTemplatesRecursive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeTemplatesRecursive.test.js","sourceRoot":"","sources":["../src/executeTemplatesRecursive.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,OAAO,GAAG;IACf,GAAG,EAAE,GAAG;CACR,CAAC;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,yBAAyB,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,yBAAyB,CACvC,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EACjC,OAAO,CACP,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,yBAAyB,CACvC;YACC,KAAK,EAAE;gBACN,eAAe,EAAE,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aAClD;SACD,EACD,OAAO,CACP,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACtB,KAAK,EAAE;gBACN,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aAC9C;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CreatedDirectory } from "bingo-fs";
2
+ export declare function getSourceFromPath(directory: CreatedDirectory, filePath?: string): string | false | CreatedDirectory | undefined;
3
+ //# sourceMappingURL=getFileFromPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileFromPath.d.ts","sourceRoot":"","sources":["../src/getFileFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,SAAK,iDAE3E"}
@@ -0,0 +1,17 @@
1
+ export function getSourceFromPath(directory, filePath = "") {
2
+ return getSourceFromPathArray(directory, filePath.split(/[/\\]/));
3
+ }
4
+ function getSourceFromPathArray(directory, filePath) {
5
+ if (!filePath.length) {
6
+ return directory;
7
+ }
8
+ const child = directory[filePath[0]];
9
+ if (Array.isArray(child)) {
10
+ return child[0];
11
+ }
12
+ if (typeof child !== "object") {
13
+ return child;
14
+ }
15
+ return getSourceFromPathArray(child, filePath.slice(1));
16
+ }
17
+ //# sourceMappingURL=getFileFromPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileFromPath.js","sourceRoot":"","sources":["../src/getFileFromPath.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,SAA2B,EAAE,QAAQ,GAAG,EAAE;IAC3E,OAAO,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,sBAAsB,CAC9B,SAA2B,EAC3B,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IntakeDirectory, IntakeEntry } from "bingo-fs";
2
+ export declare function getSourceFromDirectory(directoryPath: string, directory: IntakeDirectory, filePath: string): IntakeEntry;
3
+ //# sourceMappingURL=getSourceFromDirectory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromDirectory.d.ts","sourceRoot":"","sources":["../src/getSourceFromDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,wBAAgB,sBAAsB,CACrC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,GACd,WAAW,CAUb"}
@@ -0,0 +1,18 @@
1
+ export function getSourceFromDirectory(directoryPath, directory, filePath) {
2
+ const source = getSourceFromPathArray(directory, filePath.split(/[/\\]/));
3
+ if (!source) {
4
+ throw new Error(`Source '${filePath}' does not exist under '${directoryPath}'.`);
5
+ }
6
+ return source;
7
+ }
8
+ function getSourceFromPathArray(directory, filePath) {
9
+ if (!filePath.length) {
10
+ return directory;
11
+ }
12
+ const child = directory[filePath[0]];
13
+ if (Array.isArray(child) || !child) {
14
+ return child;
15
+ }
16
+ return getSourceFromPathArray(child, filePath.slice(1));
17
+ }
18
+ //# sourceMappingURL=getSourceFromDirectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromDirectory.js","sourceRoot":"","sources":["../src/getSourceFromDirectory.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CACrC,aAAqB,EACrB,SAA0B,EAC1B,QAAgB;IAEhB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACd,WAAW,QAAQ,2BAA2B,aAAa,IAAI,CAC/D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC9B,SAA0B,EAC1B,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getSourceFromDirectory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromDirectory.test.d.ts","sourceRoot":"","sources":["../src/getSourceFromDirectory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getSourceFromDirectory } from "./getSourceFromDirectory.js";
3
+ const fileContents = "...";
4
+ describe("getSourceFromPath", () => {
5
+ it("throws an error when the requested path does not match any root directory", () => {
6
+ const act = () => getSourceFromDirectory("/template", {
7
+ "file.txt.hbs": [fileContents],
8
+ }, "incorrect");
9
+ expect(act).toThrowError(`Source 'incorrect' does not exist under '/template'.`);
10
+ });
11
+ it("throws an error when the requested path does not match any child directory", () => {
12
+ const act = () => getSourceFromDirectory("/template", {
13
+ inner: {
14
+ "file.txt.hbs": [fileContents],
15
+ },
16
+ }, "inner/incorrect");
17
+ expect(act).toThrowError(`Source 'inner/incorrect' does not exist under '/template'.`);
18
+ });
19
+ it("returns the file when the requested path is a file", () => {
20
+ const actual = getSourceFromDirectory("/template", {
21
+ "file.txt.hbs": [fileContents],
22
+ }, "file.txt.hbs");
23
+ expect(actual).toEqual([fileContents]);
24
+ });
25
+ it("returns the directory when the requested path is a directory", () => {
26
+ const directory = {
27
+ inner: {
28
+ "file.txt.hbs": [fileContents],
29
+ },
30
+ };
31
+ const actual = getSourceFromDirectory("/template", directory, "inner");
32
+ expect(actual).toEqual(directory.inner);
33
+ });
34
+ });
35
+ //# sourceMappingURL=getSourceFromDirectory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromDirectory.test.js","sourceRoot":"","sources":["../src/getSourceFromDirectory.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACpF,MAAM,GAAG,GAAG,GAAG,EAAE,CAChB,sBAAsB,CACrB,WAAW,EACX;YACC,cAAc,EAAE,CAAC,YAAY,CAAC;SAC9B,EACD,WAAW,CACX,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CACvB,sDAAsD,CACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACrF,MAAM,GAAG,GAAG,GAAG,EAAE,CAChB,sBAAsB,CACrB,WAAW,EACX;YACC,KAAK,EAAE;gBACN,cAAc,EAAE,CAAC,YAAY,CAAC;aAC9B;SACD,EACD,iBAAiB,CACjB,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CACvB,4DAA4D,CAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,sBAAsB,CACpC,WAAW,EACX;YACC,cAAc,EAAE,CAAC,YAAY,CAAC;SAC9B,EACD,cAAc,CACd,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACvE,MAAM,SAAS,GAAoB;YAClC,KAAK,EAAE;gBACN,cAAc,EAAE,CAAC,YAAY,CAAC;aAC9B;SACD,CAAC;QAEF,MAAM,MAAM,GAAG,sBAAsB,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IntakeDirectory } from "bingo-fs";
2
+ export declare function getSourceFromDirectory(directory: IntakeDirectory, filePath: string): false | IntakeDirectory | [string, import("bingo-fs").CreatedFileOptions] | [string] | undefined;
3
+ //# sourceMappingURL=getSourceFromPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromPath.d.ts","sourceRoot":"","sources":["../src/getSourceFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,oGAGhB"}
@@ -0,0 +1,14 @@
1
+ export function getSourceFromDirectory(directory, filePath) {
2
+ return getSourceFromPathArray(directory, filePath.split(/[/\\]/));
3
+ }
4
+ function getSourceFromPathArray(directory, filePath) {
5
+ if (!filePath.length) {
6
+ return directory;
7
+ }
8
+ const child = directory[filePath[0]];
9
+ if (Array.isArray(child) || typeof child !== "object") {
10
+ return child;
11
+ }
12
+ return getSourceFromPathArray(child, filePath.slice(1));
13
+ }
14
+ //# sourceMappingURL=getSourceFromPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromPath.js","sourceRoot":"","sources":["../src/getSourceFromPath.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CACrC,SAA0B,EAC1B,QAAgB;IAEhB,OAAO,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,sBAAsB,CAC9B,SAA0B,EAC1B,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getSourceFromPath.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceFromPath.test.d.ts","sourceRoot":"","sources":["../src/getSourceFromPath.test.ts"],"names":[],"mappings":""}