@prisma/orm-framework 8.0.0-rc.17-dev.18 → 8.0.0-rc.17-dev.20

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.
Files changed (92) hide show
  1. package/dist/{authoring-Bk5x6Kvi.mjs → authoring-Bv-ExMUC.mjs} +2 -2
  2. package/dist/authoring-Bv-ExMUC.mjs.map +1 -0
  3. package/dist/{authoring-CiZ755jw.d.mts → authoring-Cdm02TLT.d.mts} +2 -2
  4. package/dist/{authoring-CiZ755jw.d.mts.map → authoring-Cdm02TLT.d.mts.map} +1 -1
  5. package/dist/{binder-C7GnHWyT-_H6i-B7e.d.mts → binder-BUBLuGg4-CQbIZyym.d.mts} +7 -7
  6. package/dist/{binder-C7GnHWyT-_H6i-B7e.d.mts.map → binder-BUBLuGg4-CQbIZyym.d.mts.map} +1 -1
  7. package/dist/{codec-p8FrxU53.mjs → codec-B-7ArtWI.mjs} +2 -2
  8. package/dist/{codec-p8FrxU53.mjs.map → codec-B-7ArtWI.mjs.map} +1 -1
  9. package/dist/components.d.mts +5 -5
  10. package/dist/components.mjs +5 -5
  11. package/dist/components__authoring.d.mts +3 -3
  12. package/dist/components__authoring.mjs +3 -3
  13. package/dist/components__codec.mjs +1 -1
  14. package/dist/components__control.d.mts +3 -3
  15. package/dist/components__control.mjs +2 -2
  16. package/dist/{config-types-B0n_v8BF.d.mts → config-types-DDmOiupw.d.mts} +4 -4
  17. package/dist/{config-types-B0n_v8BF.d.mts.map → config-types-DDmOiupw.d.mts.map} +1 -1
  18. package/dist/config.d.mts +1 -1
  19. package/dist/config__config-types.d.mts +1 -1
  20. package/dist/contract-authoring.d.mts +1 -1
  21. package/dist/contract-authoring.mjs +2 -2
  22. package/dist/{control-C4Q85sT5-CIjVNitX.mjs → control-C4Q85sT5-Dv75I30R.mjs} +2 -2
  23. package/dist/{control-C4Q85sT5-CIjVNitX.mjs.map → control-C4Q85sT5-Dv75I30R.mjs.map} +1 -1
  24. package/dist/{control-DhWsAbYJ-D9eWSlYE.d.mts → control-DhWsAbYJ-CrtxR4UW.d.mts} +2 -2
  25. package/dist/{control-DhWsAbYJ-D9eWSlYE.d.mts.map → control-DhWsAbYJ-CrtxR4UW.d.mts.map} +1 -1
  26. package/dist/{control-Bh3RtVrv.d.mts → control-DsRyU-u2.d.mts} +3 -3
  27. package/dist/{control-Bh3RtVrv.d.mts.map → control-DsRyU-u2.d.mts.map} +1 -1
  28. package/dist/control-JlpGbz6x.d.mts +1 -0
  29. package/dist/{control-COaCVAZw.mjs → control-c9xjy4Jm.mjs} +2 -2
  30. package/dist/{control-COaCVAZw.mjs.map → control-c9xjy4Jm.mjs.map} +1 -1
  31. package/dist/{declarations-DosoNVo9-Bnoie4Sr.mjs → declarations-CTFzoo9j-BaCuW9E2.mjs} +109 -7
  32. package/dist/declarations-CTFzoo9j-BaCuW9E2.mjs.map +1 -0
  33. package/dist/{dist-DtT9I2iL.mjs → dist-BHoPlvHD.mjs} +7 -3
  34. package/dist/dist-BHoPlvHD.mjs.map +1 -0
  35. package/dist/errors.d.mts +4 -4
  36. package/dist/errors.mjs +3 -3
  37. package/dist/errors__control.d.mts +2 -2
  38. package/dist/errors__control.mjs +1 -1
  39. package/dist/errors__execution.d.mts +1 -1
  40. package/dist/errors__execution.mjs +1 -1
  41. package/dist/errors__migration.d.mts +1 -1
  42. package/dist/errors__migration.mjs +1 -1
  43. package/dist/{execution-B6GZC7hD.mjs → execution-C19mSmeN.mjs} +2 -2
  44. package/dist/{execution-B6GZC7hD.mjs.map → execution-C19mSmeN.mjs.map} +1 -1
  45. package/dist/{execution-B82y8eTq.d.mts → execution-CodDd-o0.d.mts} +3 -3
  46. package/dist/{execution-B82y8eTq.d.mts.map → execution-CodDd-o0.d.mts.map} +1 -1
  47. package/dist/{index-DeSumOoq.d.mts → index-wEX7G1Bv.d.mts} +4 -2
  48. package/dist/{index-DeSumOoq.d.mts.map → index-wEX7G1Bv.d.mts.map} +1 -1
  49. package/dist/{migration-BMYBXx-x.mjs → migration-BBoKodRM.mjs} +2 -2
  50. package/dist/{migration-BMYBXx-x.mjs.map → migration-BBoKodRM.mjs.map} +1 -1
  51. package/dist/{migration-BRSTbjHJ.d.mts → migration-IPciO0V7.d.mts} +2 -2
  52. package/dist/{migration-BRSTbjHJ.d.mts.map → migration-IPciO0V7.d.mts.map} +1 -1
  53. package/dist/{parse-Dz0FUoAQ-CflUTYu0.d.mts → parse-By_H285C-2bZhTomA.d.mts} +39 -12
  54. package/dist/{parse-Dz0FUoAQ-CflUTYu0.d.mts.map → parse-By_H285C-2bZhTomA.d.mts.map} +1 -1
  55. package/dist/{parse-CKPyOsa_-k7l8eoV7.mjs → parse-pRqRBDoL-BFDjYuLU.mjs} +89 -11
  56. package/dist/parse-pRqRBDoL-BFDjYuLU.mjs.map +1 -0
  57. package/dist/psl-parser.d.mts +6 -6
  58. package/dist/psl-parser.mjs +45 -5
  59. package/dist/psl-parser.mjs.map +1 -1
  60. package/dist/psl-parser__format.d.mts +1 -1
  61. package/dist/psl-parser__format.mjs +34 -19
  62. package/dist/psl-parser__format.mjs.map +1 -1
  63. package/dist/psl-parser__interpret.d.mts +4 -4
  64. package/dist/psl-parser__interpret.mjs +3 -3
  65. package/dist/psl-parser__interpret.mjs.map +1 -1
  66. package/dist/psl-parser__syntax.d.mts +3 -3
  67. package/dist/psl-parser__syntax.mjs +3 -43
  68. package/dist/psl-parser__tokenizer.d.mts +1 -1
  69. package/dist/psl-parser__tokenizer.mjs +1 -1
  70. package/dist/psl-printer.d.mts +1 -1
  71. package/dist/psl-printer.mjs +1 -1
  72. package/dist/{temporal-presets-CjxLjyl8-DhMFaNE2.mjs → temporal-presets-DEyPX8qQ-Bz4DdZ8v.mjs} +43 -3
  73. package/dist/temporal-presets-DEyPX8qQ-Bz4DdZ8v.mjs.map +1 -0
  74. package/dist/{tokenizer-BMz7z2KR-J0yZ4im3.mjs → tokenizer-C-GTKKjR-B1vOzJy0.mjs} +5 -4
  75. package/dist/tokenizer-C-GTKKjR-B1vOzJy0.mjs.map +1 -0
  76. package/dist/{tokenizer-DW30uwhx-BHsWTwYk.d.mts → tokenizer-i8RaVWVa-7fRwlCPP.d.mts} +3 -3
  77. package/dist/tokenizer-i8RaVWVa-7fRwlCPP.d.mts.map +1 -0
  78. package/dist/ts-render.d.mts +2 -2
  79. package/dist/ts-render.mjs +2 -2
  80. package/dist/{written-value-DdEQAH_R-yhLbzRP4.d.mts → written-value--KnOpj99-DByhg5hX.d.mts} +14 -3
  81. package/dist/written-value--KnOpj99-DByhg5hX.d.mts.map +1 -0
  82. package/package.json +15 -15
  83. package/dist/authoring-Bk5x6Kvi.mjs.map +0 -1
  84. package/dist/control-CXCnsj07.d.mts +0 -1
  85. package/dist/declarations-DosoNVo9-Bnoie4Sr.mjs.map +0 -1
  86. package/dist/dist-DtT9I2iL.mjs.map +0 -1
  87. package/dist/parse-CKPyOsa_-k7l8eoV7.mjs.map +0 -1
  88. package/dist/psl-parser__syntax.mjs.map +0 -1
  89. package/dist/temporal-presets-CjxLjyl8-DhMFaNE2.mjs.map +0 -1
  90. package/dist/tokenizer-BMz7z2KR-J0yZ4im3.mjs.map +0 -1
  91. package/dist/tokenizer-DW30uwhx-BHsWTwYk.d.mts.map +0 -1
  92. package/dist/written-value-DdEQAH_R-yhLbzRP4.d.mts.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { t as InternalError } from "./internal-error-ChGYPVpq-DhUD05u0.mjs";
2
2
  import { r as UNSPECIFIED_PSL_NAMESPACE_ID } from "./psl-ast-CyvE6CR-.mjs";
3
- import { r as isTerminatedStringLiteral, t as Tokenizer } from "./tokenizer-BMz7z2KR-J0yZ4im3.mjs";
3
+ import { r as isTerminatedStringLiteral, t as Tokenizer } from "./tokenizer-C-GTKKjR-B1vOzJy0.mjs";
4
4
  import { a as createSyntaxTree } from "./ast-helpers-CzydMPdh-Mi0SrZRa.mjs";
5
- import { o as DocumentAst } from "./declarations-DosoNVo9-Bnoie4Sr.mjs";
6
- //#region ../../../1-framework/2-authoring/psl-parser/dist/parse-CKPyOsa_.mjs
5
+ import { o as DocumentAst } from "./declarations-CTFzoo9j-BaCuW9E2.mjs";
6
+ //#region ../../../1-framework/2-authoring/psl-parser/dist/parse-pRqRBDoL.mjs
7
7
  const CARRIAGE_RETURN = 13;
8
8
  const LINE_FEED = 10;
9
9
  var SourceFile = class {
@@ -556,14 +556,34 @@ function parseAttributeArgList(cursor) {
556
556
  parseParenArgs(cursor);
557
557
  return cursor.finishNode();
558
558
  }
559
+ const LIST_CLOSERS = {
560
+ AttributeArgList: "RParen",
561
+ FunctionCall: "RParen",
562
+ ArrayLiteral: "RBracket",
563
+ ObjectLiteralExpr: "RBrace"
564
+ };
565
+ function isUnclosed(node) {
566
+ const closer = LIST_CLOSERS[node.kind];
567
+ if (closer === void 0) return node.children.some((child) => child.type === "node" && isUnclosed(child));
568
+ const last = node.children.at(-1);
569
+ return last?.type !== "token" || last.kind !== closer;
570
+ }
571
+ function consumeLeftover(cursor, code, place, diagnosticsBefore) {
572
+ const kind = cursor.peekKind();
573
+ if (kind === "Eof" || kind === "RBrace" || cursor.newlineBefore()) return false;
574
+ if (cursor.diagnostics.length === diagnosticsBefore) cursor.diagnostic(code, `Unexpected "${cursor.peekToken().text}" in ${place}`, cursor.mark());
575
+ cursor.recoverToSyncPoint();
576
+ return true;
577
+ }
559
578
  function parseAttribute(cursor) {
560
579
  const isBlockAttribute = cursor.peekKind() === "DoubleAt";
561
580
  const attributeMark = cursor.mark();
581
+ const diagnosticsBefore = cursor.diagnostics.length;
562
582
  cursor.startNode(isBlockAttribute ? "ModelAttribute" : "FieldAttribute");
563
583
  cursor.bump();
564
584
  if (cursor.peekKind() === "Ident") parseQualifiedName(cursor);
565
585
  else cursor.diagnostic("PSL_INVALID_ATTRIBUTE_SYNTAX", "Attribute name expected", attributeMark);
566
- if (cursor.peekKind() === "LParen") parseAttributeArgList(cursor);
586
+ if (cursor.peekKind() === "LParen" && isUnclosed(parseAttributeArgList(cursor))) consumeLeftover(cursor, "PSL_INVALID_ATTRIBUTE_SYNTAX", "attribute arguments", diagnosticsBefore);
567
587
  return cursor.finishNode();
568
588
  }
569
589
  /**
@@ -581,7 +601,11 @@ function parseTypeAnnotation(cursor, memberCode) {
581
601
  cursor.startNode("TypeAnnotation");
582
602
  if (cursor.peekKind() === "Ident") {
583
603
  parseQualifiedName(cursor);
584
- if (cursor.peekKind() === "LParen") parseAttributeArgList(cursor);
604
+ const diagnosticsBefore = cursor.diagnostics.length;
605
+ if (cursor.peekKind() === "LParen" && isUnclosed(parseAttributeArgList(cursor)) && consumeLeftover(cursor, memberCode, "type arguments", diagnosticsBefore)) {
606
+ cursor.finishNode();
607
+ return;
608
+ }
585
609
  }
586
610
  const hasLeadingQuestion = cursor.peekKind() === "Question";
587
611
  if (hasLeadingQuestion) cursor.bump();
@@ -626,6 +650,14 @@ const RESERVED_BLOCK_KEYWORDS = /* @__PURE__ */ new Set([
626
650
  "type",
627
651
  "types"
628
652
  ]);
653
+ const MIXIN_KEYWORD = "mixin";
654
+ const KEYWORDS_WITHOUT_MIXINS = /* @__PURE__ */ new Set(["namespace", "types"]);
655
+ function isMixinHeaderAhead(cursor) {
656
+ return cursor.peekKind() === "Ident" && cursor.peekKind(1) === "Ident" && cursor.peekToken(1).text === MIXIN_KEYWORD;
657
+ }
658
+ function mixinWithoutBlockKeywordMessage(name) {
659
+ return `A mixin starts with the keyword of the block it is for, for example "model ${MIXIN_KEYWORD} ${name ?? "Name"}"`;
660
+ }
629
661
  function keywordIs(cursor, keyword) {
630
662
  return cursor.peekKind() === "Ident" && cursor.peekToken().text === keyword;
631
663
  }
@@ -636,6 +668,10 @@ function keywordIs(cursor, keyword) {
636
668
  * appends raw tokens to the open parent instead of returning a child node.
637
669
  */
638
670
  function parseDeclaration(cursor, insideNamespace, options) {
671
+ if (isMixinHeaderAhead(cursor)) {
672
+ parseMixinDeclaration(cursor, options);
673
+ return;
674
+ }
639
675
  const name = cursor.peekKind(1) === "Ident" ? cursor.peekToken(1).text : "";
640
676
  if (insideNamespace && keywordIs(cursor, "namespace")) cursor.diagnostic("PSL_INVALID_NAMESPACE_BLOCK", `Recursive "namespace ${name}" block is not allowed; namespace blocks may not nest`, cursor.mark());
641
677
  else if (insideNamespace && keywordIs(cursor, "types")) cursor.diagnostic("PSL_INVALID_NAMESPACE_BLOCK", "`types` blocks must be declared at the document top level, not inside a namespace block", cursor.mark());
@@ -663,6 +699,31 @@ function parseModel(cursor) {
663
699
  if (!keywordIs(cursor, "model")) return void 0;
664
700
  return parseBlock(cursor, "ModelDeclaration", true, parseModelMember);
665
701
  }
702
+ function parseMixinDeclaration(cursor, options) {
703
+ const keyword = cursor.peekToken().text;
704
+ const keywordMark = cursor.mark();
705
+ const mixinMark = cursor.mark(1);
706
+ cursor.startNode("MixinDeclaration");
707
+ cursor.bump();
708
+ cursor.bump();
709
+ const hasName = cursor.peekKind() === "Ident" && (!cursor.newlineBefore() || cursor.peekKind(1) === "LBrace");
710
+ const name = hasName ? cursor.peekToken().text : void 0;
711
+ if (hasName) parseIdentifier(cursor);
712
+ const hasBody = cursor.peekKind() === "LBrace";
713
+ if (KEYWORDS_WITHOUT_MIXINS.has(keyword)) cursor.diagnostic("PSL_INVALID_DECLARATION", `A mixin cannot be declared for "${keyword}"`, keywordMark);
714
+ else if (keyword === MIXIN_KEYWORD) cursor.diagnostic("PSL_INVALID_DECLARATION", mixinWithoutBlockKeywordMessage(name), keywordMark);
715
+ else if (!hasName) cursor.diagnostic("PSL_INVALID_DECLARATION", `Expected a mixin name after "${MIXIN_KEYWORD}"`, mixinMark);
716
+ else if (!hasBody) cursor.diagnostic("PSL_INVALID_DECLARATION", `Expected "{" to open the "${keyword} ${MIXIN_KEYWORD}" block`, cursor.markAfterLastToken());
717
+ if (hasBody) parseBlockBody(cursor, mixinMemberParser(keyword, options));
718
+ else cursor.recoverToSyncPoint();
719
+ return cursor.finishNode();
720
+ }
721
+ function mixinMemberParser(keyword, options) {
722
+ if (keyword === "namespace") return (inner) => parseDeclaration(inner, true, options);
723
+ if (keyword === "types") return parseNamedTypeMember;
724
+ if (keyword === "model" || keyword === "type") return parseModelMember;
725
+ return genericBlockMemberParser(keyword, options);
726
+ }
666
727
  /**
667
728
  * Excluding the reserved keywords keeps a malformed reserved block (e.g. `model
668
729
  * {` with no name) routed to its dedicated parser. The generic keyword set is
@@ -674,12 +735,14 @@ function parseGenericBlock(cursor, options) {
674
735
  const keyword = cursor.peekToken().text;
675
736
  if (RESERVED_BLOCK_KEYWORDS.has(keyword)) return void 0;
676
737
  const hasName = cursor.peekKind(1) === "Ident" && cursor.peekKind(2) === "LBrace";
738
+ const isMixinKeyword = keyword === MIXIN_KEYWORD;
739
+ if (isMixinKeyword) cursor.diagnostic("PSL_INVALID_DECLARATION", mixinWithoutBlockKeywordMessage(cursor.peekKind(1) === "Ident" && !cursor.newlineBefore(1) ? cursor.peekToken(1).text : void 0), cursor.mark());
677
740
  cursor.startNode("GenericBlockDeclaration");
678
741
  cursor.bump();
679
742
  if (hasName) parseIdentifier(cursor);
680
743
  if (cursor.peekKind() === "LBrace") parseBlockBody(cursor, genericBlockMemberParser(keyword, options));
681
744
  else {
682
- cursor.diagnostic("PSL_INVALID_DECLARATION", `Expected "{" to open the "${keyword}" block`, cursor.markAfterLastToken());
745
+ if (!isMixinKeyword) cursor.diagnostic("PSL_INVALID_DECLARATION", `Expected "{" to open the "${keyword}" block`, cursor.markAfterLastToken());
683
746
  cursor.recoverToSyncPoint();
684
747
  }
685
748
  return cursor.finishNode();
@@ -724,8 +787,20 @@ function parseBlockAttribute(cursor) {
724
787
  if (cursor.peekKind() !== "DoubleAt") return void 0;
725
788
  return parseAttribute(cursor);
726
789
  }
790
+ function parseMixinInclusion(cursor, memberCode) {
791
+ if (cursor.peekKind() !== "Plus") return void 0;
792
+ const plusMark = cursor.mark();
793
+ cursor.startNode("MixinInclusion");
794
+ cursor.bump();
795
+ if (cursor.peekKind() === "Ident" && !cursor.newlineBefore()) parseQualifiedName(cursor);
796
+ else {
797
+ cursor.diagnostic(memberCode, "Expected a mixin name after \"+\"", plusMark);
798
+ cursor.recoverToSyncPoint();
799
+ }
800
+ return cursor.finishNode();
801
+ }
727
802
  function parseModelMember(cursor) {
728
- if (!(parseBlockAttribute(cursor) ?? parseField(cursor))) invalidMember(cursor, "PSL_INVALID_MODEL_MEMBER", `Invalid model member declaration "${cursor.peekToken().text}"`);
803
+ if (!(parseMixinInclusion(cursor, "PSL_INVALID_MODEL_MEMBER") ?? parseBlockAttribute(cursor) ?? parseField(cursor))) invalidMember(cursor, "PSL_INVALID_MODEL_MEMBER", `Invalid model member declaration "${cursor.peekToken().text}"`);
729
804
  }
730
805
  function parseNamedTypeMember(cursor) {
731
806
  if (!parseNamedType(cursor)) invalidMember(cursor, "PSL_INVALID_TYPES_MEMBER", `Invalid types declaration "${cursor.peekToken().text}"`);
@@ -746,10 +821,10 @@ function genericBlockMemberParser(keyword, options) {
746
821
  * whether the attribute is valid for the block's kind.
747
822
  */
748
823
  function parseKeyValueMember(cursor) {
749
- if (!(parseBlockAttribute(cursor) ?? parseKeyValue(cursor))) invalidMember(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Invalid block entry");
824
+ if (!(parseMixinInclusion(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER") ?? parseBlockAttribute(cursor) ?? parseKeyValue(cursor))) invalidMember(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Invalid block entry");
750
825
  }
751
826
  function parseEnumMember(cursor) {
752
- if (!(parseBlockAttribute(cursor) ?? parseKeyValue(cursor, { memberAttributes: true }))) invalidMember(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Invalid block entry");
827
+ if (!(parseMixinInclusion(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER") ?? parseBlockAttribute(cursor) ?? parseKeyValue(cursor, { memberAttributes: true }))) invalidMember(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Invalid block entry");
753
828
  }
754
829
  function invalidMember(cursor, code, message) {
755
830
  cursor.diagnostic(code, message, cursor.mark());
@@ -791,7 +866,10 @@ function parseKeyValue(cursor, options = { memberAttributes: false }) {
791
866
  parseIdentifier(cursor);
792
867
  if (cursor.peekKind() === "Equals") {
793
868
  cursor.bump();
794
- if (!parseExpression(cursor)) cursor.diagnostic("PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Expected a value after \"=\"", cursor.mark());
869
+ const diagnosticsBefore = cursor.diagnostics.length;
870
+ const value = parseExpression(cursor);
871
+ if (!value) cursor.diagnostic("PSL_INVALID_EXTENSION_BLOCK_MEMBER", "Expected a value after \"=\"", cursor.mark());
872
+ if (!value || isUnclosed(value)) consumeLeftover(cursor, "PSL_INVALID_EXTENSION_BLOCK_MEMBER", "the entry value", diagnosticsBefore);
795
873
  }
796
874
  while (options.memberAttributes && cursor.peekKind() === "At") parseAttribute(cursor);
797
875
  return cursor.finishNode();
@@ -799,4 +877,4 @@ function parseKeyValue(cursor, options = { memberAttributes: false }) {
799
877
  //#endregion
800
878
  export { greenToken as a, greenNode as i, PslSources as n, parse as o, SourceFile as r, GreenNodeBuilder as t };
801
879
 
802
- //# sourceMappingURL=parse-CKPyOsa_-k7l8eoV7.mjs.map
880
+ //# sourceMappingURL=parse-pRqRBDoL-BFDjYuLU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-pRqRBDoL-BFDjYuLU.mjs","names":["#filename","#text","#lineStarts","#lineIndexAt","#lineStartAt","#lineEndAt","#sourcesByRoot","#stack","#tokenizer","#sourceFile","#diagnostics","#offset","#depth","#builder","#advance"],"sources":["../../../../1-framework/2-authoring/psl-parser/dist/parse-pRqRBDoL.mjs"],"sourcesContent":["import { r as isTerminatedStringLiteral, t as Tokenizer } from \"./tokenizer-C-GTKKjR.mjs\";\nimport { u as createSyntaxTree } from \"./ast-helpers-CzydMPdh.mjs\";\nimport { n as DocumentAst } from \"./declarations-CTFzoo9j.mjs\";\nimport { UNSPECIFIED_PSL_NAMESPACE_ID } from \"@internal/framework-components/psl-ast\";\nimport { InternalError } from \"@internal/utils/internal-error\";\n//#region src/source-file.ts\nconst CARRIAGE_RETURN = 13;\nconst LINE_FEED = 10;\nvar SourceFile = class {\n\t#filename;\n\t#text;\n\t#lineStarts;\n\tconstructor(filename, text) {\n\t\tthis.#filename = filename;\n\t\tthis.#text = text;\n\t\tconst lineStarts = [0];\n\t\tfor (let offset = 0; offset < text.length; offset++) if (text.charCodeAt(offset) === LINE_FEED) lineStarts.push(offset + 1);\n\t\tthis.#lineStarts = lineStarts;\n\t}\n\tget filename() {\n\t\treturn this.#filename;\n\t}\n\tget text() {\n\t\treturn this.#text;\n\t}\n\tget length() {\n\t\treturn this.#text.length;\n\t}\n\tget lineCount() {\n\t\treturn this.#lineStarts.length;\n\t}\n\tlineStartOffsets() {\n\t\treturn this.#lineStarts;\n\t}\n\tlineStartOffset(line) {\n\t\tif (line <= 0) return 0;\n\t\treturn this.#lineStarts[line] ?? this.#text.length;\n\t}\n\tlineEndOffset(line) {\n\t\tif (line < 0) return 0;\n\t\tconst nextLineStart = this.#lineStarts[line + 1];\n\t\tif (nextLineStart === void 0) return this.#text.length;\n\t\tconst lineFeedOffset = nextLineStart - 1;\n\t\tconst carriageReturnOffset = lineFeedOffset - 1;\n\t\treturn this.#text.charCodeAt(carriageReturnOffset) === CARRIAGE_RETURN ? carriageReturnOffset : lineFeedOffset;\n\t}\n\tpositionAt(offset) {\n\t\tconst clamped = clamp(offset, 0, this.#text.length);\n\t\tconst line = this.#lineIndexAt(clamped);\n\t\treturn {\n\t\t\tline,\n\t\t\tcharacter: clamped - this.#lineStartAt(line)\n\t\t};\n\t}\n\toffsetAt(position) {\n\t\tconst line = clamp(position.line, 0, this.#lineStarts.length - 1);\n\t\tconst lineStart = this.#lineStartAt(line);\n\t\tconst lineEnd = this.#lineEndAt(line);\n\t\treturn clamp(lineStart + position.character, lineStart, lineEnd);\n\t}\n\toffsetToPslPosition(offset) {\n\t\tconst position = this.positionAt(offset);\n\t\treturn {\n\t\t\toffset,\n\t\t\tline: position.line + 1,\n\t\t\tcolumn: position.character + 1\n\t\t};\n\t}\n\trangeToPslSpan(range) {\n\t\treturn {\n\t\t\tstart: this.offsetToPslPosition(this.offsetAt(range.start)),\n\t\t\tend: this.offsetToPslPosition(this.offsetAt(range.end))\n\t\t};\n\t}\n\tpslSpanToRange(span) {\n\t\treturn {\n\t\t\tstart: this.positionAt(span.start.offset),\n\t\t\tend: this.positionAt(span.end.offset)\n\t\t};\n\t}\n\t#lineStartAt(line) {\n\t\treturn this.#lineStarts[line] ?? 0;\n\t}\n\t#lineEndAt(line) {\n\t\treturn line + 1 < this.#lineStarts.length ? this.#lineStartAt(line + 1) - 1 : this.#text.length;\n\t}\n\t#lineIndexAt(offset) {\n\t\tconst lineStarts = this.#lineStarts;\n\t\tlet low = 0;\n\t\tlet high = lineStarts.length - 1;\n\t\twhile (low < high) {\n\t\t\tconst mid = low + high + 1 >>> 1;\n\t\t\tif ((lineStarts[mid] ?? 0) <= offset) low = mid;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\treturn low;\n\t}\n};\nvar PslSources = class PslSources {\n\t#sourcesByRoot = /* @__PURE__ */ new Map();\n\tconstructor(entries) {\n\t\tfor (const [root, sourceFile] of entries) this.#sourcesByRoot.set(root, sourceFile);\n\t}\n\t/**\n\t* A new registry uniting this one with `others` — e.g. the per-document\n\t* `PslSources` registries `parse()` returns for each member of a\n\t* multi-file schema, united into the one registry `buildSymbolTable` and\n\t* the interpreters expect.\n\t*/\n\tmerge(...others) {\n\t\treturn new PslSources([...this.#sourcesByRoot, ...others.flatMap((other) => [...other.#sourcesByRoot])]);\n\t}\n\tsourceFileNamed(filename) {\n\t\tlet match;\n\t\tfor (const sourceFile of this.#sourcesByRoot.values()) {\n\t\t\tif (sourceFile.filename !== filename) continue;\n\t\t\tif (match !== void 0 && match.text !== sourceFile.text) throw new InternalError(`Ambiguous PSL diagnostic filename \"${filename}\": registered sources have different text`);\n\t\t\tmatch = sourceFile;\n\t\t}\n\t\tif (match === void 0) throw new InternalError(`No SourceFile registered for PSL diagnostic filename \"${filename}\"`);\n\t\treturn match;\n\t}\n\tsourceFileFor(node) {\n\t\tconst root = node.root();\n\t\tconst sourceFile = this.#sourcesByRoot.get(root);\n\t\tif (sourceFile === void 0) throw new InternalError(\"No SourceFile registered for PSL syntax root\");\n\t\treturn sourceFile;\n\t}\n};\nfunction clamp(value, min, max) {\n\tif (value < min) return min;\n\tif (value > max) return max;\n\treturn value;\n}\n//#endregion\n//#region src/syntax/green.ts\nfunction greenToken(kind, text) {\n\treturn {\n\t\ttype: \"token\",\n\t\tkind,\n\t\ttext\n\t};\n}\nfunction greenNode(kind, children) {\n\tlet textLength = 0;\n\tfor (const child of children) textLength += child.type === \"token\" ? child.text.length : child.textLength;\n\treturn {\n\t\ttype: \"node\",\n\t\tkind,\n\t\tchildren,\n\t\ttextLength\n\t};\n}\n//#endregion\n//#region src/syntax/green-builder.ts\nvar GreenNodeBuilder = class {\n\t#stack = [];\n\tstartNode(kind) {\n\t\tthis.#stack.push({\n\t\t\tkind,\n\t\t\tchildren: []\n\t\t});\n\t}\n\ttoken(kind, text) {\n\t\tconst current = this.#stack.at(-1);\n\t\tif (!current) throw new InternalError(\"GreenNodeBuilder: token() called with no open node\");\n\t\tcurrent.children.push(greenToken(kind, text));\n\t}\n\tfinishNode() {\n\t\tconst completed = this.#stack.pop();\n\t\tif (!completed) throw new InternalError(\"GreenNodeBuilder: finishNode() called with no open node\");\n\t\tconst node = greenNode(completed.kind, completed.children);\n\t\tconst parent = this.#stack.at(-1);\n\t\tif (parent) parent.children.push(node);\n\t\treturn node;\n\t}\n};\n//#endregion\n//#region src/parse.ts\nconst TRIVIA_KINDS = /* @__PURE__ */ new Set([\n\t\"Whitespace\",\n\t\"Newline\",\n\t\"Comment\"\n]);\n/**\n* The fault-tolerant parser substrate the parse functions below drive. Trivia is flushed\n* into the enclosing open node, so every child node spans exactly its first\n* through last significant token.\n*/\nvar Cursor = class {\n\t#tokenizer;\n\t#sourceFile;\n\t#builder = new GreenNodeBuilder();\n\t#diagnostics = [];\n\t#offset = 0;\n\t#depth = 0;\n\tconstructor(filename, source) {\n\t\tthis.#tokenizer = new Tokenizer(source);\n\t\tthis.#sourceFile = new SourceFile(filename, source);\n\t}\n\tget diagnostics() {\n\t\treturn this.#diagnostics;\n\t}\n\tget sourceFile() {\n\t\treturn this.#sourceFile;\n\t}\n\tpeekKind(ahead = 0) {\n\t\treturn this.peekToken(ahead).kind;\n\t}\n\tpeekToken(ahead = 0) {\n\t\tlet rawIndex = 0;\n\t\tlet remaining = ahead;\n\t\tfor (;;) {\n\t\t\tconst token = this.#tokenizer.peek(rawIndex);\n\t\t\tif (token.kind === \"Eof\") return token;\n\t\t\tif (TRIVIA_KINDS.has(token.kind)) {\n\t\t\t\trawIndex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (remaining === 0) return token;\n\t\t\tremaining--;\n\t\t\trawIndex++;\n\t\t}\n\t}\n\tnewlineBefore(ahead = 0) {\n\t\tlet rawIndex = 0;\n\t\tlet remaining = ahead;\n\t\tlet newline = false;\n\t\tfor (;;) {\n\t\t\tconst token = this.#tokenizer.peek(rawIndex);\n\t\t\tif (token.kind === \"Eof\") return newline;\n\t\t\tif (TRIVIA_KINDS.has(token.kind)) {\n\t\t\t\tif (token.kind === \"Newline\") newline = true;\n\t\t\t\trawIndex++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (remaining === 0) return newline;\n\t\t\tremaining--;\n\t\t\tnewline = false;\n\t\t\trawIndex++;\n\t\t}\n\t}\n\t/** Span of the significant token `lookahead` positions ahead (`mark(0)` = the next). */\n\tmark(lookahead = 0) {\n\t\tlet rawIndex = 0;\n\t\tlet offset = this.#offset;\n\t\tlet remaining = lookahead;\n\t\tfor (;;) {\n\t\t\tconst token = this.#tokenizer.peek(rawIndex);\n\t\t\tif (token.kind === \"Eof\") return {\n\t\t\t\toffset,\n\t\t\t\tlength: token.text.length\n\t\t\t};\n\t\t\tif (!TRIVIA_KINDS.has(token.kind) && remaining === 0) return {\n\t\t\t\toffset,\n\t\t\t\tlength: token.text.length\n\t\t\t};\n\t\t\tif (!TRIVIA_KINDS.has(token.kind)) remaining--;\n\t\t\toffset += token.text.length;\n\t\t\trawIndex++;\n\t\t}\n\t}\n\t/**\n\t* Zero-width mark just past the last consumed significant token — anchors an\n\t* \"expected here\" diagnostic, e.g. the `{` missing after a declaration's name.\n\t*/\n\tmarkAfterLastToken() {\n\t\treturn {\n\t\t\toffset: this.#offset,\n\t\t\tlength: 0\n\t\t};\n\t}\n\tstartNode(kind) {\n\t\tif (this.#depth > 0) this.flushTrivia();\n\t\tthis.#builder.startNode(kind);\n\t\tthis.#depth++;\n\t}\n\tfinishNode() {\n\t\tthis.#depth--;\n\t\treturn this.#builder.finishNode();\n\t}\n\tbump() {\n\t\tthis.flushTrivia();\n\t\tconst token = this.#tokenizer.peek();\n\t\tif (token.kind === \"Eof\") return token;\n\t\tthis.#builder.token(token.kind, token.text);\n\t\tthis.#advance();\n\t\treturn token;\n\t}\n\trecoverToSyncPoint() {\n\t\tfor (;;) {\n\t\t\tconst token = this.#tokenizer.peek();\n\t\t\tif (token.kind === \"Eof\" || token.kind === \"Newline\" || token.kind === \"RBrace\") return;\n\t\t\tthis.#builder.token(token.kind, token.text);\n\t\t\tthis.#advance();\n\t\t}\n\t}\n\tflushTrivia() {\n\t\tfor (;;) {\n\t\t\tconst token = this.#tokenizer.peek();\n\t\t\tif (!TRIVIA_KINDS.has(token.kind)) return;\n\t\t\tthis.#builder.token(token.kind, token.text);\n\t\t\tthis.#advance();\n\t\t}\n\t}\n\tdiagnostic(code, message, mark) {\n\t\tconst start = mark.offset;\n\t\tconst end = start + mark.length;\n\t\tthis.#diagnostics.push({\n\t\t\tfilename: this.#sourceFile.filename,\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\trange: {\n\t\t\t\tstart: this.#sourceFile.positionAt(start),\n\t\t\t\tend: this.#sourceFile.positionAt(end)\n\t\t\t}\n\t\t});\n\t}\n\t#advance() {\n\t\tthis.#offset += this.#tokenizer.next().text.length;\n\t}\n};\nfunction parseIdentifier(cursor) {\n\tcursor.startNode(\"Identifier\");\n\tcursor.bump();\n\tcursor.finishNode();\n}\n/**\n* Returns `undefined` when the next significant token does not start a\n* recognised expression, leaving recovery to the caller.\n*/\nfunction parseExpression(cursor) {\n\treturn parseStringLiteralExpr(cursor) ?? parseNumberLiteralExpr(cursor) ?? parseArrayLiteral(cursor) ?? parseObjectLiteralExpr(cursor) ?? parseTaggedLiteral(cursor) ?? parseFunctionCall(cursor) ?? parsePathExpr(cursor) ?? parseBooleanLiteralExpr(cursor) ?? parseIdentifierExpr(cursor);\n}\n/** A string literal outside a tagged literal, where a backtick string is refused. */\nfunction parseStringLiteralExpr(cursor) {\n\tif (cursor.peekKind() !== \"StringLiteral\") return void 0;\n\tif (cursor.peekToken().text.startsWith(\"`\")) cursor.diagnostic(\"PSL_BACKTICK_STRING_REQUIRES_TAG\", \"A backtick string must follow a tag, as in tag`...`.\", cursor.mark());\n\treturn parseStringLiteral(cursor);\n}\nfunction parseStringLiteral(cursor) {\n\tconst stringMark = cursor.mark();\n\tconst text = cursor.peekToken().text;\n\tcursor.startNode(\"StringLiteralExpr\");\n\tcursor.bump();\n\tif (!isTerminatedStringLiteral(text)) cursor.diagnostic(\"PSL_UNTERMINATED_STRING\", \"Unterminated string literal\", stringMark);\n\treturn cursor.finishNode();\n}\nfunction parseNumberLiteralExpr(cursor) {\n\tif (cursor.peekKind() !== \"NumberLiteral\") return void 0;\n\tcursor.startNode(\"NumberLiteralExpr\");\n\tcursor.bump();\n\treturn cursor.finishNode();\n}\n/**\n* Parses a namespace-qualified name `[space ':']? Ident ('.' Ident)*`. The\n* caller guarantees a leading `Ident`.\n*\n* Parsing the whole chain up front lets a position decide\n* constructor-vs-reference by peeking exactly one token for `(`, with no scan of\n* the dotted chain's length.\n*/\nfunction parseQualifiedName(cursor) {\n\tcursor.startNode(\"QualifiedName\");\n\tparseIdentifier(cursor);\n\tparseQualifiedSegments(cursor, \"Colon\");\n\tparseQualifiedSegments(cursor, \"Dot\");\n\tcursor.finishNode();\n}\n/**\n* A well-formed name carries at most one colon space and one dot namespace, so\n* each separator past the first of its kind reports `PSL_INVALID_QUALIFIED_NAME`.\n* The separator is consumed regardless, keeping the lossless round-trip intact.\n*/\nfunction parseQualifiedSegments(cursor, separator) {\n\tlet seen = 0;\n\twhile (cursor.peekKind() === separator && !cursor.newlineBefore()) {\n\t\tseen++;\n\t\tconst separatorMark = cursor.mark();\n\t\tcursor.bump();\n\t\tif (seen > 1) cursor.diagnostic(\"PSL_INVALID_QUALIFIED_NAME\", \"Qualified name has too many segments\", separatorMark);\n\t\tif (cursor.peekKind() === \"Ident\" && !cursor.newlineBefore()) parseIdentifier(cursor);\n\t\telse reportMissingSegment(cursor);\n\t}\n}\nfunction reportMissingSegment(cursor) {\n\tcursor.diagnostic(\"PSL_INVALID_QUALIFIED_NAME\", \"Qualified name is missing a name after the separator\", cursor.markAfterLastToken());\n}\n/**\n* Whether the next tokens open a tagged literal: a bare `Ident` or a\n* namespace-qualified `Ident.Ident`, then a string. Trivia may sit anywhere\n* between them. Bounded like {@link isCallAhead}.\n*/\nfunction isTaggedLiteralAhead(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return false;\n\tif (cursor.peekKind(1) === \"StringLiteral\") return true;\n\treturn cursor.peekKind(1) === \"Dot\" && cursor.peekKind(2) === \"Ident\" && cursor.peekKind(3) === \"StringLiteral\";\n}\n/** Parses `` tag`body` ``, `tag\"body\"`, or `tag'body'`: a qualified name, then a string literal. */\nfunction parseTaggedLiteral(cursor) {\n\tif (!isTaggedLiteralAhead(cursor)) return void 0;\n\tcursor.startNode(\"TaggedLiteral\");\n\tparseQualifiedName(cursor);\n\tparseStringLiteral(cursor);\n\treturn cursor.finishNode();\n}\nfunction parseBooleanLiteralExpr(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tconst text = cursor.peekToken().text;\n\tif (text !== \"true\" && text !== \"false\") return void 0;\n\tcursor.startNode(\"BooleanLiteralExpr\");\n\tcursor.bump();\n\treturn cursor.finishNode();\n}\nfunction parseIdentifierExpr(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tcursor.startNode(\"Identifier\");\n\tcursor.bump();\n\treturn cursor.finishNode();\n}\nfunction parseArrayLiteral(cursor) {\n\tif (cursor.peekKind() !== \"LBracket\") return void 0;\n\tcursor.startNode(\"ArrayLiteral\");\n\tcursor.bump();\n\twhile (cursor.peekKind() !== \"RBracket\" && cursor.peekKind() !== \"Eof\") {\n\t\tif (!parseExpression(cursor)) break;\n\t\tif (cursor.peekKind() === \"Comma\") cursor.bump();\n\t\telse break;\n\t}\n\tif (cursor.peekKind() === \"RBracket\") cursor.bump();\n\treturn cursor.finishNode();\n}\nfunction parseObjectLiteralExpr(cursor) {\n\tif (cursor.peekKind() !== \"LBrace\") return void 0;\n\tconst braceMark = cursor.mark();\n\tcursor.startNode(\"ObjectLiteralExpr\");\n\tcursor.bump();\n\twhile (cursor.peekKind() !== \"RBrace\" && cursor.peekKind() !== \"Eof\") {\n\t\tparseObjectField(cursor);\n\t\tif (cursor.peekKind() === \"Comma\") cursor.bump();\n\t\telse if (cursor.peekKind() === \"Ident\") cursor.diagnostic(\"PSL_INVALID_OBJECT_LITERAL\", \"Expected \\\",\\\" between object-literal fields\", cursor.markAfterLastToken());\n\t\telse break;\n\t}\n\tif (cursor.peekKind() === \"RBrace\") cursor.bump();\n\telse cursor.diagnostic(\"PSL_INVALID_OBJECT_LITERAL\", \"Unterminated object literal\", braceMark);\n\treturn cursor.finishNode();\n}\nfunction parseObjectField(cursor) {\n\tcursor.startNode(\"ObjectField\");\n\tconst keyMark = cursor.mark();\n\tconst keyText = cursor.peekToken().text;\n\tif (cursor.peekKind() === \"Ident\") parseIdentifier(cursor);\n\telse if (cursor.peekKind() === \"StringLiteral\") parseStringLiteralExpr(cursor);\n\tif (cursor.peekKind() === \"Colon\") {\n\t\tcursor.bump();\n\t\tif (!parseExpression(cursor)) cursor.diagnostic(\"PSL_INVALID_OBJECT_LITERAL\", \"Expected a value after \\\":\\\"\", cursor.mark());\n\t} else {\n\t\tcursor.diagnostic(\"PSL_INVALID_OBJECT_LITERAL\", `Expected \":\" after \"${keyText}\"`, keyMark);\n\t\tif (!(cursor.peekKind() === \"Ident\" && cursor.peekKind(1) === \"Colon\")) parseExpression(cursor);\n\t}\n\treturn cursor.finishNode();\n}\n/**\n* The dotted chain `Ident ('.' Ident)*` at the cursor, which stays on one line. `length` counts its\n* significant tokens: 1 for `a`, 3 for `a.b`, 5 for `a.b.c`; 0 when no `Ident` is next.\n* `trailingDot` marks a chain that ends in a `.` with no name after it, as in `auth.`.\n*/\nfunction dottedChain(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return {\n\t\tlength: 0,\n\t\ttrailingDot: false\n\t};\n\tlet length = 1;\n\twhile (cursor.peekKind(length) === \"Dot\" && !cursor.newlineBefore(length)) {\n\t\tif (cursor.peekKind(length + 1) !== \"Ident\" || cursor.newlineBefore(length + 1)) return {\n\t\t\tlength,\n\t\t\ttrailingDot: true\n\t\t};\n\t\tlength += 2;\n\t}\n\treturn {\n\t\tlength,\n\t\ttrailingDot: false\n\t};\n}\n/**\n* Whether the next tokens open a call: a dotted chain followed by `(`, such as\n* `autoincrement(`, `temporal.updatedAt(` or `address.geo.lat(`. A dotted chain\n* with no `(` after it, like `a.b`, is a path, not a call.\n*/\nfunction isCallAhead(cursor) {\n\tconst chain = dottedChain(cursor);\n\treturn chain.length > 0 && !chain.trailingDot && cursor.peekKind(chain.length) === \"LParen\";\n}\n/**\n* Parses a function/constructor call — bare `autoincrement()` or dotted\n* `address.city(sort: Asc)`. A dotted callee is a `PathExpr`, the node the same\n* chain gets without the call, so `address.city` has one shape whether or not\n* it is called; a bare callee is a `QualifiedName`. Returns `undefined` unless\n* {@link isCallAhead} confirms a trailing `(`, so the `parseExpression` chain\n* falls through to the path, boolean and bare-identifier forms.\n*/\nfunction parseFunctionCall(cursor) {\n\tif (!isCallAhead(cursor)) return void 0;\n\tconst chain = dottedChain(cursor);\n\tcursor.startNode(\"FunctionCall\");\n\tif (chain.length > 1) parsePath(cursor, chain);\n\telse parseQualifiedName(cursor);\n\tif (cursor.peekKind() === \"LParen\") parseParenArgs(cursor);\n\treturn cursor.finishNode();\n}\n/**\n* Parses a member path `Ident ('.' Ident)+` that is neither a call nor the tag\n* of a tagged literal, such as `address.city` in `@@index([address.city])`. A\n* path that ends in a `.` keeps the dot and reports the missing name, as in\n* `auth.` while the member is still being typed.\n*/\nfunction parsePathExpr(cursor) {\n\tconst chain = dottedChain(cursor);\n\tif (chain.length < 3 && !chain.trailingDot) return void 0;\n\treturn parsePath(cursor, chain);\n}\nfunction parsePath(cursor, chain) {\n\tcursor.startNode(\"PathExpr\");\n\tparseIdentifier(cursor);\n\tfor (let consumed = 1; consumed < chain.length; consumed += 2) {\n\t\tcursor.bump();\n\t\tparseIdentifier(cursor);\n\t}\n\tif (chain.trailingDot) {\n\t\tcursor.bump();\n\t\treportMissingSegment(cursor);\n\t}\n\treturn cursor.finishNode();\n}\n/** Parses a parenthesised, comma-separated `AttributeArg` list into the currently open node. */\nfunction parseParenArgs(cursor) {\n\tcursor.bump();\n\twhile (cursor.peekKind() !== \"RParen\" && cursor.peekKind() !== \"Eof\") {\n\t\tparseAttributeArg(cursor);\n\t\tif (cursor.peekKind() === \"Comma\") cursor.bump();\n\t\telse break;\n\t}\n\tif (cursor.peekKind() === \"RParen\") cursor.bump();\n}\nfunction parseAttributeArg(cursor) {\n\tconst kind = cursor.peekKind();\n\tif (kind !== \"Ident\" && kind !== \"StringLiteral\" && kind !== \"NumberLiteral\" && kind !== \"LBracket\" && kind !== \"LBrace\") return;\n\tcursor.startNode(\"AttributeArg\");\n\tif (cursor.peekKind() === \"Ident\" && cursor.peekKind(1) === \"Colon\") {\n\t\tparseIdentifier(cursor);\n\t\tcursor.bump();\n\t}\n\tparseArgValue(cursor);\n\tcursor.finishNode();\n}\nfunction parseArgValue(cursor) {\n\tparseExpression(cursor);\n}\nfunction parseAttributeArgList(cursor) {\n\tcursor.startNode(\"AttributeArgList\");\n\tparseParenArgs(cursor);\n\treturn cursor.finishNode();\n}\nconst LIST_CLOSERS = {\n\tAttributeArgList: \"RParen\",\n\tFunctionCall: \"RParen\",\n\tArrayLiteral: \"RBracket\",\n\tObjectLiteralExpr: \"RBrace\"\n};\nfunction isUnclosed(node) {\n\tconst closer = LIST_CLOSERS[node.kind];\n\tif (closer === void 0) return node.children.some((child) => child.type === \"node\" && isUnclosed(child));\n\tconst last = node.children.at(-1);\n\treturn last?.type !== \"token\" || last.kind !== closer;\n}\nfunction consumeLeftover(cursor, code, place, diagnosticsBefore) {\n\tconst kind = cursor.peekKind();\n\tif (kind === \"Eof\" || kind === \"RBrace\" || cursor.newlineBefore()) return false;\n\tif (cursor.diagnostics.length === diagnosticsBefore) cursor.diagnostic(code, `Unexpected \"${cursor.peekToken().text}\" in ${place}`, cursor.mark());\n\tcursor.recoverToSyncPoint();\n\treturn true;\n}\nfunction parseAttribute(cursor) {\n\tconst isBlockAttribute = cursor.peekKind() === \"DoubleAt\";\n\tconst attributeMark = cursor.mark();\n\tconst diagnosticsBefore = cursor.diagnostics.length;\n\tcursor.startNode(isBlockAttribute ? \"ModelAttribute\" : \"FieldAttribute\");\n\tcursor.bump();\n\tif (cursor.peekKind() === \"Ident\") parseQualifiedName(cursor);\n\telse cursor.diagnostic(\"PSL_INVALID_ATTRIBUTE_SYNTAX\", \"Attribute name expected\", attributeMark);\n\tif (cursor.peekKind() === \"LParen\" && isUnclosed(parseAttributeArgList(cursor))) consumeLeftover(cursor, \"PSL_INVALID_ATTRIBUTE_SYNTAX\", \"attribute arguments\", diagnosticsBefore);\n\treturn cursor.finishNode();\n}\n/**\n* A type annotation: `QualifiedName (argList)? (?)? ([])? (?)?`, e.g.\n* `pgvector.Vector(1536)?[]?`. The two `?` positions are distinct axes: a `?`\n* before `[]` makes the list elements nullable; a `?` after `[]` makes the\n* list itself nullable. Without a `[]`, a single `?` is the field-level\n* optional (`Foo?`), so a second `?` (`Foo??`) is malformed. When the field\n* has no type, no node is emitted — a missing type is the absence of a\n* `TypeAnnotation`, not a zero-width one.\n*/\nfunction parseTypeAnnotation(cursor, memberCode) {\n\tconst kind = cursor.peekKind();\n\tif (kind !== \"Ident\" && kind !== \"LBracket\" && kind !== \"Question\") return;\n\tcursor.startNode(\"TypeAnnotation\");\n\tif (cursor.peekKind() === \"Ident\") {\n\t\tparseQualifiedName(cursor);\n\t\tconst diagnosticsBefore = cursor.diagnostics.length;\n\t\tif (cursor.peekKind() === \"LParen\" && isUnclosed(parseAttributeArgList(cursor)) && consumeLeftover(cursor, memberCode, \"type arguments\", diagnosticsBefore)) {\n\t\t\tcursor.finishNode();\n\t\t\treturn;\n\t\t}\n\t}\n\tconst hasLeadingQuestion = cursor.peekKind() === \"Question\";\n\tif (hasLeadingQuestion) cursor.bump();\n\tlet isListType = false;\n\tif (cursor.peekKind() === \"LBracket\") {\n\t\tisListType = true;\n\t\tcursor.bump();\n\t\tif (cursor.peekKind() === \"RBracket\") cursor.bump();\n\t}\n\tlet trailingAllowed = isListType || !hasLeadingQuestion;\n\twhile (cursor.peekKind() === \"Question\") {\n\t\tif (!trailingAllowed) cursor.diagnostic(memberCode, \"Unexpected \\\"?\\\"; a type may be optional (`Foo?`), a list (`Foo[]`), have nullable elements (`Foo?[]`), or both (`Foo?[]?`)\", cursor.mark());\n\t\tcursor.bump();\n\t\ttrailingAllowed = false;\n\t}\n\tcursor.finishNode();\n}\n/**\n* Parses a full PSL document. Never throws — malformed input yields diagnostics\n* and a recovered tree, not an exception.\n*/\nfunction parse(source, filename, options = {}) {\n\tconst cursor = new Cursor(filename, source);\n\tconst root = createSyntaxTree(parseDocument(cursor, options));\n\tconst document = DocumentAst.cast(root) ?? new DocumentAst(root);\n\tconst sources = new PslSources([[document.syntax, cursor.sourceFile]]);\n\treturn {\n\t\tdocument,\n\t\tdiagnostics: cursor.diagnostics,\n\t\tsources\n\t};\n}\nfunction parseDocument(cursor, options) {\n\tcursor.startNode(\"Document\");\n\twhile (cursor.peekKind() !== \"Eof\") parseDeclaration(cursor, false, options);\n\tcursor.flushTrivia();\n\treturn cursor.finishNode();\n}\nconst RESERVED_BLOCK_KEYWORDS = /* @__PURE__ */ new Set([\n\t\"model\",\n\t\"namespace\",\n\t\"type\",\n\t\"types\"\n]);\nconst MIXIN_KEYWORD = \"mixin\";\nconst KEYWORDS_WITHOUT_MIXINS = /* @__PURE__ */ new Set([\"namespace\", \"types\"]);\nfunction isMixinHeaderAhead(cursor) {\n\treturn cursor.peekKind() === \"Ident\" && cursor.peekKind(1) === \"Ident\" && cursor.peekToken(1).text === MIXIN_KEYWORD;\n}\nfunction mixinWithoutBlockKeywordMessage(name) {\n\treturn `A mixin starts with the keyword of the block it is for, for example \"model ${MIXIN_KEYWORD} ${name ?? \"Name\"}\"`;\n}\nfunction keywordIs(cursor, keyword) {\n\treturn cursor.peekKind() === \"Ident\" && cursor.peekToken().text === keyword;\n}\n/**\n* Each alternative is a no-op on non-match, consuming nothing, so the\n* forward-only cursor is never left half-consumed by a rejected alternative.\n* Recovery runs via the `if (!node)` tail rather than as a `??` arm, because it\n* appends raw tokens to the open parent instead of returning a child node.\n*/\nfunction parseDeclaration(cursor, insideNamespace, options) {\n\tif (isMixinHeaderAhead(cursor)) {\n\t\tparseMixinDeclaration(cursor, options);\n\t\treturn;\n\t}\n\tconst name = cursor.peekKind(1) === \"Ident\" ? cursor.peekToken(1).text : \"\";\n\tif (insideNamespace && keywordIs(cursor, \"namespace\")) cursor.diagnostic(\"PSL_INVALID_NAMESPACE_BLOCK\", `Recursive \"namespace ${name}\" block is not allowed; namespace blocks may not nest`, cursor.mark());\n\telse if (insideNamespace && keywordIs(cursor, \"types\")) cursor.diagnostic(\"PSL_INVALID_NAMESPACE_BLOCK\", \"`types` blocks must be declared at the document top level, not inside a namespace block\", cursor.mark());\n\telse if (keywordIs(cursor, \"namespace\") && name === UNSPECIFIED_PSL_NAMESPACE_ID) cursor.diagnostic(\"PSL_INVALID_NAMESPACE_BLOCK\", `Namespace name \"${UNSPECIFIED_PSL_NAMESPACE_ID}\" is reserved for the parser-synthesised bucket for top-level declarations`, cursor.mark(1));\n\tif (!(parseModel(cursor) ?? parseNamespace(cursor, options) ?? parseCompositeType(cursor) ?? parseTypesBlock(cursor) ?? parseGenericBlock(cursor, options))) parseUnsupportedTopLevel(cursor);\n}\n/**\n* Reports only the first missing piece — a missing name suppresses the\n* missing-brace diagnostic. `nameRequired` is false only for the `types` block.\n*/\nfunction parseBlock(cursor, kind, nameRequired, parseMember) {\n\tconst keyword = cursor.peekToken().text;\n\tconst keywordMark = cursor.mark();\n\tcursor.startNode(kind);\n\tcursor.bump();\n\tconst hasName = nameRequired && cursor.peekKind() === \"Ident\";\n\tif (hasName) parseIdentifier(cursor);\n\tif (nameRequired && !hasName) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `Expected a name after \"${keyword}\"`, keywordMark);\n\telse if (cursor.peekKind() !== \"LBrace\") cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `Expected \"{\" to open the \"${keyword}\" block`, cursor.markAfterLastToken());\n\tif (cursor.peekKind() === \"LBrace\") parseBlockBody(cursor, parseMember);\n\telse cursor.recoverToSyncPoint();\n\treturn cursor.finishNode();\n}\nfunction parseModel(cursor) {\n\tif (!keywordIs(cursor, \"model\")) return void 0;\n\treturn parseBlock(cursor, \"ModelDeclaration\", true, parseModelMember);\n}\nfunction parseMixinDeclaration(cursor, options) {\n\tconst keyword = cursor.peekToken().text;\n\tconst keywordMark = cursor.mark();\n\tconst mixinMark = cursor.mark(1);\n\tcursor.startNode(\"MixinDeclaration\");\n\tcursor.bump();\n\tcursor.bump();\n\tconst hasName = cursor.peekKind() === \"Ident\" && (!cursor.newlineBefore() || cursor.peekKind(1) === \"LBrace\");\n\tconst name = hasName ? cursor.peekToken().text : void 0;\n\tif (hasName) parseIdentifier(cursor);\n\tconst hasBody = cursor.peekKind() === \"LBrace\";\n\tif (KEYWORDS_WITHOUT_MIXINS.has(keyword)) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `A mixin cannot be declared for \"${keyword}\"`, keywordMark);\n\telse if (keyword === MIXIN_KEYWORD) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", mixinWithoutBlockKeywordMessage(name), keywordMark);\n\telse if (!hasName) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `Expected a mixin name after \"${MIXIN_KEYWORD}\"`, mixinMark);\n\telse if (!hasBody) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `Expected \"{\" to open the \"${keyword} ${MIXIN_KEYWORD}\" block`, cursor.markAfterLastToken());\n\tif (hasBody) parseBlockBody(cursor, mixinMemberParser(keyword, options));\n\telse cursor.recoverToSyncPoint();\n\treturn cursor.finishNode();\n}\nfunction mixinMemberParser(keyword, options) {\n\tif (keyword === \"namespace\") return (inner) => parseDeclaration(inner, true, options);\n\tif (keyword === \"types\") return parseNamedTypeMember;\n\tif (keyword === \"model\" || keyword === \"type\") return parseModelMember;\n\treturn genericBlockMemberParser(keyword, options);\n}\n/**\n* Excluding the reserved keywords keeps a malformed reserved block (e.g. `model\n* {` with no name) routed to its dedicated parser. The generic keyword set is\n* open, so a bare identifier with no brace (e.g. `oops`) is read as an unfinished\n* custom declaration rather than unsupported content.\n*/\nfunction parseGenericBlock(cursor, options) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tconst keyword = cursor.peekToken().text;\n\tif (RESERVED_BLOCK_KEYWORDS.has(keyword)) return void 0;\n\tconst hasName = cursor.peekKind(1) === \"Ident\" && cursor.peekKind(2) === \"LBrace\";\n\tconst isMixinKeyword = keyword === MIXIN_KEYWORD;\n\tif (isMixinKeyword) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", mixinWithoutBlockKeywordMessage(cursor.peekKind(1) === \"Ident\" && !cursor.newlineBefore(1) ? cursor.peekToken(1).text : void 0), cursor.mark());\n\tcursor.startNode(\"GenericBlockDeclaration\");\n\tcursor.bump();\n\tif (hasName) parseIdentifier(cursor);\n\tif (cursor.peekKind() === \"LBrace\") parseBlockBody(cursor, genericBlockMemberParser(keyword, options));\n\telse {\n\t\tif (!isMixinKeyword) cursor.diagnostic(\"PSL_INVALID_DECLARATION\", `Expected \"{\" to open the \"${keyword}\" block`, cursor.markAfterLastToken());\n\t\tcursor.recoverToSyncPoint();\n\t}\n\treturn cursor.finishNode();\n}\nfunction parseNamespace(cursor, options) {\n\tif (!keywordIs(cursor, \"namespace\")) return void 0;\n\treturn parseBlock(cursor, \"Namespace\", true, (inner) => parseDeclaration(inner, true, options));\n}\nfunction parseCompositeType(cursor) {\n\tif (!keywordIs(cursor, \"type\")) return void 0;\n\treturn parseBlock(cursor, \"CompositeTypeDeclaration\", true, parseModelMember);\n}\n/** `types` (plural) is the no-name types block; the singular `type` is the composite type above. */\nfunction parseTypesBlock(cursor) {\n\tif (!keywordIs(cursor, \"types\")) return void 0;\n\treturn parseBlock(cursor, \"TypesBlock\", false, parseNamedTypeMember);\n}\n/** Every `parseMember` consumes at least one significant token, so the loop always terminates. */\nfunction parseBlockBody(cursor, parseMember) {\n\tconst braceMark = cursor.mark();\n\tcursor.bump();\n\tfor (;;) {\n\t\tconst kind = cursor.peekKind();\n\t\tif (kind === \"RBrace\" || kind === \"Eof\") break;\n\t\tparseMember(cursor);\n\t}\n\tif (cursor.peekKind() === \"RBrace\") cursor.bump();\n\telse cursor.diagnostic(\"PSL_UNTERMINATED_BLOCK\", \"Unterminated block declaration\", braceMark);\n}\nfunction parseUnsupportedTopLevel(cursor) {\n\tconst offending = cursor.peekToken().text;\n\tconst message = cursor.peekKind(1) === \"LBrace\" ? `Unsupported top-level block \"${offending}\"` : `Unsupported top-level declaration \"${offending}\"`;\n\tcursor.diagnostic(\"PSL_UNSUPPORTED_TOP_LEVEL_BLOCK\", message, cursor.mark());\n\tcursor.bump();\n\tcursor.recoverToSyncPoint();\n}\n/**\n* Matches a leading `@@` block attribute, a no-op otherwise. Single-`@`\n* attributes belong to fields and are parsed inside `parseField`.\n*/\nfunction parseBlockAttribute(cursor) {\n\tif (cursor.peekKind() !== \"DoubleAt\") return void 0;\n\treturn parseAttribute(cursor);\n}\nfunction parseMixinInclusion(cursor, memberCode) {\n\tif (cursor.peekKind() !== \"Plus\") return void 0;\n\tconst plusMark = cursor.mark();\n\tcursor.startNode(\"MixinInclusion\");\n\tcursor.bump();\n\tif (cursor.peekKind() === \"Ident\" && !cursor.newlineBefore()) parseQualifiedName(cursor);\n\telse {\n\t\tcursor.diagnostic(memberCode, \"Expected a mixin name after \\\"+\\\"\", plusMark);\n\t\tcursor.recoverToSyncPoint();\n\t}\n\treturn cursor.finishNode();\n}\nfunction parseModelMember(cursor) {\n\tif (!(parseMixinInclusion(cursor, \"PSL_INVALID_MODEL_MEMBER\") ?? parseBlockAttribute(cursor) ?? parseField(cursor))) invalidMember(cursor, \"PSL_INVALID_MODEL_MEMBER\", `Invalid model member declaration \"${cursor.peekToken().text}\"`);\n}\nfunction parseNamedTypeMember(cursor) {\n\tif (!parseNamedType(cursor)) invalidMember(cursor, \"PSL_INVALID_TYPES_MEMBER\", `Invalid types declaration \"${cursor.peekToken().text}\"`);\n}\n/**\n* A generic block reads `key = value` entries and bare keys; in an `enum` block those may carry `@`\n* attributes (`USER @map(\"user\")`). In the `prisma-7` grammar, a `view` body is read like a model\n* body. Each interpreter decides whether it accepts the block and its members.\n*/\nfunction genericBlockMemberParser(keyword, options) {\n\tif (keyword === \"view\" && options.grammar === \"prisma-7\") return parseModelMember;\n\tif (keyword === \"enum\") return parseEnumMember;\n\treturn parseKeyValueMember;\n}\n/**\n* A generic-block member is either a `@@`-block attribute or a `key = value`\n* entry. The block-attribute alternative is purely syntactic — it does not judge\n* whether the attribute is valid for the block's kind.\n*/\nfunction parseKeyValueMember(cursor) {\n\tif (!(parseMixinInclusion(cursor, \"PSL_INVALID_EXTENSION_BLOCK_MEMBER\") ?? parseBlockAttribute(cursor) ?? parseKeyValue(cursor))) invalidMember(cursor, \"PSL_INVALID_EXTENSION_BLOCK_MEMBER\", \"Invalid block entry\");\n}\nfunction parseEnumMember(cursor) {\n\tif (!(parseMixinInclusion(cursor, \"PSL_INVALID_EXTENSION_BLOCK_MEMBER\") ?? parseBlockAttribute(cursor) ?? parseKeyValue(cursor, { memberAttributes: true }))) invalidMember(cursor, \"PSL_INVALID_EXTENSION_BLOCK_MEMBER\", \"Invalid block entry\");\n}\nfunction invalidMember(cursor, code, message) {\n\tcursor.diagnostic(code, message, cursor.mark());\n\tcursor.bump();\n\tcursor.recoverToSyncPoint();\n}\nfunction parseField(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tcursor.startNode(\"FieldDeclaration\");\n\tconst nameMark = cursor.mark();\n\tconst nameText = cursor.peekToken().text;\n\tparseIdentifier(cursor);\n\tif (cursor.peekKind() !== \"Ident\") cursor.diagnostic(\"PSL_INVALID_MODEL_MEMBER\", `Expected a type after field \"${nameText}\"`, nameMark);\n\tparseTypeAnnotation(cursor, \"PSL_INVALID_MODEL_MEMBER\");\n\twhile (cursor.peekKind() === \"At\") parseAttribute(cursor);\n\treturn cursor.finishNode();\n}\nfunction parseNamedType(cursor) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tcursor.startNode(\"NamedTypeDeclaration\");\n\tconst nameMark = cursor.mark();\n\tconst nameText = cursor.peekToken().text;\n\tparseIdentifier(cursor);\n\tif (cursor.peekKind() === \"Equals\") cursor.bump();\n\telse cursor.diagnostic(\"PSL_INVALID_TYPES_MEMBER\", `Expected \"=\" after \"${nameText}\"`, nameMark);\n\tparseTypeAnnotation(cursor, \"PSL_INVALID_TYPES_MEMBER\");\n\twhile (cursor.peekKind() === \"At\") parseAttribute(cursor);\n\treturn cursor.finishNode();\n}\n/**\n* A generic-block entry is either `key = value` or a bare `key` (committing a\n* `KeyValuePair` carrying only the key). With `memberAttributes` (enum blocks) any number of `@`\n* attributes may follow, as in `USER @map(\"user\")`. A `key =` with no following expression is\n* flagged.\n*/\nfunction parseKeyValue(cursor, options = { memberAttributes: false }) {\n\tif (cursor.peekKind() !== \"Ident\") return void 0;\n\tcursor.startNode(\"KeyValuePair\");\n\tparseIdentifier(cursor);\n\tif (cursor.peekKind() === \"Equals\") {\n\t\tcursor.bump();\n\t\tconst diagnosticsBefore = cursor.diagnostics.length;\n\t\tconst value = parseExpression(cursor);\n\t\tif (!value) cursor.diagnostic(\"PSL_INVALID_EXTENSION_BLOCK_MEMBER\", \"Expected a value after \\\"=\\\"\", cursor.mark());\n\t\tif (!value || isUnclosed(value)) consumeLeftover(cursor, \"PSL_INVALID_EXTENSION_BLOCK_MEMBER\", \"the entry value\", diagnosticsBefore);\n\t}\n\twhile (options.memberAttributes && cursor.peekKind() === \"At\") parseAttribute(cursor);\n\treturn cursor.finishNode();\n}\n//#endregion\nexport { PslSources as a, greenToken as i, GreenNodeBuilder as n, SourceFile as o, greenNode as r, parse as t };\n\n//# sourceMappingURL=parse-pRqRBDoL.mjs.map"],"mappings":"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"}
@@ -2,15 +2,15 @@ import { y as DataTypeId } from "./codec-types-CQNZE70G-DZIvCZwY.mjs";
2
2
  import { B as PslExtensionBlockParsedAttribute, C as AuthoringPslBlockDescriptorNamespace, F as ParsedPslExtensionBlock, H as PslPosition, I as PslDiagnosticCode, L as PslExtensionBlock, R as PslExtensionBlockAttribute, S as AuthoringPslBlockDescriptor, U as PslSpan, V as PslExtensionBlockPrintEntry, z as PslExtensionBlockAttributeArg } from "./framework-authoring-BaBmrcxi-9J-ebDLU.mjs";
3
3
  import { n as ControlMutationDefaultRegistry } from "./mutation-default-types-DCgdIlXt-C6Sc9h16.mjs";
4
4
  import { r as Result } from "./result-BYCOANWy.mjs";
5
- import { m as WrittenScalar, n as DataTypeSupport } from "./written-value-DdEQAH_R-yhLbzRP4.mjs";
6
- import "./authoring-CiZ755jw.mjs";
5
+ import { m as WrittenScalar, n as DataTypeSupport } from "./written-value--KnOpj99-DByhg5hX.mjs";
6
+ import "./authoring-Cdm02TLT.mjs";
7
7
  import "./codec-CBvtmEz2.mjs";
8
8
  import { C as PslTypesBlock, O as flatPslModels, S as PslTypeConstructorCall, _ as PslModelAttribute, a as PslAttributePositionalArgument, c as PslDefaultFunctionValue, f as PslDocumentAst, g as PslModel, i as PslAttributeNamedArgument, j as namespacePslExtensionBlocks, l as PslDefaultLiteralValue, m as PslFieldAttribute, n as PslAttribute, o as PslAttributeTarget, p as PslField, r as PslAttributeArgument, s as PslCompositeType, u as PslDefaultValue, v as PslNamedTypeDeclaration, y as PslNamespace } from "./psl-ast-BER6m646-RXgNvJDn.mjs";
9
- import { r as AssembledAuthoringContributions } from "./control-Bh3RtVrv.mjs";
9
+ import { r as AssembledAuthoringContributions } from "./control-DsRyU-u2.mjs";
10
10
  import "./psl-ast-DqB4Tq08.mjs";
11
- import { i as isPslIdentifier } from "./tokenizer-DW30uwhx-BHsWTwYk.mjs";
12
- import { L as PslDiagnostic, R as PslDiagnosticCollector, T as ModelAttributeAst, d as DiagnosticSource, dt as mapPslDiagnostics, it as diagnosticSource, m as FieldAttributeAst, n as AstNode, p as ExpressionAst, q as SyntaxNode, r as AttributeArgAst, rt as diagnosticFromSpan, tt as createPslDiagnosticCollector, z as PslSources } from "./parse-Dz0FUoAQ-CflUTYu0.mjs";
13
- import { $ as NamedOut, A as DescribeUnresolvedType, At as TaggedLiteralArgType, B as FixedStrArgType, Bt as createBinder, C as ContributedTypeNamespace, Ct as ResolvedEntityReference, D as CtxOf, Dt as ScopeResolution, E as CreateBinderInput, Et as Scope, F as FieldAttributeCtx, Ft as UnrestrictedNumArgType, G as InferAttr, Gt as memberEntries, H as FuncCallSig, Ht as isNamespaceLike, I as FieldRefArgType, It as UnrestrictedStrArgType, J as JsonArgType, Jt as readResolvedAttributes, K as InspectableArgType, Kt as nodePslSpan, L as FieldSymbol, Lt as UnsupportedAttribute, M as EntityDeclaration, Mt as TypedFuncCall, N as EntityRefArgType, Nt as UnresolvedTypeReference, O as DataTypeValueArgType, Ot as SymbolTable, P as EntitySelector, Pt as UnrestrictedIdentifierArgType, Q as ModelSymbol, R as FixedIdentifierArgType, Rt as buildSymbolTable, S as ContributedTypeDescriptor, St as ResolvedAttributeArg, T as ContributedTypeSymbol, Tt as ResolvedTypeConstructorCall, U as FunctionSymbol, Ut as keywordPslSpan, V as FuncCallArgType, Vt as entityReference, W as IdentifierArgType, Wt as matchesSelector, X as ListArgType, Xt as typeReferenceNode, Y as JsonValueArgType, Yt as readResolvedConstructorCall, Z as ModelAttributeCtx, _ as CompositeTypeSymbol, _t as ReferencedFieldRefArgType, a as AttributeLevel, at as OneOfArgType, b as ContributedMember, bt as Resolution, c as AttributeSymbol, ct as PSL_UNRESOLVED_REFERENCE, d as BinderResult, dt as ParsedTaggedLiteral, et as NamedTypeSymbol, f as BlockAttributeCtx, ft as ParsedTypedValue, g as BuildSymbolTableOptions, gt as RecordArgType, h as BoundSpec, ht as PslSymbol, i as AttributeCtx, it as NumLiteralArgType, j as DescribeUnsupportedAttribute, jt as TopLevelScope, k as DeclarationFor, kt as SymbolTableResult, l as Binder, lt as Param, m as BoolArgType, mt as PositionalParam, n as ArgType, nt as NullArgType, o as AttributeOut, ot as OptionalArgType, p as BlockSymbol, pt as PosOut, q as IntArgType, qt as readResolvedAttribute, r as ArgTypeKind, rt as NumLiteral, s as AttributeSpec, st as OutOf, t as AnyArgType, tt as NamespaceSymbol, u as BinderContext, ut as ParameterSymbol, v as ConstantSymbol, vt as RejectingArgType, w as ContributedTypeScope, wt as ResolvedNamedTypeBinding, x as ContributedNamespaceSymbol, xt as ResolvedAttribute, y as ContextForRequirement, yt as RequiredContextFor, z as FixedNumArgType, zt as contributedTypeOf } from "./binder-C7GnHWyT-_H6i-B7e.mjs";
11
+ import { i as isPslIdentifier } from "./tokenizer-i8RaVWVa-7fRwlCPP.mjs";
12
+ import { B as PslDiagnosticCollector, D as ModelAttributeAst, V as PslSources, Y as SyntaxNode, at as diagnosticFromSpan, d as DiagnosticSource, m as FieldAttributeAst, n as AstNode, ot as diagnosticSource, p as ExpressionAst, pt as mapPslDiagnostics, r as AttributeArgAst, rt as createPslDiagnosticCollector, z as PslDiagnostic } from "./parse-By_H285C-2bZhTomA.mjs";
13
+ import { $ as NamedOut, A as DescribeUnresolvedType, At as TaggedLiteralArgType, B as FixedStrArgType, Bt as createBinder, C as ContributedTypeNamespace, Ct as ResolvedEntityReference, D as CtxOf, Dt as ScopeResolution, E as CreateBinderInput, Et as Scope, F as FieldAttributeCtx, Ft as UnrestrictedNumArgType, G as InferAttr, Gt as memberEntries, H as FuncCallSig, Ht as isNamespaceLike, I as FieldRefArgType, It as UnrestrictedStrArgType, J as JsonArgType, Jt as readResolvedAttributes, K as InspectableArgType, Kt as nodePslSpan, L as FieldSymbol, Lt as UnsupportedAttribute, M as EntityDeclaration, Mt as TypedFuncCall, N as EntityRefArgType, Nt as UnresolvedTypeReference, O as DataTypeValueArgType, Ot as SymbolTable, P as EntitySelector, Pt as UnrestrictedIdentifierArgType, Q as ModelSymbol, R as FixedIdentifierArgType, Rt as buildSymbolTable, S as ContributedTypeDescriptor, St as ResolvedAttributeArg, T as ContributedTypeSymbol, Tt as ResolvedTypeConstructorCall, U as FunctionSymbol, Ut as keywordPslSpan, V as FuncCallArgType, Vt as entityReference, W as IdentifierArgType, Wt as matchesSelector, X as ListArgType, Xt as typeReferenceNode, Y as JsonValueArgType, Yt as readResolvedConstructorCall, Z as ModelAttributeCtx, _ as CompositeTypeSymbol, _t as ReferencedFieldRefArgType, a as AttributeLevel, at as OneOfArgType, b as ContributedMember, bt as Resolution, c as AttributeSymbol, ct as PSL_UNRESOLVED_REFERENCE, d as BinderResult, dt as ParsedTaggedLiteral, et as NamedTypeSymbol, f as BlockAttributeCtx, ft as ParsedTypedValue, g as BuildSymbolTableOptions, gt as RecordArgType, h as BoundSpec, ht as PslSymbol, i as AttributeCtx, it as NumLiteralArgType, j as DescribeUnsupportedAttribute, jt as TopLevelScope, k as DeclarationFor, kt as SymbolTableResult, l as Binder, lt as Param, m as BoolArgType, mt as PositionalParam, n as ArgType, nt as NullArgType, o as AttributeOut, ot as OptionalArgType, p as BlockSymbol, pt as PosOut, q as IntArgType, qt as readResolvedAttribute, r as ArgTypeKind, rt as NumLiteral, s as AttributeSpec, st as OutOf, t as AnyArgType, tt as NamespaceSymbol, u as BinderContext, ut as ParameterSymbol, v as ConstantSymbol, vt as RejectingArgType, w as ContributedTypeScope, wt as ResolvedNamedTypeBinding, x as ContributedNamespaceSymbol, xt as ResolvedAttribute, y as ContextForRequirement, yt as RequiredContextFor, z as FixedNumArgType, zt as contributedTypeOf } from "./binder-BUBLuGg4-CQbIZyym.mjs";
14
14
  //#region ../../../1-framework/2-authoring/psl-parser/dist/index.d.mts
15
15
  //#region src/attribute-helpers.d.ts
16
16
  declare function getPositionalArgument(attribute: PslAttribute, index?: number): string | undefined;
@@ -2,13 +2,13 @@ import { t as blindCast } from "./casts-DpaahrlC-Bd5n2coI.mjs";
2
2
  import { t as InternalError } from "./internal-error-ChGYPVpq-DhUD05u0.mjs";
3
3
  import { a as or, i as okVoid, n as notOk, r as ok, t as and } from "./result-8OXF26MN.mjs";
4
4
  import { r as createDataTypeLookup } from "./data-type-4xQlxYB5-DD158cOq.mjs";
5
- import { S as isAuthoringPslBlockDescriptor, f as describeTaggedLiteralFailure, x as isAuthoringModelAttributeDescriptor } from "./temporal-presets-CjxLjyl8-DhMFaNE2.mjs";
6
- import { _ as readWrittenValue, a as describeExpected, d as exactRewrite, i as describeAdmittedForms, n as admittedTags, o as describeRefusal, r as castTypedValue, t as admittedForms, v as tagForm } from "./authoring-Bk5x6Kvi.mjs";
5
+ import { S as isAuthoringPslBlockDescriptor, f as describeTaggedLiteralFailure, x as isAuthoringModelAttributeDescriptor } from "./temporal-presets-DEyPX8qQ-Bz4DdZ8v.mjs";
6
+ import { _ as readWrittenValue, a as describeExpected, d as exactRewrite, i as describeAdmittedForms, n as admittedTags, o as describeRefusal, r as castTypedValue, t as admittedForms, v as tagForm } from "./authoring-Bv-ExMUC.mjs";
7
7
  import { a as flatPslModels, c as namespacePslExtensionBlocks } from "./psl-ast-CyvE6CR-.mjs";
8
- import { n as isPslIdentifier } from "./tokenizer-BMz7z2KR-J0yZ4im3.mjs";
9
- import { C as TaggedLiteralExprAst, S as StringLiteralExprAst, T as TypesBlockAst, _ as NumberLiteralExprAst, a as CompositeTypeDeclarationAst, b as PathExprAst, d as IdentifierAst, g as NamespaceDeclarationAst, i as BooleanLiteralExprAst, l as FunctionCallAst, m as ModelDeclarationAst, t as ArrayLiteralAst, u as GenericBlockDeclarationAst, y as ObjectLiteralExprAst } from "./declarations-DosoNVo9-Bnoie4Sr.mjs";
8
+ import { n as isPslIdentifier } from "./tokenizer-C-GTKKjR-B1vOzJy0.mjs";
9
+ import { D as TypesBlockAst, S as PathExprAst, T as TaggedLiteralExprAst, a as CompositeTypeDeclarationAst, d as IdentifierAst, g as ModelDeclarationAst, i as BooleanLiteralExprAst, l as FunctionCallAst, p as MixinDeclarationAst, t as ArrayLiteralAst, u as GenericBlockDeclarationAst, v as NamespaceDeclarationAst, w as StringLiteralExprAst, x as ObjectLiteralExprAst, y as NumberLiteralExprAst } from "./declarations-CTFzoo9j-BaCuW9E2.mjs";
10
10
  import { a as mapPslDiagnostics, c as readResolvedAttributes, i as keywordPslSpan, l as readResolvedConstructorCall, n as diagnosticFromSpan, o as nodePslSpan, r as diagnosticSource, s as readResolvedAttribute, t as createPslDiagnosticCollector } from "./resolve-C8PUf8zv-QAvnPhCt.mjs";
11
- //#region ../../../1-framework/2-authoring/psl-parser/dist/symbol-table--TQ3B8UK.mjs
11
+ //#region ../../../1-framework/2-authoring/psl-parser/dist/symbol-table-DzoniUhK.mjs
12
12
  function* modelAttributeDescriptors(namespace) {
13
13
  for (const value of Object.values(namespace)) {
14
14
  if (isAuthoringModelAttributeDescriptor(value)) {
@@ -1168,6 +1168,7 @@ function buildSymbolTable(options) {
1168
1168
  ...resolved
1169
1169
  };
1170
1170
  }
1171
+ reportMixins(document.declarations(), sources, diagnostics);
1171
1172
  }
1172
1173
  return {
1173
1174
  symbolTable: { topLevel: {
@@ -1214,6 +1215,7 @@ function buildBlock(name, node, sources) {
1214
1215
  function extendNamespace(namespace, node, diagnostics, sources) {
1215
1216
  const { models, compositeTypes, blocks } = namespace;
1216
1217
  for (const member of node.declarations()) {
1218
+ if (member instanceof MixinDeclarationAst) continue;
1217
1219
  const memberName = member.name()?.name();
1218
1220
  if (memberName === void 0) continue;
1219
1221
  if (Object.hasOwn(models, memberName) || Object.hasOwn(compositeTypes, memberName) || Object.hasOwn(blocks, memberName)) {
@@ -1231,6 +1233,44 @@ function extendNamespace(namespace, node, diagnostics, sources) {
1231
1233
  else if (member instanceof GenericBlockDeclarationAst) blocks[memberName] = buildBlock(memberName, member, sources);
1232
1234
  }
1233
1235
  }
1236
+ const MIXINS_NOT_SUPPORTED = "Mixins are not supported yet";
1237
+ function reportMixins(declarations, sources, diagnostics) {
1238
+ for (const declaration of declarations) {
1239
+ if (declaration instanceof NamespaceDeclarationAst) {
1240
+ reportMixins(declaration.declarations(), sources, diagnostics);
1241
+ continue;
1242
+ }
1243
+ if (declaration instanceof TypesBlockAst) continue;
1244
+ if (declaration instanceof MixinDeclarationAst) {
1245
+ const range = nameRange(declaration.name(), sources) ?? mixinKeywordRange(declaration, sources);
1246
+ if (range !== void 0) diagnostics.push({
1247
+ code: "PSL_INVALID_DECLARATION",
1248
+ message: MIXINS_NOT_SUPPORTED,
1249
+ filename: sources.sourceFileFor(declaration.syntax).filename,
1250
+ range
1251
+ });
1252
+ }
1253
+ for (const inclusion of declaration.inclusions()) reportInclusion(inclusion, sources, diagnostics);
1254
+ }
1255
+ }
1256
+ function reportInclusion(inclusion, sources, diagnostics) {
1257
+ if (inclusion.name() === void 0) return;
1258
+ diagnostics.push({
1259
+ code: "PSL_INVALID_DECLARATION",
1260
+ message: MIXINS_NOT_SUPPORTED,
1261
+ filename: sources.sourceFileFor(inclusion.syntax).filename,
1262
+ range: nodeRange(inclusion.syntax, sources)
1263
+ });
1264
+ }
1265
+ function mixinKeywordRange(declaration, sources) {
1266
+ const token = declaration.mixinKeyword();
1267
+ if (token === void 0) return void 0;
1268
+ const sourceFile = sources.sourceFileFor(declaration.syntax);
1269
+ return {
1270
+ start: sourceFile.positionAt(token.offset),
1271
+ end: sourceFile.positionAt(token.offset + token.text.length)
1272
+ };
1273
+ }
1234
1274
  function buildFields(ownerName, fields, sources, diagnostics) {
1235
1275
  const result = Object.create(null);
1236
1276
  for (const field of fields) {