Skip to content

Commit 8cbde9c

Browse files
authored
Merge branch 'main' into response-key
2 parents 15d7f5c + 521ef5b commit 8cbde9c

File tree

5 files changed

+234
-144
lines changed

5 files changed

+234
-144
lines changed

.github/algorithm-format-check.mjs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import { readFile, readdir } from "node:fs/promises";
22

33
const SPEC_DIR = new URL("../spec", import.meta.url).pathname;
44

5+
/** @see {@link https://spec-md.com/#sec-Value-Literals} */
6+
const valueLiteralsRegexp = /\{((?:[^{}]|(?:\{[^{}]*\}))+)\}/g;
7+
58
process.exitCode = 0;
69
const filenames = await readdir(SPEC_DIR);
710
for (const filename of filenames) {
@@ -72,6 +75,33 @@ for (const filename of filenames) {
7275
console.log();
7376
process.exitCode = 1;
7477
}
78+
79+
const stepWithoutValueLiterals = step.replace(
80+
valueLiteralsRegexp,
81+
""
82+
);
83+
if (stepWithoutValueLiterals.match(/\b[A-Z][A-Za-z0-9]+\(/)) {
84+
console.log(
85+
`Bad formatting of '${algorithmName}' step (algorithm call should be wrapped in braces: \`{MyAlgorithm(a, b, c)}\`) in '${filename}':`
86+
);
87+
console.dir(step);
88+
console.log();
89+
process.exitCode = 1;
90+
}
91+
92+
const valueLiterals = step.matchAll(valueLiteralsRegexp, "");
93+
for (const lit of valueLiterals) {
94+
const inner = lit[1];
95+
if (inner.includes("{")) {
96+
console.log(
97+
`Bad formatting of '${algorithmName}' step (algorithm call should not contain braces: \`${lit}\`) in '${filename}':`
98+
);
99+
console.dir(step);
100+
console.log();
101+
process.exitCode = 1;
102+
}
103+
}
104+
75105
const trimmedInnerLine = step.replace(/\s+/g, " ");
76106
if (
77107
trimmedInnerLine.match(

spec/Section 3 -- Type System.md

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ A GraphQL schema may describe that a field represents a list of another type;
329329
the `List` type is provided for this reason, and wraps another type.
330330

331331
Similarly, the `Non-Null` type wraps another type, and denotes that the
332-
resulting value will never be {null} (and that a _field error_ cannot result in
333-
a {null} value).
332+
resulting value will never be {null} (and that an _execution error_ cannot
333+
result in a {null} value).
334334

335335
These two types are referred to as "wrapping types"; non-wrapping types are
336336
referred to as "named types". A wrapping type has an underlying named type,
@@ -351,7 +351,7 @@ IsInputType(type):
351351

352352
- If {type} is a List type or Non-Null type:
353353
- Let {unwrappedType} be the unwrapped type of {type}.
354-
- Return IsInputType({unwrappedType}).
354+
- Return {IsInputType(unwrappedType)}.
355355
- If {type} is a Scalar, Enum, or Input Object type:
356356
- Return {true}.
357357
- Return {false}.
@@ -360,7 +360,7 @@ IsOutputType(type):
360360

361361
- If {type} is a List type or Non-Null type:
362362
- Let {unwrappedType} be the unwrapped type of {type}.
363-
- Return IsOutputType({unwrappedType}).
363+
- Return {IsOutputType(unwrappedType)}.
364364
- If {type} is a Scalar, Object, Interface, Union, or Enum type:
365365
- Return {true}.
366366
- Return {false}.
@@ -461,14 +461,14 @@ more guidance.
461461

462462
A GraphQL service, when preparing a field of a given scalar type, must uphold
463463
the contract the scalar type describes, either by coercing the value or
464-
producing a _field error_ if a value cannot be coerced or if coercion may result
465-
in data loss.
464+
producing an _execution error_ if a value cannot be coerced or if coercion may
465+
result in data loss.
466466

467467
A GraphQL service may decide to allow coercing different internal types to the
468468
expected return type. For example when coercing a field of type {Int} a boolean
469469
{true} value may produce {1} or a string value {"123"} may be parsed as base-10
470470
{123}. However if internal type coercion cannot be reasonably performed without
471-
losing information, then it must raise a _field error_.
471+
losing information, then it must raise an _execution error_.
472472

473473
Since this coercion behavior is not observable to clients of the GraphQL
474474
service, the precise rules of coercion are left to the implementation. The only
@@ -513,15 +513,15 @@ Fields returning the type {Int} expect to encounter 32-bit integer internal
513513
values.
514514

515515
GraphQL services may coerce non-integer internal values to integers when
516-
reasonable without losing information, otherwise they must raise a _field
516+
reasonable without losing information, otherwise they must raise an _execution
517517
error_. Examples of this may include returning `1` for the floating-point number
518518
`1.0`, or returning `123` for the string `"123"`. In scenarios where coercion
519-
may lose data, raising a field error is more appropriate. For example, a
520-
floating-point number `1.2` should raise a field error instead of being
519+
may lose data, raising an execution error is more appropriate. For example, a
520+
floating-point number `1.2` should raise an execution error instead of being
521521
truncated to `1`.
522522

523523
If the integer internal value represents a value less than -2<sup>31</sup> or
524-
greater than or equal to 2<sup>31</sup>, a _field error_ should be raised.
524+
greater than or equal to 2<sup>31</sup>, an _execution error_ should be raised.
525525

526526
**Input Coercion**
527527

@@ -548,12 +548,12 @@ Fields returning the type {Float} expect to encounter double-precision
548548
floating-point internal values.
549549

550550
GraphQL services may coerce non-floating-point internal values to {Float} when
551-
reasonable without losing information, otherwise they must raise a _field
551+
reasonable without losing information, otherwise they must raise an _execution
552552
error_. Examples of this may include returning `1.0` for the integer number `1`,
553553
or `123.0` for the string `"123"`.
554554

555555
Non-finite floating-point internal values ({NaN} and {Infinity}) cannot be
556-
coerced to {Float} and must raise a _field error_.
556+
coerced to {Float} and must raise an _execution error_.
557557

558558
**Input Coercion**
559559

@@ -579,9 +579,9 @@ that representation must be used to serialize this type.
579579
Fields returning the type {String} expect to encounter Unicode string values.
580580

581581
GraphQL services may coerce non-string raw values to {String} when reasonable
582-
without losing information, otherwise they must raise a _field error_. Examples
583-
of this may include returning the string `"true"` for a boolean true value, or
584-
the string `"1"` for the integer `1`.
582+
without losing information, otherwise they must raise an _execution error_.
583+
Examples of this may include returning the string `"true"` for a boolean true
584+
value, or the string `"1"` for the integer `1`.
585585

586586
**Input Coercion**
587587

@@ -600,8 +600,8 @@ representation of the integers `1` and `0`.
600600
Fields returning the type {Boolean} expect to encounter boolean internal values.
601601

602602
GraphQL services may coerce non-boolean raw values to {Boolean} when reasonable
603-
without losing information, otherwise they must raise a _field error_. Examples
604-
of this may include returning `true` for non-zero numbers.
603+
without losing information, otherwise they must raise an _execution error_.
604+
Examples of this may include returning `true` for non-zero numbers.
605605

606606
**Input Coercion**
607607

@@ -623,7 +623,7 @@ large 128-bit random numbers, to base64 encoded values, or string values of a
623623
format like [GUID](https://en.wikipedia.org/wiki/Globally_unique_identifier).
624624

625625
GraphQL services should coerce as appropriate given the ID formats they expect.
626-
When coercion is not possible they must raise a _field error_.
626+
When coercion is not possible they must raise an _execution error_.
627627

628628
**Input Coercion**
629629

@@ -1492,7 +1492,7 @@ enum Direction {
14921492
**Result Coercion**
14931493

14941494
GraphQL services must return one of the defined set of possible values. If a
1495-
reasonable coercion is not possible they must raise a _field error_.
1495+
reasonable coercion is not possible they must raise an _execution error_.
14961496

14971497
**Input Coercion**
14981498

@@ -1654,10 +1654,10 @@ is constructed with the following rules:
16541654

16551655
- If a variable is provided for an input object field, the runtime value of that
16561656
variable must be used. If the runtime value is {null} and the field type is
1657-
non-null, a _field error_ must be raised. If no runtime value is provided, the
1658-
variable definition's default value should be used. If the variable definition
1659-
does not provide a default value, the input object field definition's default
1660-
value should be used.
1657+
non-null, an _execution error_ must be raised. If no runtime value is
1658+
provided, the variable definition's default value should be used. If the
1659+
variable definition does not provide a default value, the input object field
1660+
definition's default value should be used.
16611661

16621662
Following are examples of input coercion for an input object type with a
16631663
`String` field `a` and a required (non-null) `Int!` field `b`:
@@ -1742,19 +1742,19 @@ brackets like this: `pets: [Pet]`. Nesting lists is allowed: `matrix: [[Int]]`.
17421742

17431743
GraphQL services must return an ordered list as the result of a list type. Each
17441744
item in the list must be the result of a result coercion of the item type. If a
1745-
reasonable coercion is not possible it must raise a _field error_. In
1745+
reasonable coercion is not possible it must raise an _execution error_. In
17461746
particular, if a non-list is returned, the coercion should fail, as this
17471747
indicates a mismatch in expectations between the type system and the
17481748
implementation.
17491749

17501750
If a list's item type is nullable, then errors occurring during preparation or
17511751
coercion of an individual item in the list must result in a the value {null} at
1752-
that position in the list along with a _field error_ added to the response. If a
1753-
list's item type is non-null, a field error occurring at an individual item in
1754-
the list must result in a field error for the entire list.
1752+
that position in the list along with an _execution error_ added to the response.
1753+
If a list's item type is non-null, an execution error occurring at an individual
1754+
item in the list must result in an execution error for the entire list.
17551755

1756-
Note: See [Handling Field Errors](#sec-Handling-Field-Errors) for more about
1757-
this behavior.
1756+
Note: See [Handling Execution Errors](#sec-Handling-Execution-Errors) for more
1757+
about this behavior.
17581758

17591759
**Input Coercion**
17601760

@@ -1812,12 +1812,13 @@ always optional and non-null types are always required.
18121812
In all of the above result coercions, {null} was considered a valid value. To
18131813
coerce the result of a Non-Null type, the coercion of the wrapped type should be
18141814
performed. If that result was not {null}, then the result of coercing the
1815-
Non-Null type is that result. If that result was {null}, then a _field error_
1816-
must be raised.
1815+
Non-Null type is that result. If that result was {null}, then an _execution
1816+
error_ must be raised.
18171817

1818-
Note: When a _field error_ is raised on a non-null value, the error propagates
1819-
to the parent field. For more information on this process, see
1820-
[Errors and Non-Null Fields](#sec-Executing-Selection-Sets.Errors-and-Non-Null-Fields)
1818+
Note: When an _execution error_ is raised on a non-null _response position_, the
1819+
error propagates to the parent _response position_. For more information on this
1820+
process, see
1821+
[Errors and Non-Null Types](#sec-Executing-Selection-Sets.Errors-and-Non-Null-Types)
18211822
within the Execution section.
18221823

18231824
**Input Coercion**

spec/Section 5 -- Validation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2010,4 +2010,4 @@ query booleanArgQueryWithDefault($booleanArg: Boolean = true) {
20102010
```
20112011

20122012
Note: The value {null} could still be provided to such a variable at runtime. A
2013-
non-null argument must raise a _field error_ if provided a {null} value.
2013+
non-null argument must raise an _execution error_ if provided a {null} value.

0 commit comments

Comments
 (0)