@sensigo/realm-testing 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/runner/test-runner.d.ts +17 -0
- package/dist/runner/test-runner.d.ts.map +1 -1
- package/dist/runner/test-runner.js +2 -1
- package/dist/runner/test-runner.js.map +1 -1
- package/dist/servers/github-mock-server.d.ts +6 -2
- package/dist/servers/github-mock-server.d.ts.map +1 -1
- package/dist/servers/github-mock-server.js +10 -3
- package/dist/servers/github-mock-server.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Requires `@sensigo/realm` at the same version to be installed in your project.
|
|
|
52
52
|
|
|
53
53
|
## Usage — YAML Fixture Tests
|
|
54
54
|
|
|
55
|
-
Fixture tests are the fastest way to test a complete workflow. Each fixture file declares the initial params, mock service responses, agent step outputs, and the expected final state. The `runFixtureTests` runner loads your workflow
|
|
55
|
+
Fixture tests are the fastest way to test a complete workflow. Each fixture file declares the initial params, mock service responses, agent step outputs, and the expected final state. The `runFixtureTests` runner loads your workflow — or uses the `definition` you pass it — drives it to completion using the fixture data, and returns a result for each fixture.
|
|
56
56
|
|
|
57
57
|
```ts
|
|
58
58
|
// workflow-test.ts
|
|
@@ -154,11 +154,11 @@ describe('my-workflow programmatic', () => {
|
|
|
154
154
|
|
|
155
155
|
### Runner
|
|
156
156
|
|
|
157
|
-
| Symbol | Description
|
|
158
|
-
| ------------------------ |
|
|
159
|
-
| `runFixtureTests` | Drive a workflow to completion for all fixtures in a directory. Returns `TestResult[]`.
|
|
160
|
-
| `RunFixtureTestsOptions` | Type — options for `runFixtureTests` (`workflowPath`, `fixturesPath`, `registry?`).
|
|
161
|
-
| `TestResult` | Type — result of a single fixture run (`name`, `passed`, `error?`).
|
|
157
|
+
| Symbol | Description |
|
|
158
|
+
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
159
|
+
| `runFixtureTests` | Drive a workflow to completion for all fixtures in a directory. Returns `TestResult[]`. |
|
|
160
|
+
| `RunFixtureTestsOptions` | Type — options for `runFixtureTests` (`workflowPath`, `fixturesPath`, `registry?`, `extensions?`, `definition?` — pass an already-loaded definition and the runner skips its own load, and its load-time warnings with it). |
|
|
161
|
+
| `TestResult` | Type — result of a single fixture run (`name`, `passed`, `error?`). |
|
|
162
162
|
|
|
163
163
|
### Servers
|
|
164
164
|
|
package/dist/index.d.ts
CHANGED
|
@@ -21,5 +21,5 @@ export { runFixtureTests } from './runner/test-runner.js';
|
|
|
21
21
|
export type { TestResult, RunFixtureTestsOptions } from './runner/test-runner.js';
|
|
22
22
|
export { startGitHubMockServer } from './servers/github-mock-server.js';
|
|
23
23
|
export type { GitHubMockServerHandle } from './servers/github-mock-server.js';
|
|
24
|
-
export declare const VERSION = "0.
|
|
24
|
+
export declare const VERSION = "0.42.0";
|
|
25
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -21,5 +21,5 @@ export { testAdapter } from './helpers/test-adapter.js';
|
|
|
21
21
|
export { runFixtureTests } from './runner/test-runner.js';
|
|
22
22
|
// Servers
|
|
23
23
|
export { startGitHubMockServer } from './servers/github-mock-server.js';
|
|
24
|
-
export const VERSION = '0.
|
|
24
|
+
export const VERSION = '0.42.0';
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -31,6 +31,23 @@ export interface RunFixtureTestsOptions {
|
|
|
31
31
|
registry: ExtensionRegistry;
|
|
32
32
|
manifest: ExtensionManifest;
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* An ALREADY-LOADED workflow definition (issue #450). When provided, the runner uses it
|
|
36
|
+
* verbatim and performs NO load of its own — which also means it prints no load-time warnings,
|
|
37
|
+
* because the caller that loaded it owns surfacing them.
|
|
38
|
+
*
|
|
39
|
+
* This exists because `realm workflow test` loaded the same file the runner did, so every
|
|
40
|
+
* loader warning printed twice. The CLI now loads once, prints once, and hands the definition
|
|
41
|
+
* down.
|
|
42
|
+
*
|
|
43
|
+
* When ABSENT the runner loads as it always has — the published contract for direct callers is
|
|
44
|
+
* unchanged, and pinned.
|
|
45
|
+
*
|
|
46
|
+
* `workflowPath` stays REQUIRED and simply becomes load-inert when this is supplied (its only
|
|
47
|
+
* consumer is that load). Keeping it required avoids turning this interface into a union for a
|
|
48
|
+
* field every caller already has to hand.
|
|
49
|
+
*/
|
|
50
|
+
definition?: WorkflowDefinition;
|
|
34
51
|
}
|
|
35
52
|
/**
|
|
36
53
|
* Builds the per-fixture registries. Exported for direct testing of the fail-if-unmocked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/runner/test-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,EAIjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAGvB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOtF,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,QAAQ,EAAE,iBAAiB,CAAC;QAAC,QAAQ,EAAE,iBAAiB,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/runner/test-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,EAIjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAGvB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAOtF,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,QAAQ,EAAE,iBAAiB,CAAC;QAAC,QAAQ,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC1E;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,YAAY,CAAC,GAC/D;IAAE,eAAe,EAAE,iBAAiB,CAAC;IAAC,gBAAgB,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAAE,CA6FzF;AAoLD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAa5F;AAED,2CAA2C"}
|
|
@@ -255,7 +255,8 @@ export async function runFixtureTests(options) {
|
|
|
255
255
|
: existsSync(join(options.workflowPath, 'workflow.yaml'))
|
|
256
256
|
? join(options.workflowPath, 'workflow.yaml')
|
|
257
257
|
: options.workflowPath;
|
|
258
|
-
|
|
258
|
+
// issue #450: the caller's definition wins, and skips the load entirely.
|
|
259
|
+
const definition = options.definition ?? loadWorkflowFromFile(workflowFilePath);
|
|
259
260
|
const fixtures = loadFixturesFromDir(options.fixturesPath);
|
|
260
261
|
return Promise.all(fixtures.map((fixture) => runSingleFixture(fixture, definition, options)));
|
|
261
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/runner/test-runner.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,cAAc,GAKf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAoB,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/runner/test-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Call `close()` in afterAll to release the port.
|
|
4
4
|
*/
|
|
5
5
|
export interface GitHubMockServerHandle {
|
|
6
|
-
/** Base URL of the server, e.g. "http://localhost:
|
|
6
|
+
/** Base URL of the server, e.g. "http://localhost:49213" — the port ACTUALLY bound, not the
|
|
7
|
+
* requested one (the default is ephemeral). */
|
|
7
8
|
url: string;
|
|
8
9
|
/** Closes the server and resolves when fully shut down. */
|
|
9
10
|
close(): Promise<void>;
|
|
@@ -13,7 +14,10 @@ export interface GitHubMockServerHandle {
|
|
|
13
14
|
* Reads the fixture once at startup; does not re-read on each request.
|
|
14
15
|
*
|
|
15
16
|
* @param fixturePath - Absolute path to the fixture JSON file.
|
|
16
|
-
* @param port - Port to bind to (
|
|
17
|
+
* @param port - Port to bind to. Defaults to `0` (ephemeral, OS-assigned — hermetic: two
|
|
18
|
+
* concurrent checkouts/suites on the same box can never collide on a fixed port). Pass an
|
|
19
|
+
* explicit port to pin one; `url` is always derived from the port actually bound, so both
|
|
20
|
+
* forms behave identically from the caller's side.
|
|
17
21
|
* @returns A handle with the server URL and a `close()` method.
|
|
18
22
|
*/
|
|
19
23
|
export declare function startGitHubMockServer(fixturePath: string, port?: number): Promise<GitHubMockServerHandle>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-mock-server.d.ts","sourceRoot":"","sources":["../../src/servers/github-mock-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github-mock-server.d.ts","sourceRoot":"","sources":["../../src/servers/github-mock-server.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;oDACgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAiCD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,SAAI,GACP,OAAO,CAAC,sBAAsB,CAAC,CAyEjC"}
|
|
@@ -37,10 +37,13 @@ function matchRoute(method, urlPath, fixtureKey) {
|
|
|
37
37
|
* Reads the fixture once at startup; does not re-read on each request.
|
|
38
38
|
*
|
|
39
39
|
* @param fixturePath - Absolute path to the fixture JSON file.
|
|
40
|
-
* @param port - Port to bind to (
|
|
40
|
+
* @param port - Port to bind to. Defaults to `0` (ephemeral, OS-assigned — hermetic: two
|
|
41
|
+
* concurrent checkouts/suites on the same box can never collide on a fixed port). Pass an
|
|
42
|
+
* explicit port to pin one; `url` is always derived from the port actually bound, so both
|
|
43
|
+
* forms behave identically from the caller's side.
|
|
41
44
|
* @returns A handle with the server URL and a `close()` method.
|
|
42
45
|
*/
|
|
43
|
-
export async function startGitHubMockServer(fixturePath, port =
|
|
46
|
+
export async function startGitHubMockServer(fixturePath, port = 0) {
|
|
44
47
|
const raw = fs.readFileSync(fixturePath, 'utf-8');
|
|
45
48
|
const fixture = JSON.parse(raw);
|
|
46
49
|
const server = http.createServer((req, res) => {
|
|
@@ -90,8 +93,12 @@ export async function startGitHubMockServer(fixturePath, port = 3032) {
|
|
|
90
93
|
});
|
|
91
94
|
server.listen(port, '127.0.0.1', () => resolve());
|
|
92
95
|
});
|
|
96
|
+
// Derive the URL from the port ACTUALLY bound, never the requested one: identical for an
|
|
97
|
+
// explicit port, and the only correct source for the ephemeral default (the OS assigns the
|
|
98
|
+
// real port at listen time — `server.address()` is where it becomes knowable).
|
|
99
|
+
const boundPort = server.address().port;
|
|
93
100
|
return {
|
|
94
|
-
url: `http://localhost:${
|
|
101
|
+
url: `http://localhost:${boundPort}`,
|
|
95
102
|
close() {
|
|
96
103
|
return new Promise((resolve, reject) => {
|
|
97
104
|
server.close((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-mock-server.js","sourceRoot":"","sources":["../../src/servers/github-mock-server.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"github-mock-server.js","sourceRoot":"","sources":["../../src/servers/github-mock-server.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AA6B9B;;;GAGG;AACH,SAAS,UAAU,CAAC,MAAc,EAAE,OAAe,EAAE,UAAkB;IACrE,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEnD,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,WAAW,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC3D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,IAAI,GAAG,CAAC;IAER,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiC,CAAC;IAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAE5C,IAAI,UAA8B,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBACrC,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAiB,CAAC;QAElD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACpB,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAG9D,CAAC;oBACF,MAAM,YAAY,GAA4B,EAAE,CAAC;oBACjD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC/B,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;oBACD,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBACpE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACpE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAClD,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,yFAAyF;IACzF,2FAA2F;IAC3F,+EAA+E;IAC/E,MAAM,SAAS,GAAI,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAC;IAEzD,OAAO;QACL,GAAG,EAAE,oBAAoB,SAAS,EAAE;QACpC,KAAK;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;oBAC3B,IAAI,GAAG,KAAK,SAAS;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAC9B,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sensigo/realm-testing",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"lint": "eslint src"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@sensigo/realm": "^0.
|
|
41
|
+
"@sensigo/realm": "^0.42.0",
|
|
42
42
|
"js-yaml": "^4.2.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|