@rhost/testkit 0.1.1 → 1.3.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 (110) hide show
  1. package/README.md +393 -5
  2. package/ROADMAP.md +241 -0
  3. package/dist/benchmark.d.ts +44 -0
  4. package/dist/benchmark.d.ts.map +1 -0
  5. package/dist/benchmark.js +118 -0
  6. package/dist/benchmark.js.map +1 -0
  7. package/dist/cli/deploy.d.ts +2 -0
  8. package/dist/cli/deploy.d.ts.map +1 -0
  9. package/dist/cli/deploy.js +120 -0
  10. package/dist/cli/deploy.js.map +1 -0
  11. package/dist/cli/fmt.d.ts +2 -0
  12. package/dist/cli/fmt.d.ts.map +1 -0
  13. package/dist/cli/fmt.js +119 -0
  14. package/dist/cli/fmt.js.map +1 -0
  15. package/dist/cli/index.d.ts +3 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +81 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/init.d.ts +2 -0
  20. package/dist/cli/init.d.ts.map +1 -0
  21. package/dist/cli/init.js +210 -0
  22. package/dist/cli/init.js.map +1 -0
  23. package/dist/cli/validate.d.ts +2 -0
  24. package/dist/cli/validate.d.ts.map +1 -0
  25. package/dist/cli/validate.js +126 -0
  26. package/dist/cli/validate.js.map +1 -0
  27. package/dist/cli/watch.d.ts +2 -0
  28. package/dist/cli/watch.d.ts.map +1 -0
  29. package/dist/cli/watch.js +136 -0
  30. package/dist/cli/watch.js.map +1 -0
  31. package/dist/client.d.ts +56 -0
  32. package/dist/client.d.ts.map +1 -1
  33. package/dist/client.js +117 -30
  34. package/dist/client.js.map +1 -1
  35. package/dist/container.d.ts.map +1 -1
  36. package/dist/container.js +1 -1
  37. package/dist/container.js.map +1 -1
  38. package/dist/deployer.d.ts +86 -0
  39. package/dist/deployer.d.ts.map +1 -0
  40. package/dist/deployer.js +154 -0
  41. package/dist/deployer.js.map +1 -0
  42. package/dist/expect.d.ts +27 -1
  43. package/dist/expect.d.ts.map +1 -1
  44. package/dist/expect.js +47 -2
  45. package/dist/expect.js.map +1 -1
  46. package/dist/index.d.ts +10 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +39 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/preflight.d.ts +70 -0
  51. package/dist/preflight.d.ts.map +1 -0
  52. package/dist/preflight.js +121 -0
  53. package/dist/preflight.js.map +1 -0
  54. package/dist/reporter.d.ts +2 -0
  55. package/dist/reporter.d.ts.map +1 -1
  56. package/dist/reporter.js +24 -1
  57. package/dist/reporter.js.map +1 -1
  58. package/dist/runner.d.ts +83 -2
  59. package/dist/runner.d.ts.map +1 -1
  60. package/dist/runner.js +137 -8
  61. package/dist/runner.js.map +1 -1
  62. package/dist/snapshots.d.ts +84 -0
  63. package/dist/snapshots.d.ts.map +1 -0
  64. package/dist/snapshots.js +230 -0
  65. package/dist/snapshots.js.map +1 -0
  66. package/dist/validator/builtins.d.ts +18 -0
  67. package/dist/validator/builtins.d.ts.map +1 -0
  68. package/dist/validator/builtins.js +265 -0
  69. package/dist/validator/builtins.js.map +1 -0
  70. package/dist/validator/checker.d.ts +13 -0
  71. package/dist/validator/checker.d.ts.map +1 -0
  72. package/dist/validator/checker.js +111 -0
  73. package/dist/validator/checker.js.map +1 -0
  74. package/dist/validator/clobber.d.ts +7 -0
  75. package/dist/validator/clobber.d.ts.map +1 -0
  76. package/dist/validator/clobber.js +102 -0
  77. package/dist/validator/clobber.js.map +1 -0
  78. package/dist/validator/compat.d.ts +19 -0
  79. package/dist/validator/compat.d.ts.map +1 -0
  80. package/dist/validator/compat.js +58 -0
  81. package/dist/validator/compat.js.map +1 -0
  82. package/dist/validator/formatter.d.ts +21 -0
  83. package/dist/validator/formatter.d.ts.map +1 -0
  84. package/dist/validator/formatter.js +120 -0
  85. package/dist/validator/formatter.js.map +1 -0
  86. package/dist/validator/index.d.ts +57 -0
  87. package/dist/validator/index.d.ts.map +1 -0
  88. package/dist/validator/index.js +133 -0
  89. package/dist/validator/index.js.map +1 -0
  90. package/dist/validator/parser.d.ts +16 -0
  91. package/dist/validator/parser.d.ts.map +1 -0
  92. package/dist/validator/parser.js +260 -0
  93. package/dist/validator/parser.js.map +1 -0
  94. package/dist/validator/tokenizer.d.ts +28 -0
  95. package/dist/validator/tokenizer.d.ts.map +1 -0
  96. package/dist/validator/tokenizer.js +174 -0
  97. package/dist/validator/tokenizer.js.map +1 -0
  98. package/dist/validator/types.d.ts +55 -0
  99. package/dist/validator/types.d.ts.map +1 -0
  100. package/dist/validator/types.js +6 -0
  101. package/dist/validator/types.js.map +1 -0
  102. package/dist/watcher.d.ts +44 -0
  103. package/dist/watcher.d.ts.map +1 -0
  104. package/dist/watcher.js +297 -0
  105. package/dist/watcher.js.map +1 -0
  106. package/dist/world.d.ts +79 -0
  107. package/dist/world.d.ts.map +1 -1
  108. package/dist/world.js +167 -1
  109. package/dist/world.js.map +1 -1
  110. package/package.json +19 -3
package/dist/expect.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { RhostClient } from './client';
2
+ import { SnapshotManager } from './snapshots';
2
3
  export { isRhostError } from './assertions';
3
4
  export declare class RhostExpectError extends Error {
4
5
  readonly expression: string;
@@ -8,6 +9,11 @@ export declare class RhostExpectError extends Error {
8
9
  readonly negated: boolean;
9
10
  constructor(expression: string, matcherName: string, actual: string, expectedDesc: string, negated: boolean);
10
11
  }
12
+ export interface SnapshotContext {
13
+ manager: SnapshotManager;
14
+ /** Full test name path, e.g. "Suite > Sub > Test Name" */
15
+ testName: string;
16
+ }
11
17
  /**
12
18
  * Jest-style expect wrapper for RhostMUSH softcode evaluation.
13
19
  *
@@ -15,13 +21,17 @@ export declare class RhostExpectError extends Error {
15
21
  * const ex = new RhostExpect(client, 'add(2,3)');
16
22
  * await ex.toBe('5');
17
23
  * await ex.not.toBe('42');
24
+ *
25
+ * @example Snapshot testing (requires runner context)
26
+ * await expect('iter(lnum(1,10),##)').toMatchSnapshot();
18
27
  */
19
28
  export declare class RhostExpect {
20
29
  private readonly client;
21
30
  private readonly expression;
22
31
  private readonly negated;
32
+ private readonly snapshotCtx?;
23
33
  private _cached;
24
- constructor(client: RhostClient, expression: string, negated?: boolean);
34
+ constructor(client: RhostClient, expression: string, negated?: boolean, snapshotCtx?: SnapshotContext | undefined);
25
35
  /** Negation accessor — returns a new RhostExpect with negation flipped. */
26
36
  get not(): RhostExpect;
27
37
  private resolve;
@@ -70,5 +80,21 @@ export declare class RhostExpect {
70
80
  * List has exactly n words (space-delimited by default).
71
81
  */
72
82
  toHaveWordCount(n: number, sep?: string): Promise<void>;
83
+ /**
84
+ * Compare the evaluated result against a stored snapshot.
85
+ *
86
+ * **First run**: the value is written to the snapshot file and the test passes.
87
+ * **Subsequent runs**: the value is compared to the stored snapshot. A mismatch
88
+ * fails the test and shows a diff.
89
+ * **Update mode**: pass `updateSnapshots: true` in `RunnerOptions`, or set the
90
+ * `RHOST_UPDATE_SNAPSHOTS=1` environment variable, to overwrite stored values.
91
+ *
92
+ * `.not.toMatchSnapshot()` is not supported and will throw.
93
+ *
94
+ * @example
95
+ * await expect('iter(lnum(1,10),##)').toMatchSnapshot();
96
+ * await expect('table(name,age,role)').toMatchSnapshot();
97
+ */
98
+ toMatchSnapshot(): Promise<void>;
73
99
  }
74
100
  //# sourceMappingURL=expect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,qBAAa,gBAAiB,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,WAAW,EAAE,MAAM;aACnB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,MAAM;aACpB,OAAO,EAAE,OAAO;gBAJhB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO;CAWvC;AAMD;;;;;;;GAOG;AACH,qBAAa,WAAW;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL5B,OAAO,CAAC,OAAO,CAAiC;gBAG3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,UAAQ;IAGpC,2EAA2E;IAC3E,IAAI,GAAG,IAAI,WAAW,CAErB;YAMa,OAAO;IAOrB,OAAO,CAAC,IAAI;IAYZ,gCAAgC;IAC1B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,gCAAgC;IAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,iCAAiC;IAC3B,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,iCAAiC;IAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,+BAA+B;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IACG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK7D"}
1
+ {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAsB,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,qBAAa,gBAAiB,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,WAAW,EAAE,MAAM;aACnB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,MAAM;aACpB,OAAO,EAAE,OAAO;gBAJhB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO;CAWvC;AAMD,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IANjC,OAAO,CAAC,OAAO,CAAiC;gBAG3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,UAAQ,EACf,WAAW,CAAC,EAAE,eAAe,YAAA;IAGlD,2EAA2E;IAC3E,IAAI,GAAG,IAAI,WAAW,CAErB;YAMa,OAAO;IAOrB,OAAO,CAAC,IAAI;IAYZ,gCAAgC;IAC1B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,gCAAgC;IAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,iCAAiC;IAC3B,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,iCAAiC;IAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,+BAA+B;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IACG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D;;;;;;;;;;;;;;OAcG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAgCzC"}
package/dist/expect.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RhostExpect = exports.RhostExpectError = exports.isRhostError = void 0;
4
+ const snapshots_1 = require("./snapshots");
4
5
  var assertions_1 = require("./assertions");
5
6
  Object.defineProperty(exports, "isRhostError", { enumerable: true, get: function () { return assertions_1.isRhostError; } });
6
7
  const assertions_2 = require("./assertions");
@@ -33,17 +34,21 @@ exports.RhostExpectError = RhostExpectError;
33
34
  * const ex = new RhostExpect(client, 'add(2,3)');
34
35
  * await ex.toBe('5');
35
36
  * await ex.not.toBe('42');
37
+ *
38
+ * @example Snapshot testing (requires runner context)
39
+ * await expect('iter(lnum(1,10),##)').toMatchSnapshot();
36
40
  */
37
41
  class RhostExpect {
38
- constructor(client, expression, negated = false) {
42
+ constructor(client, expression, negated = false, snapshotCtx) {
39
43
  this.client = client;
40
44
  this.expression = expression;
41
45
  this.negated = negated;
46
+ this.snapshotCtx = snapshotCtx;
42
47
  this._cached = undefined;
43
48
  }
44
49
  /** Negation accessor — returns a new RhostExpect with negation flipped. */
45
50
  get not() {
46
- return new RhostExpect(this.client, this.expression, !this.negated);
51
+ return new RhostExpect(this.client, this.expression, !this.negated, this.snapshotCtx);
47
52
  }
48
53
  // -------------------------------------------------------------------------
49
54
  // Internal helpers
@@ -159,6 +164,46 @@ class RhostExpect {
159
164
  const words = actual === '' ? [] : actual.split(sep).map((w) => w.trim()).filter(Boolean);
160
165
  this.pass(words.length === n, 'toHaveWordCount', actual, `list with ${n} word(s) (got ${words.length})`);
161
166
  }
167
+ // -------------------------------------------------------------------------
168
+ // Snapshot matcher
169
+ // -------------------------------------------------------------------------
170
+ /**
171
+ * Compare the evaluated result against a stored snapshot.
172
+ *
173
+ * **First run**: the value is written to the snapshot file and the test passes.
174
+ * **Subsequent runs**: the value is compared to the stored snapshot. A mismatch
175
+ * fails the test and shows a diff.
176
+ * **Update mode**: pass `updateSnapshots: true` in `RunnerOptions`, or set the
177
+ * `RHOST_UPDATE_SNAPSHOTS=1` environment variable, to overwrite stored values.
178
+ *
179
+ * `.not.toMatchSnapshot()` is not supported and will throw.
180
+ *
181
+ * @example
182
+ * await expect('iter(lnum(1,10),##)').toMatchSnapshot();
183
+ * await expect('table(name,age,role)').toMatchSnapshot();
184
+ */
185
+ async toMatchSnapshot() {
186
+ if (this.negated) {
187
+ throw new Error('expect().not.toMatchSnapshot() is not supported. ' +
188
+ 'Snapshots are for locking in specific values, not for asserting inequality.');
189
+ }
190
+ if (!this.snapshotCtx) {
191
+ throw new Error('toMatchSnapshot() requires snapshot context. ' +
192
+ 'Use runner.run() to run tests — do not call toMatchSnapshot() on a standalone RhostExpect.');
193
+ }
194
+ const actual = await this.resolve();
195
+ const key = this.snapshotCtx.manager.nextKey(this.snapshotCtx.testName);
196
+ const result = this.snapshotCtx.manager.check(key, actual);
197
+ if (result.status === 'mismatch') {
198
+ const diff = (0, snapshots_1.formatSnapshotDiff)(result.expected, actual);
199
+ throw new Error(`Snapshot mismatch for "${key}"\n\n` +
200
+ ` - Snapshot (stored)\n` +
201
+ ` + Received (actual)\n\n` +
202
+ `${diff}\n\n` +
203
+ `Run with RHOST_UPDATE_SNAPSHOTS=1 to update the stored snapshot.`);
204
+ }
205
+ // 'written', 'matched', 'updated' — all pass silently
206
+ }
162
207
  }
163
208
  exports.RhostExpect = RhostExpect;
164
209
  //# sourceMappingURL=expect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":";;;AACA,2CAAkE;AAElE,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,6CAA4C;AAE5C,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAa,gBAAiB,SAAQ,KAAK;IACvC,YACoB,UAAkB,EAClB,WAAmB,EACnB,MAAc,EACd,YAAoB,EACpB,OAAgB;QAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,KAAK,CACD,UAAU,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK;YACzC,YAAY,GAAG,IAAI,WAAW,WAAW;YACzC,iBAAiB,YAAY,IAAI;YACjC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC5C,CAAC;QAZc,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAAQ;QACnB,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAQ;QACpB,YAAO,GAAP,OAAO,CAAS;QAShC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AAjBD,4CAiBC;AAYD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAa,WAAW;IAGpB,YACqB,MAAmB,EACnB,UAAkB,EAClB,UAAU,KAAK,EACf,WAA6B;QAH7B,WAAM,GAAN,MAAM,CAAa;QACnB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,gBAAW,GAAX,WAAW,CAAkB;QAN1C,YAAO,GAAuB,SAAS,CAAC;IAO7C,CAAC;IAEJ,2EAA2E;IAC3E,IAAI,GAAG;QACH,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1F,CAAC;IAED,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAEpE,KAAK,CAAC,OAAO;QACjB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEO,IAAI,CAAC,SAAkB,EAAE,WAAmB,EAAE,MAAc,EAAE,YAAoB;QACtF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YACjE,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAE5E,gCAAgC;IAChC,KAAK,CAAC,IAAI,CAAC,QAAgB;QACvB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,OAAO,CAAC,OAAwB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ;YACvC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,SAAS,CAAC,MAAc;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,SAAS,GAAG,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,SAAS,EACxC,aAAa,EACb,MAAM,EACN,qBAAqB,QAAQ,eAAe,SAAS,GAAG,CAC3D,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAA,yBAAY,EAAC,MAAM,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,yCAAyC,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,IAAA,yBAAY,EAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,qCAAqC,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAA,yBAAY,EAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,uCAAuC,CAAC,CAAC;IAClG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,GAAG,GAAG,GAAG;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,CAAS,EAAE,GAAG,GAAG,GAAG;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC,iBAAiB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7G,CAAC;IAED,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAE5E;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,eAAe;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,mDAAmD;gBACnD,6EAA6E,CAChF,CAAC;QACN,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACX,+CAA+C;gBAC/C,4FAA4F,CAC/F,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAA,8BAAkB,EAAC,MAAM,CAAC,QAAS,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CACX,0BAA0B,GAAG,OAAO;gBACpC,0BAA0B;gBAC1B,4BAA4B;gBAC5B,GAAG,IAAI,MAAM;gBACb,kEAAkE,CACrE,CAAC;QACN,CAAC;QAED,sDAAsD;IAC1D,CAAC;CACJ;AA1MD,kCA0MC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,16 @@
1
- export { RhostClient, RhostClientOptions, stripAnsi } from './client';
1
+ export { RhostClient, RhostClientOptions, PreviewOptions, stripAnsi } from './client';
2
2
  export { MushConnection } from './connection';
3
3
  export { RhostContainer, ContainerConnectionInfo } from './container';
4
4
  export { RhostAssert, RhostAssertionError, AssertionResult, isRhostError } from './assertions';
5
5
  export { RhostExpect, RhostExpectError } from './expect';
6
- export { RhostWorld } from './world';
6
+ export { RhostWorld, WorldSnapshot, WorldDiff, WorldObjectDiff, WorldSideEffectError } from './world';
7
+ export { preflight, preflightCheck, assertFunctionExists, assertFunctionMissing, assertConfigEquals, PreflightCheck, PreflightResult, PreflightOptions, PreflightError, } from './preflight';
7
8
  export { Reporter } from './reporter';
8
- export { RhostRunner, RunnerOptions, RunResult, TestContext, TestFn, HookFn, SuiteContext, ItFn, DescribeFn, } from './runner';
9
+ export { RhostRunner, RunnerOptions, RunResult, TestContext, TestFn, HookFn, PersonaTestFn, PersonaCredentials, SuiteContext, ItFn, DescribeFn, PersonasFn, } from './runner';
10
+ export { validate, validateFile, compatibilityReport, ValidationResult, Diagnostic, Severity, FunctionSignature, BUILTIN_FUNCTIONS, Platform, CompatibilityReport, CompatibilityEntry, } from './validator';
11
+ export { format, FormatOptions, FormatResult } from './validator/formatter';
12
+ export { RhostBenchmark, runBench, formatBenchResults, BenchOptions, BenchmarkResult } from './benchmark';
13
+ export { deploy, parseDeployFile, snapshotObjects, restoreSnapshot, DeployCommand, DeploySnapshot, DeployOptions, DeployResult, } from './deployer';
14
+ export { SnapshotManager, SnapshotStats, SnapshotStatus, SnapshotCheckResult, formatSnapshotDiff } from './snapshots';
15
+ export { RhostWatcher, WatchOptions, discoverTestFiles } from './watcher';
9
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,EACN,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,UAAU,GACb,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGtG,OAAO,EACH,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,EACN,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,UAAU,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1G,OAAO,EACH,MAAM,EACN,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RhostRunner = exports.Reporter = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
3
+ exports.discoverTestFiles = exports.RhostWatcher = exports.formatSnapshotDiff = exports.SnapshotManager = exports.restoreSnapshot = exports.snapshotObjects = exports.parseDeployFile = exports.deploy = exports.formatBenchResults = exports.runBench = exports.RhostBenchmark = exports.format = exports.BUILTIN_FUNCTIONS = exports.compatibilityReport = exports.validateFile = exports.validate = exports.RhostRunner = exports.Reporter = exports.PreflightError = exports.assertConfigEquals = exports.assertFunctionMissing = exports.assertFunctionExists = exports.preflightCheck = exports.preflight = exports.WorldSideEffectError = exports.WorldSnapshot = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
4
4
  // Core client
5
5
  var client_1 = require("./client");
6
6
  Object.defineProperty(exports, "RhostClient", { enumerable: true, get: function () { return client_1.RhostClient; } });
@@ -23,10 +23,48 @@ Object.defineProperty(exports, "RhostExpectError", { enumerable: true, get: func
23
23
  // World fixture manager
24
24
  var world_1 = require("./world");
25
25
  Object.defineProperty(exports, "RhostWorld", { enumerable: true, get: function () { return world_1.RhostWorld; } });
26
+ Object.defineProperty(exports, "WorldSnapshot", { enumerable: true, get: function () { return world_1.WorldSnapshot; } });
27
+ Object.defineProperty(exports, "WorldSideEffectError", { enumerable: true, get: function () { return world_1.WorldSideEffectError; } });
28
+ // Pre-flight assertions
29
+ var preflight_1 = require("./preflight");
30
+ Object.defineProperty(exports, "preflight", { enumerable: true, get: function () { return preflight_1.preflight; } });
31
+ Object.defineProperty(exports, "preflightCheck", { enumerable: true, get: function () { return preflight_1.preflightCheck; } });
32
+ Object.defineProperty(exports, "assertFunctionExists", { enumerable: true, get: function () { return preflight_1.assertFunctionExists; } });
33
+ Object.defineProperty(exports, "assertFunctionMissing", { enumerable: true, get: function () { return preflight_1.assertFunctionMissing; } });
34
+ Object.defineProperty(exports, "assertConfigEquals", { enumerable: true, get: function () { return preflight_1.assertConfigEquals; } });
35
+ Object.defineProperty(exports, "PreflightError", { enumerable: true, get: function () { return preflight_1.PreflightError; } });
26
36
  // Reporter
27
37
  var reporter_1 = require("./reporter");
28
38
  Object.defineProperty(exports, "Reporter", { enumerable: true, get: function () { return reporter_1.Reporter; } });
29
39
  // Runner + types
30
40
  var runner_1 = require("./runner");
31
41
  Object.defineProperty(exports, "RhostRunner", { enumerable: true, get: function () { return runner_1.RhostRunner; } });
42
+ // Offline softcode validator + compat report
43
+ var validator_1 = require("./validator");
44
+ Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return validator_1.validate; } });
45
+ Object.defineProperty(exports, "validateFile", { enumerable: true, get: function () { return validator_1.validateFile; } });
46
+ Object.defineProperty(exports, "compatibilityReport", { enumerable: true, get: function () { return validator_1.compatibilityReport; } });
47
+ Object.defineProperty(exports, "BUILTIN_FUNCTIONS", { enumerable: true, get: function () { return validator_1.BUILTIN_FUNCTIONS; } });
48
+ // Softcode formatter
49
+ var formatter_1 = require("./validator/formatter");
50
+ Object.defineProperty(exports, "format", { enumerable: true, get: function () { return formatter_1.format; } });
51
+ // Benchmark mode
52
+ var benchmark_1 = require("./benchmark");
53
+ Object.defineProperty(exports, "RhostBenchmark", { enumerable: true, get: function () { return benchmark_1.RhostBenchmark; } });
54
+ Object.defineProperty(exports, "runBench", { enumerable: true, get: function () { return benchmark_1.runBench; } });
55
+ Object.defineProperty(exports, "formatBenchResults", { enumerable: true, get: function () { return benchmark_1.formatBenchResults; } });
56
+ // Deploy pipeline
57
+ var deployer_1 = require("./deployer");
58
+ Object.defineProperty(exports, "deploy", { enumerable: true, get: function () { return deployer_1.deploy; } });
59
+ Object.defineProperty(exports, "parseDeployFile", { enumerable: true, get: function () { return deployer_1.parseDeployFile; } });
60
+ Object.defineProperty(exports, "snapshotObjects", { enumerable: true, get: function () { return deployer_1.snapshotObjects; } });
61
+ Object.defineProperty(exports, "restoreSnapshot", { enumerable: true, get: function () { return deployer_1.restoreSnapshot; } });
62
+ // Snapshot manager
63
+ var snapshots_1 = require("./snapshots");
64
+ Object.defineProperty(exports, "SnapshotManager", { enumerable: true, get: function () { return snapshots_1.SnapshotManager; } });
65
+ Object.defineProperty(exports, "formatSnapshotDiff", { enumerable: true, get: function () { return snapshots_1.formatSnapshotDiff; } });
66
+ // Watch mode
67
+ var watcher_1 = require("./watcher");
68
+ Object.defineProperty(exports, "RhostWatcher", { enumerable: true, get: function () { return watcher_1.RhostWatcher; } });
69
+ Object.defineProperty(exports, "discoverTestFiles", { enumerable: true, get: function () { return watcher_1.discoverTestFiles; } });
32
70
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,mCAAsE;AAA7D,qGAAA,WAAW,OAAA;AAAsB,mGAAA,SAAS,OAAA;AAEnD,aAAa;AACb,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,YAAY;AACZ,yCAAsE;AAA7D,2GAAA,cAAc,OAAA;AAEvB,+BAA+B;AAC/B,2CAA+F;AAAtF,yGAAA,WAAW,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAAmB,0GAAA,YAAY,OAAA;AAExE,iBAAiB;AACjB,mCAAyD;AAAhD,qGAAA,WAAW,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEtC,wBAAwB;AACxB,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AAEnB,WAAW;AACX,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iBAAiB;AACjB,mCAUkB;AATd,qGAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,mCAAsF;AAA7E,qGAAA,WAAW,OAAA;AAAsC,mGAAA,SAAS,OAAA;AAEnE,aAAa;AACb,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,YAAY;AACZ,yCAAsE;AAA7D,2GAAA,cAAc,OAAA;AAEvB,+BAA+B;AAC/B,2CAA+F;AAAtF,yGAAA,WAAW,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAAmB,0GAAA,YAAY,OAAA;AAExE,iBAAiB;AACjB,mCAAyD;AAAhD,qGAAA,WAAW,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEtC,wBAAwB;AACxB,iCAAsG;AAA7F,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAA8B,6GAAA,oBAAoB,OAAA;AAEpF,wBAAwB;AACxB,yCAUqB;AATjB,sGAAA,SAAS,OAAA;AACT,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AACpB,kHAAA,qBAAqB,OAAA;AACrB,+GAAA,kBAAkB,OAAA;AAIlB,2GAAA,cAAc,OAAA;AAGlB,WAAW;AACX,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iBAAiB;AACjB,mCAakB;AAZd,qGAAA,WAAW,OAAA;AAcf,6CAA6C;AAC7C,yCAYqB;AAXjB,qGAAA,QAAQ,OAAA;AACR,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AAKnB,8GAAA,iBAAiB,OAAA;AAMrB,qBAAqB;AACrB,mDAA4E;AAAnE,mGAAA,MAAM,OAAA;AAEf,iBAAiB;AACjB,yCAA0G;AAAjG,2GAAA,cAAc,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAErD,kBAAkB;AAClB,uCASoB;AARhB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAOnB,mBAAmB;AACnB,yCAAsH;AAA7G,4GAAA,eAAe,OAAA;AAAsD,+GAAA,kBAAkB,OAAA;AAEhG,aAAa;AACb,qCAA0E;AAAjE,uGAAA,YAAY,OAAA;AAAgB,4GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,70 @@
1
+ import { RhostClient } from './client';
2
+ export interface PreflightCheckResult {
3
+ name: string;
4
+ passed: boolean;
5
+ message?: string;
6
+ }
7
+ export interface PreflightResult {
8
+ passed: number;
9
+ failed: number;
10
+ checks: PreflightCheckResult[];
11
+ }
12
+ export interface PreflightCheck {
13
+ name: string;
14
+ run(client: RhostClient): Promise<{
15
+ passed: boolean;
16
+ message?: string;
17
+ }>;
18
+ }
19
+ export interface PreflightOptions {
20
+ /**
21
+ * Throw a PreflightError if any check fails. Default: true.
22
+ * Set false to collect all results without throwing.
23
+ */
24
+ throwOnFailure?: boolean;
25
+ }
26
+ export declare class PreflightError extends Error {
27
+ readonly result: PreflightResult;
28
+ constructor(result: PreflightResult);
29
+ }
30
+ /**
31
+ * Run a set of pre-flight checks against a live server before tests start.
32
+ *
33
+ * By default throws `PreflightError` if any check fails. Pass
34
+ * `{ throwOnFailure: false }` to collect results without throwing.
35
+ *
36
+ * @example
37
+ * await preflight(client, [
38
+ * assertFunctionExists('json'),
39
+ * assertFunctionExists('localize'),
40
+ * assertConfigEquals('attr_limit', '500'),
41
+ * ]);
42
+ */
43
+ export declare function preflight(client: RhostClient, checks: PreflightCheck[], options?: PreflightOptions): Promise<PreflightResult>;
44
+ /**
45
+ * Factory for a custom preflight check with an arbitrary async predicate.
46
+ */
47
+ export declare function preflightCheck(name: string, fn: (client: RhostClient) => Promise<{
48
+ passed: boolean;
49
+ message?: string;
50
+ }>): PreflightCheck;
51
+ /**
52
+ * Assert that a softcode function is available on the server.
53
+ *
54
+ * Evals `funcname()` and checks that the response does not include "NOT FOUND".
55
+ * A "wrong number of arguments" error means the function exists.
56
+ */
57
+ export declare function assertFunctionExists(name: string): PreflightCheck;
58
+ /**
59
+ * Assert that a softcode function is NOT available on the server.
60
+ *
61
+ * Useful to confirm a restricted or removed function is absent.
62
+ */
63
+ export declare function assertFunctionMissing(name: string): PreflightCheck;
64
+ /**
65
+ * Assert that a server config key equals an expected value.
66
+ *
67
+ * Evals `config(key)` and compares the trimmed result to `expected`.
68
+ */
69
+ export declare function assertConfigEquals(key: string, expected: string): PreflightCheck;
70
+ //# sourceMappingURL=preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMvC,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAe,SAAQ,KAAK;aACT,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;CAQtD;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC3B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5E,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWjE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAWhF"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PreflightError = void 0;
4
+ exports.preflight = preflight;
5
+ exports.preflightCheck = preflightCheck;
6
+ exports.assertFunctionExists = assertFunctionExists;
7
+ exports.assertFunctionMissing = assertFunctionMissing;
8
+ exports.assertConfigEquals = assertConfigEquals;
9
+ class PreflightError extends Error {
10
+ constructor(result) {
11
+ const failedNames = result.checks
12
+ .filter((c) => !c.passed)
13
+ .map((c) => ` ✗ ${c.name}${c.message ? ': ' + c.message : ''}`)
14
+ .join('\n');
15
+ super(`preflight: ${result.failed} check(s) failed\n${failedNames}`);
16
+ this.result = result;
17
+ this.name = 'PreflightError';
18
+ }
19
+ }
20
+ exports.PreflightError = PreflightError;
21
+ // ---------------------------------------------------------------------------
22
+ // Runner
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Run a set of pre-flight checks against a live server before tests start.
26
+ *
27
+ * By default throws `PreflightError` if any check fails. Pass
28
+ * `{ throwOnFailure: false }` to collect results without throwing.
29
+ *
30
+ * @example
31
+ * await preflight(client, [
32
+ * assertFunctionExists('json'),
33
+ * assertFunctionExists('localize'),
34
+ * assertConfigEquals('attr_limit', '500'),
35
+ * ]);
36
+ */
37
+ async function preflight(client, checks, options = {}) {
38
+ const throwOnFailure = options.throwOnFailure !== false;
39
+ const results = [];
40
+ for (const check of checks) {
41
+ let checkResult;
42
+ try {
43
+ const outcome = await check.run(client);
44
+ checkResult = { name: check.name, passed: outcome.passed, message: outcome.message };
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : String(err);
48
+ checkResult = { name: check.name, passed: false, message };
49
+ }
50
+ results.push(checkResult);
51
+ }
52
+ const passed = results.filter((r) => r.passed).length;
53
+ const failed = results.filter((r) => !r.passed).length;
54
+ const result = { passed, failed, checks: results };
55
+ if (throwOnFailure && failed > 0) {
56
+ throw new PreflightError(result);
57
+ }
58
+ return result;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Built-in check factories
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Factory for a custom preflight check with an arbitrary async predicate.
65
+ */
66
+ function preflightCheck(name, fn) {
67
+ return { name, run: fn };
68
+ }
69
+ /**
70
+ * Assert that a softcode function is available on the server.
71
+ *
72
+ * Evals `funcname()` and checks that the response does not include "NOT FOUND".
73
+ * A "wrong number of arguments" error means the function exists.
74
+ */
75
+ function assertFunctionExists(name) {
76
+ return {
77
+ name: `function exists: ${name}`,
78
+ async run(client) {
79
+ const result = await client.eval(`${name}()`);
80
+ const passed = !result.toUpperCase().includes('NOT FOUND');
81
+ return passed
82
+ ? { passed: true }
83
+ : { passed: false, message: `function '${name}' is not available on this server` };
84
+ },
85
+ };
86
+ }
87
+ /**
88
+ * Assert that a softcode function is NOT available on the server.
89
+ *
90
+ * Useful to confirm a restricted or removed function is absent.
91
+ */
92
+ function assertFunctionMissing(name) {
93
+ return {
94
+ name: `function absent: ${name}`,
95
+ async run(client) {
96
+ const result = await client.eval(`${name}()`);
97
+ const passed = result.toUpperCase().includes('NOT FOUND');
98
+ return passed
99
+ ? { passed: true }
100
+ : { passed: false, message: `function '${name}' exists but was expected to be absent` };
101
+ },
102
+ };
103
+ }
104
+ /**
105
+ * Assert that a server config key equals an expected value.
106
+ *
107
+ * Evals `config(key)` and compares the trimmed result to `expected`.
108
+ */
109
+ function assertConfigEquals(key, expected) {
110
+ return {
111
+ name: `config: ${key} = ${expected}`,
112
+ async run(client) {
113
+ const actual = (await client.eval(`config(${key})`)).trim();
114
+ const passed = actual === expected;
115
+ return passed
116
+ ? { passed: true }
117
+ : { passed: false, message: `config(${key}): expected '${expected}', got '${actual}'` };
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { RunResult } from './runner';
2
+ import { SnapshotStats } from './snapshots';
2
3
  export declare class Reporter {
3
4
  private readonly verbose;
4
5
  constructor(verbose: boolean);
@@ -7,5 +8,6 @@ export declare class Reporter {
7
8
  testFail(name: string, ms: number, depth: number, error: Error): void;
8
9
  testSkip(name: string, depth: number): void;
9
10
  summary(result: RunResult): void;
11
+ snapshotSummary(stats: SnapshotStats): void;
10
12
  }
11
13
  //# sourceMappingURL=reporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAsBrC,qBAAa,QAAQ;IACL,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAWrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM3C,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;CASnC"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuB5C,qBAAa,QAAQ;IACL,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAWrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM3C,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAWhC,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAoB9C"}
package/dist/reporter.js CHANGED
@@ -11,6 +11,7 @@ function colorize(code, text) {
11
11
  const green = (s) => colorize('32', s);
12
12
  const red = (s) => colorize('31', s);
13
13
  const yellow = (s) => colorize('33', s);
14
+ const cyan = (s) => colorize('36', s);
14
15
  const gray = (s) => colorize('90', s);
15
16
  const bold = (s) => colorize('1', s);
16
17
  // ---------------------------------------------------------------------------
@@ -60,7 +61,29 @@ class Reporter {
60
61
  if (result.skipped > 0)
61
62
  parts.push(yellow(`${result.skipped} skipped`));
62
63
  parts.push(`${result.total} total`);
63
- process.stdout.write(`\nTests: ${parts.join(', ')} (${result.duration}ms)\n`);
64
+ process.stdout.write(`\nTests: ${parts.join(', ')} ${gray(`(${result.duration}ms)`)}\n`);
65
+ this.snapshotSummary(result.snapshots);
66
+ }
67
+ snapshotSummary(stats) {
68
+ if (!this.verbose)
69
+ return;
70
+ const { matched, written, updated, obsolete } = stats;
71
+ const total = matched + written + updated;
72
+ if (total === 0 && obsolete === 0)
73
+ return;
74
+ const parts = [];
75
+ if (matched > 0)
76
+ parts.push(green(`${matched} passed`));
77
+ if (written > 0)
78
+ parts.push(cyan(`${written} written`));
79
+ if (updated > 0)
80
+ parts.push(yellow(`${updated} updated`));
81
+ if (obsolete > 0)
82
+ parts.push(gray(`${obsolete} obsolete`));
83
+ process.stdout.write(`Snapshots: ${parts.join(', ')}\n`);
84
+ if (obsolete > 0) {
85
+ process.stdout.write(gray(` Run with RHOST_UPDATE_SNAPSHOTS=1 to remove obsolete snapshots.\n`));
86
+ }
64
87
  }
65
88
  }
66
89
  exports.Reporter = Reporter;
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":";;;AAGA,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAEhD,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;IACxC,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,KAAK,GAAI,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,GAAG,GAAM,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,IAAI,GAAK,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,IAAI,GAAK,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChD,MAAM,IAAI,GAAK,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC;AAEhD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAa,QAAQ;IACjB,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEjD,UAAU,CAAC,IAAY,EAAE,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAE,KAAa;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAE,KAAa,EAAE,KAAY;QAC1D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,MAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7F,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe,CAAC,KAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;QAC1C,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO;QAE1C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC;YAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,GAAG,CAAC;YAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,GAAG,CAAC;YAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC;QAC3D,IAAI,QAAQ,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAC,CAAC;QAE3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,IAAI,CAAC,8EAA8E,CAAC,CACvF,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AA/DD,4BA+DC"}