Mirror: The spec-compliant minimum of client-side GraphQL.

hotfix: Fix empty string matching being too eager

Changed files
+31 -2
.changeset
src
+5
.changeset/strange-crabs-love.md
··· 1 + --- 2 + '@0no-co/graphql.web': patch 3 + --- 4 + 5 + Fix empty string matches being too eager, e.g. `"", ""`
+24
src/__tests__/parser.test.ts
··· 490 490 value: 'x', 491 491 block: false, 492 492 }); 493 + 494 + expect(parseValue('"" ""')).toEqual({ 495 + kind: Kind.STRING, 496 + value: '', 497 + block: false, 498 + }); 499 + 500 + expect(parseValue('" \\" " ""')).toEqual({ 501 + kind: Kind.STRING, 502 + value: ' " ', 503 + block: false, 504 + }); 493 505 }); 494 506 495 507 it('parses objects', () => { ··· 570 582 expect(parseValue('"""x""" """x"""')).toEqual({ 571 583 kind: Kind.STRING, 572 584 value: 'x', 585 + block: true, 586 + }); 587 + 588 + expect(parseValue('"""""" """"""')).toEqual({ 589 + kind: Kind.STRING, 590 + value: '', 591 + block: true, 592 + }); 593 + 594 + expect(parseValue('""" \\""" """ """"""')).toEqual({ 595 + kind: Kind.STRING, 596 + value: ' """ ', 573 597 block: true, 574 598 }); 575 599 });
+2 -2
src/parser.ts
··· 86 86 const floatPartRe = /(?:\.\d+)?[eE][+-]?\d+|\.\d+/y; 87 87 88 88 const complexStringRe = /\\/g; 89 - const blockStringRe = /"""(?:[\s\S]*?[^\\])?"""/y; 90 - const stringRe = /"(?:[^\r\n]*?[^\\])?"/y; 89 + const blockStringRe = /"""(?:"""|(?:[\s\S]*?[^\\])""")/y; 90 + const stringRe = /"(?:"|[^\r\n]*?[^\\]")/y; 91 91 92 92 function value(constant: true): ast.ConstValueNode; 93 93 function value(constant: boolean): ast.ValueNode;