@salesforce/graphiti 11.31.15 → 11.32.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/CHANGELOG.md +6 -0
- package/dist/intent/build-detail.js +3 -1
- package/dist/intent/build-detail.js.map +1 -1
- package/dist/intent/build-list.js +8 -1
- package/dist/intent/build-list.js.map +1 -1
- package/dist/intent/build-mutation.js +6 -1
- package/dist/intent/build-mutation.js.map +1 -1
- package/dist/intent/select-child-relationship.js +9 -0
- package/dist/intent/select-child-relationship.js.map +1 -1
- package/dist/lib/graphql-name.d.ts +18 -0
- package/dist/lib/graphql-name.js +22 -0
- package/dist/lib/graphql-name.js.map +1 -1
- package/dist/lib/variable-promotion.js +10 -0
- package/dist/lib/variable-promotion.js.map +1 -1
- package/dist/schemas/fields.d.ts +10 -0
- package/dist/schemas/fields.js +21 -2
- package/dist/schemas/fields.js.map +1 -1
- package/dist/schemas/input-schemas.js +14 -14
- package/dist/schemas/input-schemas.js.map +1 -1
- package/package.json +1 -1
- package/src/intent/__tests__/build-aggregate.spec.ts +29 -0
- package/src/intent/__tests__/build-create-validation.spec.ts +37 -0
- package/src/intent/__tests__/build-detail.spec.ts +96 -0
- package/src/intent/__tests__/build-list.spec.ts +162 -1
- package/src/intent/__tests__/build-update-validation.spec.ts +20 -0
- package/src/intent/build-detail.ts +3 -1
- package/src/intent/build-list.ts +8 -1
- package/src/intent/build-mutation.ts +6 -1
- package/src/intent/select-child-relationship.ts +10 -0
- package/src/lib/__tests__/graphql-name.spec.ts +72 -7
- package/src/lib/graphql-name.ts +26 -0
- package/src/lib/variable-promotion.ts +12 -0
- package/src/mcp/tools/__tests__/error-surface.contract.spec.ts +23 -13
- package/src/schemas/__tests__/input-schemas.spec.ts +153 -0
- package/src/schemas/fields.ts +29 -2
- package/src/schemas/input-schemas.ts +15 -13
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [11.32.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v11.31.15...v11.32.0) (2026-07-21)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- @W-22735537 returnfields injection ([#678](https://github.com/salesforce-experience-platform-emu/webapps/issues/678)) ([6080bef](https://github.com/salesforce-experience-platform-emu/webapps/commit/6080befe1f42eb26a52b01588820be85469b7e4a))
|
|
11
|
+
|
|
6
12
|
## [11.31.15](https://github.com/salesforce-experience-platform-emu/webapps/compare/v11.31.14...v11.31.15) (2026-07-21)
|
|
7
13
|
|
|
8
14
|
**Note:** Version bump only for package @salesforce/graphiti
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { buildOutput } from "./build-output.js";
|
|
7
7
|
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
8
|
import { selectChildRelationship } from "./select-child-relationship.js";
|
|
9
|
-
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
9
|
+
import { assertDottedGraphqlName, assertGraphqlName } from "../lib/graphql-name.js";
|
|
10
10
|
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
11
11
|
import { addVariable, createSession, deepSetArg } from "../lib/session.js";
|
|
12
12
|
import { connectionNodePath, connectionPath } from "../lib/uiapi.js";
|
|
@@ -46,10 +46,12 @@ export async function buildDetail(spec, deps) {
|
|
|
46
46
|
const connection = connectionPath(spec.object);
|
|
47
47
|
const node = connectionNodePath(connection);
|
|
48
48
|
for (const field of spec.fields) {
|
|
49
|
+
assertDottedGraphqlName(field, "buildDetail", "fields entry");
|
|
49
50
|
selectDottedFieldPath(session, schema, node, field);
|
|
50
51
|
}
|
|
51
52
|
if (spec.parentFields) {
|
|
52
53
|
for (const pf of spec.parentFields) {
|
|
54
|
+
assertDottedGraphqlName(pf, "buildDetail", "parentFields entry");
|
|
53
55
|
selectDottedFieldPath(session, schema, node, pf);
|
|
54
56
|
}
|
|
55
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-detail.js","sourceRoot":"","sources":["../../src/intent/build-detail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"build-detail.js","sourceRoot":"","sources":["../../src/intent/build-detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { buildOutput } from "./build-output.js";
|
|
7
7
|
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
8
|
import { selectChildRelationship } from "./select-child-relationship.js";
|
|
9
|
-
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
9
|
+
import { assertDottedGraphqlName, assertGraphqlName } from "../lib/graphql-name.js";
|
|
10
10
|
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
11
11
|
import { addVariable, createSession, deepSetArg, selectLeaf } from "../lib/session.js";
|
|
12
12
|
import { normalizeOrderBy, promoteArg, promoteVariables } from "../lib/variable-promotion.js";
|
|
@@ -39,10 +39,12 @@ export async function buildList(spec, deps) {
|
|
|
39
39
|
const connectionPath = ["uiapi", "query", spec.object];
|
|
40
40
|
const nodePath = [...connectionPath, "edges", "node"];
|
|
41
41
|
for (const field of spec.fields) {
|
|
42
|
+
assertDottedGraphqlName(field, "buildList", "fields entry");
|
|
42
43
|
selectDottedFieldPath(session, schema, nodePath, field);
|
|
43
44
|
}
|
|
44
45
|
if (spec.parentFields) {
|
|
45
46
|
for (const pf of spec.parentFields) {
|
|
47
|
+
assertDottedGraphqlName(pf, "buildList", "parentFields entry");
|
|
46
48
|
selectDottedFieldPath(session, schema, nodePath, pf);
|
|
47
49
|
}
|
|
48
50
|
}
|
|
@@ -72,6 +74,11 @@ export async function buildList(spec, deps) {
|
|
|
72
74
|
deepSetArg(session, connectionPath, "orderBy", [], rendered);
|
|
73
75
|
}
|
|
74
76
|
if (spec.scope) {
|
|
77
|
+
// `scope` renders into an argument position and is stored verbatim, so an
|
|
78
|
+
// unconstrained string is a selection-set / argument breakout (W-22735537).
|
|
79
|
+
// Allow a bare enum token (e.g. MINE) or a $varName; reject anything else.
|
|
80
|
+
const scopeName = spec.scope.startsWith("$") ? spec.scope.slice(1) : spec.scope;
|
|
81
|
+
assertGraphqlName(scopeName, "buildList", "scope");
|
|
75
82
|
promoteVariables(session, schema, connectionPath, "scope", spec.scope, extraWarnings);
|
|
76
83
|
deepSetArg(session, connectionPath, "scope", [], spec.scope);
|
|
77
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-list.js","sourceRoot":"","sources":["../../src/intent/build-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"build-list.js","sourceRoot":"","sources":["../../src/intent/build-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { buildOutput } from "./build-output.js";
|
|
7
7
|
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
|
-
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
8
|
+
import { assertDottedGraphqlName, assertGraphqlName } from "../lib/graphql-name.js";
|
|
9
9
|
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
10
10
|
import { addVariable, createSession, deepSetArg } from "../lib/session.js";
|
|
11
11
|
import { createInputTypeName, mutationFieldPath, mutationRecordPath, updateInputTypeName, } from "../lib/uiapi.js";
|
|
@@ -41,6 +41,11 @@ export async function buildMutation(spec, op, deps) {
|
|
|
41
41
|
deepSetArg(session, fieldPath, "input", [], "$" + inputVar);
|
|
42
42
|
const extraWarnings = [];
|
|
43
43
|
for (const field of spec.returnFields ?? ["Id"]) {
|
|
44
|
+
// Validate the charset BEFORE the warn-swallowing try below, so a
|
|
45
|
+
// selection-set breakout (W-22735537) hard-fails instead of being demoted
|
|
46
|
+
// to a non-gating warning. A legit dot-path passes here and is then handled
|
|
47
|
+
// (warn-and-skip) by selectDottedFieldPath as an unsupported mutation-result path.
|
|
48
|
+
assertDottedGraphqlName(field, "buildMutation", "returnFields entry");
|
|
44
49
|
try {
|
|
45
50
|
selectDottedFieldPath(session, schema, recordPath, field);
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-mutation.js","sourceRoot":"","sources":["../../src/intent/build-mutation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"build-mutation.js","sourceRoot":"","sources":["../../src/intent/build-mutation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
+
import { assertDottedGraphqlName, assertGraphqlName } from "../lib/graphql-name.js";
|
|
6
7
|
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
7
8
|
import { deepSetArg } from "../lib/session.js";
|
|
8
9
|
import { normalizeOrderBy, promoteArg } from "../lib/variable-promotion.js";
|
|
@@ -17,9 +18,17 @@ import { normalizeOrderBy, promoteArg } from "../lib/variable-promotion.js";
|
|
|
17
18
|
* callers — the connection node path is the only thing that varies.
|
|
18
19
|
*/
|
|
19
20
|
export function selectChildRelationship(session, schema, parentNodePath, child, warnings) {
|
|
21
|
+
// `relationshipName` is appended to the path and rendered verbatim as the
|
|
22
|
+
// connection field name (query-builder emits node.fieldName directly), so an
|
|
23
|
+
// unconstrained value is a selection-set breakout — the same class as `fields`
|
|
24
|
+
// below and `object`/`scope` on the top-level builders. Guard it here too: the
|
|
25
|
+
// MCP + CLI-mirror boundaries already enforce the GraphQL Name charset via zod,
|
|
26
|
+
// but the builders are also reachable directly (CLI, eval harness) (W-22735537).
|
|
27
|
+
assertGraphqlName(child.relationshipName, "selectChildRelationship", "relationshipName");
|
|
20
28
|
const childConnectionPath = [...parentNodePath, child.relationshipName];
|
|
21
29
|
const childNodePath = [...childConnectionPath, "edges", "node"];
|
|
22
30
|
for (const field of child.fields) {
|
|
31
|
+
assertDottedGraphqlName(field, "selectChildRelationship", "childRelationships fields entry");
|
|
23
32
|
selectDottedFieldPath(session, schema, childNodePath, field);
|
|
24
33
|
}
|
|
25
34
|
if (child.first !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-child-relationship.js","sourceRoot":"","sources":["../../src/intent/select-child-relationship.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACtC,OAAqB,EACrB,MAAqB,EACrB,cAAwB,EACxB,KAA4B,EAC5B,QAAmB;IAEnB,MAAM,mBAAmB,GAAG,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,CAAC,GAAG,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,UAAU,CAC/B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,CAAC,KAAK,CACX,CAAC,QAAQ,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAC9B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,QAAQ,CACR,CAAC;QACF,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAC9B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,SAAS,EACT,YAAY,EACZ,QAAQ,CACR,CAAC;QACF,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"select-child-relationship.js","sourceRoot":"","sources":["../../src/intent/select-child-relationship.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAqB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACtC,OAAqB,EACrB,MAAqB,EACrB,cAAwB,EACxB,KAA4B,EAC5B,QAAmB;IAEnB,0EAA0E;IAC1E,6EAA6E;IAC7E,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,iFAAiF;IACjF,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;IAEzF,MAAM,mBAAmB,GAAG,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,CAAC,GAAG,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,EAAE,iCAAiC,CAAC,CAAC;QAC7F,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,UAAU,CAC/B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,CAAC,KAAK,CACX,CAAC,QAAQ,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAC9B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,KAAK,CAAC,MAAM,EACZ,QAAQ,CACR,CAAC;QACF,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAC9B,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,SAAS,EACT,YAAY,EACZ,QAAQ,CACR,CAAC;QACF,UAAU,CAAC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;AACF,CAAC"}
|
|
@@ -25,3 +25,21 @@ export declare const GRAPHQL_NAME_RE: RegExp;
|
|
|
25
25
|
* builders already use for `object` / `inputVariable`.
|
|
26
26
|
*/
|
|
27
27
|
export declare function assertGraphqlName(value: string, builder: string, field: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Dotted field path: one GraphQL Name, then zero or more `.`-separated Names —
|
|
30
|
+
* e.g. `Id`, `Owner.Name`, `CreatedBy.Profile.Name`. Each segment must be a
|
|
31
|
+
* valid GraphQL Name on its own, and only the literal segment-separating dot is
|
|
32
|
+
* allowed between them. Because no segment can contain `{`, `}`, `:`, or
|
|
33
|
+
* whitespace, a string that matches cannot close a selection block early or
|
|
34
|
+
* hoist a sibling selection — closing the W-22735537 selection-set injection
|
|
35
|
+
* where caller-supplied `returnFields` / `fields` / `parentFields` reach the
|
|
36
|
+
* rendered query verbatim.
|
|
37
|
+
*/
|
|
38
|
+
export declare const DOTTED_GRAPHQL_NAME_RE: RegExp;
|
|
39
|
+
/**
|
|
40
|
+
* Throw if `value` is not a valid dotted field path (see
|
|
41
|
+
* {@link DOTTED_GRAPHQL_NAME_RE}). The intent-layer twin of the zod
|
|
42
|
+
* `dottedGraphqlName()` factory, used by the builders, which are also reachable
|
|
43
|
+
* directly (CLI, eval harness) and so cannot rely on the zod boundary.
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertDottedGraphqlName(value: string, builder: string, field: string): void;
|
package/dist/lib/graphql-name.js
CHANGED
|
@@ -29,4 +29,26 @@ export function assertGraphqlName(value, builder, field) {
|
|
|
29
29
|
throw new Error(`${builder}: ${field} '${value}' is not a valid GraphQL Name (must match ${GRAPHQL_NAME_RE})`);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Dotted field path: one GraphQL Name, then zero or more `.`-separated Names —
|
|
34
|
+
* e.g. `Id`, `Owner.Name`, `CreatedBy.Profile.Name`. Each segment must be a
|
|
35
|
+
* valid GraphQL Name on its own, and only the literal segment-separating dot is
|
|
36
|
+
* allowed between them. Because no segment can contain `{`, `}`, `:`, or
|
|
37
|
+
* whitespace, a string that matches cannot close a selection block early or
|
|
38
|
+
* hoist a sibling selection — closing the W-22735537 selection-set injection
|
|
39
|
+
* where caller-supplied `returnFields` / `fields` / `parentFields` reach the
|
|
40
|
+
* rendered query verbatim.
|
|
41
|
+
*/
|
|
42
|
+
export const DOTTED_GRAPHQL_NAME_RE = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/;
|
|
43
|
+
/**
|
|
44
|
+
* Throw if `value` is not a valid dotted field path (see
|
|
45
|
+
* {@link DOTTED_GRAPHQL_NAME_RE}). The intent-layer twin of the zod
|
|
46
|
+
* `dottedGraphqlName()` factory, used by the builders, which are also reachable
|
|
47
|
+
* directly (CLI, eval harness) and so cannot rely on the zod boundary.
|
|
48
|
+
*/
|
|
49
|
+
export function assertDottedGraphqlName(value, builder, field) {
|
|
50
|
+
if (!DOTTED_GRAPHQL_NAME_RE.test(value)) {
|
|
51
|
+
throw new Error(`${builder}: ${field} '${value}' is not a valid field path (each '.'-separated segment must be a GraphQL Name matching ${GRAPHQL_NAME_RE})`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
32
54
|
//# sourceMappingURL=graphql-name.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-name.js","sourceRoot":"","sources":["../../src/lib/graphql-name.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;IAC9E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACd,GAAG,OAAO,KAAK,KAAK,KAAK,KAAK,6CAA6C,eAAe,GAAG,CAC7F,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"graphql-name.js","sourceRoot":"","sources":["../../src/lib/graphql-name.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;IAC9E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACd,GAAG,OAAO,KAAK,KAAK,KAAK,KAAK,6CAA6C,eAAe,GAAG,CAC7F,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,qDAAqD,CAAC;AAE5F;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;IACpF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACd,GAAG,OAAO,KAAK,KAAK,KAAK,KAAK,2FAA2F,eAAe,GAAG,CAC3I,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
+
import { GRAPHQL_NAME_RE } from "./graphql-name.js";
|
|
6
7
|
import { addVariable } from "./session.js";
|
|
7
8
|
import { inferTypeFromArgsPath } from "../commands/query-helpers.js";
|
|
8
9
|
const VAR_PLACEHOLDER_RE = /^\$([A-Za-z_][\w]*)$/;
|
|
@@ -74,6 +75,15 @@ function walk(session, schema, fieldSchemaPath, argName, value, pathInsideArg, w
|
|
|
74
75
|
}
|
|
75
76
|
if (value && typeof value === "object") {
|
|
76
77
|
for (const [k, v] of Object.entries(value)) {
|
|
78
|
+
// Object keys are rendered RAW as field/operator names by
|
|
79
|
+
// query-builder's valueToGraphQL (input-object keys cannot be quoted in
|
|
80
|
+
// GraphQL), so an unvalidated key like `Id: {eq:"1"}}) { evil { value }` is
|
|
81
|
+
// a selection-set / argument breakout. Validate every key (at every depth)
|
|
82
|
+
// as a GraphQL Name and hard-fail — values are separately quoted and safe.
|
|
83
|
+
// This is the Class-B half of W-22735537; runs before deepSetArg renders it.
|
|
84
|
+
if (!GRAPHQL_NAME_RE.test(k)) {
|
|
85
|
+
throw new Error(`${argName}: key '${k}' is not a valid GraphQL Name (must match ${GRAPHQL_NAME_RE}); filter/orderBy keys render as field/operator names in the query.`);
|
|
86
|
+
}
|
|
77
87
|
walk(session, schema, fieldSchemaPath, argName, v, [...pathInsideArg, k], warnings);
|
|
78
88
|
}
|
|
79
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-promotion.js","sourceRoot":"","sources":["../../src/lib/variable-promotion.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variable-promotion.js","sourceRoot":"","sources":["../../src/lib/variable-promotion.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/fields.d.ts
CHANGED
|
@@ -32,6 +32,16 @@ export declare const quotedString: () => z.ZodString;
|
|
|
32
32
|
* in the MCP tool's advertised JSON Schema.
|
|
33
33
|
*/
|
|
34
34
|
export declare const graphqlName: (description: string) => z.ZodString;
|
|
35
|
+
/**
|
|
36
|
+
* Zod validator for a dotted field path (`Id`, `Owner.Name`, …). Each
|
|
37
|
+
* `.`-separated segment must be a valid GraphQL Name. Applied to every
|
|
38
|
+
* caller-supplied field-selection input (`returnFields`, `fields`,
|
|
39
|
+
* `parentFields`, child-relationship `fields`) so a selection-set breakout is
|
|
40
|
+
* rejected at the MCP boundary (W-22735537); the builders carry the matching
|
|
41
|
+
* `assertDottedGraphqlName` guard for direct (CLI / eval) callers.
|
|
42
|
+
*/
|
|
43
|
+
export declare const dottedGraphqlName: (description: string) => z.ZodString;
|
|
44
|
+
export declare const scopeArg: (description: string) => z.ZodString;
|
|
35
45
|
export declare const orgAlias: (description: string) => z.ZodString;
|
|
36
46
|
/**
|
|
37
47
|
* `<Object>_OrderBy` shape. A FACTORY (not a shared instance): each call returns
|
package/dist/schemas/fields.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { GRAPHQL_NAME_RE } from "../lib/graphql-name.js";
|
|
7
|
+
import { DOTTED_GRAPHQL_NAME_RE, GRAPHQL_NAME_RE } from "../lib/graphql-name.js";
|
|
8
8
|
/**
|
|
9
9
|
* Some MCP clients/models JSON-stringify complex tool arguments (e.g. send
|
|
10
10
|
* `"25"` for a number or `'{"x":1}'` for an object). This coerces such a
|
|
@@ -54,6 +54,25 @@ export const quotedString = () => z.string().regex(/^".*"$/s);
|
|
|
54
54
|
* in the MCP tool's advertised JSON Schema.
|
|
55
55
|
*/
|
|
56
56
|
export const graphqlName = (description) => z.string().regex(GRAPHQL_NAME_RE, "must be a valid GraphQL Name").describe(description);
|
|
57
|
+
/**
|
|
58
|
+
* Zod validator for a dotted field path (`Id`, `Owner.Name`, …). Each
|
|
59
|
+
* `.`-separated segment must be a valid GraphQL Name. Applied to every
|
|
60
|
+
* caller-supplied field-selection input (`returnFields`, `fields`,
|
|
61
|
+
* `parentFields`, child-relationship `fields`) so a selection-set breakout is
|
|
62
|
+
* rejected at the MCP boundary (W-22735537); the builders carry the matching
|
|
63
|
+
* `assertDottedGraphqlName` guard for direct (CLI / eval) callers.
|
|
64
|
+
*/
|
|
65
|
+
export const dottedGraphqlName = (description) => z
|
|
66
|
+
.string()
|
|
67
|
+
.regex(DOTTED_GRAPHQL_NAME_RE, "must be a valid field path (dot-separated GraphQL Names)")
|
|
68
|
+
.describe(description);
|
|
69
|
+
/**
|
|
70
|
+
* `scope` argument validator: a bare enum token (e.g. `MINE`, `EVERYTHING`) or a
|
|
71
|
+
* `$varName` placeholder. `scope` renders into an argument position, so an
|
|
72
|
+
* unconstrained string is a selection-set / argument breakout (W-22735537).
|
|
73
|
+
*/
|
|
74
|
+
const SCOPE_RE = /^\$?[A-Za-z_][A-Za-z0-9_]*$/;
|
|
75
|
+
export const scopeArg = (description) => z.string().regex(SCOPE_RE, "must be a Scope enum token or $varName").describe(description);
|
|
57
76
|
/**
|
|
58
77
|
* Org alias / username charset + length, matching `auth.ts`'s
|
|
59
78
|
* `assertValidOrgAlias`. Defense-in-depth at the MCP boundary so the
|
|
@@ -88,7 +107,7 @@ export const varPlaceholder = () => z.string().regex(/^\$[A-Za-z_]\w*$/, "must b
|
|
|
88
107
|
*/
|
|
89
108
|
export const childRelationshipSchema = (orderBy) => z.object({
|
|
90
109
|
relationshipName: graphqlName('Child relationship API name, e.g. "Contacts", "Opportunities". Must be a valid GraphQL Name.'),
|
|
91
|
-
fields: z.array(
|
|
110
|
+
fields: z.array(dottedGraphqlName('Scalar field API names on the child record; dot-paths like "Owner.Name" allowed.')),
|
|
92
111
|
first: jsonCoercible(z.union([z.number().int().positive(), varPlaceholder(), intLiteralString(), quotedString()])).optional(),
|
|
93
112
|
filter: jsonCoercible(z.union([z.record(z.unknown()), varPlaceholder(), jsonLiteralString(), quotedString()])).optional(),
|
|
94
113
|
orderBy: jsonCoercible(z.union([orderBy, varPlaceholder(), jsonLiteralString(), quotedString()])).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/schemas/fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/schemas/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* schemas; behavior is unchanged — this is a pure extraction.
|
|
16
16
|
*/
|
|
17
17
|
import { z } from "zod";
|
|
18
|
-
import { childRelationshipSchema, graphqlName, intLiteralString, jsonCoercible, jsonLiteralString, orderByObject, orgAlias, quotedString, varPlaceholder, } from "./fields.js";
|
|
18
|
+
import { childRelationshipSchema, dottedGraphqlName, graphqlName, intLiteralString, jsonCoercible, jsonLiteralString, orderByObject, orgAlias, quotedString, scopeArg, varPlaceholder, } from "./fields.js";
|
|
19
19
|
import { GROUP_BY_FUNCTIONS } from "../intent/types.js";
|
|
20
20
|
// --- sf_gql_list ------------------------------------------------------------
|
|
21
21
|
// `sf_gql_list` advertises both shapes (singleton + array) for backward
|
|
@@ -32,10 +32,10 @@ export const LIST_INPUT = z.object({
|
|
|
32
32
|
org: z.string().describe("Org alias resolved via local Salesforce CLI auth (~/.sf, ~/.sfdx)."),
|
|
33
33
|
object: graphqlName('SObject API name, e.g. "Account", "Case". Must be a valid GraphQL Name.'),
|
|
34
34
|
fields: z
|
|
35
|
-
.array(
|
|
35
|
+
.array(dottedGraphqlName('Scalar field API name; dot-paths like "Owner.Name" allowed.'))
|
|
36
36
|
.describe('Scalar field API names to select on the node. Dot-paths like "Owner.Name" are allowed.'),
|
|
37
37
|
parentFields: z
|
|
38
|
-
.array(
|
|
38
|
+
.array(dottedGraphqlName('Dotted parent-relationship path, e.g. "Account.Name".'))
|
|
39
39
|
.optional()
|
|
40
40
|
.describe('Dotted parent-relationship paths, e.g. "Account.Name".'),
|
|
41
41
|
childRelationships: z.array(childRelationshipSchema(listOrderBySchema())).optional(),
|
|
@@ -48,7 +48,7 @@ export const LIST_INPUT = z.object({
|
|
|
48
48
|
first: jsonCoercible(z.union([z.number().int().positive(), varPlaceholder(), intLiteralString(), quotedString()]))
|
|
49
49
|
.optional()
|
|
50
50
|
.describe('Top-level connection page size as a NUMBER (e.g. 25, not "25"); defaults to 10. Pass a single "$varName" string to promote it to an optional Int variable.'),
|
|
51
|
-
scope:
|
|
51
|
+
scope: scopeArg('Scope enum (e.g. "MINE", "EVERYTHING") or $varName.').optional(),
|
|
52
52
|
operationName: graphqlName("Override the GraphQL operation name. Defaults to <Object>List.").optional(),
|
|
53
53
|
});
|
|
54
54
|
// --- sf_gql_detail ----------------------------------------------------------
|
|
@@ -70,10 +70,10 @@ export const DETAIL_INPUT = z
|
|
|
70
70
|
org: orgAlias("Org alias resolved via local Salesforce CLI auth (~/.sf, ~/.sfdx)."),
|
|
71
71
|
object: graphqlName('SObject API name, e.g. "Account", "Case". Must be a valid GraphQL Name.'),
|
|
72
72
|
fields: z
|
|
73
|
-
.array(
|
|
73
|
+
.array(dottedGraphqlName('Scalar field API name; dot-paths like "Owner.Name" allowed.'))
|
|
74
74
|
.describe('Scalar field API names to select on the node. Dot-paths like "Owner.Name" are allowed.'),
|
|
75
75
|
parentFields: z
|
|
76
|
-
.array(
|
|
76
|
+
.array(dottedGraphqlName('Dotted parent-relationship path, e.g. "Account.Name".'))
|
|
77
77
|
.optional()
|
|
78
78
|
.describe('Dotted parent-relationship paths, e.g. "Account.Name".'),
|
|
79
79
|
childRelationships: z.array(childRelationshipSchema(detailOrderBySchema())).optional(),
|
|
@@ -122,19 +122,19 @@ const aliasField = z
|
|
|
122
122
|
const aggregationSchema = z.discriminatedUnion("function", [
|
|
123
123
|
z.object({
|
|
124
124
|
function: z.enum(["count", "countDistinct"]),
|
|
125
|
-
field:
|
|
125
|
+
field: graphqlName('SObject field API name. Defaults to "Id" when omitted.').optional(),
|
|
126
126
|
alias: aliasField,
|
|
127
127
|
}),
|
|
128
128
|
z.object({
|
|
129
129
|
function: z.enum(["sum", "avg", "min", "max"]),
|
|
130
|
-
field:
|
|
130
|
+
field: graphqlName("SObject field API name. Required for sum/avg/min/max."),
|
|
131
131
|
alias: aliasField,
|
|
132
132
|
}),
|
|
133
133
|
]);
|
|
134
134
|
const groupByElementSchema = z.union([
|
|
135
|
-
|
|
135
|
+
graphqlName("SObject field API name to group by (flat, non-dotted)."),
|
|
136
136
|
z.object({
|
|
137
|
-
field:
|
|
137
|
+
field: graphqlName("SObject field API name (DateTime/Date field)."),
|
|
138
138
|
function: z
|
|
139
139
|
.enum(GROUP_BY_FUNCTIONS)
|
|
140
140
|
.describe("Date bucketing function from UIAPI GroupByFunction enum."),
|
|
@@ -191,9 +191,9 @@ export const CREATE_INPUT = z.object({
|
|
|
191
191
|
org: z.string().describe("Org alias resolved via local Salesforce CLI auth (~/.sf, ~/.sfdx)."),
|
|
192
192
|
object: graphqlName('SObject API name, e.g. "Account", "Order". Must be a valid GraphQL Name.'),
|
|
193
193
|
returnFields: z
|
|
194
|
-
.array(
|
|
194
|
+
.array(dottedGraphqlName("Scalar field API name to read back on the created Record."))
|
|
195
195
|
.optional()
|
|
196
|
-
.describe('Scalar field API names to read back on the created Record. Defaults to ["Id"]. Dot-paths like Owner.Name are
|
|
196
|
+
.describe('Scalar field API names to read back on the created Record. Defaults to ["Id"]. Each entry must be a valid field name (dot-paths allowed); invalid entries are rejected. Dot-paths like Owner.Name are unsupported in mutation results and are skipped with a warning.'),
|
|
197
197
|
inputVariable: z
|
|
198
198
|
.string()
|
|
199
199
|
.optional()
|
|
@@ -205,9 +205,9 @@ export const UPDATE_INPUT = z.object({
|
|
|
205
205
|
org: z.string().describe("Org alias resolved via local Salesforce CLI auth (~/.sf, ~/.sfdx)."),
|
|
206
206
|
object: graphqlName('SObject API name, e.g. "Account", "Order". Must be a valid GraphQL Name.'),
|
|
207
207
|
returnFields: z
|
|
208
|
-
.array(
|
|
208
|
+
.array(dottedGraphqlName("Scalar field API name to read back on the updated Record."))
|
|
209
209
|
.optional()
|
|
210
|
-
.describe('Scalar field API names to read back on the updated Record. Defaults to ["Id"]. Dot-paths like Owner.Name are
|
|
210
|
+
.describe('Scalar field API names to read back on the updated Record. Defaults to ["Id"]. Each entry must be a valid field name (dot-paths allowed); invalid entries are rejected. Dot-paths like Owner.Name are unsupported in mutation results and are skipped with a warning.'),
|
|
211
211
|
inputVariable: z
|
|
212
212
|
.string()
|
|
213
213
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-schemas.js","sourceRoot":"","sources":["../../src/schemas/input-schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACN,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,+EAA+E;AAE/E,wEAAwE;AACxE,oEAAoE;AACpE,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC9B,CAAC,CAAC,KAAK,CAAC;IACP,aAAa,EAAE;IACf,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IACxB,cAAc,EAAE;IAChB,iBAAiB,EAAE;IACnB,YAAY,EAAE;CACd,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IAC9F,MAAM,EAAE,WAAW,CAAC,yEAAyE,CAAC;IAC9F,MAAM,EAAE,CAAC;SACP,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"input-schemas.js","sourceRoot":"","sources":["../../src/schemas/input-schemas.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1102,3 +1102,32 @@ describe("intent/build-aggregate", () => {
|
|
|
1102
1102
|
expect(spy).toHaveBeenCalledWith(ORG, "aggregate", ORG_URL);
|
|
1103
1103
|
});
|
|
1104
1104
|
});
|
|
1105
|
+
|
|
1106
|
+
describe("intent/build-aggregate — selection-set injection (W-22735537)", () => {
|
|
1107
|
+
it("rejects an aggregations[].field breakout", async () => {
|
|
1108
|
+
await expect(
|
|
1109
|
+
buildAggregate(
|
|
1110
|
+
{
|
|
1111
|
+
org: ORG,
|
|
1112
|
+
object: "Account",
|
|
1113
|
+
aggregations: [{ function: "sum", field: "Amount } evil { value" }],
|
|
1114
|
+
},
|
|
1115
|
+
noopPrimeDeps(),
|
|
1116
|
+
),
|
|
1117
|
+
).rejects.toThrow(/buildAggregate: field .* is not a valid GraphQL Name/);
|
|
1118
|
+
});
|
|
1119
|
+
|
|
1120
|
+
it("rejects a filter object-KEY breakout", async () => {
|
|
1121
|
+
await expect(
|
|
1122
|
+
buildAggregate(
|
|
1123
|
+
{
|
|
1124
|
+
org: ORG,
|
|
1125
|
+
object: "Account",
|
|
1126
|
+
aggregations: [{ function: "count" }],
|
|
1127
|
+
filter: { "Industry } evil { value": { eq: "x" } },
|
|
1128
|
+
},
|
|
1129
|
+
noopPrimeDeps(),
|
|
1130
|
+
),
|
|
1131
|
+
).rejects.toThrow(/key '.*' is not a valid GraphQL Name/);
|
|
1132
|
+
});
|
|
1133
|
+
});
|
|
@@ -132,4 +132,41 @@ describe("intent/build-create — GraphQL name validation", () => {
|
|
|
132
132
|
).rejects.toThrow(/buildMutation: operationName 'has spaces' is not a valid GraphQL Name/);
|
|
133
133
|
});
|
|
134
134
|
});
|
|
135
|
+
|
|
136
|
+
describe("returnFields validation (W-22735537)", () => {
|
|
137
|
+
it("rejects a selection-set breakout payload instead of rendering it", async () => {
|
|
138
|
+
await expect(
|
|
139
|
+
buildCreate(
|
|
140
|
+
{ org: ORG, object: "Account", returnFields: ["Id } injectedAlias: Name { value"] },
|
|
141
|
+
noopPrimeDeps(),
|
|
142
|
+
),
|
|
143
|
+
).rejects.toThrow(/returnFields entry .* is not a valid field path/);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it("hard-throws a breakout (not demoted to a warning) — gating order", async () => {
|
|
147
|
+
// Core-defect regression guard: the assert must run BEFORE the
|
|
148
|
+
// warn-swallowing try in buildMutation. A breakout must REJECT (throw),
|
|
149
|
+
// never resolve with the payload tucked into warnings/query.
|
|
150
|
+
const outcome = await buildCreate(
|
|
151
|
+
{ org: ORG, object: "Account", returnFields: ["Id } injectedAlias: Name { value"] },
|
|
152
|
+
noopPrimeDeps(),
|
|
153
|
+
).then(
|
|
154
|
+
(r) => ({ threw: false as const, r }),
|
|
155
|
+
(e: Error) => ({ threw: true as const, e }),
|
|
156
|
+
);
|
|
157
|
+
expect(outcome.threw).toBe(true);
|
|
158
|
+
if (outcome.threw) expect(outcome.e.message).toMatch(/is not a valid field path/);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("accepts a legit dot-path (Owner.Name) — the guard allows dotted segments", async () => {
|
|
162
|
+
// Owner.Name is a valid dotted path. It is unsupported in mutation results
|
|
163
|
+
// (warns-and-skips downstream) but must NOT be rejected by the charset guard.
|
|
164
|
+
await expect(
|
|
165
|
+
buildCreate(
|
|
166
|
+
{ org: ORG, object: "Account", returnFields: ["Id", "Owner.Name"] },
|
|
167
|
+
noopPrimeDeps(),
|
|
168
|
+
),
|
|
169
|
+
).resolves.toBeDefined();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
135
172
|
});
|