bingo-stratum 0.2.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 (175) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +13 -0
  3. package/lib/creators/assertNoDuplicateBlocks copy.d.ts +3 -0
  4. package/lib/creators/assertNoDuplicateBlocks copy.d.ts.map +1 -0
  5. package/lib/creators/assertNoDuplicateBlocks copy.js +13 -0
  6. package/lib/creators/assertNoDuplicateBlocks copy.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.e2e.test.d.ts +125 -0
  18. package/lib/creators/createBase.e2e.test.d.ts.map +1 -0
  19. package/lib/creators/createBase.e2e.test.js +213 -0
  20. package/lib/creators/createBase.e2e.test.js.map +1 -0
  21. package/lib/creators/createBase.js +57 -0
  22. package/lib/creators/createBase.js.map +1 -0
  23. package/lib/creators/createBase.test.d.ts +2 -0
  24. package/lib/creators/createBase.test.d.ts.map +1 -0
  25. package/lib/creators/createBase.test.js +56 -0
  26. package/lib/creators/createBase.test.js.map +1 -0
  27. package/lib/creators/getDefinitionName.d.ts +5 -0
  28. package/lib/creators/getDefinitionName.d.ts.map +1 -0
  29. package/lib/creators/getDefinitionName.js +4 -0
  30. package/lib/creators/getDefinitionName.js.map +1 -0
  31. package/lib/creators/getName.d.ts +5 -0
  32. package/lib/creators/getName.d.ts.map +1 -0
  33. package/lib/creators/getName.js +4 -0
  34. package/lib/creators/getName.js.map +1 -0
  35. package/lib/creators/utils.d.ts +4 -0
  36. package/lib/creators/utils.d.ts.map +1 -0
  37. package/lib/creators/utils.js +8 -0
  38. package/lib/creators/utils.js.map +1 -0
  39. package/lib/index.d.ts +9 -0
  40. package/lib/index.d.ts.map +1 -0
  41. package/lib/index.js +4 -0
  42. package/lib/index.js.map +1 -0
  43. package/lib/mergers/mergeAddons.d.ts +3 -0
  44. package/lib/mergers/mergeAddons.d.ts.map +1 -0
  45. package/lib/mergers/mergeAddons.js +37 -0
  46. package/lib/mergers/mergeAddons.js.map +1 -0
  47. package/lib/mergers/mergeAddons.test.d.ts +2 -0
  48. package/lib/mergers/mergeAddons.test.d.ts.map +1 -0
  49. package/lib/mergers/mergeAddons.test.js +174 -0
  50. package/lib/mergers/mergeAddons.test.js.map +1 -0
  51. package/lib/mergers/mergeAddonsIfUpdated.d.ts +2 -0
  52. package/lib/mergers/mergeAddonsIfUpdated.d.ts.map +1 -0
  53. package/lib/mergers/mergeAddonsIfUpdated.js +53 -0
  54. package/lib/mergers/mergeAddonsIfUpdated.js.map +1 -0
  55. package/lib/mergers/mergeAddonsIfUpdated.test.d.ts +2 -0
  56. package/lib/mergers/mergeAddonsIfUpdated.test.d.ts.map +1 -0
  57. package/lib/mergers/mergeAddonsIfUpdated.test.js +51 -0
  58. package/lib/mergers/mergeAddonsIfUpdated.test.js.map +1 -0
  59. package/lib/mergers/mergeBlockCreations.d.ts +9 -0
  60. package/lib/mergers/mergeBlockCreations.d.ts.map +1 -0
  61. package/lib/mergers/mergeBlockCreations.js +10 -0
  62. package/lib/mergers/mergeBlockCreations.js.map +1 -0
  63. package/lib/predicates/isBase.d.ts +3 -0
  64. package/lib/predicates/isBase.d.ts.map +1 -0
  65. package/lib/predicates/isBase.js +10 -0
  66. package/lib/predicates/isBase.js.map +1 -0
  67. package/lib/predicates/isBase.test.d.ts +2 -0
  68. package/lib/predicates/isBase.test.d.ts.map +1 -0
  69. package/lib/predicates/isBase.test.js +21 -0
  70. package/lib/predicates/isBase.test.js.map +1 -0
  71. package/lib/predicates/isPreset.d.ts +3 -0
  72. package/lib/predicates/isPreset.d.ts.map +1 -0
  73. package/lib/predicates/isPreset.js +13 -0
  74. package/lib/predicates/isPreset.js.map +1 -0
  75. package/lib/predicates/isPreset.test.d.ts +2 -0
  76. package/lib/predicates/isPreset.test.d.ts.map +1 -0
  77. package/lib/predicates/isPreset.test.js +25 -0
  78. package/lib/predicates/isPreset.test.js.map +1 -0
  79. package/lib/predicates/isPresetAbout.d.ts +3 -0
  80. package/lib/predicates/isPresetAbout.d.ts.map +1 -0
  81. package/lib/predicates/isPresetAbout.js +4 -0
  82. package/lib/predicates/isPresetAbout.js.map +1 -0
  83. package/lib/predicates/isPresetAbout.test.d.ts +2 -0
  84. package/lib/predicates/isPresetAbout.test.d.ts.map +1 -0
  85. package/lib/predicates/isPresetAbout.test.js +16 -0
  86. package/lib/predicates/isPresetAbout.test.js.map +1 -0
  87. package/lib/producers/applyBlockModifications.d.ts +4 -0
  88. package/lib/producers/applyBlockModifications.d.ts.map +1 -0
  89. package/lib/producers/applyBlockModifications.js +14 -0
  90. package/lib/producers/applyBlockModifications.js.map +1 -0
  91. package/lib/producers/applyBlockModifications.test.d.ts +2 -0
  92. package/lib/producers/applyBlockModifications.test.d.ts.map +1 -0
  93. package/lib/producers/applyBlockModifications.test.js +42 -0
  94. package/lib/producers/applyBlockModifications.test.js.map +1 -0
  95. package/lib/producers/getUpdatedBlockAddons.d.ts +9 -0
  96. package/lib/producers/getUpdatedBlockAddons.d.ts.map +1 -0
  97. package/lib/producers/getUpdatedBlockAddons.js +20 -0
  98. package/lib/producers/getUpdatedBlockAddons.js.map +1 -0
  99. package/lib/producers/produceBase.d.ts +10 -0
  100. package/lib/producers/produceBase.d.ts.map +1 -0
  101. package/lib/producers/produceBase.js +15 -0
  102. package/lib/producers/produceBase.js.map +1 -0
  103. package/lib/producers/produceBase.test.d.ts +2 -0
  104. package/lib/producers/produceBase.test.d.ts.map +1 -0
  105. package/lib/producers/produceBase.test.js +77 -0
  106. package/lib/producers/produceBase.test.js.map +1 -0
  107. package/lib/producers/produceBlock.d.ts +15 -0
  108. package/lib/producers/produceBlock.d.ts.map +1 -0
  109. package/lib/producers/produceBlock.js +14 -0
  110. package/lib/producers/produceBlock.js.map +1 -0
  111. package/lib/producers/produceBlocks.d.ts +11 -0
  112. package/lib/producers/produceBlocks.d.ts.map +1 -0
  113. package/lib/producers/produceBlocks.js +46 -0
  114. package/lib/producers/produceBlocks.js.map +1 -0
  115. package/lib/producers/produceBlocks.test.d.ts +2 -0
  116. package/lib/producers/produceBlocks.test.d.ts.map +1 -0
  117. package/lib/producers/produceBlocks.test.js +145 -0
  118. package/lib/producers/produceBlocks.test.js.map +1 -0
  119. package/lib/producers/producePreset.d.ts +10 -0
  120. package/lib/producers/producePreset.d.ts.map +1 -0
  121. package/lib/producers/producePreset.js +20 -0
  122. package/lib/producers/producePreset.js.map +1 -0
  123. package/lib/producers/producePreset.test.d.ts +2 -0
  124. package/lib/producers/producePreset.test.d.ts.map +1 -0
  125. package/lib/producers/producePreset.test.js +88 -0
  126. package/lib/producers/producePreset.test.js.map +1 -0
  127. package/lib/producers/produceStratumTemplate.d.ts +15 -0
  128. package/lib/producers/produceStratumTemplate.d.ts.map +1 -0
  129. package/lib/producers/produceStratumTemplate.js +17 -0
  130. package/lib/producers/produceStratumTemplate.js.map +1 -0
  131. package/lib/producers/produceStratumTemplate.test.d.ts +2 -0
  132. package/lib/producers/produceStratumTemplate.test.d.ts.map +1 -0
  133. package/lib/producers/produceStratumTemplate.test.js +134 -0
  134. package/lib/producers/produceStratumTemplate.test.js.map +1 -0
  135. package/lib/producers/produceStratumTemplateFull.d.ts +21 -0
  136. package/lib/producers/produceStratumTemplateFull.d.ts.map +1 -0
  137. package/lib/producers/produceStratumTemplateFull.js +28 -0
  138. package/lib/producers/produceStratumTemplateFull.js.map +1 -0
  139. package/lib/runners/runBlock.d.ts +17 -0
  140. package/lib/runners/runBlock.d.ts.map +1 -0
  141. package/lib/runners/runBlock.js +11 -0
  142. package/lib/runners/runBlock.js.map +1 -0
  143. package/lib/runners/runBlock.test.d.ts +2 -0
  144. package/lib/runners/runBlock.test.d.ts.map +1 -0
  145. package/lib/runners/runBlock.test.js +136 -0
  146. package/lib/runners/runBlock.test.js.map +1 -0
  147. package/lib/types/bases.d.ts +30 -0
  148. package/lib/types/bases.d.ts.map +1 -0
  149. package/lib/types/bases.js +2 -0
  150. package/lib/types/bases.js.map +1 -0
  151. package/lib/types/blocks.d.ts +51 -0
  152. package/lib/types/blocks.d.ts.map +1 -0
  153. package/lib/types/blocks.js +2 -0
  154. package/lib/types/blocks.js.map +1 -0
  155. package/lib/types/creations.d.ts +10 -0
  156. package/lib/types/creations.d.ts.map +1 -0
  157. package/lib/types/creations.js +2 -0
  158. package/lib/types/creations.js.map +1 -0
  159. package/lib/types/presets.d.ts +16 -0
  160. package/lib/types/presets.d.ts.map +1 -0
  161. package/lib/types/presets.js +2 -0
  162. package/lib/types/presets.js.map +1 -0
  163. package/lib/types/settings.d.ts +9 -0
  164. package/lib/types/settings.d.ts.map +1 -0
  165. package/lib/types/settings.js +2 -0
  166. package/lib/types/settings.js.map +1 -0
  167. package/lib/types/templates.d.ts +25 -0
  168. package/lib/types/templates.d.ts.map +1 -0
  169. package/lib/types/templates.js +2 -0
  170. package/lib/types/templates.js.map +1 -0
  171. package/lib/utils.ts/getPresetByName.d.ts +4 -0
  172. package/lib/utils.ts/getPresetByName.d.ts.map +1 -0
  173. package/lib/utils.ts/getPresetByName.js +13 -0
  174. package/lib/utils.ts/getPresetByName.js.map +1 -0
  175. package/package.json +45 -0
@@ -0,0 +1,16 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { isPresetAbout } from "./isPresetAbout.js";
3
+ describe("isPresetAbout", () => {
4
+ test.each([
5
+ [null, false],
6
+ [undefined, false],
7
+ [123, false],
8
+ ["abc", false],
9
+ [{}, false],
10
+ [{ name: "" }, true],
11
+ ])("%j", (input, expected) => {
12
+ const actual = isPresetAbout(input);
13
+ expect(actual).toBe(expected);
14
+ });
15
+ });
16
+ //# sourceMappingURL=isPresetAbout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPresetAbout.test.js","sourceRoot":"","sources":["../../src/predicates/isPresetAbout.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC;QACT,CAAC,IAAI,EAAE,KAAK,CAAC;QACb,CAAC,SAAS,EAAE,KAAK,CAAC;QAClB,CAAC,GAAG,EAAE,KAAK,CAAC;QACZ,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,EAAE,EAAE,KAAK,CAAC;QACX,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;KACpB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Block } from "../types/blocks.js";
2
+ import { BlockModifications } from "../types/settings.js";
3
+ export declare function applyBlockModifications<Options extends object>(initial: Block<object | undefined, Options>[], { add, exclude }?: BlockModifications<Options>): Block<object | undefined, Options>[];
4
+ //# sourceMappingURL=applyBlockModifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyBlockModifications.d.ts","sourceRoot":"","sources":["../../src/producers/applyBlockModifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAC7D,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,EAC7C,EAAE,GAAQ,EAAE,OAAY,EAAE,GAAE,kBAAkB,CAAC,OAAO,CAAM,wCAiB5D"}
@@ -0,0 +1,14 @@
1
+ export function applyBlockModifications(initial, { add = [], exclude = [] } = {}) {
2
+ if (!add.length && !exclude.length) {
3
+ return initial;
4
+ }
5
+ const blocks = new Set(initial);
6
+ for (const added of add) {
7
+ blocks.add(added);
8
+ }
9
+ for (const excluded of exclude) {
10
+ blocks.delete(excluded);
11
+ }
12
+ return Array.from(blocks);
13
+ }
14
+ //# sourceMappingURL=applyBlockModifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyBlockModifications.js","sourceRoot":"","sources":["../../src/producers/applyBlockModifications.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CACtC,OAA6C,EAC7C,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAAkC,EAAE;IAE5D,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=applyBlockModifications.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyBlockModifications.test.d.ts","sourceRoot":"","sources":["../../src/producers/applyBlockModifications.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { z } from "zod";
3
+ import { createBase } from "../creators/createBase.js";
4
+ import { applyBlockModifications } from "./applyBlockModifications.js";
5
+ const base = createBase({
6
+ options: {
7
+ value: z.string(),
8
+ },
9
+ });
10
+ const blockA = base.createBlock({
11
+ about: { name: "A" },
12
+ produce: vi.fn(),
13
+ });
14
+ const blockB = base.createBlock({
15
+ about: { name: "B" },
16
+ produce: vi.fn(),
17
+ });
18
+ const blockC = base.createBlock({
19
+ about: { name: "C" },
20
+ produce: vi.fn(),
21
+ });
22
+ describe("applyBlockModifications", () => {
23
+ it("returns the initial blocks when no modifications are provided", () => {
24
+ const initial = [blockA, blockB];
25
+ const actual = applyBlockModifications(initial);
26
+ expect(actual).toBe(initial);
27
+ });
28
+ it("returns the initial blocks when modifications are empty", () => {
29
+ const initial = [blockA, blockB];
30
+ const actual = applyBlockModifications(initial, { add: [], exclude: [] });
31
+ expect(actual).toBe(initial);
32
+ });
33
+ it("applies modifications when they exist", () => {
34
+ const initial = [blockA, blockB];
35
+ const actual = applyBlockModifications(initial, {
36
+ add: [blockC],
37
+ exclude: [blockB],
38
+ });
39
+ expect(actual).toEqual([blockA, blockC]);
40
+ });
41
+ });
42
+ //# sourceMappingURL=applyBlockModifications.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyBlockModifications.test.js","sourceRoot":"","sources":["../../src/producers/applyBlockModifications.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,IAAI,GAAG,UAAU,CAAC;IACvB,OAAO,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB;CACD,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CAChB,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACxE,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAClE,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE;YAC/C,GAAG,EAAE,CAAC,MAAM,CAAC;YACb,OAAO,EAAE,CAAC,MAAM,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Creation } from "bingo";
2
+ import { Block, BlockWithAddons } from "../types/blocks.js";
3
+ import { CreatedBlockAddons } from "../types/creations.js";
4
+ export interface BlockProduction<Addons extends object | undefined> {
5
+ addons: Addons;
6
+ creation?: Partial<Creation>;
7
+ }
8
+ export declare function getUpdatedBlockAddons<Options extends object>(allowedBlocks: Set<Block<object | undefined, Options>>, blockProductions: Map<Block<object | undefined, Options>, BlockProduction<object>>, newBlockAddons?: CreatedBlockAddons<object, Options>[]): [BlockWithAddons<object, Options>, object][];
9
+ //# sourceMappingURL=getUpdatedBlockAddons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUpdatedBlockAddons.d.ts","sourceRoot":"","sources":["../../src/producers/getUpdatedBlockAddons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,MAAM,GAAG,SAAS;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,EAC3D,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,EACtD,gBAAgB,EAAE,GAAG,CACpB,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAClC,eAAe,CAAC,MAAM,CAAC,CACvB,EACD,cAAc,GAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAO,gDAyB1D"}
@@ -0,0 +1,20 @@
1
+ import { mergeAddonsIfUpdated } from "../mergers/mergeAddonsIfUpdated.js";
2
+ export function getUpdatedBlockAddons(allowedBlocks, blockProductions, newBlockAddons = []) {
3
+ const updated = [];
4
+ for (const newAddons of newBlockAddons) {
5
+ if (!allowedBlocks.has(newAddons.block)) {
6
+ continue;
7
+ }
8
+ const existingProduction = blockProductions.get(newAddons.block);
9
+ if (!existingProduction) {
10
+ updated.push([newAddons.block, newAddons.addons]);
11
+ continue;
12
+ }
13
+ const updatedAddons = mergeAddonsIfUpdated(existingProduction.addons, newAddons.addons);
14
+ if (updatedAddons) {
15
+ updated.push([newAddons.block, updatedAddons]);
16
+ }
17
+ }
18
+ return updated;
19
+ }
20
+ //# sourceMappingURL=getUpdatedBlockAddons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUpdatedBlockAddons.js","sourceRoot":"","sources":["../../src/producers/getUpdatedBlockAddons.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAS1E,MAAM,UAAU,qBAAqB,CACpC,aAAsD,EACtD,gBAGC,EACD,iBAAwD,EAAE;IAE1D,MAAM,OAAO,GAAiD,EAAE,CAAC;IAEjE,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,SAAS;QACV,CAAC;QAED,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,SAAS;QACV,CAAC;QAED,MAAM,aAAa,GAAG,oBAAoB,CACzC,kBAAkB,CAAC,MAAM,EACzB,SAAS,CAAC,MAAM,CAChB,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AnyShape, InferredObject } from "bingo";
2
+ import { BingoSystem } from "bingo-systems";
3
+ import { Base } from "../types/bases.js";
4
+ export interface ProduceBaseSettings<OptionsShape extends AnyShape> extends Partial<BingoSystem> {
5
+ directory?: string;
6
+ offline?: boolean;
7
+ options?: Partial<InferredObject<OptionsShape>>;
8
+ }
9
+ export declare function produceBase<OptionsShape extends AnyShape>(base: Base<OptionsShape>, settings?: ProduceBaseSettings<OptionsShape>): Promise<Partial<InferredObject<OptionsShape>>>;
10
+ //# sourceMappingURL=produceBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBase.d.ts","sourceRoot":"","sources":["../../src/producers/produceBase.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EAGR,cAAc,EACd,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,WAAW,mBAAmB,CAAC,YAAY,SAAS,QAAQ,CACjE,SAAQ,OAAO,CAAC,WAAW,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;CAChD;AAED,wBAAsB,WAAW,CAAC,YAAY,SAAS,QAAQ,EAC9D,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,EACxB,QAAQ,GAAE,mBAAmB,CAAC,YAAY,CAAM,GAC9C,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAgBhD"}
@@ -0,0 +1,15 @@
1
+ import { awaitLazyProperties, createSystemContextWithAuth, } from "bingo";
2
+ export async function produceBase(base, settings = {}) {
3
+ if (!base.produce) {
4
+ return settings.options ?? {};
5
+ }
6
+ const system = await createSystemContextWithAuth({
7
+ directory: settings.directory ?? ".",
8
+ ...settings,
9
+ });
10
+ return await awaitLazyProperties(base.produce({
11
+ options: settings.options ?? {},
12
+ ...system,
13
+ }));
14
+ }
15
+ //# sourceMappingURL=produceBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBase.js","sourceRoot":"","sources":["../../src/producers/produceBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,mBAAmB,EACnB,2BAA2B,GAE3B,MAAM,OAAO,CAAC;AAYf,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAAwB,EACxB,WAA8C,EAAE;IAEhD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC;QAChD,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,GAAG;QACpC,GAAG,QAAQ;KACX,CAAC,CAAC;IAEH,OAAO,MAAM,mBAAmB,CAC/B,IAAI,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;QAC/B,GAAG,MAAM;KACT,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=produceBase.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBase.test.d.ts","sourceRoot":"","sources":["../../src/producers/produceBase.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { z } from "zod";
3
+ import { createBase } from "../creators/createBase.js";
4
+ import { produceBase } from "./produceBase.js";
5
+ const system = {
6
+ fetchers: {
7
+ fetch: vi.fn(),
8
+ octokit: {},
9
+ },
10
+ fs: {
11
+ readDirectory: vi.fn(),
12
+ readFile: vi.fn(),
13
+ writeDirectory: vi.fn(),
14
+ writeFile: vi.fn(),
15
+ },
16
+ runner: vi.fn(),
17
+ };
18
+ describe("produceBase", () => {
19
+ it("returns {} when no settings.options exists and the Base does not have a produce()", async () => {
20
+ const baseWithNoProduce = createBase({
21
+ options: {
22
+ value: z.string().optional(),
23
+ },
24
+ });
25
+ const actual = await produceBase(baseWithNoProduce, { ...system });
26
+ expect(actual).toEqual({});
27
+ });
28
+ it("returns settings.options directly when it exists and the Base does not have a produce()", async () => {
29
+ const baseWithNoProduce = createBase({
30
+ options: {
31
+ value: z.string().optional(),
32
+ },
33
+ });
34
+ const options = { value: "input" };
35
+ const actual = await produceBase(baseWithNoProduce, { ...system, options });
36
+ expect(actual).toEqual(options);
37
+ });
38
+ describe("produce", () => {
39
+ const baseWithOptionalOption = createBase({
40
+ options: {
41
+ value: z.string().optional(),
42
+ },
43
+ produce({ options }) {
44
+ return {
45
+ value: options.value ?? "default",
46
+ };
47
+ },
48
+ });
49
+ it("uses an option value from produce when settings do not have options", async () => {
50
+ const actual = await produceBase(baseWithOptionalOption, system);
51
+ expect(actual).toEqual({
52
+ value: "default",
53
+ });
54
+ });
55
+ it("uses an option value from produce when settings do not have the options value", async () => {
56
+ const actual = await produceBase(baseWithOptionalOption, {
57
+ ...system,
58
+ options: {},
59
+ });
60
+ expect(actual).toEqual({
61
+ value: "default",
62
+ });
63
+ });
64
+ it("uses an option value from settings when settings have the options value", async () => {
65
+ const actual = await produceBase(baseWithOptionalOption, {
66
+ ...system,
67
+ options: {
68
+ value: "override",
69
+ },
70
+ });
71
+ expect(actual).toEqual({
72
+ value: "override",
73
+ });
74
+ });
75
+ });
76
+ });
77
+ //# sourceMappingURL=produceBase.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBase.test.js","sourceRoot":"","sources":["../../src/producers/produceBase.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ProductionMode } from "bingo";
2
+ import { BlockWithAddons, BlockWithoutAddons } from "../types/blocks.js";
3
+ import { BlockCreation } from "../types/creations.js";
4
+ export type ProduceBlockSettings<Addons extends object | undefined, Options extends object> = Addons extends object ? ProduceBlockSettingsWithAddons<Addons, Options> : ProduceBlockSettingsWithoutAddons<Options>;
5
+ export interface ProduceBlockSettingsWithAddons<Addons extends object, Options extends object> extends ProduceBlockSettingsWithoutAddons<Options> {
6
+ addons?: Addons;
7
+ }
8
+ export interface ProduceBlockSettingsWithoutAddons<Options extends object> {
9
+ mode?: ProductionMode;
10
+ offline?: boolean;
11
+ options: Options;
12
+ }
13
+ export declare function produceBlock<Addons extends object, Options extends object>(block: BlockWithAddons<Addons, Options>, settings: ProduceBlockSettingsWithAddons<Addons, Options>): Partial<BlockCreation<Options>>;
14
+ export declare function produceBlock<Options extends object>(block: BlockWithoutAddons<Options>, settings: ProduceBlockSettingsWithoutAddons<Options>): Partial<BlockCreation<Options>>;
15
+ //# sourceMappingURL=produceBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlock.d.ts","sourceRoot":"","sources":["../../src/producers/produceBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,oBAAoB,CAC/B,MAAM,SAAS,MAAM,GAAG,SAAS,EACjC,OAAO,SAAS,MAAM,IACnB,MAAM,SAAS,MAAM,GACtB,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,iCAAiC,CAAC,OAAO,CAAC,CAAC;AAE9C,MAAM,WAAW,8BAA8B,CAC9C,MAAM,SAAS,MAAM,EACrB,OAAO,SAAS,MAAM,CACrB,SAAQ,iCAAiC,CAAC,OAAO,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC,CAAC,OAAO,SAAS,MAAM;IACxE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EACzE,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,EAAE,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GACvD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,EAClD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAClC,QAAQ,EAAE,iCAAiC,CAAC,OAAO,CAAC,GAClD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { mergeBlockCreations } from "../mergers/mergeBlockCreations.js";
2
+ export function produceBlock(block, settings) {
3
+ let creation = block.produce(settings);
4
+ const augment = settings.mode && block[settings.mode];
5
+ if (augment) {
6
+ const augmented = augment({
7
+ addons: {},
8
+ ...settings,
9
+ });
10
+ creation = mergeBlockCreations(creation, augmented);
11
+ }
12
+ return creation;
13
+ }
14
+ //# sourceMappingURL=produceBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlock.js","sourceRoot":"","sources":["../../src/producers/produceBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAgCxE,MAAM,UAAU,YAAY,CAC3B,KAAqE,EACrE,QAA+C;IAE/C,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,OAAO,CAAC;YACzB,MAAM,EAAE,EAAY;YACpB,GAAG,QAAQ;SACX,CAAC,CAAC;QACH,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ProductionMode } from "bingo";
2
+ import { Block } from "../types/blocks.js";
3
+ import { CreatedBlockAddons } from "../types/creations.js";
4
+ export interface ProduceBlocksSettings<Options extends object> {
5
+ addons?: CreatedBlockAddons<object, Options>[];
6
+ mode?: ProductionMode;
7
+ offline?: boolean;
8
+ options: Options;
9
+ }
10
+ export declare function produceBlocks<Options extends object>(blocks: Block<object | undefined, Options>[], { addons, mode, offline, options }: ProduceBlocksSettings<Options>): {};
11
+ //# sourceMappingURL=produceBlocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlocks.d.ts","sourceRoot":"","sources":["../../src/producers/produceBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,EAAmB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAO3D,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,MAAM;IAC5D,MAAM,CAAC,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,EACnD,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,EAC5C,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC,OAAO,CAAC,MAiElE"}
@@ -0,0 +1,46 @@
1
+ import { mergeBlockCreations } from "../mergers/mergeBlockCreations.js";
2
+ import { getUpdatedBlockAddons, } from "./getUpdatedBlockAddons.js";
3
+ import { produceBlock } from "./produceBlock.js";
4
+ export function produceBlocks(blocks, { addons, mode, offline, options }) {
5
+ // From Templating Engines > Stratum > Details > Execution:
6
+ // This engine continuously re-runs Blocks until no new Addons are provided.
7
+ const blockProductions = new Map(addons?.map((addon) => [addon.block, { addons: addon.addons }]));
8
+ // 1. Create a queue of Blocks to be run, starting with all defined in the Preset
9
+ const allowedBlocks = new Set(blocks);
10
+ const blocksToBeRun = new Set(blocks);
11
+ // 2. For each Block in the queue:
12
+ while (blocksToBeRun.size) {
13
+ for (const currentBlock of blocksToBeRun) {
14
+ blocksToBeRun.delete(currentBlock);
15
+ // 2.1. Get the Creation from the Block, passing any current known Addons
16
+ // 2.2. If a mode is specified, additionally generate the appropriate Block Creations
17
+ const previousProduction = blockProductions.get(currentBlock);
18
+ const previousAddons = previousProduction?.addons ?? {};
19
+ const blockCreation = produceBlock(currentBlock, {
20
+ addons: previousAddons,
21
+ mode,
22
+ offline,
23
+ options,
24
+ });
25
+ // 2.3. Store that Block's Creation
26
+ blockProductions.set(currentBlock, {
27
+ addons: previousAddons,
28
+ creation: blockCreation,
29
+ });
30
+ // 2.4. If the Block specified new addons for any defined Blocks:
31
+ const updatedBlockAddons = getUpdatedBlockAddons(allowedBlocks, blockProductions, blockCreation.addons);
32
+ // 2.4.1: Add those Blocks to the queue to re-run
33
+ for (const [updatedBlock, updatedAddons] of updatedBlockAddons) {
34
+ const addedBlockPreviousProduction = blockProductions.get(updatedBlock);
35
+ blockProductions.set(updatedBlock, {
36
+ ...addedBlockPreviousProduction,
37
+ addons: updatedAddons,
38
+ });
39
+ blocksToBeRun.add(updatedBlock);
40
+ }
41
+ }
42
+ }
43
+ // 3. Merge all Block Creations together
44
+ return Array.from(blockProductions.values()).reduce((created, next) => mergeBlockCreations(created, next.creation ?? {}), {});
45
+ }
46
+ //# sourceMappingURL=produceBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlocks.js","sourceRoot":"","sources":["../../src/producers/produceBlocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,OAAO,EAEN,qBAAqB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,MAAM,UAAU,aAAa,CAC5B,MAA4C,EAC5C,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAkC;IAElE,2DAA2D;IAC3D,4EAA4E;IAE5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAG9B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnE,iFAAiF;IACjF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtC,kCAAkC;IAClC,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAEnC,yEAAyE;YACzE,qFAAqF;YACrF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,kBAAkB,EAAE,MAAM,IAAI,EAAE,CAAC;YACxD,MAAM,aAAa,GAAG,YAAY,CACjC,YAAgD,EAChD;gBACC,MAAM,EAAE,cAAc;gBACtB,IAAI;gBACJ,OAAO;gBACP,OAAO;aACP,CACD,CAAC;YAEF,mCAAmC;YACnC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE;gBAClC,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,aAAa;aACvB,CAAC,CAAC;YAEH,iEAAiE;YACjE,MAAM,kBAAkB,GAAG,qBAAqB,CAC/C,aAAa,EACb,gBAAgB,EAChB,aAAa,CAAC,MAAM,CACpB,CAAC;YAEF,iDAAiD;YACjD,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,kBAAkB,EAAE,CAAC;gBAChE,MAAM,4BAA4B,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxE,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE;oBAClC,GAAG,4BAA4B;oBAC/B,MAAM,EAAE,aAAa;iBACrB,CAAC,CAAC;gBACH,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;IACF,CAAC;IAED,wCAAwC;IACxC,OACC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CACpC,CAAC,MAAM,CACP,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EACpE,EAAE,CACF,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=produceBlocks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlocks.test.d.ts","sourceRoot":"","sources":["../../src/producers/produceBlocks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ import { describe, expect, it, test, vi } from "vitest";
2
+ import { z } from "zod";
3
+ import { createBase } from "../creators/createBase.js";
4
+ import { produceBlocks } from "./produceBlocks.js";
5
+ const base = createBase({
6
+ options: {
7
+ value: z.string(),
8
+ },
9
+ });
10
+ describe("produceBlocks", () => {
11
+ test("files from one block", () => {
12
+ const block = base.createBlock({
13
+ about: {
14
+ name: "Example Block",
15
+ },
16
+ produce({ options }) {
17
+ return {
18
+ files: { "README.md": options.value },
19
+ };
20
+ },
21
+ });
22
+ const result = produceBlocks([block], {
23
+ options: { value: "Hello, world!" },
24
+ });
25
+ expect(result).toEqual({
26
+ files: {
27
+ "README.md": "Hello, world!",
28
+ },
29
+ });
30
+ });
31
+ it("adds addons when provided", () => {
32
+ const block = base.createBlock({
33
+ about: {
34
+ name: "Example Block",
35
+ },
36
+ addons: {
37
+ extra: z.string().optional(),
38
+ },
39
+ produce({ addons, options }) {
40
+ return {
41
+ files: { "README.md": [options.value, addons.extra].join("\n") },
42
+ };
43
+ },
44
+ });
45
+ const result = produceBlocks([block], {
46
+ addons: [block({ extra: "line" })],
47
+ options: { value: "Hello, world!" },
48
+ });
49
+ expect(result).toEqual({
50
+ files: {
51
+ "README.md": "Hello, world!\nline",
52
+ },
53
+ });
54
+ });
55
+ it("doesn't include addons to blocks that aren't defined", () => {
56
+ const blockKnown = base.createBlock({
57
+ about: {
58
+ name: "Known Block",
59
+ },
60
+ produce({ options }) {
61
+ return {
62
+ addons: [blockUnknown({ extra: "line" })],
63
+ files: { "README.md": options.value },
64
+ };
65
+ },
66
+ });
67
+ const blockUnknown = base.createBlock({
68
+ about: {
69
+ name: "Unknown Block",
70
+ },
71
+ addons: {
72
+ extra: z.string().optional(),
73
+ },
74
+ produce: vi.fn(),
75
+ });
76
+ const result = produceBlocks([blockKnown], {
77
+ options: { value: "Hello, world!" },
78
+ });
79
+ expect(result).toEqual({
80
+ addons: [blockUnknown({ extra: "line" })],
81
+ files: {
82
+ "README.md": "Hello, world!",
83
+ },
84
+ });
85
+ });
86
+ describe("modes", () => {
87
+ const block = base.createBlock({
88
+ about: {
89
+ name: "Example Block",
90
+ },
91
+ produce({ options }) {
92
+ return {
93
+ files: { "README.md": options.value },
94
+ };
95
+ },
96
+ setup({ options }) {
97
+ return {
98
+ files: {
99
+ "data.txt": options.value,
100
+ },
101
+ };
102
+ },
103
+ transition() {
104
+ return {
105
+ scripts: ["rm old.txt"],
106
+ };
107
+ },
108
+ });
109
+ it("does not augment creations with a Block's setup() or transition() when mode is undefined", () => {
110
+ const result = produceBlocks([block], {
111
+ options: { value: "Hello, world!" },
112
+ });
113
+ expect(result).toEqual({
114
+ files: {
115
+ "README.md": "Hello, world!",
116
+ },
117
+ });
118
+ });
119
+ it("augments creations with a Block's setup() when mode is 'setup'", () => {
120
+ const result = produceBlocks([block], {
121
+ mode: "setup",
122
+ options: { value: "Hello, world!" },
123
+ });
124
+ expect(result).toEqual({
125
+ files: {
126
+ "data.txt": "Hello, world!",
127
+ "README.md": "Hello, world!",
128
+ },
129
+ });
130
+ });
131
+ it("augments creations with a Block's transition() when mode is 'transition'", () => {
132
+ const result = produceBlocks([block], {
133
+ mode: "transition",
134
+ options: { value: "Hello, world!" },
135
+ });
136
+ expect(result).toEqual({
137
+ files: {
138
+ "README.md": "Hello, world!",
139
+ },
140
+ scripts: ["rm old.txt"],
141
+ });
142
+ });
143
+ });
144
+ });
145
+ //# sourceMappingURL=produceBlocks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"produceBlocks.test.js","sourceRoot":"","sources":["../../src/producers/produceBlocks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AnyShape, InferredObject, ProduceTemplateSettings } from "bingo";
2
+ import { BlockCreation, CreatedBlockAddons } from "../types/creations.js";
3
+ import { Preset } from "../types/presets.js";
4
+ import { BlockModifications } from "../types/settings.js";
5
+ export interface ProducePresetSettings<OptionsShape extends AnyShape> extends ProduceTemplateSettings<OptionsShape> {
6
+ addons?: CreatedBlockAddons<any, InferredObject<OptionsShape>>[];
7
+ blocks?: BlockModifications<InferredObject<OptionsShape>>;
8
+ }
9
+ export declare function producePreset<OptionsShape extends AnyShape>(preset: Preset<OptionsShape>, { addons, blocks: blockModifications, mode, offline, options, }: ProducePresetSettings<OptionsShape>): BlockCreation<InferredObject<OptionsShape>>;
10
+ //# sourceMappingURL=producePreset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producePreset.d.ts","sourceRoot":"","sources":["../../src/producers/producePreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,WAAW,qBAAqB,CAAC,YAAY,SAAS,QAAQ,CACnE,SAAQ,uBAAuB,CAAC,YAAY,CAAC;IAG7C,MAAM,CAAC,EAAE,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,CAAC,EAAE,kBAAkB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;CAC1D;AAED,wBAAgB,aAAa,CAAC,YAAY,SAAS,QAAQ,EAC1D,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAC5B,EACC,MAAM,EACN,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EACJ,OAAO,EACP,OAAO,GACP,EAAE,qBAAqB,CAAC,YAAY,CAAC,GACpC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAkB7C"}
@@ -0,0 +1,20 @@
1
+ import { applyBlockModifications } from "./applyBlockModifications.js";
2
+ import { produceBlocks } from "./produceBlocks.js";
3
+ export function producePreset(preset, { addons, blocks: blockModifications, mode, offline, options, }) {
4
+ const blocks = applyBlockModifications(preset.blocks, blockModifications);
5
+ const creation = produceBlocks(blocks, {
6
+ addons,
7
+ mode,
8
+ offline,
9
+ options,
10
+ });
11
+ return {
12
+ addons: [],
13
+ files: {},
14
+ requests: [],
15
+ scripts: [],
16
+ suggestions: [],
17
+ ...creation,
18
+ };
19
+ }
20
+ //# sourceMappingURL=producePreset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producePreset.js","sourceRoot":"","sources":["../../src/producers/producePreset.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUnD,MAAM,UAAU,aAAa,CAC5B,MAA4B,EAC5B,EACC,MAAM,EACN,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EACJ,OAAO,EACP,OAAO,GAC8B;IAEtC,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE;QACtC,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACP,CAAC,CAAC;IAEH,OAAO;QACN,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;QACf,GAAG,QAAQ;KACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=producePreset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producePreset.test.d.ts","sourceRoot":"","sources":["../../src/producers/producePreset.test.ts"],"names":[],"mappings":""}