@memberjunction/react-test-harness 6.2.0-edge.0 → 6.2.0-edge.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.
@@ -2,6 +2,175 @@ import { BrowserManager } from './browser-context.js';
2
2
  import type { UserInfo } from '@memberjunction/core';
3
3
  import { Violation, type LinterOptions } from '@memberjunction/react-linter';
4
4
  import { ComponentSpec, SimpleAITools } from '@memberjunction/interactive-component-types';
5
+ /**
6
+ * Row ceilings applied to the data bridges the component under test calls through
7
+ * (`__mjRunView`, `__mjRunViews`, `__mjRunQuery`).
8
+ *
9
+ * A test run only needs enough rows to render and be looked at, so the harness does not
10
+ * honour an unbounded request. `MaxRows` is applied at the SQL level by the provider, so
11
+ * the surplus is never produced rather than fetched and discarded — which matters because
12
+ * a bridge result is serialized in Node, shipped over CDP and rehydrated in Chromium,
13
+ * leaving several resident copies of the same data.
14
+ */
15
+ export interface DataCapOptions {
16
+ /** Ceiling for `RunView` / `RunViews`. @default 1000 */
17
+ runViewMaxRows?: number;
18
+ /** Ceiling for `RunQuery`. @default 1000 */
19
+ runQueryMaxRows?: number;
20
+ }
21
+ /**
22
+ * One data call made by the component under test, recorded by the harness bridges.
23
+ *
24
+ * Lets a caller tell apart failure modes that a screenshot alone cannot: a component
25
+ * showing no data because its query returned zero rows is an upstream data or parameter
26
+ * problem, while one showing no data after rows *were* returned is a render or binding
27
+ * bug.
28
+ */
29
+ /**
30
+ * Machine-readable identity of what a data call resolved to.
31
+ *
32
+ * Field names mirror `ComponentSpec.dataRequirements` (`ComponentQueryDataRequirement.name`
33
+ * / `.categoryPath`, `ComponentEntityDataRequirement.name`) so a caller can correlate what
34
+ * a component declared against what it actually called, without parsing a display string.
35
+ *
36
+ * It mirrors that vocabulary rather than referencing the spec, because a record must be
37
+ * able to describe a call that appears nowhere in `dataRequirements`.
38
+ */
39
+ export interface DataAccessIdentity {
40
+ /** Entity name — corresponds to `ComponentEntityDataRequirement.name`. */
41
+ entityName?: string;
42
+ /** Query name — corresponds to `ComponentQueryDataRequirement.name`. Not unique alone. */
43
+ queryName?: string;
44
+ /** Category path that disambiguates `queryName` — `ComponentQueryDataRequirement.categoryPath`. */
45
+ categoryPath?: string;
46
+ /** Present when the call named a query by ID, which takes precedence over name. */
47
+ queryId?: string;
48
+ /** Present when the call named a saved view by ID. */
49
+ viewId?: string;
50
+ /** Present when the call named a saved view by name. */
51
+ viewName?: string;
52
+ }
53
+ export interface DataAccessRecord {
54
+ kind: 'RunView' | 'RunViews' | 'RunQuery';
55
+ /**
56
+ * Human/LLM-readable rendering of {@link identity} — a category-qualified query path,
57
+ * or the view/entity a `RunView` resolved to. For display and prompts; use `identity`
58
+ * for matching.
59
+ */
60
+ target: string;
61
+ /** Structured identity, for correlating against declared data requirements. */
62
+ identity: DataAccessIdentity;
63
+ /** Rows actually handed to the component. */
64
+ rowsReturned: number;
65
+ /**
66
+ * Rows the query would have produced without the harness ceiling, when the provider
67
+ * reports it (`TotalRowCount`). Equal to `rowsReturned` when nothing was capped.
68
+ */
69
+ totalRowCount?: number;
70
+ /** True when the harness ceiling reduced the result below what the source held. */
71
+ capped: boolean;
72
+ /** Ceiling actually applied to this call. */
73
+ appliedMaxRows?: number;
74
+ /** `MaxRows` the component asked for, when it asked for one. */
75
+ requestedMaxRows?: number;
76
+ /** Wall-clock duration of the call, in milliseconds. */
77
+ durationMs: number;
78
+ /** Present when the call failed; the bridge returns an empty result set in that case. */
79
+ error?: string;
80
+ }
81
+ /** Default row ceiling for `RunView` / `RunViews`. @see DataCapOptions */
82
+ export declare const DEFAULT_RUN_VIEW_MAX_ROWS = 1000;
83
+ /** Default row ceiling for `RunQuery`. @see DataCapOptions */
84
+ export declare const DEFAULT_RUN_QUERY_MAX_ROWS = 1000;
85
+ /**
86
+ * Resolves the `MaxRows` to send for one data call.
87
+ *
88
+ * Clamps downward only: a component asking for 50 rows still gets 50, while one asking for
89
+ * nothing or for more than the ceiling gets the ceiling. A nonsensical request (zero,
90
+ * negative, non-numeric) is treated as absent.
91
+ *
92
+ * Returns the requested value alongside the applied one, so a capped call can report what
93
+ * the component wanted.
94
+ *
95
+ * Pure (no I/O) so it can be unit-tested without launching a browser.
96
+ */
97
+ export declare function ResolveDataCapMaxRows(requested: number | undefined, ceiling: number): {
98
+ applied: number;
99
+ requested?: number;
100
+ };
101
+ /**
102
+ * Builds a {@link DataAccessRecord} from a completed provider call.
103
+ *
104
+ * `TotalRowCount` is the provider's count of rows the query would have produced without
105
+ * paging, making it the denominator for "capped at N of M". Providers that omit it, or
106
+ * leave it equal to `RowCount`, yield `capped: false` rather than a guess.
107
+ *
108
+ * Pure (no I/O) so it can be unit-tested without launching a browser.
109
+ */
110
+ export declare function BuildDataAccessRecord(kind: DataAccessRecord['kind'], resolved: {
111
+ target: string;
112
+ identity: DataAccessIdentity;
113
+ }, result: {
114
+ Results?: any[];
115
+ TotalRowCount?: number;
116
+ } | undefined, maxRows: {
117
+ applied: number;
118
+ requested?: number;
119
+ }, durationMs: number): DataAccessRecord;
120
+ /** Debug-log suffix naming the cap, e.g. ` (capped at 1000 of 205802)`. Empty when uncapped. */
121
+ export declare function DescribeDataCap(record: DataAccessRecord): string;
122
+ /**
123
+ * Names the query a `RunQuery` call resolved to, as both a display string and a structured
124
+ * {@link DataAccessIdentity}.
125
+ *
126
+ * A query name is not unique on its own — name and category path identify a query together
127
+ * — so the display form is category-qualified.
128
+ *
129
+ * Precedence mirrors how `RunQuery` itself resolves: `QueryID` wins and `QueryName` is
130
+ * ignored when both are supplied, so the ID is reported as the identity and the supplied
131
+ * name is kept only as a label. `identity` retains every part the caller passed, so a
132
+ * correlation by name and path still works when an ID drove the resolution.
133
+ */
134
+ export declare function ResolveQueryTarget(params: {
135
+ QueryID?: string;
136
+ QueryName?: string;
137
+ CategoryPath?: string;
138
+ CategoryID?: string;
139
+ }): {
140
+ target: string;
141
+ identity: DataAccessIdentity;
142
+ };
143
+ /** Display-only form of {@link ResolveQueryTarget}. */
144
+ export declare function DescribeQueryTarget(params: {
145
+ QueryID?: string;
146
+ QueryName?: string;
147
+ CategoryPath?: string;
148
+ CategoryID?: string;
149
+ }): string;
150
+ /**
151
+ * Names the view a `RunView` call resolved to, as both a display string and a structured
152
+ * {@link DataAccessIdentity}.
153
+ *
154
+ * Follows `RunViewParams`' own precedence — `ViewEntity` → `ViewID` → `ViewName` →
155
+ * `EntityName` — where each earlier field causes the later ones to be ignored. Reporting
156
+ * `EntityName` regardless would name something the call did not resolve by.
157
+ */
158
+ export declare function ResolveViewTarget(params: {
159
+ ViewEntity?: unknown;
160
+ ViewID?: string;
161
+ ViewName?: string;
162
+ EntityName?: string;
163
+ }): {
164
+ target: string;
165
+ identity: DataAccessIdentity;
166
+ };
167
+ /** Display-only form of {@link ResolveViewTarget}. */
168
+ export declare function DescribeViewTarget(params: {
169
+ ViewEntity?: unknown;
170
+ ViewID?: string;
171
+ ViewName?: string;
172
+ EntityName?: string;
173
+ }): string;
5
174
  /**
6
175
  * Browser-execution options for {@link ComponentRunner}. Extends {@link LinterOptions}
7
176
  * (which carries `componentSpec`, `contextUser`, `entityMetadata`, `utilities` —
@@ -94,6 +263,15 @@ export interface ComponentExecutionOptions extends LinterOptions {
94
263
  * @default 15000
95
264
  */
96
265
  dataIdleTimeoutMs?: number;
266
+ /**
267
+ * Row ceilings for the data bridges. Omitted fields fall back to
268
+ * {@link DEFAULT_RUN_VIEW_MAX_ROWS} /
269
+ * {@link DEFAULT_RUN_QUERY_MAX_ROWS} (1000).
270
+ *
271
+ * A component asking for fewer rows than the ceiling keeps its own smaller number;
272
+ * the ceiling only ever clamps downward.
273
+ */
274
+ dataCaps?: DataCapOptions;
97
275
  }
98
276
  export interface ComponentExecutionResult {
99
277
  success: boolean;
@@ -134,6 +312,13 @@ export interface ComponentExecutionResult {
134
312
  * This field gives you the "did the code work?" answer directly.
135
313
  */
136
314
  codeExecutionSuccess?: boolean;
315
+ /**
316
+ * Every data call the component made, in the order the bridges served them.
317
+ *
318
+ * Empty when the component fetched nothing — itself a useful signal, and distinct from
319
+ * a component whose calls all returned zero rows.
320
+ */
321
+ dataAccess?: DataAccessRecord[];
137
322
  }
138
323
  /**
139
324
  * ComponentRunner that uses the actual React runtime via Playwright UMD bundle
@@ -157,10 +342,17 @@ export declare class ComponentRunner {
157
342
  /**
158
343
  * Lint component code before execution
159
344
  */
345
+ LintComponent(componentCode: string, componentName: string, componentSpec?: any, isRootComponent?: boolean, contextUser?: UserInfo, options?: any): Promise<{
346
+ violations: Violation[];
347
+ hasErrors: boolean;
348
+ }>;
349
+ /** @deprecated Use {@link LintComponent}. */
160
350
  lintComponent(componentCode: string, componentName: string, componentSpec?: any, isRootComponent?: boolean, contextUser?: UserInfo, options?: any): Promise<{
161
351
  violations: Violation[];
162
352
  hasErrors: boolean;
163
353
  }>;
354
+ ExecuteComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
355
+ /** @deprecated Use {@link ExecuteComponent}. */
164
356
  executeComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
165
357
  /**
166
358
  * Load core runtime libraries into the page (React, ReactDOM, Babel, MJRuntime)
@@ -1 +1 @@
1
- {"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}