node-llama-cpp 3.2.0 → 3.3.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.
Files changed (144) hide show
  1. package/dist/bindings/AddonTypes.d.ts +4 -3
  2. package/dist/bindings/Llama.d.ts +1 -1
  3. package/dist/bindings/Llama.js +17 -2
  4. package/dist/bindings/Llama.js.map +1 -1
  5. package/dist/bindings/getLlama.d.ts +4 -1
  6. package/dist/bindings/getLlama.js +42 -2
  7. package/dist/bindings/getLlama.js.map +1 -1
  8. package/dist/bindings/utils/compileLLamaCpp.d.ts +1 -1
  9. package/dist/bindings/utils/compileLLamaCpp.js +41 -2
  10. package/dist/bindings/utils/compileLLamaCpp.js.map +1 -1
  11. package/dist/bindings/utils/testBindingBinary.d.ts +2 -1
  12. package/dist/bindings/utils/testBindingBinary.js +122 -37
  13. package/dist/bindings/utils/testBindingBinary.js.map +1 -1
  14. package/dist/chatWrappers/Llama3_1ChatWrapper.js +3 -2
  15. package/dist/chatWrappers/Llama3_1ChatWrapper.js.map +1 -1
  16. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.d.ts +35 -0
  17. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js +253 -0
  18. package/dist/chatWrappers/Llama3_2LightweightChatWrapper.js.map +1 -0
  19. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.d.ts +13 -0
  20. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js +30 -0
  21. package/dist/chatWrappers/utils/ChatModelFunctionsDocumentationGenerator.js.map +1 -1
  22. package/dist/chatWrappers/utils/getModelLinageNames.d.ts +2 -0
  23. package/dist/chatWrappers/utils/getModelLinageNames.js +18 -0
  24. package/dist/chatWrappers/utils/getModelLinageNames.js.map +1 -0
  25. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.d.ts +2 -0
  26. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js +9 -0
  27. package/dist/chatWrappers/utils/isLlama3_2LightweightModel.js.map +1 -0
  28. package/dist/chatWrappers/utils/resolveChatWrapper.d.ts +4 -2
  29. package/dist/chatWrappers/utils/resolveChatWrapper.js +9 -31
  30. package/dist/chatWrappers/utils/resolveChatWrapper.js.map +1 -1
  31. package/dist/cli/commands/ChatCommand.js +1 -1
  32. package/dist/cli/commands/ChatCommand.js.map +1 -1
  33. package/dist/cli/commands/InitCommand.d.ts +2 -1
  34. package/dist/cli/commands/InitCommand.js +32 -13
  35. package/dist/cli/commands/InitCommand.js.map +1 -1
  36. package/dist/cli/recommendedModels.js +11 -0
  37. package/dist/cli/recommendedModels.js.map +1 -1
  38. package/dist/evaluator/LlamaChat/LlamaChat.js +25 -12
  39. package/dist/evaluator/LlamaChat/LlamaChat.js.map +1 -1
  40. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js +140 -132
  41. package/dist/evaluator/LlamaChatSession/LlamaChatSession.js.map +1 -1
  42. package/dist/evaluator/LlamaChatSession/utils/defineChatSessionFunction.d.ts +1 -1
  43. package/dist/evaluator/LlamaGrammar.js +7 -0
  44. package/dist/evaluator/LlamaGrammar.js.map +1 -1
  45. package/dist/evaluator/LlamaJsonSchemaGrammar.d.ts +3 -2
  46. package/dist/evaluator/LlamaJsonSchemaGrammar.js +3 -0
  47. package/dist/evaluator/LlamaJsonSchemaGrammar.js.map +1 -1
  48. package/dist/gguf/fileReaders/GgufFileReader.d.ts +1 -1
  49. package/dist/gguf/fileReaders/GgufFsFileReader.d.ts +1 -1
  50. package/dist/gguf/fileReaders/GgufNetworkFetchFileReader.d.ts +1 -1
  51. package/dist/index.d.ts +3 -2
  52. package/dist/index.js +2 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/tsconfig.tsbuildinfo +1 -1
  55. package/dist/types.d.ts +2 -2
  56. package/dist/utils/gbnfJson/GbnfGrammarGenerator.d.ts +5 -0
  57. package/dist/utils/gbnfJson/GbnfGrammarGenerator.js +15 -0
  58. package/dist/utils/gbnfJson/GbnfGrammarGenerator.js.map +1 -1
  59. package/dist/utils/gbnfJson/GbnfTerminal.d.ts +3 -0
  60. package/dist/utils/gbnfJson/GbnfTerminal.js +25 -3
  61. package/dist/utils/gbnfJson/GbnfTerminal.js.map +1 -1
  62. package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.d.ts +1 -1
  63. package/dist/utils/gbnfJson/getGbnfGrammarForGbnfJsonSchema.js.map +1 -1
  64. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.d.ts +9 -0
  65. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js +53 -0
  66. package/dist/utils/gbnfJson/terminals/GbnfAnyJson.js.map +1 -0
  67. package/dist/utils/gbnfJson/terminals/GbnfArray.d.ts +11 -2
  68. package/dist/utils/gbnfJson/terminals/GbnfArray.js +64 -15
  69. package/dist/utils/gbnfJson/terminals/GbnfArray.js.map +1 -1
  70. package/dist/utils/gbnfJson/terminals/GbnfBoolean.d.ts +3 -2
  71. package/dist/utils/gbnfJson/terminals/GbnfBoolean.js +13 -7
  72. package/dist/utils/gbnfJson/terminals/GbnfBoolean.js.map +1 -1
  73. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.d.ts +11 -0
  74. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js +28 -0
  75. package/dist/utils/gbnfJson/terminals/GbnfCommaWhitespace.js.map +1 -0
  76. package/dist/utils/gbnfJson/terminals/GbnfFormatString.d.ts +11 -0
  77. package/dist/utils/gbnfJson/terminals/GbnfFormatString.js +90 -0
  78. package/dist/utils/gbnfJson/terminals/GbnfFormatString.js.map +1 -0
  79. package/dist/utils/gbnfJson/terminals/GbnfGrammar.d.ts +4 -1
  80. package/dist/utils/gbnfJson/terminals/GbnfGrammar.js +8 -1
  81. package/dist/utils/gbnfJson/terminals/GbnfGrammar.js.map +1 -1
  82. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.d.ts +5 -0
  83. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js +24 -0
  84. package/dist/utils/gbnfJson/terminals/GbnfInsideStringChar.js.map +1 -0
  85. package/dist/utils/gbnfJson/terminals/GbnfNumber.js +4 -3
  86. package/dist/utils/gbnfJson/terminals/GbnfNumber.js.map +1 -1
  87. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.d.ts +3 -1
  88. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js +8 -2
  89. package/dist/utils/gbnfJson/terminals/GbnfNumberValue.js.map +1 -1
  90. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.d.ts +14 -5
  91. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js +67 -9
  92. package/dist/utils/gbnfJson/terminals/GbnfObjectMap.js.map +1 -1
  93. package/dist/utils/gbnfJson/terminals/GbnfOr.d.ts +2 -1
  94. package/dist/utils/gbnfJson/terminals/GbnfOr.js +6 -2
  95. package/dist/utils/gbnfJson/terminals/GbnfOr.js.map +1 -1
  96. package/dist/utils/gbnfJson/terminals/GbnfRepetition.d.ts +7 -1
  97. package/dist/utils/gbnfJson/terminals/GbnfRepetition.js +69 -20
  98. package/dist/utils/gbnfJson/terminals/GbnfRepetition.js.map +1 -1
  99. package/dist/utils/gbnfJson/terminals/GbnfString.d.ts +8 -1
  100. package/dist/utils/gbnfJson/terminals/GbnfString.js +31 -21
  101. package/dist/utils/gbnfJson/terminals/GbnfString.js.map +1 -1
  102. package/dist/utils/gbnfJson/terminals/GbnfStringValue.d.ts +2 -0
  103. package/dist/utils/gbnfJson/terminals/GbnfStringValue.js +7 -4
  104. package/dist/utils/gbnfJson/terminals/GbnfStringValue.js.map +1 -1
  105. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.d.ts +2 -1
  106. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js +24 -5
  107. package/dist/utils/gbnfJson/terminals/GbnfWhitespace.js.map +1 -1
  108. package/dist/utils/gbnfJson/terminals/gbnfConsts.d.ts +16 -1
  109. package/dist/utils/gbnfJson/terminals/gbnfConsts.js +47 -1
  110. package/dist/utils/gbnfJson/terminals/gbnfConsts.js.map +1 -1
  111. package/dist/utils/gbnfJson/types.d.ts +164 -17
  112. package/dist/utils/gbnfJson/types.js +6 -0
  113. package/dist/utils/gbnfJson/types.js.map +1 -1
  114. package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js +61 -9
  115. package/dist/utils/gbnfJson/utils/getGbnfJsonTerminalForGbnfJsonSchema.js.map +1 -1
  116. package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js +99 -8
  117. package/dist/utils/gbnfJson/utils/validateObjectAgainstGbnfSchema.js.map +1 -1
  118. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js +125 -16
  119. package/dist/utils/getTypeScriptTypeStringForGbnfJsonSchema.js.map +1 -1
  120. package/dist/utils/includesText.d.ts +1 -0
  121. package/dist/utils/includesText.js +12 -0
  122. package/dist/utils/includesText.js.map +1 -0
  123. package/dist/utils/wrapAbortSignal.d.ts +1 -1
  124. package/dist/utils/wrapAbortSignal.js +9 -4
  125. package/dist/utils/wrapAbortSignal.js.map +1 -1
  126. package/llama/CMakeLists.txt +10 -90
  127. package/llama/addon/AddonGrammar.cpp +49 -1
  128. package/llama/addon/AddonGrammar.h +3 -0
  129. package/llama/addon/addon.cpp +17 -0
  130. package/llama/addon/globals/getGpuInfo.cpp +54 -52
  131. package/llama/binariesGithubRelease.json +1 -1
  132. package/llama/gitRelease.bundle +0 -0
  133. package/llama/gpuInfo/vulkan-gpu-info.cpp +0 -8
  134. package/llama/gpuInfo/vulkan-gpu-info.h +0 -1
  135. package/llama/grammars/README.md +1 -1
  136. package/llama/llama.cpp.info.json +1 -1
  137. package/package.json +49 -45
  138. package/templates/README.md +6 -0
  139. package/templates/packed/electron-typescript-react.json +1 -1
  140. package/templates/packed/node-typescript.json +1 -1
  141. package/llama/gpuInfo/cuda-gpu-info.cu +0 -120
  142. package/llama/gpuInfo/cuda-gpu-info.h +0 -10
  143. package/llama/gpuInfo/metal-gpu-info.h +0 -8
  144. package/llama/gpuInfo/metal-gpu-info.mm +0 -37
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GbnfFormatString.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfFormatString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAC9B,MAAM,CAAuC;IAE7D,YAAmB,MAA4C;QAC3D,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YACtB,OAAO,IAAI,WAAW,CAAC;gBACnB,KAAK;gBACL,IAAI,CAAC,eAAe,EAAE;gBACtB,KAAK;aACR,CAAC,CAAC,UAAU,EAAE,CAAC;aACf,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,WAAW,CAAC;gBACnB,KAAK;gBACL,IAAI,CAAC,eAAe,EAAE;gBACtB,KAAK;aACR,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;YAClC,OAAO,IAAI,WAAW,CAAC;gBACnB,KAAK;gBACL,IAAI,CAAC,eAAe,EAAE;gBACtB,KAAK;gBACL,IAAI,CAAC,eAAe,EAAE;gBACtB,KAAK;aACR,CAAC,CAAC,UAAU,EAAE,CAAC;QAEpB,OAAO,IAAI,UAAU,CAAC;YAClB,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;SACf,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAEkB,WAAW;QAC1B,OAAO,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAEO,eAAe;QACnB,OAAO,IAAI,WAAW,CAAC;YACnB,UAAU;YACV,KAAK;YACL,EAAE,CAAC;gBACC,WAAW;gBACX,WAAW;aACd,CAAC;YACF,KAAK;YACL,EAAE,CAAC;gBACC,WAAW;gBACX,YAAY;gBACZ,UAAU;aACb,CAAC;SACL,CAAC,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,eAAe;QACnB,OAAO,IAAI,WAAW,CAAC;YACnB,EAAE,CAAC;gBACC,YAAY;gBACZ,WAAW;aACd,CAAC;YACF,KAAK;YACL,aAAa;YACb,KAAK;YACL,aAAa;YACb,mBAAmB;YACnB,EAAE,CAAC;gBACC,KAAK;gBACL,IAAI,WAAW,CAAC;oBACZ,EAAE,CAAC;wBACC,KAAK;wBACL,KAAK;qBACR,CAAC;oBACF,EAAE,CAAC;wBACC,YAAY;wBACZ,WAAW;qBACd,CAAC;oBACF,KAAK;oBACL,aAAa;iBAChB,CAAC,CAAC,UAAU,EAAE;aAClB,CAAC;SACL,CAAC,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACJ;AAED,SAAS,EAAE,CAAC,MAAgB;IACxB,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC1C,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
2
3
  export declare class GbnfGrammar extends GbnfTerminal {
3
4
  readonly grammar: string | string[];
4
- constructor(grammar: string | string[]);
5
+ readonly resolveToRawGrammar: boolean;
6
+ constructor(grammar: string | string[], resolveToRawGrammar?: boolean);
5
7
  getGrammar(): string;
8
+ resolve(grammarGenerator: GbnfGrammarGenerator): string;
6
9
  }
@@ -1,9 +1,11 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  export class GbnfGrammar extends GbnfTerminal {
3
3
  grammar;
4
- constructor(grammar) {
4
+ resolveToRawGrammar;
5
+ constructor(grammar, resolveToRawGrammar = false) {
5
6
  super();
6
7
  this.grammar = grammar;
8
+ this.resolveToRawGrammar = resolveToRawGrammar;
7
9
  }
8
10
  getGrammar() {
9
11
  if (this.grammar instanceof Array)
@@ -12,5 +14,10 @@ export class GbnfGrammar extends GbnfTerminal {
12
14
  .join(" ");
13
15
  return this.grammar;
14
16
  }
17
+ resolve(grammarGenerator) {
18
+ if (this.resolveToRawGrammar)
19
+ return this.getGrammar();
20
+ return super.resolve(grammarGenerator);
21
+ }
15
22
  }
16
23
  //# sourceMappingURL=GbnfGrammar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfGrammar.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfGrammar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGhD,MAAM,OAAO,WAAY,SAAQ,YAAY;IACzB,OAAO,CAAoB;IAE3C,YAAmB,OAA0B;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,OAAO,YAAY,KAAK;YAC7B,OAAO,IAAI,CAAC,OAAO;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;iBAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfGrammar.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfGrammar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAIhD,MAAM,OAAO,WAAY,SAAQ,YAAY;IACzB,OAAO,CAAoB;IAC3B,mBAAmB,CAAU;IAE7C,YAAmB,OAA0B,EAAE,sBAA+B,KAAK;QAC/E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACnD,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,OAAO,YAAY,KAAK;YAC7B,OAAO,IAAI,CAAC,OAAO;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;iBAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEe,OAAO,CAAC,gBAAsC;QAC1D,IAAI,IAAI,CAAC,mBAAmB;YACxB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAE7B,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;CACJ"}
@@ -0,0 +1,5 @@
1
+ import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ export declare class GbnfInsideStringChar extends GbnfTerminal {
3
+ getGrammar(): string;
4
+ protected getRuleName(): string;
5
+ }
@@ -0,0 +1,24 @@
1
+ import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { reservedRuleNames } from "./gbnfConsts.js";
3
+ export class GbnfInsideStringChar extends GbnfTerminal {
4
+ getGrammar() {
5
+ return [
6
+ negatedCharacterSet([
7
+ '"',
8
+ "\\\\",
9
+ "\\x7F",
10
+ "\\x00-\\x1F"
11
+ ]),
12
+ // escape sequences
13
+ '"\\\\" ["\\\\/bfnrt]',
14
+ '"\\\\u" [0-9a-fA-F]{4}'
15
+ ].join(" | ");
16
+ }
17
+ getRuleName() {
18
+ return reservedRuleNames.stringChar;
19
+ }
20
+ }
21
+ function negatedCharacterSet(characterDefinitions) {
22
+ return "[^" + characterDefinitions.join("") + "]";
23
+ }
24
+ //# sourceMappingURL=GbnfInsideStringChar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GbnfInsideStringChar.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfInsideStringChar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IAC3C,UAAU;QACb,OAAO;YACH,mBAAmB,CAAC;gBAChB,GAAG;gBACH,MAAM;gBACN,OAAO;gBACP,aAAa;aAChB,CAAC;YAEF,mBAAmB;YACnB,sBAAsB;YACtB,wBAAwB;SAC3B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAEkB,WAAW;QAC1B,OAAO,iBAAiB,CAAC,UAAU,CAAC;IACxC,CAAC;CACJ;AAED,SAAS,mBAAmB,CAAC,oBAA8B;IACvD,OAAO,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACtD,CAAC"}
@@ -7,10 +7,11 @@ export class GbnfNumber extends GbnfTerminal {
7
7
  this.allowFractional = allowFractional;
8
8
  }
9
9
  getGrammar() {
10
- const numberGrammar = '("-"? ([0-9] | [1-9] [0-9]*))';
10
+ const num = '"-"? ("0" | [1-9] [0-9]{0,15})';
11
+ const exponent = ' ([eE] [-+]? ("0" | [1-9] [0-9]{0,15}))?';
11
12
  if (this.allowFractional)
12
- return numberGrammar + ' ("." [0-9]+)? ([eE] [-+]? [0-9]+)?';
13
- return numberGrammar;
13
+ return num + ' ("." [0-9]{1,16})?' + exponent;
14
+ return num + exponent;
14
15
  }
15
16
  getRuleName() {
16
17
  if (this.allowFractional)
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfNumber.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAGlD,MAAM,OAAO,UAAW,SAAQ,YAAY;IACxB,eAAe,CAAU;IAEzC,YAAmB,EAAC,eAAe,GAAG,IAAI,EAA6B;QACnE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEM,UAAU;QACb,MAAM,aAAa,GAAG,+BAA+B,CAAC;QAEtD,IAAI,IAAI,CAAC,eAAe;YACpB,OAAO,aAAa,GAAG,qCAAqC,CAAC;QAEjE,OAAO,aAAa,CAAC;IACzB,CAAC;IAEkB,WAAW;QAC1B,IAAI,IAAI,CAAC,eAAe;YACpB,OAAO,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;QAE/C,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5C,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfNumber.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAGlD,MAAM,OAAO,UAAW,SAAQ,YAAY;IACxB,eAAe,CAAU;IAEzC,YAAmB,EAAC,eAAe,GAAG,IAAI,EAA6B;QACnE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEM,UAAU;QACb,MAAM,GAAG,GAAG,gCAAgC,CAAC;QAC7C,MAAM,QAAQ,GAAG,0CAA0C,CAAC;QAE5D,IAAI,IAAI,CAAC,eAAe;YACpB,OAAO,GAAG,GAAG,qBAAqB,GAAG,QAAQ,CAAC;QAElD,OAAO,GAAG,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAEkB,WAAW;QAC1B,IAAI,IAAI,CAAC,eAAe;YACpB,OAAO,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;QAE/C,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5C,CAAC;CACJ"}
@@ -1,7 +1,9 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
2
3
  export declare class GbnfNumberValue extends GbnfTerminal {
3
4
  readonly value: number;
4
5
  constructor(value: number);
5
6
  getGrammar(): string;
6
- resolve(): string;
7
+ resolve(grammarGenerator: GbnfGrammarGenerator): string;
8
+ protected generateRuleName(grammarGenerator: GbnfGrammarGenerator): string;
7
9
  }
@@ -8,8 +8,14 @@ export class GbnfNumberValue extends GbnfTerminal {
8
8
  getGrammar() {
9
9
  return '"' + JSON.stringify(this.value) + '"';
10
10
  }
11
- resolve() {
12
- return this.getGrammar();
11
+ resolve(grammarGenerator) {
12
+ const grammar = this.getGrammar();
13
+ if (grammar.length <= grammarGenerator.getProposedLiteralValueRuleNameLength())
14
+ return grammar;
15
+ return super.resolve(grammarGenerator);
16
+ }
17
+ generateRuleName(grammarGenerator) {
18
+ return grammarGenerator.generateRuleNameForLiteralValue(this.value);
13
19
  }
14
20
  }
15
21
  //# sourceMappingURL=GbnfNumberValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfNumberValue.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfNumberValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGhD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7B,KAAK,CAAS;IAE9B,YAAmB,KAAa;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEe,UAAU;QACtB,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;IAEe,OAAO;QACnB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfNumberValue.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfNumberValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAIhD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7B,KAAK,CAAS;IAE9B,YAAmB,KAAa;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEe,UAAU;QACtB,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;IAEe,OAAO,CAAC,gBAAsC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,qCAAqC,EAAE;YAC1E,OAAO,OAAO,CAAC;QAEnB,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAEkB,gBAAgB,CAAC,gBAAsC;QACtE,OAAO,gBAAgB,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;CACJ"}
@@ -9,11 +9,20 @@ export declare class GbnfObjectMap extends GbnfTerminal {
9
9
  value: GbnfTerminal;
10
10
  required: true;
11
11
  }>>;
12
+ readonly additionalProperties?: GbnfTerminal;
13
+ readonly minProperties: number;
14
+ readonly maxProperties?: number;
12
15
  readonly scopeState: GbnfJsonScopeState;
13
- constructor(fields: Array<Readonly<{
14
- key: GbnfString | GbnfStringValue;
15
- value: GbnfTerminal;
16
- required: true;
17
- }>>, scopeState?: GbnfJsonScopeState);
16
+ constructor({ fields, additionalProperties, minProperties, maxProperties, scopeState }: {
17
+ fields: Array<Readonly<{
18
+ key: GbnfString | GbnfStringValue;
19
+ value: GbnfTerminal;
20
+ required: true;
21
+ }>>;
22
+ additionalProperties?: GbnfTerminal;
23
+ minProperties?: number;
24
+ maxProperties?: number;
25
+ scopeState?: GbnfJsonScopeState;
26
+ });
18
27
  getGrammar(grammarGenerator: GbnfGrammarGenerator): string;
19
28
  }
@@ -1,29 +1,87 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  import { GbnfJsonScopeState } from "../utils/GbnfJsonScopeState.js";
3
+ import { GbnfString } from "./GbnfString.js";
3
4
  import { GbnfWhitespace } from "./GbnfWhitespace.js";
4
5
  import { GbnfGrammar } from "./GbnfGrammar.js";
6
+ import { GbnfRepetition } from "./GbnfRepetition.js";
7
+ import { GbnfCommaWhitespace } from "./GbnfCommaWhitespace.js";
5
8
  export class GbnfObjectMap extends GbnfTerminal {
6
9
  fields;
10
+ additionalProperties;
11
+ minProperties;
12
+ maxProperties;
7
13
  scopeState;
8
- constructor(fields, scopeState = new GbnfJsonScopeState()) {
14
+ constructor({ fields, additionalProperties, minProperties = 0, maxProperties, scopeState = new GbnfJsonScopeState() }) {
9
15
  super();
10
16
  this.fields = fields;
17
+ this.additionalProperties = additionalProperties;
18
+ this.minProperties = Math.floor(minProperties);
19
+ this.maxProperties = maxProperties == null ? undefined : Math.floor(maxProperties);
11
20
  this.scopeState = scopeState;
21
+ if (this.minProperties < this.fields.length)
22
+ this.minProperties = this.fields.length;
23
+ if (this.maxProperties != null && this.maxProperties < this.minProperties)
24
+ this.maxProperties = this.minProperties;
25
+ else if (this.maxProperties != null && this.maxProperties < 0)
26
+ this.maxProperties = 0;
12
27
  }
13
28
  getGrammar(grammarGenerator) {
14
29
  const getWhitespaceRuleName = (newScope, newLine) => (newScope
15
30
  ? new GbnfWhitespace(this.scopeState.getForNewScope(), { newLine }).resolve(grammarGenerator)
16
31
  : new GbnfWhitespace(this.scopeState, { newLine }).resolve(grammarGenerator));
32
+ const getCommaWhitespaceRule = (newScope, newLine) => (newScope
33
+ ? new GbnfCommaWhitespace(this.scopeState.getForNewScope(), { newLine })
34
+ : new GbnfCommaWhitespace(this.scopeState, { newLine }));
35
+ const getCommaWhitespaceRuleName = (newScope, newLine) => (getCommaWhitespaceRule(newScope, newLine).resolve(grammarGenerator));
36
+ const objectItemsGrammar = [];
37
+ for (const { key, value } of this.fields) {
38
+ if (objectItemsGrammar.length > 0)
39
+ objectItemsGrammar.push(getCommaWhitespaceRuleName(true, "before"));
40
+ objectItemsGrammar.push(new GbnfGrammar([
41
+ key.getGrammar(grammarGenerator), '":"', "[ ]?", value.resolve(grammarGenerator)
42
+ ]).getGrammar());
43
+ }
44
+ if (this.additionalProperties != null) {
45
+ const additionalPropertiesGrammar = new GbnfGrammar([
46
+ new GbnfString().resolve(grammarGenerator), '":"', "[ ]?", this.additionalProperties.resolve(grammarGenerator)
47
+ ]);
48
+ if (this.minProperties > this.fields.length) {
49
+ if (objectItemsGrammar.length > 0)
50
+ objectItemsGrammar.push(getCommaWhitespaceRuleName(true, "before"));
51
+ objectItemsGrammar.push(new GbnfRepetition({
52
+ value: additionalPropertiesGrammar,
53
+ separator: getCommaWhitespaceRule(true, "before"),
54
+ minRepetitions: this.minProperties - this.fields.length,
55
+ maxRepetitions: this.maxProperties == null
56
+ ? undefined
57
+ : this.maxProperties - this.fields.length
58
+ }).getGrammar(grammarGenerator));
59
+ }
60
+ else if (this.maxProperties == null || this.maxProperties > this.fields.length) {
61
+ if (objectItemsGrammar.length === 0)
62
+ objectItemsGrammar.push(new GbnfRepetition({
63
+ value: additionalPropertiesGrammar,
64
+ separator: getCommaWhitespaceRule(true, "before"),
65
+ maxRepetitions: this.maxProperties == null
66
+ ? undefined
67
+ : this.maxProperties - this.fields.length
68
+ }).getGrammar(grammarGenerator));
69
+ else
70
+ objectItemsGrammar.push(new GbnfRepetition({
71
+ value: new GbnfGrammar([
72
+ getCommaWhitespaceRuleName(true, "before"),
73
+ additionalPropertiesGrammar.resolve(grammarGenerator)
74
+ ], true),
75
+ maxRepetitions: this.maxProperties == null
76
+ ? undefined
77
+ : this.maxProperties - this.fields.length
78
+ }).getGrammar(grammarGenerator));
79
+ }
80
+ }
17
81
  return new GbnfGrammar([
18
82
  '"{"', getWhitespaceRuleName(true, "before"),
19
- ...this.fields.map(({ key, value }, index) => {
20
- return new GbnfGrammar([
21
- key.getGrammar(), '":"', "[ ]?", value.resolve(grammarGenerator),
22
- index < this.fields.length - 1 ? '","' : "",
23
- getWhitespaceRuleName(index < this.fields.length - 1, "before")
24
- ]).getGrammar();
25
- }),
26
- '"}"'
83
+ new GbnfGrammar(objectItemsGrammar).getGrammar(),
84
+ getWhitespaceRuleName(false, "before"), '"}"'
27
85
  ]).getGrammar();
28
86
  }
29
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfObjectMap.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfObjectMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAC;AAGlE,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAG7C,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC3B,MAAM,CAA4F;IAClG,UAAU,CAAqB;IAE/C,YACI,MAAiG,EACjG,aAAiC,IAAI,kBAAkB,EAAE;QAEzD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,MAAM,qBAAqB,GAAG,CAAC,QAAiB,EAAE,OAAmC,EAAE,EAAE,CAAC,CACtF,QAAQ;YACJ,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC3F,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CACjF,CAAC;QAEF,OAAO,IAAI,WAAW,CAAC;YACnB,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC5C,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,EAAE,KAAK,EAAE,EAAE;gBACvC,OAAO,IAAI,WAAW,CAAC;oBACnB,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBAChE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC3C,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC;iBAClE,CAAC,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC,CAAC;YACF,KAAK;SACR,CAAC,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfObjectMap.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfObjectMap.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
3
3
  export declare class GbnfOr extends GbnfTerminal {
4
4
  readonly values: readonly GbnfTerminal[];
5
- constructor(values: readonly GbnfTerminal[]);
5
+ readonly useRawGrammar: boolean;
6
+ constructor(values: readonly GbnfTerminal[], useRawGrammar?: boolean);
6
7
  getGrammar(grammarGenerator: GbnfGrammarGenerator): string;
7
8
  resolve(grammarGenerator: GbnfGrammarGenerator): string;
8
9
  }
@@ -2,13 +2,17 @@ import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  import { grammarNoValue } from "./gbnfConsts.js";
3
3
  export class GbnfOr extends GbnfTerminal {
4
4
  values;
5
- constructor(values) {
5
+ useRawGrammar;
6
+ constructor(values, useRawGrammar = false) {
6
7
  super();
7
8
  this.values = values;
9
+ this.useRawGrammar = useRawGrammar;
8
10
  }
9
11
  getGrammar(grammarGenerator) {
10
12
  const mappedValues = this.values
11
- .map((v) => v.resolve(grammarGenerator))
13
+ .map((v) => (this.useRawGrammar
14
+ ? v.getGrammar(grammarGenerator)
15
+ : v.resolve(grammarGenerator)))
12
16
  .filter((value) => value !== "" && value !== grammarNoValue);
13
17
  if (mappedValues.length === 0)
14
18
  return grammarNoValue;
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfOr.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfOr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,MAAM,OAAO,MAAO,SAAQ,YAAY;IACpB,MAAM,CAA0B;IAEhD,YAAmB,MAA+B;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC;QAEjE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,cAAc,CAAC;aACrB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;QAE5B,OAAO,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAClD,CAAC;IAEe,OAAO,CAAC,gBAAsC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC;QAEjE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,cAAc,CAAC;aACrB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;QAE5B,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfOr.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfOr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,MAAM,OAAO,MAAO,SAAQ,YAAY;IACpB,MAAM,CAA0B;IAChC,aAAa,CAAU;IAEvC,YAAmB,MAA+B,EAAE,gBAAyB,KAAK;QAC9E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACR,IAAI,CAAC,aAAa;YACd,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAChC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CACpC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC;QAEjE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,cAAc,CAAC;aACrB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;QAE5B,OAAO,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAClD,CAAC;IAEe,OAAO,CAAC,gBAAsC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC;QAEjE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,cAAc,CAAC;aACrB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC9B,OAAO,YAAY,CAAC,CAAC,CAAE,CAAC;QAE5B,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;CACJ"}
@@ -2,8 +2,14 @@ import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
3
3
  export declare class GbnfRepetition extends GbnfTerminal {
4
4
  readonly value: GbnfTerminal;
5
+ readonly separator?: GbnfTerminal;
5
6
  readonly minRepetitions: number;
6
7
  readonly maxRepetitions: number | null;
7
- constructor(value: GbnfTerminal, minRepetitions: number, maxRepetitions: number | null);
8
+ constructor({ value, separator, minRepetitions, maxRepetitions }: {
9
+ value: GbnfTerminal;
10
+ separator?: GbnfTerminal;
11
+ minRepetitions?: number;
12
+ maxRepetitions?: number | null;
13
+ });
8
14
  getGrammar(grammarGenerator: GbnfGrammarGenerator): string;
9
15
  }
@@ -1,37 +1,86 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { GbnfGrammar } from "./GbnfGrammar.js";
2
3
  import { grammarNoValue } from "./gbnfConsts.js";
3
4
  export class GbnfRepetition extends GbnfTerminal {
4
5
  value;
6
+ separator;
5
7
  minRepetitions;
6
8
  maxRepetitions;
7
- constructor(value, minRepetitions, maxRepetitions) {
9
+ constructor({ value, separator, minRepetitions = 0, maxRepetitions }) {
8
10
  super();
9
11
  this.value = value;
10
- this.minRepetitions = minRepetitions;
11
- this.maxRepetitions = maxRepetitions;
12
+ this.separator = separator;
13
+ this.minRepetitions = Math.floor(minRepetitions);
14
+ this.maxRepetitions = maxRepetitions == null ? null : Math.floor(maxRepetitions);
15
+ if (this.minRepetitions < 0)
16
+ this.minRepetitions = 0;
17
+ if (this.maxRepetitions != null && this.maxRepetitions < 0)
18
+ this.maxRepetitions = 0;
19
+ if (this.maxRepetitions != null && this.maxRepetitions < this.minRepetitions)
20
+ this.maxRepetitions = this.minRepetitions;
12
21
  }
13
22
  getGrammar(grammarGenerator) {
23
+ if (this.maxRepetitions === 0)
24
+ return grammarNoValue;
14
25
  const resolvedValue = this.value.resolve(grammarGenerator);
15
- let grammarStart = "";
16
- let grammarEnd = "";
17
- for (let i = 0; i < this.minRepetitions; i++) {
18
- grammarStart += "(" + resolvedValue + " ";
19
- grammarEnd += ")";
26
+ const resolvedSeparator = this.separator?.resolve(grammarGenerator);
27
+ if (this.minRepetitions === 0 && this.maxRepetitions == 1)
28
+ return new GbnfGrammar(["(", resolvedValue, ")?"]).getGrammar();
29
+ else if (this.minRepetitions === 1 && this.maxRepetitions === 1)
30
+ return resolvedValue;
31
+ else if (this.minRepetitions === this.maxRepetitions) {
32
+ if (resolvedSeparator == null)
33
+ return new GbnfGrammar(["(", resolvedValue, "){" + String(this.minRepetitions) + "}"]).getGrammar();
34
+ if (this.minRepetitions === 2)
35
+ return new GbnfGrammar([resolvedValue, resolvedSeparator, resolvedValue]).getGrammar();
36
+ return new GbnfGrammar([
37
+ resolvedValue, "(", resolvedSeparator, resolvedValue, "){" + String(this.minRepetitions - 1) + "}"
38
+ ]).getGrammar();
20
39
  }
21
- if (this.maxRepetitions === Infinity || this.maxRepetitions == null) {
22
- grammarStart += "(" + resolvedValue + " ";
23
- grammarEnd += ")*";
40
+ else if (this.minRepetitions === 0 && this.maxRepetitions == null) {
41
+ if (resolvedSeparator == null)
42
+ return new GbnfGrammar(["(", resolvedValue, ")*"]).getGrammar();
43
+ return new GbnfGrammar([
44
+ "(", resolvedValue, "(", resolvedSeparator, resolvedValue, ")*", ")?"
45
+ ]).getGrammar();
24
46
  }
25
- else {
26
- for (let i = this.minRepetitions + 1; i <= this.maxRepetitions; i++) {
27
- grammarStart += "(" + resolvedValue + " ";
28
- grammarEnd += ")?";
29
- }
47
+ else if (this.minRepetitions === 1 && this.maxRepetitions == null) {
48
+ if (resolvedSeparator == null)
49
+ return new GbnfGrammar(["(", resolvedValue, ")+"]).getGrammar();
50
+ return new GbnfGrammar([
51
+ resolvedValue, "(", resolvedSeparator, resolvedValue, ")*"
52
+ ]).getGrammar();
30
53
  }
31
- const res = grammarStart + grammarEnd;
32
- if (res === "")
33
- return grammarNoValue;
34
- return res;
54
+ else if (this.maxRepetitions == null) {
55
+ if (resolvedSeparator == null)
56
+ return new GbnfGrammar(["(", resolvedValue, "){" + String(this.minRepetitions) + ",}"]).getGrammar();
57
+ return new GbnfGrammar([
58
+ resolvedValue, "(", resolvedSeparator, resolvedValue, "){" + String(this.minRepetitions - 1) + ",}"
59
+ ]).getGrammar();
60
+ }
61
+ if (resolvedSeparator == null)
62
+ return new GbnfGrammar(["(", resolvedValue, "){" + String(this.minRepetitions) + "," + String(this.maxRepetitions) + "}"]).getGrammar();
63
+ if (this.minRepetitions === 0) {
64
+ if (this.maxRepetitions === 2)
65
+ return new GbnfGrammar([
66
+ "(", resolvedValue, "(", resolvedSeparator, resolvedValue, ")?", ")?"
67
+ ]).getGrammar();
68
+ return new GbnfGrammar([
69
+ "(", resolvedValue, "(", resolvedSeparator, resolvedValue, "){0," + String(this.maxRepetitions - 1) + "}", ")?"
70
+ ]).getGrammar();
71
+ }
72
+ else if (this.minRepetitions === 1) {
73
+ if (this.maxRepetitions === 2)
74
+ return new GbnfGrammar([
75
+ resolvedValue, "(", resolvedSeparator, resolvedValue, ")?"
76
+ ]).getGrammar();
77
+ return new GbnfGrammar([
78
+ resolvedValue, "(", resolvedSeparator, resolvedValue, "){0," + String(this.maxRepetitions - 1) + "}"
79
+ ]).getGrammar();
80
+ }
81
+ return new GbnfGrammar([
82
+ resolvedValue, "(", resolvedSeparator, resolvedValue, "){" + String(this.minRepetitions - 1) + "," + String(this.maxRepetitions - 1) + "}"
83
+ ]).getGrammar();
35
84
  }
36
85
  }
37
86
  //# sourceMappingURL=GbnfRepetition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfRepetition.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfRepetition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC5B,KAAK,CAAe;IACpB,cAAc,CAAS;IACvB,cAAc,CAAgB;IAE9C,YAAmB,KAAmB,EAAE,cAAsB,EAAE,cAA6B;QACzF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC3D,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,YAAY,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;YAC1C,UAAU,IAAI,GAAG,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAClE,YAAY,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;YAC1C,UAAU,IAAI,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClE,YAAY,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;gBAC1C,UAAU,IAAI,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,GAAG,UAAU,CAAC;QAEtC,IAAI,GAAG,KAAK,EAAE;YACV,OAAO,cAAc,CAAC;QAE1B,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfRepetition.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfRepetition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAG/C,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC5B,KAAK,CAAe;IACpB,SAAS,CAAgB;IACzB,cAAc,CAAS;IACvB,cAAc,CAAgB;IAE9C,YAAmB,EAAC,KAAK,EAAE,SAAS,EAAE,cAAc,GAAG,CAAC,EAAE,cAAc,EAEvE;QACG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEjF,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC;YACtD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YACxE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAClD,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;YACzB,OAAO,cAAc,CAAC;QAE1B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC;YACrD,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;aAC/D,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;YAC3D,OAAO,aAAa,CAAC;aACpB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACnD,IAAI,iBAAiB,IAAI,IAAI;gBACzB,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAExG,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;gBACzB,OAAO,IAAI,WAAW,CAAC,CAAC,aAAa,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAE3F,OAAO,IAAI,WAAW,CAAC;gBACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG;aACrG,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAClE,IAAI,iBAAiB,IAAI,IAAI;gBACzB,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAEpE,OAAO,IAAI,WAAW,CAAC;gBACnB,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI;aACxE,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAClE,IAAI,iBAAiB,IAAI,IAAI;gBACzB,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAEpE,OAAO,IAAI,WAAW,CAAC;gBACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI;aAC7D,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YACrC,IAAI,iBAAiB,IAAI,IAAI;gBACzB,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAEzG,OAAO,IAAI,WAAW,CAAC;gBACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,IAAI;aACtG,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,iBAAiB,IAAI,IAAI;YACzB,OAAO,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAE5I,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;gBACzB,OAAO,IAAI,WAAW,CAAC;oBACnB,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI;iBACxE,CAAC,CAAC,UAAU,EAAE,CAAC;YAEpB,OAAO,IAAI,WAAW,CAAC;gBACnB,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI;aAClH,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;gBACzB,OAAO,IAAI,WAAW,CAAC;oBACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI;iBAC7D,CAAC,CAAC,UAAU,EAAE,CAAC;YAEpB,OAAO,IAAI,WAAW,CAAC;gBACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG;aACvG,CAAC,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,WAAW,CAAC;YACnB,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG;SAC7I,CAAC,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACJ"}
@@ -1,5 +1,12 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
2
3
  export declare class GbnfString extends GbnfTerminal {
3
- getGrammar(): string;
4
+ readonly minLength: number;
5
+ readonly maxLength?: number;
6
+ constructor({ minLength, maxLength }?: {
7
+ minLength?: number;
8
+ maxLength?: number;
9
+ });
10
+ getGrammar(grammarGenerator: GbnfGrammarGenerator): string;
4
11
  protected getRuleName(): string;
5
12
  }
@@ -1,33 +1,43 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
2
  import { reservedRuleNames } from "./gbnfConsts.js";
3
+ import { GbnfRepetition } from "./GbnfRepetition.js";
4
+ import { GbnfInsideStringChar } from "./GbnfInsideStringChar.js";
3
5
  export class GbnfString extends GbnfTerminal {
4
- getGrammar() {
6
+ minLength;
7
+ maxLength;
8
+ constructor({ minLength = 0, maxLength } = {}) {
9
+ super();
10
+ this.minLength = Math.floor(minLength ?? 0);
11
+ this.maxLength = maxLength == null ? undefined : Math.floor(maxLength);
12
+ if (this.minLength < 0)
13
+ this.minLength = 0;
14
+ if (this.maxLength != null && this.maxLength < this.minLength)
15
+ this.maxLength = this.minLength;
16
+ }
17
+ getGrammar(grammarGenerator) {
18
+ if (this.minLength == 0 && this.maxLength == null)
19
+ return [
20
+ '"\\""',
21
+ new GbnfInsideStringChar().resolve(grammarGenerator) + "*",
22
+ '"\\""'
23
+ ].join(" ");
24
+ else if (this.minLength == 0 && this.maxLength == 0)
25
+ return '"\\"\\""';
5
26
  return [
6
27
  '"\\""',
7
- or([
8
- negatedCharacterSet([
9
- '"',
10
- "\\\\",
11
- "\\x7F",
12
- "\\x00-\\x1F"
13
- ]),
14
- // escape sequences
15
- '"\\\\" ' + or([
16
- '["\\\\/bfnrt]',
17
- '"u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]'
18
- ])
19
- ]) + "*",
28
+ new GbnfRepetition({
29
+ value: new GbnfInsideStringChar(),
30
+ minRepetitions: this.minLength,
31
+ maxRepetitions: this.maxLength
32
+ }).getGrammar(grammarGenerator),
20
33
  '"\\""'
21
34
  ].join(" ");
22
35
  }
23
36
  getRuleName() {
24
- return reservedRuleNames.string;
37
+ return reservedRuleNames.string({
38
+ minLength: this.minLength,
39
+ maxLength: this.maxLength
40
+ });
25
41
  }
26
42
  }
27
- function negatedCharacterSet(characterDefinitions) {
28
- return "[^" + characterDefinitions.join("") + "]";
29
- }
30
- function or(definitions) {
31
- return "(" + definitions.join(" | ") + ")";
32
- }
33
43
  //# sourceMappingURL=GbnfString.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfString.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAGlD,MAAM,OAAO,UAAW,SAAQ,YAAY;IACjC,UAAU;QACb,OAAO;YACH,OAAO;YACP,EAAE,CAAC;gBACC,mBAAmB,CAAC;oBAChB,GAAG;oBACH,MAAM;oBACN,OAAO;oBACP,aAAa;iBAChB,CAAC;gBAEF,mBAAmB;gBACnB,SAAS,GAAG,EAAE,CAAC;oBACX,eAAe;oBACf,qDAAqD;iBACxD,CAAC;aACL,CAAC,GAAG,GAAG;YACR,OAAO;SACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAEkB,WAAW;QAC1B,OAAO,iBAAiB,CAAC,MAAM,CAAC;IACpC,CAAC;CACJ;AAED,SAAS,mBAAmB,CAAC,oBAA8B;IACvD,OAAO,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACtD,CAAC;AAED,SAAS,EAAE,CAAC,WAAqB;IAC7B,OAAO,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"GbnfString.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAG/D,MAAM,OAAO,UAAW,SAAQ,YAAY;IACxB,SAAS,CAAS;IAClB,SAAS,CAAU;IAEnC,YAAmB,EACf,SAAS,GAAG,CAAC,EACb,SAAS,KAIT,EAAE;QACF,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvE,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YACzD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,CAAC;IAEM,UAAU,CAAC,gBAAsC;QACpD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;YAC7C,OAAO;gBACH,OAAO;gBACP,IAAI,oBAAoB,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG;gBAC1D,OAAO;aACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACX,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YAC/C,OAAO,UAAU,CAAC;QAEtB,OAAO;YACH,OAAO;YACP,IAAI,cAAc,CAAC;gBACf,KAAK,EAAE,IAAI,oBAAoB,EAAE;gBACjC,cAAc,EAAE,IAAI,CAAC,SAAS;gBAC9B,cAAc,EAAE,IAAI,CAAC,SAAS;aACjC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAC/B,OAAO;SACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAEkB,WAAW;QAC1B,OAAO,iBAAiB,CAAC,MAAM,CAAC;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -1,6 +1,8 @@
1
1
  import { GbnfTerminal } from "../GbnfTerminal.js";
2
+ import { GbnfGrammarGenerator } from "../GbnfGrammarGenerator.js";
2
3
  export declare class GbnfStringValue extends GbnfTerminal {
3
4
  readonly value: string;
4
5
  constructor(value: string);
5
6
  getGrammar(): string;
7
+ protected generateRuleName(grammarGenerator: GbnfGrammarGenerator): string;
6
8
  }
@@ -10,14 +10,17 @@ export class GbnfStringValue extends GbnfTerminal {
10
10
  '"',
11
11
  '\\"',
12
12
  this.value
13
- .replaceAll("\\", "\\\\")
14
- .replaceAll("\t", "\\t")
15
- .replaceAll("\r", "\\r")
16
- .replaceAll("\n", "\\n")
13
+ .replaceAll("\\", "\\\\\\\\")
14
+ .replaceAll("\t", "\\\\t")
15
+ .replaceAll("\r", "\\\\r")
16
+ .replaceAll("\n", "\\\\n")
17
17
  .replaceAll('"', "\\\\" + '\\"'),
18
18
  '\\"',
19
19
  '"'
20
20
  ].join("");
21
21
  }
22
+ generateRuleName(grammarGenerator) {
23
+ return grammarGenerator.generateRuleNameForLiteralValue(this.value);
24
+ }
22
25
  }
23
26
  //# sourceMappingURL=GbnfStringValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GbnfStringValue.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfStringValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGhD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7B,KAAK,CAAS;IAE9B,YAAmB,KAAa;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEe,UAAU;QACtB,OAAO;YACH,GAAG;YACH,KAAK;YACL,IAAI,CAAC,KAAK;iBACL,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;iBACxB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;iBACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;iBACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;iBACvB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;YACpC,KAAK;YACL,GAAG;SACN,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;CACJ"}
1
+ {"version":3,"file":"GbnfStringValue.js","sourceRoot":"","sources":["../../../../src/utils/gbnfJson/terminals/GbnfStringValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAIhD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7B,KAAK,CAAS;IAE9B,YAAmB,KAAa;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEe,UAAU;QACtB,OAAO;YACH,GAAG;YACH,KAAK;YACL,IAAI,CAAC,KAAK;iBACL,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;iBAC5B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;iBACzB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;iBACzB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;iBACzB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;YACpC,KAAK;YACL,GAAG;SACN,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IAEkB,gBAAgB,CAAC,gBAAsC;QACtE,OAAO,gBAAgB,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;CACJ"}
@@ -5,8 +5,9 @@ export declare class GbnfWhitespace extends GbnfTerminal {
5
5
  readonly newLine: "before" | "after" | false;
6
6
  constructor(scopeState: GbnfJsonScopeState, { newLine }?: {
7
7
  newLine?: "before" | "after" | false;
8
- space?: boolean;
9
8
  });
10
9
  getGrammar(): string;
10
+ protected getGrammarFromResolve(): string;
11
+ private _getGrammar;
11
12
  protected getRuleName(): string;
12
13
  }