@overkill-dev/doubles 0.0.1 → 0.0.2

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 (178) hide show
  1. package/LICENSE +21 -0
  2. package/assert/assertion-extension.d.ts +65 -0
  3. package/assert/assertion-extension.d.ts.map +1 -0
  4. package/assert/assertion-extension.js +250 -0
  5. package/assert/assertion-extension.js.map +1 -0
  6. package/assertion-protocol/assertion-evaluation.d.ts +13 -0
  7. package/assertion-protocol/assertion-evaluation.d.ts.map +1 -0
  8. package/assertion-protocol/assertion-node-shape.d.ts +71 -0
  9. package/assertion-protocol/assertion-node-shape.d.ts.map +1 -0
  10. package/assertion-protocol/assertion-node.d.ts +97 -0
  11. package/assertion-protocol/assertion-node.d.ts.map +1 -0
  12. package/assertion-protocol/assertion-reference.d.ts +73 -0
  13. package/assertion-protocol/assertion-reference.d.ts.map +1 -0
  14. package/assertion-protocol/assertion-reference.js +49 -0
  15. package/assertion-protocol/assertion-reference.js.map +1 -0
  16. package/assertion-protocol/assertions/boolean.d.ts +11 -0
  17. package/assertion-protocol/assertions/boolean.d.ts.map +1 -0
  18. package/assertion-protocol/assertions/collection.d.ts +22 -0
  19. package/assertion-protocol/assertions/collection.d.ts.map +1 -0
  20. package/assertion-protocol/assertions/equality.d.ts +17 -0
  21. package/assertion-protocol/assertions/equality.d.ts.map +1 -0
  22. package/assertion-protocol/assertions/fail.d.ts +13 -0
  23. package/assertion-protocol/assertions/fail.d.ts.map +1 -0
  24. package/assertion-protocol/assertions/numeric.d.ts +29 -0
  25. package/assertion-protocol/assertions/numeric.d.ts.map +1 -0
  26. package/assertion-protocol/assertions/partial.d.ts +14 -0
  27. package/assertion-protocol/assertions/partial.d.ts.map +1 -0
  28. package/assertion-protocol/assertions/presence.d.ts +17 -0
  29. package/assertion-protocol/assertions/presence.d.ts.map +1 -0
  30. package/assertion-protocol/assertions/string.d.ts +28 -0
  31. package/assertion-protocol/assertions/string.d.ts.map +1 -0
  32. package/assertion-protocol/assertions/type-shape.d.ts +42 -0
  33. package/assertion-protocol/assertions/type-shape.d.ts.map +1 -0
  34. package/assertion-protocol/thrown-error-record.d.ts +8 -0
  35. package/assertion-protocol/thrown-error-record.d.ts.map +1 -0
  36. package/assertion-protocol/thrown-error-record.js +17 -0
  37. package/assertion-protocol/thrown-error-record.js.map +1 -0
  38. package/assertion-protocol/thrown-matcher.d.ts +51 -0
  39. package/assertion-protocol/thrown-matcher.d.ts.map +1 -0
  40. package/assertion-protocol/thrown-matcher.js +186 -0
  41. package/assertion-protocol/thrown-matcher.js.map +1 -0
  42. package/compare/comparison-result.d.ts +25 -0
  43. package/compare/comparison-result.d.ts.map +1 -0
  44. package/compare/comparison-state.d.ts +7 -0
  45. package/compare/comparison-state.d.ts.map +1 -0
  46. package/compare/comparison-state.js +20 -0
  47. package/compare/comparison-state.js.map +1 -0
  48. package/compare/comparison.d.ts +12 -0
  49. package/compare/comparison.d.ts.map +1 -0
  50. package/compare/raw-comparison.d.ts +24 -0
  51. package/compare/raw-comparison.d.ts.map +1 -0
  52. package/compare/raw-comparison.js +285 -0
  53. package/compare/raw-comparison.js.map +1 -0
  54. package/compare/serialized-value-shape.d.ts +143 -0
  55. package/compare/serialized-value-shape.d.ts.map +1 -0
  56. package/compare/serialized-value.d.ts +11 -0
  57. package/compare/serialized-value.d.ts.map +1 -0
  58. package/compare/value-classification.d.ts +26 -0
  59. package/compare/value-classification.d.ts.map +1 -0
  60. package/compare/value-classification.js +110 -0
  61. package/compare/value-classification.js.map +1 -0
  62. package/diff/diff-shape.d.ts +117 -0
  63. package/diff/diff-shape.d.ts.map +1 -0
  64. package/doubles/disposal-symbol.d.ts +3 -0
  65. package/doubles/disposal-symbol.d.ts.map +1 -0
  66. package/doubles/disposal-symbol.js +10 -0
  67. package/doubles/disposal-symbol.js.map +1 -0
  68. package/doubles/double-behavior.d.ts +106 -0
  69. package/doubles/double-behavior.d.ts.map +1 -0
  70. package/doubles/double-behavior.js +257 -0
  71. package/doubles/double-behavior.js.map +1 -0
  72. package/doubles/double-chronology.d.ts +21 -0
  73. package/doubles/double-chronology.d.ts.map +1 -0
  74. package/doubles/double-chronology.js +78 -0
  75. package/doubles/double-chronology.js.map +1 -0
  76. package/doubles/double-history-api.d.ts +33 -0
  77. package/doubles/double-history-api.d.ts.map +1 -0
  78. package/doubles/double-history-api.js +125 -0
  79. package/doubles/double-history-api.js.map +1 -0
  80. package/doubles/double-history-record.d.ts +82 -0
  81. package/doubles/double-history-record.d.ts.map +1 -0
  82. package/doubles/double-history-record.js +65 -0
  83. package/doubles/double-history-record.js.map +1 -0
  84. package/doubles/double-history-store.d.ts +21 -0
  85. package/doubles/double-history-store.d.ts.map +1 -0
  86. package/doubles/double-history-store.js +118 -0
  87. package/doubles/double-history-store.js.map +1 -0
  88. package/doubles/double-history.d.ts +141 -0
  89. package/doubles/double-history.d.ts.map +1 -0
  90. package/doubles/double-history.js +32 -0
  91. package/doubles/double-history.js.map +1 -0
  92. package/doubles/double-iterator-event-types.d.ts +25 -0
  93. package/doubles/double-iterator-event-types.d.ts.map +1 -0
  94. package/doubles/double-iterator-tracking.d.ts +12 -0
  95. package/doubles/double-iterator-tracking.d.ts.map +1 -0
  96. package/doubles/double-iterator-tracking.js +161 -0
  97. package/doubles/double-iterator-tracking.js.map +1 -0
  98. package/doubles/double-rule-arguments.d.ts +18 -0
  99. package/doubles/double-rule-arguments.d.ts.map +1 -0
  100. package/doubles/double-rule-callback.d.ts +40 -0
  101. package/doubles/double-rule-callback.d.ts.map +1 -0
  102. package/doubles/double-rule-callback.js +84 -0
  103. package/doubles/double-rule-callback.js.map +1 -0
  104. package/doubles/double-rule-generator.d.ts +108 -0
  105. package/doubles/double-rule-generator.d.ts.map +1 -0
  106. package/doubles/double-rule-generator.js +37 -0
  107. package/doubles/double-rule-generator.js.map +1 -0
  108. package/doubles/double-rule-types.d.ts +162 -0
  109. package/doubles/double-rule-types.d.ts.map +1 -0
  110. package/doubles/double-rule.d.ts +3 -0
  111. package/doubles/double-rule.d.ts.map +1 -0
  112. package/doubles/double-rule.js +113 -0
  113. package/doubles/double-rule.js.map +1 -0
  114. package/doubles/double-runtime.d.ts +9 -0
  115. package/doubles/double-runtime.d.ts.map +1 -0
  116. package/doubles/double-runtime.js +173 -0
  117. package/doubles/double-runtime.js.map +1 -0
  118. package/doubles/double-signature.d.ts +5 -0
  119. package/doubles/double-signature.d.ts.map +1 -0
  120. package/doubles/double-usage-argument-assertion.d.ts +27 -0
  121. package/doubles/double-usage-argument-assertion.d.ts.map +1 -0
  122. package/doubles/double-usage-argument-assertion.js +202 -0
  123. package/doubles/double-usage-argument-assertion.js.map +1 -0
  124. package/doubles/double-usage-contract.d.ts +29 -0
  125. package/doubles/double-usage-contract.d.ts.map +1 -0
  126. package/doubles/double-usage-contract.js +11 -0
  127. package/doubles/double-usage-contract.js.map +1 -0
  128. package/doubles/double-usage-count-assertion.d.ts +6 -0
  129. package/doubles/double-usage-count-assertion.d.ts.map +1 -0
  130. package/doubles/double-usage-count-assertion.js +73 -0
  131. package/doubles/double-usage-count-assertion.js.map +1 -0
  132. package/doubles/double-usage-disposal-assertion.d.ts +7 -0
  133. package/doubles/double-usage-disposal-assertion.d.ts.map +1 -0
  134. package/doubles/double-usage-disposal-assertion.js +175 -0
  135. package/doubles/double-usage-disposal-assertion.js.map +1 -0
  136. package/doubles/double-usage-inspection.d.ts +22 -0
  137. package/doubles/double-usage-inspection.d.ts.map +1 -0
  138. package/doubles/double-usage-inspection.js +59 -0
  139. package/doubles/double-usage-inspection.js.map +1 -0
  140. package/doubles/double-usage-iterator-assertion.d.ts +7 -0
  141. package/doubles/double-usage-iterator-assertion.d.ts.map +1 -0
  142. package/doubles/double-usage-iterator-assertion.js +124 -0
  143. package/doubles/double-usage-iterator-assertion.js.map +1 -0
  144. package/doubles/double-usage-order-assertion.d.ts +3 -0
  145. package/doubles/double-usage-order-assertion.d.ts.map +1 -0
  146. package/doubles/double-usage-order-assertion.js +91 -0
  147. package/doubles/double-usage-order-assertion.js.map +1 -0
  148. package/doubles/double-usage.d.ts +81 -0
  149. package/doubles/double-usage.d.ts.map +1 -0
  150. package/doubles/double-usage.js +228 -0
  151. package/doubles/double-usage.js.map +1 -0
  152. package/doubles/protocol-disposable-double.d.ts +16 -0
  153. package/doubles/protocol-disposable-double.d.ts.map +1 -0
  154. package/doubles/protocol-disposable-double.js +37 -0
  155. package/doubles/protocol-disposable-double.js.map +1 -0
  156. package/doubles/protocol-double-metadata.d.ts +15 -0
  157. package/doubles/protocol-double-metadata.d.ts.map +1 -0
  158. package/doubles/protocol-double-metadata.js +30 -0
  159. package/doubles/protocol-double-metadata.js.map +1 -0
  160. package/doubles/protocol-double.d.ts +50 -0
  161. package/doubles/protocol-double.d.ts.map +1 -0
  162. package/doubles/protocol-double.js +76 -0
  163. package/doubles/protocol-double.js.map +1 -0
  164. package/doubles/protocol-iterator-double.d.ts +93 -0
  165. package/doubles/protocol-iterator-double.d.ts.map +1 -0
  166. package/doubles/protocol-iterator-double.js +512 -0
  167. package/doubles/protocol-iterator-double.js.map +1 -0
  168. package/doubles/test-double.d.ts +62 -0
  169. package/doubles/test-double.d.ts.map +1 -0
  170. package/doubles/test-double.js +192 -0
  171. package/doubles/test-double.js.map +1 -0
  172. package/package.json +36 -6
  173. package/packages/doubles/doubles.entry-point.d.ts +13 -0
  174. package/packages/doubles/doubles.entry-point.d.ts.map +1 -0
  175. package/packages/doubles/doubles.entry-point.js +5 -0
  176. package/packages/doubles/doubles.entry-point.js.map +1 -0
  177. package/readme.md +423 -5
  178. package/sbom.cdx.json +30 -0
@@ -0,0 +1,65 @@
1
+ export function copyResult(result) {
2
+ return { ...result };
3
+ }
4
+ export function copyIteratorEvent(event) {
5
+ return {
6
+ ...event,
7
+ arguments: Array.from(event.arguments)
8
+ };
9
+ }
10
+ export function copyCall(call) {
11
+ return {
12
+ ...call,
13
+ arguments: Array.from(call.arguments),
14
+ result: copyResult(call.result)
15
+ };
16
+ }
17
+ export function copyConstruction(construction) {
18
+ return {
19
+ ...construction,
20
+ arguments: Array.from(construction.arguments),
21
+ result: copyResult(construction.result)
22
+ };
23
+ }
24
+ export function copyInteraction(interaction) {
25
+ return interaction.kind === 'call' ? copyCall(interaction) : copyConstruction(interaction);
26
+ }
27
+ export function createReturnedResult(invocation, value) {
28
+ return {
29
+ invocationIndex: invocation.index,
30
+ invocationKind: invocation.kind,
31
+ order: invocation.order,
32
+ status: 'returned',
33
+ value
34
+ };
35
+ }
36
+ export function createThrownResult(invocation, thrown) {
37
+ return {
38
+ invocationIndex: invocation.index,
39
+ invocationKind: invocation.kind,
40
+ order: invocation.order,
41
+ status: 'threw',
42
+ thrown
43
+ };
44
+ }
45
+ export function createCallRecord(invocation, thisValue, result) {
46
+ return {
47
+ arguments: Array.from(invocation.arguments),
48
+ index: invocation.index,
49
+ kind: 'call',
50
+ order: invocation.order,
51
+ result,
52
+ thisValue
53
+ };
54
+ }
55
+ export function createConstructionRecord(invocation, instance, result) {
56
+ return {
57
+ arguments: Array.from(invocation.arguments),
58
+ index: invocation.index,
59
+ instance,
60
+ kind: 'construction',
61
+ order: invocation.order,
62
+ result
63
+ };
64
+ }
65
+ //# sourceMappingURL=double-history-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-history-record.js","sourceRoot":"","sources":["../../../../source/doubles/double-history-record.ts"],"names":[],"mappings":"AAkHA,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC3C,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IACxD,OAAO;QACH,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;KACzC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACrC,OAAO;QACH,GAAG,IAAI;QACP,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;KAClC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAgC;IAC7D,OAAO;QACH,GAAG,YAAY;QACf,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAC7C,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;KAC1C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAA8B;IAC1D,OAAO,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAA6B,EAAE,KAAc;IAC9E,OAAO;QACH,eAAe,EAAE,UAAU,CAAC,KAAK;QACjC,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU;QAClB,KAAK;KACR,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAA6B,EAAE,MAAe;IAC7E,OAAO;QACH,eAAe,EAAE,UAAU,CAAC,KAAK;QACjC,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,OAAO;QACf,MAAM;KACT,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,UAAqC,EACrC,SAAkB,EAClB,MAAoB;IAEpB,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM;QACN,SAAS;KACZ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CACpC,UAA6C,EAC7C,QAAuC,EACvC,MAAoB;IAEpB,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ;QACR,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM;KACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { DoubleCall, DoubleConstruction, DoubleInteraction, DoubleIteratorEvent, DoubleResult } from './double-history-record.ts';
2
+ export type HistoryStore = {
3
+ readonly callIndex: () => number;
4
+ readonly calls: readonly DoubleCall[];
5
+ readonly constructionIndex: () => number;
6
+ readonly constructions: readonly DoubleConstruction[];
7
+ readonly currentRecordingGeneration: () => number;
8
+ readonly interactionOrder: () => number;
9
+ readonly interactions: readonly DoubleInteraction[];
10
+ readonly iteratorEventIndex: () => number;
11
+ readonly iteratorEvents: readonly DoubleIteratorEvent[];
12
+ readonly iteratorIndex: () => number;
13
+ readonly recordingEnabled: (generation: number) => boolean;
14
+ readonly recordCall: (call: DoubleCall) => void;
15
+ readonly recordConstruction: (construction: DoubleConstruction) => void;
16
+ readonly recordIteratorEvent: (event: DoubleIteratorEvent) => void;
17
+ readonly reset: () => void;
18
+ readonly results: readonly DoubleResult[];
19
+ };
20
+ export declare function createHistoryStore(resetRuntimeState: () => void): HistoryStore;
21
+ //# sourceMappingURL=double-history-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-history-store.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-history-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACf,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,0BAA0B,EAAE,MAAM,MAAM,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,MAAM,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACpD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,MAAM,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3D,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACxE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC7C,CAAC;AA4FF,wBAAgB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,IAAI,GAAG,YAAY,CAwD9E"}
@@ -0,0 +1,118 @@
1
+ function createHistoryRecords() {
2
+ const calls = [];
3
+ const constructions = [];
4
+ const interactions = [];
5
+ const iteratorEvents = [];
6
+ const results = [];
7
+ return {
8
+ calls,
9
+ constructions,
10
+ interactions,
11
+ iteratorEvents,
12
+ recordCall(call) {
13
+ calls.push(call);
14
+ interactions.push(call);
15
+ results.push(call.result);
16
+ },
17
+ recordConstruction(construction) {
18
+ constructions.push(construction);
19
+ interactions.push(construction);
20
+ results.push(construction.result);
21
+ },
22
+ recordIteratorEvent(event) {
23
+ iteratorEvents.push(event);
24
+ },
25
+ reset() {
26
+ calls.length = 0;
27
+ constructions.length = 0;
28
+ interactions.length = 0;
29
+ iteratorEvents.length = 0;
30
+ results.length = 0;
31
+ },
32
+ results
33
+ };
34
+ }
35
+ function createHistoryIndex() {
36
+ let next = 0;
37
+ return {
38
+ next() {
39
+ const index = next;
40
+ next += 1;
41
+ return index;
42
+ },
43
+ reset() {
44
+ next = 0;
45
+ }
46
+ };
47
+ }
48
+ function createRecordingGeneration() {
49
+ let generation = 0;
50
+ return {
51
+ current() {
52
+ return generation;
53
+ },
54
+ enabled(candidate) {
55
+ return candidate === generation;
56
+ },
57
+ next() {
58
+ generation += 1;
59
+ }
60
+ };
61
+ }
62
+ export function createHistoryStore(resetRuntimeState) {
63
+ const records = createHistoryRecords();
64
+ const callIndex = createHistoryIndex();
65
+ const constructionIndex = createHistoryIndex();
66
+ const interactionOrder = createHistoryIndex();
67
+ const iteratorEventIndex = createHistoryIndex();
68
+ const iteratorIndex = createHistoryIndex();
69
+ const recordingGeneration = createRecordingGeneration();
70
+ return {
71
+ callIndex() {
72
+ return callIndex.next();
73
+ },
74
+ calls: records.calls,
75
+ constructionIndex() {
76
+ return constructionIndex.next();
77
+ },
78
+ constructions: records.constructions,
79
+ currentRecordingGeneration() {
80
+ return recordingGeneration.current();
81
+ },
82
+ interactionOrder() {
83
+ return interactionOrder.next();
84
+ },
85
+ interactions: records.interactions,
86
+ iteratorEventIndex() {
87
+ return iteratorEventIndex.next();
88
+ },
89
+ iteratorEvents: records.iteratorEvents,
90
+ iteratorIndex() {
91
+ return iteratorIndex.next();
92
+ },
93
+ recordingEnabled(candidate) {
94
+ return recordingGeneration.enabled(candidate);
95
+ },
96
+ recordCall(call) {
97
+ records.recordCall(call);
98
+ },
99
+ recordConstruction(construction) {
100
+ records.recordConstruction(construction);
101
+ },
102
+ recordIteratorEvent(event) {
103
+ records.recordIteratorEvent(event);
104
+ },
105
+ reset() {
106
+ records.reset();
107
+ callIndex.reset();
108
+ constructionIndex.reset();
109
+ interactionOrder.reset();
110
+ iteratorEventIndex.reset();
111
+ iteratorIndex.reset();
112
+ recordingGeneration.next();
113
+ resetRuntimeState();
114
+ },
115
+ results: records.results
116
+ };
117
+ }
118
+ //# sourceMappingURL=double-history-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-history-store.js","sourceRoot":"","sources":["../../../../source/doubles/double-history-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import type { CallableSignature, ConstructorReturnValue, ConstructorSignature } from './double-behavior.ts';
2
+ import { type DoubleCall, type DoubleConstruction, type DoubleResult, type HistoryInvocation } from './double-history-record.ts';
3
+ import { type AsyncIteratorSource, type SyncIteratorSource, type TrackedCallInvocation } from './double-iterator-tracking.ts';
4
+ import type { IteratorEventFor } from './double-iterator-event-types.ts';
5
+ type CallArguments<Signature> = Signature extends (...arguments_: infer Arguments) => unknown ? Arguments : never;
6
+ type ConstructionArguments<Signature> = Signature extends new (...arguments_: infer Arguments) => unknown ? Arguments : never;
7
+ type CallReturn<Signature> = Signature extends (...arguments_: readonly never[]) => infer ReturnValue ? ReturnValue : never;
8
+ type ConstructionInstance<Signature> = Signature extends new (...arguments_: readonly never[]) => infer Instance ? Instance : never;
9
+ type CallThisValue<Signature> = ThisParameterType<Signature>;
10
+ type CallableOverloadRecordUnion<Arguments1 extends readonly unknown[], ReturnValue1, ThisValue1, Arguments2 extends readonly unknown[], ReturnValue2, ThisValue2, Arguments3 extends readonly unknown[], ReturnValue3, ThisValue3, Arguments4 extends readonly unknown[], ReturnValue4, ThisValue4, Arguments5 extends readonly unknown[], ReturnValue5, ThisValue5, Arguments6 extends readonly unknown[], ReturnValue6, ThisValue6, Arguments7 extends readonly unknown[], ReturnValue7, ThisValue7, Arguments8 extends readonly unknown[], ReturnValue8, ThisValue8, Arguments9 extends readonly unknown[], ReturnValue9, ThisValue9, Arguments10 extends readonly unknown[], ReturnValue10, ThisValue10, Arguments11 extends readonly unknown[], ReturnValue11, ThisValue11, Arguments12 extends readonly unknown[], ReturnValue12, ThisValue12> = {
11
+ readonly overload01: DoubleCall<Arguments1, ReturnValue1, ThisValue1>;
12
+ readonly overload02: DoubleCall<Arguments2, ReturnValue2, ThisValue2>;
13
+ readonly overload03: DoubleCall<Arguments3, ReturnValue3, ThisValue3>;
14
+ readonly overload04: DoubleCall<Arguments4, ReturnValue4, ThisValue4>;
15
+ readonly overload05: DoubleCall<Arguments5, ReturnValue5, ThisValue5>;
16
+ readonly overload06: DoubleCall<Arguments6, ReturnValue6, ThisValue6>;
17
+ readonly overload07: DoubleCall<Arguments7, ReturnValue7, ThisValue7>;
18
+ readonly overload08: DoubleCall<Arguments8, ReturnValue8, ThisValue8>;
19
+ readonly overload09: DoubleCall<Arguments9, ReturnValue9, ThisValue9>;
20
+ readonly overload10: DoubleCall<Arguments10, ReturnValue10, ThisValue10>;
21
+ readonly overload11: DoubleCall<Arguments11, ReturnValue11, ThisValue11>;
22
+ readonly overload12: DoubleCall<Arguments12, ReturnValue12, ThisValue12>;
23
+ }[keyof {
24
+ readonly overload01: unknown;
25
+ readonly overload02: unknown;
26
+ readonly overload03: unknown;
27
+ readonly overload04: unknown;
28
+ readonly overload05: unknown;
29
+ readonly overload06: unknown;
30
+ readonly overload07: unknown;
31
+ readonly overload08: unknown;
32
+ readonly overload09: unknown;
33
+ readonly overload10: unknown;
34
+ readonly overload11: unknown;
35
+ readonly overload12: unknown;
36
+ }];
37
+ type CallableOverloadRecords<Signature> = Signature extends {
38
+ (this: infer ThisValue1, ...arguments_: infer Arguments1): infer ReturnValue1;
39
+ (this: infer ThisValue2, ...arguments_: infer Arguments2): infer ReturnValue2;
40
+ (this: infer ThisValue3, ...arguments_: infer Arguments3): infer ReturnValue3;
41
+ (this: infer ThisValue4, ...arguments_: infer Arguments4): infer ReturnValue4;
42
+ (this: infer ThisValue5, ...arguments_: infer Arguments5): infer ReturnValue5;
43
+ (this: infer ThisValue6, ...arguments_: infer Arguments6): infer ReturnValue6;
44
+ (this: infer ThisValue7, ...arguments_: infer Arguments7): infer ReturnValue7;
45
+ (this: infer ThisValue8, ...arguments_: infer Arguments8): infer ReturnValue8;
46
+ (this: infer ThisValue9, ...arguments_: infer Arguments9): infer ReturnValue9;
47
+ (this: infer ThisValue10, ...arguments_: infer Arguments10): infer ReturnValue10;
48
+ (this: infer ThisValue11, ...arguments_: infer Arguments11): infer ReturnValue11;
49
+ (this: infer ThisValue12, ...arguments_: infer Arguments12): infer ReturnValue12;
50
+ } ? CallableOverloadRecordUnion<Arguments1, ReturnValue1, ThisValue1, Arguments2, ReturnValue2, ThisValue2, Arguments3, ReturnValue3, ThisValue3, Arguments4, ReturnValue4, ThisValue4, Arguments5, ReturnValue5, ThisValue5, Arguments6, ReturnValue6, ThisValue6, Arguments7, ReturnValue7, ThisValue7, Arguments8, ReturnValue8, ThisValue8, Arguments9, ReturnValue9, ThisValue9, Arguments10, ReturnValue10, ThisValue10, Arguments11, ReturnValue11, ThisValue11, Arguments12, ReturnValue12, ThisValue12> : never;
51
+ type SingleCallRecord<Signature> = Signature extends CallableSignature ? DoubleCall<CallArguments<Signature>, CallReturn<Signature>, CallThisValue<Signature>> : never;
52
+ type KnownCallRecord<Signature> = CallableOverloadRecords<Signature> extends never ? SingleCallRecord<Signature> : CallableOverloadRecords<Signature>;
53
+ type CallRecordFor<Signature> = KnownCallRecord<Signature> extends never ? DoubleCall : KnownCallRecord<Signature>;
54
+ type ConstructableOverloadRecordUnion<Arguments1 extends readonly unknown[], Instance1, Arguments2 extends readonly unknown[], Instance2, Arguments3 extends readonly unknown[], Instance3, Arguments4 extends readonly unknown[], Instance4, Arguments5 extends readonly unknown[], Instance5, Arguments6 extends readonly unknown[], Instance6, Arguments7 extends readonly unknown[], Instance7, Arguments8 extends readonly unknown[], Instance8, Arguments9 extends readonly unknown[], Instance9, Arguments10 extends readonly unknown[], Instance10, Arguments11 extends readonly unknown[], Instance11, Arguments12 extends readonly unknown[], Instance12> = {
55
+ readonly overload01: DoubleConstruction<Arguments1, Instance1>;
56
+ readonly overload02: DoubleConstruction<Arguments2, Instance2>;
57
+ readonly overload03: DoubleConstruction<Arguments3, Instance3>;
58
+ readonly overload04: DoubleConstruction<Arguments4, Instance4>;
59
+ readonly overload05: DoubleConstruction<Arguments5, Instance5>;
60
+ readonly overload06: DoubleConstruction<Arguments6, Instance6>;
61
+ readonly overload07: DoubleConstruction<Arguments7, Instance7>;
62
+ readonly overload08: DoubleConstruction<Arguments8, Instance8>;
63
+ readonly overload09: DoubleConstruction<Arguments9, Instance9>;
64
+ readonly overload10: DoubleConstruction<Arguments10, Instance10>;
65
+ readonly overload11: DoubleConstruction<Arguments11, Instance11>;
66
+ readonly overload12: DoubleConstruction<Arguments12, Instance12>;
67
+ }[keyof {
68
+ readonly overload01: unknown;
69
+ readonly overload02: unknown;
70
+ readonly overload03: unknown;
71
+ readonly overload04: unknown;
72
+ readonly overload05: unknown;
73
+ readonly overload06: unknown;
74
+ readonly overload07: unknown;
75
+ readonly overload08: unknown;
76
+ readonly overload09: unknown;
77
+ readonly overload10: unknown;
78
+ readonly overload11: unknown;
79
+ readonly overload12: unknown;
80
+ }];
81
+ type ConstructableOverloadRecords<Signature> = Signature extends {
82
+ new (...arguments_: infer Arguments1): infer Instance1;
83
+ new (...arguments_: infer Arguments2): infer Instance2;
84
+ new (...arguments_: infer Arguments3): infer Instance3;
85
+ new (...arguments_: infer Arguments4): infer Instance4;
86
+ new (...arguments_: infer Arguments5): infer Instance5;
87
+ new (...arguments_: infer Arguments6): infer Instance6;
88
+ new (...arguments_: infer Arguments7): infer Instance7;
89
+ new (...arguments_: infer Arguments8): infer Instance8;
90
+ new (...arguments_: infer Arguments9): infer Instance9;
91
+ new (...arguments_: infer Arguments10): infer Instance10;
92
+ new (...arguments_: infer Arguments11): infer Instance11;
93
+ new (...arguments_: infer Arguments12): infer Instance12;
94
+ } ? ConstructableOverloadRecordUnion<Arguments1, Instance1, Arguments2, Instance2, Arguments3, Instance3, Arguments4, Instance4, Arguments5, Instance5, Arguments6, Instance6, Arguments7, Instance7, Arguments8, Instance8, Arguments9, Instance9, Arguments10, Instance10, Arguments11, Instance11, Arguments12, Instance12> : never;
95
+ type SingleConstructionRecord<Signature> = Signature extends ConstructorSignature ? DoubleConstruction<ConstructionArguments<Signature>, ConstructionInstance<Signature>> : never;
96
+ type KnownConstructionRecord<Signature> = ConstructableOverloadRecords<Signature> extends never ? SingleConstructionRecord<Signature> : ConstructableOverloadRecords<Signature>;
97
+ type ConstructionRecordFor<Signature> = KnownConstructionRecord<Signature> extends never ? DoubleConstruction : KnownConstructionRecord<Signature>;
98
+ type InteractionRecordFor<Signature> = CallRecordFor<Signature> | ConstructionRecordFor<Signature>;
99
+ type ResultValueFor<Signature> = CallReturn<Signature> | ConstructionInstance<Signature>;
100
+ type ResultRecordFor<Signature> = DoubleResult<ResultValueFor<Signature> extends never ? unknown : ResultValueFor<Signature>>;
101
+ export type DoubleHistory<Signature> = {
102
+ readonly callCount: number;
103
+ readonly calls: readonly CallRecordFor<Signature>[];
104
+ readonly constructionCount: number;
105
+ readonly constructions: readonly ConstructionRecordFor<Signature>[];
106
+ readonly firstCall: CallRecordFor<Signature> | null;
107
+ readonly firstConstruction: ConstructionRecordFor<Signature> | null;
108
+ readonly firstInteraction: InteractionRecordFor<Signature> | null;
109
+ readonly firstIteratorEvent: IteratorEventFor<Signature> | null;
110
+ readonly firstResult: ResultRecordFor<Signature> | null;
111
+ readonly interactionCount: number;
112
+ readonly interactions: readonly InteractionRecordFor<Signature>[];
113
+ readonly iteratorEventCount: number;
114
+ readonly iteratorEvents: readonly IteratorEventFor<Signature>[];
115
+ readonly lastCall: CallRecordFor<Signature> | null;
116
+ readonly lastConstruction: ConstructionRecordFor<Signature> | null;
117
+ readonly lastInteraction: InteractionRecordFor<Signature> | null;
118
+ readonly lastIteratorEvent: IteratorEventFor<Signature> | null;
119
+ readonly lastResult: ResultRecordFor<Signature> | null;
120
+ readonly nthCall: (index: number) => CallRecordFor<Signature> | null;
121
+ readonly nthConstruction: (index: number) => ConstructionRecordFor<Signature> | null;
122
+ readonly nthInteraction: (index: number) => InteractionRecordFor<Signature> | null;
123
+ readonly nthIteratorEvent: (index: number) => IteratorEventFor<Signature> | null;
124
+ readonly reset: () => void;
125
+ readonly results: readonly ResultRecordFor<Signature>[];
126
+ };
127
+ export type RuntimeDoubleHistory = {
128
+ readonly callIndex: () => number;
129
+ readonly constructionIndex: () => number;
130
+ readonly install: (target: UnknownFunctionTarget) => void;
131
+ readonly interactionOrder: () => number;
132
+ readonly recordCallResult: (invocation: HistoryInvocation<'call'>, thisValue: unknown, result: DoubleResult) => void;
133
+ readonly recordConstructionResult: (invocation: HistoryInvocation<'construction'>, instance: ConstructorReturnValue | null, result: DoubleResult) => void;
134
+ readonly reset: () => void;
135
+ readonly trackAsyncIterator: (invocation: TrackedCallInvocation, source: AsyncIteratorSource) => AsyncIterableIterator<unknown>;
136
+ readonly trackSyncIterator: (invocation: TrackedCallInvocation, source: SyncIteratorSource) => IterableIterator<unknown>;
137
+ };
138
+ type UnknownFunctionTarget = (...arguments_: readonly unknown[]) => unknown;
139
+ export declare function createDoubleHistory(resetRuntimeState: () => void): RuntimeDoubleHistory;
140
+ export {};
141
+ //# sourceMappingURL=double-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-history.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { createCallRecord, createConstructionRecord } from "./double-history-record.js";
2
+ import { createHistoryApi, installHistory } from "./double-history-api.js";
3
+ import { createHistoryStore } from "./double-history-store.js";
4
+ import { createAsyncTrackedIterator, createSyncTrackedIterator } from "./double-iterator-tracking.js";
5
+ function createRuntimeHistory(store, api) {
6
+ return {
7
+ callIndex: store.callIndex,
8
+ constructionIndex: store.constructionIndex,
9
+ install(target) {
10
+ installHistory(target, api);
11
+ },
12
+ interactionOrder: store.interactionOrder,
13
+ recordCallResult(invocation, thisValue, result) {
14
+ store.recordCall(createCallRecord(invocation, thisValue, result));
15
+ },
16
+ recordConstructionResult(invocation, instance, result) {
17
+ store.recordConstruction(createConstructionRecord(invocation, instance, result));
18
+ },
19
+ reset: store.reset,
20
+ trackAsyncIterator(invocation, source) {
21
+ return createAsyncTrackedIterator(store, invocation, source);
22
+ },
23
+ trackSyncIterator(invocation, source) {
24
+ return createSyncTrackedIterator(store, invocation, source);
25
+ }
26
+ };
27
+ }
28
+ export function createDoubleHistory(resetRuntimeState) {
29
+ const store = createHistoryStore(resetRuntimeState);
30
+ return createRuntimeHistory(store, createHistoryApi(store));
31
+ }
32
+ //# sourceMappingURL=double-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-history.js","sourceRoot":"","sources":["../../../../source/doubles/double-history.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,gBAAgB,EAChB,wBAAwB,EAK3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,gBAAgB,EAChB,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAEH,0BAA0B,EAC1B,yBAAyB,EAG5B,MAAM,+BAA+B,CAAC;AAyTvC,SAAS,oBAAoB,CAAC,KAAmB,EAAE,GAAyB;IACxE,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,OAAO,CAAC,MAAM;YACV,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM;YAC1C,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,wBAAwB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;YACjD,KAAK,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,kBAAkB,CAAC,UAAU,EAAE,MAAM;YACjC,OAAO,0BAA0B,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;QACD,iBAAiB,CAAC,UAAU,EAAE,MAAM;YAChC,OAAO,yBAAyB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,iBAA6B;IAC7D,MAAM,KAAK,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAEpD,OAAO,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { CallableSignature } from './double-behavior.ts';
2
+ import type { DoubleIteratorEvent } from './double-history-record.ts';
3
+ type CallReturn<Signature> = Signature extends (...arguments_: readonly never[]) => infer ReturnValue ? ReturnValue : never;
4
+ type GeneratorLikeKind = keyof {
5
+ readonly async: unknown;
6
+ readonly sync: unknown;
7
+ };
8
+ type GeneratorLike<YieldValue, ReturnValue, NextValue> = {
9
+ readonly async: AsyncGenerator<YieldValue, ReturnValue, NextValue>;
10
+ readonly sync: Generator<YieldValue, ReturnValue, NextValue>;
11
+ }[GeneratorLikeKind];
12
+ type IterableLike<YieldValue> = AsyncIterableIterator<YieldValue> | IterableIterator<YieldValue>;
13
+ type IteratorEventArgumentCases<NextValue, ReturnValue> = {
14
+ readonly empty: readonly [];
15
+ readonly next: readonly [NextValue];
16
+ readonly returned: readonly [ReturnValue];
17
+ readonly unknown: readonly [unknown];
18
+ };
19
+ type IteratorEventArguments<NextValue, ReturnValue> = IteratorEventArgumentCases<NextValue, ReturnValue>[keyof IteratorEventArgumentCases<NextValue, ReturnValue>];
20
+ type GeneratorIteratorEvent<ReturnValue> = ReturnValue extends GeneratorLike<infer YieldValue, infer GeneratorReturnValue, infer NextValue> ? DoubleIteratorEvent<YieldValue, GeneratorReturnValue, IteratorEventArguments<NextValue, GeneratorReturnValue>> : never;
21
+ type IterableIteratorEvent<ReturnValue> = ReturnValue extends IterableLike<infer YieldValue> ? DoubleIteratorEvent<YieldValue> : DoubleIteratorEvent;
22
+ type IteratorEventForReturn<ReturnValue> = [GeneratorIteratorEvent<ReturnValue>] extends [never] ? IterableIteratorEvent<ReturnValue> : GeneratorIteratorEvent<ReturnValue>;
23
+ export type IteratorEventFor<Signature> = [Signature] extends [CallableSignature] ? IteratorEventForReturn<CallReturn<Signature>> : DoubleIteratorEvent;
24
+ export {};
25
+ //# sourceMappingURL=double-iterator-event-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-iterator-event-types.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-iterator-event-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,KAAK,UAAU,CAAC,SAAS,IAAI,SAAS,SAAS,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,WAAW,GAAG,WAAW,GAC7G,KAAK,CAAC;AAEZ,KAAK,iBAAiB,GAAG,MAAM;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B,CAAC;AACF,KAAK,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,IAAI;IACrD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;CAChE,CAAC,iBAAiB,CAAC,CAAC;AACrB,KAAK,YAAY,CAAC,UAAU,IAAI,qBAAqB,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAEjG,KAAK,0BAA0B,CAAC,SAAS,EAAE,WAAW,IAAI;IACtD,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF,KAAK,sBAAsB,CAAC,SAAS,EAAE,WAAW,IAAI,0BAA0B,CAC5E,SAAS,EACT,WAAW,CACd,CAAC,MAAM,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAE5D,KAAK,sBAAsB,CAAC,WAAW,IAAI,WAAW,SAAS,aAAa,CACxE,MAAM,UAAU,EAChB,MAAM,oBAAoB,EAC1B,MAAM,SAAS,CAClB,GAAG,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,EAAE,sBAAsB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,GAC5G,KAAK,CAAC;AAEZ,KAAK,qBAAqB,CAAC,WAAW,IAAI,WAAW,SAAS,YAAY,CAAC,MAAM,UAAU,CAAC,GACtF,mBAAmB,CAAC,UAAU,CAAC,GAC/B,mBAAmB,CAAC;AAE1B,KAAK,sBAAsB,CAAC,WAAW,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC1F,qBAAqB,CAAC,WAAW,CAAC,GAClC,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAE1C,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAC3E,sBAAsB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAC7C,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HistoryInvocation } from './double-history-record.ts';
2
+ import type { HistoryStore } from './double-history-store.ts';
3
+ export type SyncIteratorSource = () => Iterator<unknown, unknown, unknown>;
4
+ export type AsyncIteratorSource = () => AsyncIterator<unknown, unknown, unknown> | Iterator<unknown, unknown, unknown>;
5
+ export type TrackedCallInvocation = HistoryInvocation<'call'> | {
6
+ readonly arguments: readonly unknown[];
7
+ readonly index: number;
8
+ readonly kind: 'call';
9
+ };
10
+ export declare function createSyncTrackedIterator(store: HistoryStore, invocation: TrackedCallInvocation, source: SyncIteratorSource): IterableIterator<unknown>;
11
+ export declare function createAsyncTrackedIterator(store: HistoryStore, invocation: TrackedCallInvocation, source: AsyncIteratorSource): AsyncIterableIterator<unknown>;
12
+ //# sourceMappingURL=double-iterator-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"double-iterator-tracking.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-iterator-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGR,iBAAiB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3E,MAAM,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEvH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAgKF,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,kBAAkB,GAC3B,gBAAgB,CAAC,OAAO,CAAC,CA+B3B;AAED,wBAAgB,0BAA0B,CACtC,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,mBAAmB,GAC5B,qBAAqB,CAAC,OAAO,CAAC,CAkChC"}
@@ -0,0 +1,161 @@
1
+ function iteratorResultEventKind(result) {
2
+ return result.done === true ? 'return' : 'yield';
3
+ }
4
+ function recordIteratorResult(input) {
5
+ if (!input.store.recordingEnabled(input.context.generation)) {
6
+ return;
7
+ }
8
+ input.store.recordIteratorEvent({
9
+ arguments: Array.from(input.parameters),
10
+ callIndex: input.context.invocation.index,
11
+ index: input.store.iteratorEventIndex(),
12
+ iteratorIndex: input.context.iteratorIndex,
13
+ kind: iteratorResultEventKind(input.result),
14
+ method: input.method,
15
+ protocol: input.context.protocol,
16
+ value: input.result.value
17
+ });
18
+ }
19
+ function recordIteratorThrow(input) {
20
+ if (!input.store.recordingEnabled(input.context.generation)) {
21
+ return;
22
+ }
23
+ input.store.recordIteratorEvent({
24
+ arguments: Array.from(input.parameters),
25
+ callIndex: input.context.invocation.index,
26
+ index: input.store.iteratorEventIndex(),
27
+ iteratorIndex: input.context.iteratorIndex,
28
+ kind: 'throw',
29
+ method: input.method,
30
+ protocol: input.context.protocol,
31
+ thrown: input.error
32
+ });
33
+ }
34
+ function completedIteratorResult(value) {
35
+ return {
36
+ done: true,
37
+ value
38
+ };
39
+ }
40
+ function cachedSource(source) {
41
+ let value = null;
42
+ return function currentValue() {
43
+ if (value === null) {
44
+ value = source();
45
+ }
46
+ return value;
47
+ };
48
+ }
49
+ function syncIteratorMethod(iterator, method) {
50
+ if (method === 'next') {
51
+ return function callNext(...parameters) {
52
+ return iterator.next(parameters[0]);
53
+ };
54
+ }
55
+ const methodValue = Reflect.get(iterator, method);
56
+ if (typeof methodValue === 'function') {
57
+ const invoke = methodValue.bind(iterator);
58
+ return function callIteratorMethod(...parameters) {
59
+ return invoke(...parameters);
60
+ };
61
+ }
62
+ if (method === 'return') {
63
+ return function returnWithoutIteratorMethod(...parameters) {
64
+ return completedIteratorResult(parameters[0]);
65
+ };
66
+ }
67
+ return function throwWithoutIteratorMethod(...parameters) {
68
+ throw parameters[0];
69
+ };
70
+ }
71
+ function asyncIteratorMethod(iterator, method) {
72
+ if (method === 'next') {
73
+ return async function callNext(...parameters) {
74
+ return iterator.next(parameters[0]);
75
+ };
76
+ }
77
+ const methodValue = Reflect.get(iterator, method);
78
+ if (typeof methodValue === 'function') {
79
+ const invoke = methodValue.bind(iterator);
80
+ return async function callIteratorMethod(...parameters) {
81
+ return invoke(...parameters);
82
+ };
83
+ }
84
+ if (method === 'return') {
85
+ return async function returnWithoutAsyncIteratorMethod(...parameters) {
86
+ return completedIteratorResult(parameters[0]);
87
+ };
88
+ }
89
+ return async function throwWithoutAsyncIteratorMethod(...parameters) {
90
+ throw parameters[0];
91
+ };
92
+ }
93
+ function createIteratorContext(store, invocation, protocol) {
94
+ return {
95
+ generation: store.currentRecordingGeneration(),
96
+ invocation,
97
+ iteratorIndex: store.iteratorIndex(),
98
+ protocol
99
+ };
100
+ }
101
+ export function createSyncTrackedIterator(store, invocation, source) {
102
+ const currentIterator = cachedSource(source);
103
+ const context = createIteratorContext(store, invocation, 'sync');
104
+ function call(method, parameters) {
105
+ try {
106
+ const result = syncIteratorMethod(currentIterator(), method)(...parameters);
107
+ recordIteratorResult({ context, method, parameters, result, store });
108
+ return result;
109
+ }
110
+ catch (error) {
111
+ recordIteratorThrow({ context, error, method, parameters, store });
112
+ throw error;
113
+ }
114
+ }
115
+ const tracked = {
116
+ next(...parameters) {
117
+ return call('next', parameters);
118
+ },
119
+ return(...parameters) {
120
+ return call('return', parameters);
121
+ },
122
+ throw(...parameters) {
123
+ return call('throw', parameters);
124
+ },
125
+ [Symbol.iterator]() {
126
+ return tracked;
127
+ }
128
+ };
129
+ return tracked;
130
+ }
131
+ export function createAsyncTrackedIterator(store, invocation, source) {
132
+ const currentIterator = cachedSource(source);
133
+ const context = createIteratorContext(store, invocation, 'async');
134
+ async function call(method, parameters) {
135
+ try {
136
+ const result = await asyncIteratorMethod(currentIterator(), method)(...parameters);
137
+ recordIteratorResult({ context, method, parameters, result, store });
138
+ return result;
139
+ }
140
+ catch (error) {
141
+ recordIteratorThrow({ context, error, method, parameters, store });
142
+ throw error;
143
+ }
144
+ }
145
+ const tracked = {
146
+ async next(...parameters) {
147
+ return await call('next', parameters);
148
+ },
149
+ async return(...parameters) {
150
+ return await call('return', parameters);
151
+ },
152
+ async throw(...parameters) {
153
+ return await call('throw', parameters);
154
+ },
155
+ [Symbol.asyncIterator]() {
156
+ return tracked;
157
+ }
158
+ };
159
+ return tracked;
160
+ }
161
+ //# sourceMappingURL=double-iterator-tracking.js.map