storybook 10.1.0-alpha.8 → 10.1.0-beta.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 (198) hide show
  1. package/dist/_browser-chunks/Color-FTG7SQDA.js +1097 -0
  2. package/dist/_browser-chunks/WithTooltip-LMROHDUP.js +1651 -0
  3. package/dist/_browser-chunks/chunk-2FRVAXCZ.js +7 -0
  4. package/dist/_browser-chunks/{chunk-FDWKXLBI.js → chunk-2XZMBGTA.js} +44 -109
  5. package/dist/_browser-chunks/chunk-3IAH5M2U.js +171 -0
  6. package/dist/_browser-chunks/chunk-3OXGAGBE.js +779 -0
  7. package/dist/_browser-chunks/{chunk-TMDZCWME.js → chunk-3PJE6VLG.js} +1 -3
  8. package/dist/_browser-chunks/{chunk-VAMFPZY3.js → chunk-45UGUKRX.js} +2 -7
  9. package/dist/_browser-chunks/chunk-6XWLIJQL.js +11 -0
  10. package/dist/_browser-chunks/{chunk-MM7DTO55.js → chunk-A242L54C.js} +10 -16
  11. package/dist/_browser-chunks/chunk-AIOS4NGK.js +252 -0
  12. package/dist/_browser-chunks/chunk-AS2HQEYC.js +14 -0
  13. package/dist/_browser-chunks/chunk-AXG2BOBL.js +836 -0
  14. package/dist/_browser-chunks/{chunk-MH6AXFXB.js → chunk-CHUV5WSW.js} +0 -5
  15. package/dist/_browser-chunks/chunk-EUVGDK4H.js +93 -0
  16. package/dist/_browser-chunks/chunk-EZSQOHRI.js +18 -0
  17. package/dist/_browser-chunks/{chunk-CADGRH3P.js → chunk-FNXWN6IK.js} +3 -8
  18. package/dist/_browser-chunks/chunk-FQ7SLVLR.js +66 -0
  19. package/dist/_browser-chunks/chunk-GFLS4VP3.js +64 -0
  20. package/dist/_browser-chunks/chunk-GFY5R5EY.js +47 -0
  21. package/dist/_browser-chunks/{chunk-L2D73C6Z.js → chunk-H6XK3RSC.js} +13 -21
  22. package/dist/_browser-chunks/chunk-IPA5A322.js +71 -0
  23. package/dist/_browser-chunks/chunk-JP7NCOJX.js +37 -0
  24. package/dist/_browser-chunks/chunk-KJHJLCBK.js +11 -0
  25. package/dist/_browser-chunks/{chunk-OWPZQM2D.js → chunk-L4RMQ7D7.js} +60 -110
  26. package/dist/_browser-chunks/chunk-P4F4UVXX.js +951 -0
  27. package/dist/_browser-chunks/{chunk-AB7OOPUX.js → chunk-QKODTO7K.js} +0 -5
  28. package/dist/_browser-chunks/chunk-RP5RXKFU.js +2491 -0
  29. package/dist/_browser-chunks/chunk-SL75JR6Y.js +9 -0
  30. package/dist/_browser-chunks/chunk-SS2NHR7W.js +2969 -0
  31. package/dist/_browser-chunks/chunk-UD6FQLAF.js +1481 -0
  32. package/dist/_browser-chunks/chunk-VYJQ7RU5.js +2853 -0
  33. package/dist/_browser-chunks/chunk-WJYERY3R.js +136 -0
  34. package/dist/_browser-chunks/chunk-XJNX76GA.js +85 -0
  35. package/dist/_browser-chunks/{chunk-F4Q6SGTB.js → chunk-YKE5S47A.js} +177 -399
  36. package/dist/_browser-chunks/{chunk-SN4J4IQ3.js → chunk-ZUWEVLDX.js} +1 -7
  37. package/dist/_browser-chunks/{formatter-OMEEQ6HG.js → formatter-QJ4M4OGQ.js} +4 -9
  38. package/dist/_browser-chunks/{syntaxhighlighter-CAVLW7PM.js → syntaxhighlighter-IQDEPFLK.js} +704 -1848
  39. package/dist/_node-chunks/{builder-manager-57OYTFQ5.js → builder-manager-BDAQHXFI.js} +510 -1019
  40. package/dist/_node-chunks/camelcase-3C7DZZPX.js +37 -0
  41. package/dist/_node-chunks/chunk-2IIQTGNE.js +6024 -0
  42. package/dist/_node-chunks/chunk-56U5LEMP.js +3043 -0
  43. package/dist/_node-chunks/chunk-7LIRCAQE.js +20 -0
  44. package/dist/_node-chunks/chunk-7RN6TXKP.js +603 -0
  45. package/dist/_node-chunks/chunk-7SJ7PZNL.js +4523 -0
  46. package/dist/_node-chunks/{chunk-2GK7NW46.js → chunk-BG4RDXG7.js} +8 -10
  47. package/dist/_node-chunks/chunk-CBQKMXLQ.js +18 -0
  48. package/dist/_node-chunks/chunk-CN2IW2KQ.js +1564 -0
  49. package/dist/_node-chunks/chunk-CQMAU6UQ.js +943 -0
  50. package/dist/_node-chunks/{chunk-RG4Z25PY.js → chunk-D6ND3TVY.js} +116 -276
  51. package/dist/_node-chunks/chunk-DC355CYB.js +61 -0
  52. package/dist/_node-chunks/{chunk-EBYCXVVR.js → chunk-EVK2SBW5.js} +292 -688
  53. package/dist/_node-chunks/chunk-IXWEUXJ2.js +119 -0
  54. package/dist/_node-chunks/{chunk-6F6CCOXH.js → chunk-KVRF22SH.js} +469 -983
  55. package/dist/_node-chunks/chunk-LEDP4QQW.js +919 -0
  56. package/dist/_node-chunks/{chunk-C4KEDJ6O.js → chunk-MMVV6DGG.js} +8133 -8887
  57. package/dist/_node-chunks/chunk-O5CGEVRI.js +29 -0
  58. package/dist/_node-chunks/chunk-OZZO56XN.js +299 -0
  59. package/dist/_node-chunks/chunk-POT2EVGD.js +78 -0
  60. package/dist/_node-chunks/chunk-R5YGFSTV.js +3781 -0
  61. package/dist/_node-chunks/chunk-SQCTM2OS.js +23 -0
  62. package/dist/_node-chunks/chunk-UFOFO5H7.js +54 -0
  63. package/dist/_node-chunks/chunk-VBF7ALJF.js +72 -0
  64. package/dist/_node-chunks/chunk-W6MAMTUF.js +70 -0
  65. package/dist/_node-chunks/chunk-WURL4XOT.js +46662 -0
  66. package/dist/_node-chunks/chunk-XGK6MVKR.js +61 -0
  67. package/dist/_node-chunks/chunk-YV3GDSDT.js +765 -0
  68. package/dist/_node-chunks/{chunk-RSHLCHYY.js → chunk-YWV55YW3.js} +15 -24
  69. package/dist/_node-chunks/dist-KEP4IFRN.js +121 -0
  70. package/dist/_node-chunks/globby-4WUBTDCN.js +3452 -0
  71. package/dist/_node-chunks/lib-JVOEKTYM.js +366 -0
  72. package/dist/_node-chunks/mdx-N42X6CFJ-C5WFYYXR.js +14329 -0
  73. package/dist/_node-chunks/p-limit-LDY632RS.js +116 -0
  74. package/dist/actions/decorator.js +21 -42
  75. package/dist/actions/index.js +3 -3
  76. package/dist/babel/index.d.ts +671 -335
  77. package/dist/babel/index.js +10 -11
  78. package/dist/bin/core.js +601 -1548
  79. package/dist/bin/dispatcher.js +36 -36
  80. package/dist/bin/loader.js +24 -38
  81. package/dist/channels/index.js +98 -234
  82. package/dist/cli/index.d.ts +1479 -133
  83. package/dist/cli/index.js +30 -8540
  84. package/dist/client-logger/index.js +31 -61
  85. package/dist/common/index.d.ts +139 -62
  86. package/dist/common/index.js +66 -51
  87. package/dist/components/index.d.ts +575 -273
  88. package/dist/components/index.js +14863 -4313
  89. package/dist/core-events/index.js +2 -66
  90. package/dist/core-server/index.d.ts +3 -2
  91. package/dist/core-server/index.js +2910 -8519
  92. package/dist/core-server/presets/common-manager.css +2 -2
  93. package/dist/core-server/presets/common-manager.js +2521 -5233
  94. package/dist/core-server/presets/common-override-preset.js +31 -60
  95. package/dist/core-server/presets/common-preset.js +663 -962
  96. package/dist/csf/index.js +534 -1179
  97. package/dist/csf-tools/index.js +9 -9
  98. package/dist/docs-tools/index.js +6 -6
  99. package/dist/highlight/index.js +2 -2
  100. package/dist/instrumenter/index.js +199 -415
  101. package/dist/manager/globals-runtime.js +59044 -67141
  102. package/dist/manager/globals.js +2 -3
  103. package/dist/manager/manager-stores.d.ts +1 -0
  104. package/dist/manager/manager-stores.js +23 -0
  105. package/dist/manager/runtime.js +11511 -10953
  106. package/dist/manager-api/index.d.ts +1811 -2
  107. package/dist/manager-api/index.js +1348 -2401
  108. package/dist/manager-errors.d.ts +9 -0
  109. package/dist/manager-errors.js +3 -3
  110. package/dist/mocking-utils/index.d.ts +1126 -0
  111. package/dist/mocking-utils/index.js +1181 -0
  112. package/dist/node-logger/index.d.ts +192 -24
  113. package/dist/node-logger/index.js +23 -4471
  114. package/dist/preview/globals.js +2 -3
  115. package/dist/preview/runtime.js +10799 -22393
  116. package/dist/preview-api/index.d.ts +1 -1
  117. package/dist/preview-api/index.js +13 -13
  118. package/dist/preview-errors.d.ts +9 -0
  119. package/dist/preview-errors.js +4 -4
  120. package/dist/router/index.js +347 -899
  121. package/dist/server-errors.d.ts +34 -1
  122. package/dist/server-errors.js +17 -10
  123. package/dist/telemetry/index.d.ts +24 -3
  124. package/dist/telemetry/index.js +25 -24
  125. package/dist/test/index.js +6131 -11916
  126. package/dist/theming/create.d.ts +1 -0
  127. package/dist/theming/create.js +4 -4
  128. package/dist/theming/index.d.ts +3366 -2599
  129. package/dist/theming/index.js +501 -1091
  130. package/dist/types/index.d.ts +72 -8
  131. package/dist/types/index.js +27 -12
  132. package/dist/viewport/index.js +3 -3
  133. package/package.json +26 -17
  134. package/dist/_browser-chunks/Color-7ZNS6F6B.js +0 -1676
  135. package/dist/_browser-chunks/WithTooltip-SK46ZJ2J.js +0 -13
  136. package/dist/_browser-chunks/chunk-6A7OIVEL.js +0 -66
  137. package/dist/_browser-chunks/chunk-B4A3ADP3.js +0 -3816
  138. package/dist/_browser-chunks/chunk-BOOOPFZF.js +0 -2335
  139. package/dist/_browser-chunks/chunk-FSBVR7H5.js +0 -106
  140. package/dist/_browser-chunks/chunk-FUOHXXZT.js +0 -23
  141. package/dist/_browser-chunks/chunk-GTKOCWCT.js +0 -17
  142. package/dist/_browser-chunks/chunk-HHW4FUMO.js +0 -12
  143. package/dist/_browser-chunks/chunk-JVSKG4YS.js +0 -4052
  144. package/dist/_browser-chunks/chunk-LASUB7TL.js +0 -76
  145. package/dist/_browser-chunks/chunk-LYCSRYYR.js +0 -101
  146. package/dist/_browser-chunks/chunk-NVV6MIOE.js +0 -243
  147. package/dist/_browser-chunks/chunk-OBXWFEPB.js +0 -852
  148. package/dist/_browser-chunks/chunk-OPCDBBL3.js +0 -48
  149. package/dist/_browser-chunks/chunk-PB6FZ3WE.js +0 -130
  150. package/dist/_browser-chunks/chunk-RNE2IUTB.js +0 -1300
  151. package/dist/_browser-chunks/chunk-RW5PKMWM.js +0 -4182
  152. package/dist/_browser-chunks/chunk-SYS437NN.js +0 -122
  153. package/dist/_browser-chunks/chunk-U46RQHA4.js +0 -12
  154. package/dist/_browser-chunks/chunk-UTNZYD2N.js +0 -311
  155. package/dist/_browser-chunks/chunk-VUAFL5XK.js +0 -20
  156. package/dist/_browser-chunks/chunk-XDGMHOV7.js +0 -2197
  157. package/dist/_browser-chunks/chunk-XW6KSYKF.js +0 -16
  158. package/dist/_browser-chunks/chunk-Y3M7TW6K.js +0 -1041
  159. package/dist/_browser-chunks/chunk-ZNRFDIVA.js +0 -233
  160. package/dist/_node-chunks/camelcase-2KEDZHZ2.js +0 -18
  161. package/dist/_node-chunks/chunk-34NNXTBR.js +0 -28
  162. package/dist/_node-chunks/chunk-3N2A3KZX.js +0 -420
  163. package/dist/_node-chunks/chunk-5P7P5KDN.js +0 -90
  164. package/dist/_node-chunks/chunk-5WBRBDXI.js +0 -79
  165. package/dist/_node-chunks/chunk-7PWTU7T2.js +0 -697
  166. package/dist/_node-chunks/chunk-CHRHQ7AZ.js +0 -4272
  167. package/dist/_node-chunks/chunk-D4EGQLJI.js +0 -64656
  168. package/dist/_node-chunks/chunk-EKCURTKU.js +0 -1544
  169. package/dist/_node-chunks/chunk-GBVPPW4H.js +0 -1657
  170. package/dist/_node-chunks/chunk-J6VOKT2F.js +0 -220
  171. package/dist/_node-chunks/chunk-JLBYSGXS.js +0 -69
  172. package/dist/_node-chunks/chunk-LLCELSUL.js +0 -1198
  173. package/dist/_node-chunks/chunk-NS4OCQ4F.js +0 -61
  174. package/dist/_node-chunks/chunk-NXVLFYDR.js +0 -1518
  175. package/dist/_node-chunks/chunk-NZPWAJOZ.js +0 -304
  176. package/dist/_node-chunks/chunk-OYFSIV3I.js +0 -6712
  177. package/dist/_node-chunks/chunk-OZ43LMDF.js +0 -5029
  178. package/dist/_node-chunks/chunk-Q5HJHFF2.js +0 -61
  179. package/dist/_node-chunks/chunk-QHER4CEN.js +0 -34
  180. package/dist/_node-chunks/chunk-RF2PJM54.js +0 -1531
  181. package/dist/_node-chunks/chunk-S3OHGEE3.js +0 -101
  182. package/dist/_node-chunks/chunk-S5XOMVSV.js +0 -2256
  183. package/dist/_node-chunks/chunk-SGXQZ47H.js +0 -1586
  184. package/dist/_node-chunks/chunk-TDU6OVUH.js +0 -111
  185. package/dist/_node-chunks/chunk-TYQQFNQX.js +0 -1250
  186. package/dist/_node-chunks/chunk-WNGLARN2.js +0 -4741
  187. package/dist/_node-chunks/chunk-YUOVDCXL.js +0 -18
  188. package/dist/_node-chunks/dist-O5FB7YUW.js +0 -175
  189. package/dist/_node-chunks/globby-3NMV7WHX.js +0 -5222
  190. package/dist/_node-chunks/lib-VZD7BRSA.js +0 -518
  191. package/dist/_node-chunks/mdx-N42X6CFJ-3RP7RKKU.js +0 -22017
  192. package/dist/_node-chunks/p-limit-LIKBTXEJ.js +0 -168
  193. package/dist/_node-chunks/plugin-2NYZBK4A.js +0 -129
  194. package/dist/_node-chunks/plugin-6QGMO7J7.js +0 -159
  195. package/dist/_node-chunks/webpack-inject-mocker-runtime-plugin-Z2JI6J2H.js +0 -69102
  196. package/dist/_node-chunks/webpack-mock-plugin-D4BE2SSI.js +0 -124
  197. package/dist/core-server/presets/webpack/loaders/storybook-mock-transform-loader.js +0 -36
  198. package/dist/core-server/presets/webpack/loaders/webpack-automock-loader.js +0 -33
@@ -0,0 +1,2853 @@
1
+ import {
2
+ mapValues
3
+ } from "./chunk-AIOS4NGK.js";
4
+ import {
5
+ isPlainObject
6
+ } from "./chunk-GFLS4VP3.js";
7
+ import {
8
+ __commonJS,
9
+ __toESM
10
+ } from "./chunk-A242L54C.js";
11
+
12
+ // ../node_modules/jsdoc-type-pratt-parser/dist/index.js
13
+ var require_dist = __commonJS({
14
+ "../node_modules/jsdoc-type-pratt-parser/dist/index.js"(exports, module) {
15
+ (function(global, factory) {
16
+ typeof exports == "object" && typeof module < "u" ? factory(exports) : typeof define == "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis < "u" ? globalThis : global || self, factory(global.jtpp = {}));
17
+ })(exports, (function(exports2) {
18
+ "use strict";
19
+ function tokenToString(token) {
20
+ return token.text !== void 0 && token.text !== "" ? `'${token.type}' with value '${token.text}'` : `'${token.type}'`;
21
+ }
22
+ class NoParsletFoundError extends Error {
23
+ constructor(token) {
24
+ super(`No parslet found for token: ${tokenToString(token)}`), this.token = token, Object.setPrototypeOf(this, NoParsletFoundError.prototype);
25
+ }
26
+ getToken() {
27
+ return this.token;
28
+ }
29
+ }
30
+ class EarlyEndOfParseError extends Error {
31
+ constructor(token) {
32
+ super(`The parsing ended early. The next token was: ${tokenToString(token)}`), this.token = token, Object.setPrototypeOf(this, EarlyEndOfParseError.prototype);
33
+ }
34
+ getToken() {
35
+ return this.token;
36
+ }
37
+ }
38
+ class UnexpectedTypeError extends Error {
39
+ constructor(result, message) {
40
+ let error = `Unexpected type: '${result.type}'.`;
41
+ message !== void 0 && (error += ` Message: ${message}`), super(error), Object.setPrototypeOf(this, UnexpectedTypeError.prototype);
42
+ }
43
+ }
44
+ function makePunctuationRule(type) {
45
+ return (text) => text.startsWith(type) ? { type, text: type } : null;
46
+ }
47
+ function getQuoted(text) {
48
+ let position = 0, char, mark = text[0], escaped = !1;
49
+ if (mark !== "'" && mark !== '"')
50
+ return null;
51
+ for (; position < text.length; ) {
52
+ if (position++, char = text[position], !escaped && char === mark) {
53
+ position++;
54
+ break;
55
+ }
56
+ escaped = !escaped && char === "\\";
57
+ }
58
+ if (char !== mark)
59
+ throw new Error("Unterminated String");
60
+ return text.slice(0, position);
61
+ }
62
+ let identifierStartRegex = new RegExp("[$_\\p{ID_Start}]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}", "u"), identifierContinueRegex = new RegExp("[$\\-\\p{ID_Continue}\\u200C\\u200D]|\\\\u\\p{Hex_Digit}{4}|\\\\u\\{0*(?:\\p{Hex_Digit}{1,5}|10\\p{Hex_Digit}{4})\\}", "u");
63
+ function getIdentifier(text) {
64
+ let char = text[0];
65
+ if (!identifierStartRegex.test(char))
66
+ return null;
67
+ let position = 1;
68
+ do {
69
+ if (char = text[position], !identifierContinueRegex.test(char))
70
+ break;
71
+ position++;
72
+ } while (position < text.length);
73
+ return text.slice(0, position);
74
+ }
75
+ let numberRegex = /^(NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity))/;
76
+ function getNumber(text) {
77
+ var _a, _b;
78
+ return (_b = (_a = numberRegex.exec(text)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;
79
+ }
80
+ let identifierRule = (text) => {
81
+ let value = getIdentifier(text);
82
+ return value == null ? null : {
83
+ type: "Identifier",
84
+ text: value
85
+ };
86
+ };
87
+ function makeKeyWordRule(type) {
88
+ return (text) => {
89
+ if (!text.startsWith(type))
90
+ return null;
91
+ let prepends = text[type.length];
92
+ return prepends !== void 0 && identifierContinueRegex.test(prepends) ? null : {
93
+ type,
94
+ text: type
95
+ };
96
+ };
97
+ }
98
+ let stringValueRule = (text) => {
99
+ let value = getQuoted(text);
100
+ return value == null ? null : {
101
+ type: "StringValue",
102
+ text: value
103
+ };
104
+ }, eofRule = (text) => text.length > 0 ? null : {
105
+ type: "EOF",
106
+ text: ""
107
+ }, numberRule = (text) => {
108
+ let value = getNumber(text);
109
+ return value === null ? null : {
110
+ type: "Number",
111
+ text: value
112
+ };
113
+ }, rules = [
114
+ eofRule,
115
+ makePunctuationRule("=>"),
116
+ makePunctuationRule("("),
117
+ makePunctuationRule(")"),
118
+ makePunctuationRule("{"),
119
+ makePunctuationRule("}"),
120
+ makePunctuationRule("["),
121
+ makePunctuationRule("]"),
122
+ makePunctuationRule("|"),
123
+ makePunctuationRule("&"),
124
+ makePunctuationRule("<"),
125
+ makePunctuationRule(">"),
126
+ makePunctuationRule(","),
127
+ makePunctuationRule(";"),
128
+ makePunctuationRule("*"),
129
+ makePunctuationRule("?"),
130
+ makePunctuationRule("!"),
131
+ makePunctuationRule("="),
132
+ makePunctuationRule(":"),
133
+ makePunctuationRule("..."),
134
+ makePunctuationRule("."),
135
+ makePunctuationRule("#"),
136
+ makePunctuationRule("~"),
137
+ makePunctuationRule("/"),
138
+ makePunctuationRule("@"),
139
+ makeKeyWordRule("undefined"),
140
+ makeKeyWordRule("null"),
141
+ makeKeyWordRule("function"),
142
+ makeKeyWordRule("this"),
143
+ makeKeyWordRule("new"),
144
+ makeKeyWordRule("module"),
145
+ makeKeyWordRule("event"),
146
+ makeKeyWordRule("extends"),
147
+ makeKeyWordRule("external"),
148
+ makeKeyWordRule("infer"),
149
+ makeKeyWordRule("typeof"),
150
+ makeKeyWordRule("keyof"),
151
+ makeKeyWordRule("readonly"),
152
+ makeKeyWordRule("import"),
153
+ makeKeyWordRule("is"),
154
+ makeKeyWordRule("in"),
155
+ makeKeyWordRule("asserts"),
156
+ numberRule,
157
+ identifierRule,
158
+ stringValueRule
159
+ ], breakingWhitespaceRegex = /^\s*\n\s*/;
160
+ class Lexer {
161
+ static create(text) {
162
+ let current = this.read(text);
163
+ text = current.text;
164
+ let next = this.read(text);
165
+ return text = next.text, new Lexer(text, void 0, current.token, next.token);
166
+ }
167
+ constructor(text, previous, current, next) {
168
+ this.text = "", this.text = text, this.previous = previous, this.current = current, this.next = next;
169
+ }
170
+ static read(text, startOfLine = !1) {
171
+ startOfLine = startOfLine || breakingWhitespaceRegex.test(text), text = text.trim();
172
+ for (let rule of rules) {
173
+ let partial = rule(text);
174
+ if (partial !== null) {
175
+ let token = Object.assign(Object.assign({}, partial), { startOfLine });
176
+ return text = text.slice(token.text.length), { text, token };
177
+ }
178
+ }
179
+ throw new Error("Unexpected Token " + text);
180
+ }
181
+ advance() {
182
+ let next = Lexer.read(this.text);
183
+ return new Lexer(next.text, this.current, this.next, next.token);
184
+ }
185
+ }
186
+ function assertRootResult(result) {
187
+ if (result === void 0)
188
+ throw new Error("Unexpected undefined");
189
+ if (result.type === "JsdocTypeKeyValue" || result.type === "JsdocTypeParameterList" || result.type === "JsdocTypeProperty" || result.type === "JsdocTypeReadonlyProperty" || result.type === "JsdocTypeObjectField" || result.type === "JsdocTypeJsdocObjectField" || result.type === "JsdocTypeIndexSignature" || result.type === "JsdocTypeMappedType" || result.type === "JsdocTypeTypeParameter")
190
+ throw new UnexpectedTypeError(result);
191
+ return result;
192
+ }
193
+ function assertPlainKeyValueOrRootResult(result) {
194
+ return result.type === "JsdocTypeKeyValue" ? assertPlainKeyValueResult(result) : assertRootResult(result);
195
+ }
196
+ function assertPlainKeyValueOrNameResult(result) {
197
+ return result.type === "JsdocTypeName" ? result : assertPlainKeyValueResult(result);
198
+ }
199
+ function assertPlainKeyValueResult(result) {
200
+ if (result.type !== "JsdocTypeKeyValue")
201
+ throw new UnexpectedTypeError(result);
202
+ return result;
203
+ }
204
+ function assertNumberOrVariadicNameResult(result) {
205
+ var _a;
206
+ if (result.type === "JsdocTypeVariadic") {
207
+ if (((_a = result.element) === null || _a === void 0 ? void 0 : _a.type) === "JsdocTypeName")
208
+ return result;
209
+ throw new UnexpectedTypeError(result);
210
+ }
211
+ if (result.type !== "JsdocTypeNumber" && result.type !== "JsdocTypeName")
212
+ throw new UnexpectedTypeError(result);
213
+ return result;
214
+ }
215
+ function assertArrayOrTupleResult(result) {
216
+ if (result.type === "JsdocTypeTuple" || result.type === "JsdocTypeGeneric" && result.meta.brackets === "square")
217
+ return result;
218
+ throw new UnexpectedTypeError(result);
219
+ }
220
+ function isSquaredProperty(result) {
221
+ return result.type === "JsdocTypeIndexSignature" || result.type === "JsdocTypeMappedType";
222
+ }
223
+ var Precedence;
224
+ (function(Precedence2) {
225
+ Precedence2[Precedence2.ALL = 0] = "ALL", Precedence2[Precedence2.PARAMETER_LIST = 1] = "PARAMETER_LIST", Precedence2[Precedence2.OBJECT = 2] = "OBJECT", Precedence2[Precedence2.KEY_VALUE = 3] = "KEY_VALUE", Precedence2[Precedence2.INDEX_BRACKETS = 4] = "INDEX_BRACKETS", Precedence2[Precedence2.UNION = 5] = "UNION", Precedence2[Precedence2.INTERSECTION = 6] = "INTERSECTION", Precedence2[Precedence2.PREFIX = 7] = "PREFIX", Precedence2[Precedence2.INFIX = 8] = "INFIX", Precedence2[Precedence2.TUPLE = 9] = "TUPLE", Precedence2[Precedence2.SYMBOL = 10] = "SYMBOL", Precedence2[Precedence2.OPTIONAL = 11] = "OPTIONAL", Precedence2[Precedence2.NULLABLE = 12] = "NULLABLE", Precedence2[Precedence2.KEY_OF_TYPE_OF = 13] = "KEY_OF_TYPE_OF", Precedence2[Precedence2.FUNCTION = 14] = "FUNCTION", Precedence2[Precedence2.ARROW = 15] = "ARROW", Precedence2[Precedence2.ARRAY_BRACKETS = 16] = "ARRAY_BRACKETS", Precedence2[Precedence2.GENERIC = 17] = "GENERIC", Precedence2[Precedence2.NAME_PATH = 18] = "NAME_PATH", Precedence2[Precedence2.PARENTHESIS = 19] = "PARENTHESIS", Precedence2[Precedence2.SPECIAL_TYPES = 20] = "SPECIAL_TYPES";
226
+ })(Precedence || (Precedence = {}));
227
+ class Parser {
228
+ constructor(grammar, textOrLexer, baseParser) {
229
+ this.grammar = grammar, typeof textOrLexer == "string" ? this._lexer = Lexer.create(textOrLexer) : this._lexer = textOrLexer, this.baseParser = baseParser;
230
+ }
231
+ get lexer() {
232
+ return this._lexer;
233
+ }
234
+ /**
235
+ * Parses a given string and throws an error if the parse ended before the end of the string.
236
+ */
237
+ parse() {
238
+ let result = this.parseType(Precedence.ALL);
239
+ if (this.lexer.current.type !== "EOF")
240
+ throw new EarlyEndOfParseError(this.lexer.current);
241
+ return result;
242
+ }
243
+ /**
244
+ * Parses with the current lexer and asserts that the result is a {@link RootResult}.
245
+ */
246
+ parseType(precedence) {
247
+ return assertRootResult(this.parseIntermediateType(precedence));
248
+ }
249
+ /**
250
+ * The main parsing function. First it tries to parse the current state in the prefix step, and then it continues
251
+ * to parse the state in the infix step.
252
+ */
253
+ parseIntermediateType(precedence) {
254
+ let result = this.tryParslets(null, precedence);
255
+ if (result === null)
256
+ throw new NoParsletFoundError(this.lexer.current);
257
+ return this.parseInfixIntermediateType(result, precedence);
258
+ }
259
+ /**
260
+ * In the infix parsing step the parser continues to parse the current state with all parslets until none returns
261
+ * a result.
262
+ */
263
+ parseInfixIntermediateType(left, precedence) {
264
+ let result = this.tryParslets(left, precedence);
265
+ for (; result !== null; )
266
+ left = result, result = this.tryParslets(left, precedence);
267
+ return left;
268
+ }
269
+ /**
270
+ * Tries to parse the current state with all parslets in the grammar and returns the first non null result.
271
+ */
272
+ tryParslets(left, precedence) {
273
+ for (let parslet of this.grammar) {
274
+ let result = parslet(this, precedence, left);
275
+ if (result !== null)
276
+ return result;
277
+ }
278
+ return null;
279
+ }
280
+ /**
281
+ * If the given type equals the current type of the {@link Lexer} advance the lexer. Return true if the lexer was
282
+ * advanced.
283
+ */
284
+ consume(types) {
285
+ return Array.isArray(types) || (types = [types]), types.includes(this.lexer.current.type) ? (this._lexer = this.lexer.advance(), !0) : !1;
286
+ }
287
+ acceptLexerState(parser) {
288
+ this._lexer = parser.lexer;
289
+ }
290
+ }
291
+ function isQuestionMarkUnknownType(next) {
292
+ return next === "}" || next === "EOF" || next === "|" || next === "," || next === ")" || next === ">";
293
+ }
294
+ let nullableParslet = (parser, precedence, left) => {
295
+ let type = parser.lexer.current.type, next = parser.lexer.next.type;
296
+ return left == null && type === "?" && !isQuestionMarkUnknownType(next) || left != null && type === "?" ? (parser.consume("?"), left == null ? {
297
+ type: "JsdocTypeNullable",
298
+ element: parser.parseType(Precedence.NULLABLE),
299
+ meta: {
300
+ position: "prefix"
301
+ }
302
+ } : {
303
+ type: "JsdocTypeNullable",
304
+ element: assertRootResult(left),
305
+ meta: {
306
+ position: "suffix"
307
+ }
308
+ }) : null;
309
+ };
310
+ function composeParslet(options) {
311
+ let parslet = (parser, curPrecedence, left) => {
312
+ let type = parser.lexer.current.type, next = parser.lexer.next.type;
313
+ if (left === null) {
314
+ if ("parsePrefix" in options && options.accept(type, next))
315
+ return options.parsePrefix(parser);
316
+ } else if ("parseInfix" in options && options.precedence > curPrecedence && options.accept(type, next))
317
+ return options.parseInfix(parser, left);
318
+ return null;
319
+ };
320
+ return Object.defineProperty(parslet, "name", {
321
+ value: options.name
322
+ }), parslet;
323
+ }
324
+ let optionalParslet = composeParslet({
325
+ name: "optionalParslet",
326
+ accept: (type) => type === "=",
327
+ precedence: Precedence.OPTIONAL,
328
+ parsePrefix: (parser) => (parser.consume("="), {
329
+ type: "JsdocTypeOptional",
330
+ element: parser.parseType(Precedence.OPTIONAL),
331
+ meta: {
332
+ position: "prefix"
333
+ }
334
+ }),
335
+ parseInfix: (parser, left) => (parser.consume("="), {
336
+ type: "JsdocTypeOptional",
337
+ element: assertRootResult(left),
338
+ meta: {
339
+ position: "suffix"
340
+ }
341
+ })
342
+ }), numberParslet = composeParslet({
343
+ name: "numberParslet",
344
+ accept: (type) => type === "Number",
345
+ parsePrefix: (parser) => {
346
+ let value = parseFloat(parser.lexer.current.text);
347
+ return parser.consume("Number"), {
348
+ type: "JsdocTypeNumber",
349
+ value
350
+ };
351
+ }
352
+ }), parenthesisParslet = composeParslet({
353
+ name: "parenthesisParslet",
354
+ accept: (type) => type === "(",
355
+ parsePrefix: (parser) => {
356
+ if (parser.consume("("), parser.consume(")"))
357
+ return {
358
+ type: "JsdocTypeParameterList",
359
+ elements: []
360
+ };
361
+ let result = parser.parseIntermediateType(Precedence.ALL);
362
+ if (!parser.consume(")"))
363
+ throw new Error("Unterminated parenthesis");
364
+ return result.type === "JsdocTypeParameterList" ? result : result.type === "JsdocTypeKeyValue" ? {
365
+ type: "JsdocTypeParameterList",
366
+ elements: [result]
367
+ } : {
368
+ type: "JsdocTypeParenthesis",
369
+ element: assertRootResult(result)
370
+ };
371
+ }
372
+ }), specialTypesParslet = composeParslet({
373
+ name: "specialTypesParslet",
374
+ accept: (type, next) => type === "?" && isQuestionMarkUnknownType(next) || type === "null" || type === "undefined" || type === "*",
375
+ parsePrefix: (parser) => {
376
+ if (parser.consume("null"))
377
+ return {
378
+ type: "JsdocTypeNull"
379
+ };
380
+ if (parser.consume("undefined"))
381
+ return {
382
+ type: "JsdocTypeUndefined"
383
+ };
384
+ if (parser.consume("*"))
385
+ return {
386
+ type: "JsdocTypeAny"
387
+ };
388
+ if (parser.consume("?"))
389
+ return {
390
+ type: "JsdocTypeUnknown"
391
+ };
392
+ throw new Error("Unacceptable token: " + parser.lexer.current.text);
393
+ }
394
+ }), notNullableParslet = composeParslet({
395
+ name: "notNullableParslet",
396
+ accept: (type) => type === "!",
397
+ precedence: Precedence.NULLABLE,
398
+ parsePrefix: (parser) => (parser.consume("!"), {
399
+ type: "JsdocTypeNotNullable",
400
+ element: parser.parseType(Precedence.NULLABLE),
401
+ meta: {
402
+ position: "prefix"
403
+ }
404
+ }),
405
+ parseInfix: (parser, left) => (parser.consume("!"), {
406
+ type: "JsdocTypeNotNullable",
407
+ element: assertRootResult(left),
408
+ meta: {
409
+ position: "suffix"
410
+ }
411
+ })
412
+ });
413
+ function createParameterListParslet({ allowTrailingComma }) {
414
+ return composeParslet({
415
+ name: "parameterListParslet",
416
+ accept: (type) => type === ",",
417
+ precedence: Precedence.PARAMETER_LIST,
418
+ parseInfix: (parser, left) => {
419
+ let elements = [
420
+ assertPlainKeyValueOrRootResult(left)
421
+ ];
422
+ parser.consume(",");
423
+ do
424
+ try {
425
+ let next = parser.parseIntermediateType(Precedence.PARAMETER_LIST);
426
+ elements.push(assertPlainKeyValueOrRootResult(next));
427
+ } catch (e) {
428
+ if (e instanceof NoParsletFoundError)
429
+ break;
430
+ throw e;
431
+ }
432
+ while (parser.consume(","));
433
+ if (elements.length > 0 && elements.slice(0, -1).some((e) => e.type === "JsdocTypeVariadic"))
434
+ throw new Error("Only the last parameter may be a rest parameter");
435
+ return {
436
+ type: "JsdocTypeParameterList",
437
+ elements
438
+ };
439
+ }
440
+ });
441
+ }
442
+ let genericParslet = composeParslet({
443
+ name: "genericParslet",
444
+ accept: (type, next) => type === "<" || type === "." && next === "<",
445
+ precedence: Precedence.GENERIC,
446
+ parseInfix: (parser, left) => {
447
+ let dot = parser.consume(".");
448
+ parser.consume("<");
449
+ let objects = [], infer = !1;
450
+ if (parser.consume("infer")) {
451
+ infer = !0;
452
+ let left2 = parser.parseIntermediateType(Precedence.SYMBOL);
453
+ if (left2.type !== "JsdocTypeName")
454
+ throw new UnexpectedTypeError(left2, "A typescript asserts always has to have a name on the left side.");
455
+ objects.push(left2);
456
+ } else
457
+ do
458
+ objects.push(parser.parseType(Precedence.PARAMETER_LIST));
459
+ while (parser.consume(","));
460
+ if (!parser.consume(">"))
461
+ throw new Error("Unterminated generic parameter list");
462
+ return Object.assign(Object.assign({ type: "JsdocTypeGeneric", left: assertRootResult(left), elements: objects }, infer ? { infer: !0 } : {}), { meta: {
463
+ brackets: "angle",
464
+ dot
465
+ } });
466
+ }
467
+ }), unionParslet = composeParslet({
468
+ name: "unionParslet",
469
+ accept: (type) => type === "|",
470
+ precedence: Precedence.UNION,
471
+ parseInfix: (parser, left) => {
472
+ parser.consume("|");
473
+ let elements = [];
474
+ do
475
+ elements.push(parser.parseType(Precedence.UNION));
476
+ while (parser.consume("|"));
477
+ return {
478
+ type: "JsdocTypeUnion",
479
+ elements: [assertRootResult(left), ...elements]
480
+ };
481
+ }
482
+ }), baseGrammar = [
483
+ nullableParslet,
484
+ optionalParslet,
485
+ numberParslet,
486
+ parenthesisParslet,
487
+ specialTypesParslet,
488
+ notNullableParslet,
489
+ createParameterListParslet({
490
+ allowTrailingComma: !0
491
+ }),
492
+ genericParslet,
493
+ unionParslet,
494
+ optionalParslet
495
+ ];
496
+ function createNamePathParslet({ allowSquareBracketsOnAnyType, allowJsdocNamePaths, pathGrammar: pathGrammar2 }) {
497
+ return function(parser, precedence, left) {
498
+ if (left == null || precedence >= Precedence.NAME_PATH)
499
+ return null;
500
+ let type = parser.lexer.current.type, next = parser.lexer.next.type;
501
+ if (!(type === "." && next !== "<" || type === "[" && (allowSquareBracketsOnAnyType || left.type === "JsdocTypeName") || allowJsdocNamePaths && (type === "~" || type === "#")))
502
+ return null;
503
+ let pathType, brackets = !1;
504
+ parser.consume(".") ? pathType = "property" : parser.consume("[") ? (pathType = "property-brackets", brackets = !0) : parser.consume("~") ? pathType = "inner" : (parser.consume("#"), pathType = "instance");
505
+ let pathParser = pathGrammar2 !== null ? new Parser(pathGrammar2, parser.lexer, parser) : parser, parsed = pathParser.parseIntermediateType(Precedence.NAME_PATH);
506
+ parser.acceptLexerState(pathParser);
507
+ let right;
508
+ switch (parsed.type) {
509
+ case "JsdocTypeName":
510
+ right = {
511
+ type: "JsdocTypeProperty",
512
+ value: parsed.value,
513
+ meta: {
514
+ quote: void 0
515
+ }
516
+ };
517
+ break;
518
+ case "JsdocTypeNumber":
519
+ right = {
520
+ type: "JsdocTypeProperty",
521
+ value: parsed.value.toString(10),
522
+ meta: {
523
+ quote: void 0
524
+ }
525
+ };
526
+ break;
527
+ case "JsdocTypeStringValue":
528
+ right = {
529
+ type: "JsdocTypeProperty",
530
+ value: parsed.value,
531
+ meta: {
532
+ quote: parsed.meta.quote
533
+ }
534
+ };
535
+ break;
536
+ case "JsdocTypeSpecialNamePath":
537
+ if (parsed.specialType === "event")
538
+ right = parsed;
539
+ else
540
+ throw new UnexpectedTypeError(parsed, "Type 'JsdocTypeSpecialNamePath' is only allowed with specialType 'event'");
541
+ break;
542
+ default:
543
+ throw new UnexpectedTypeError(parsed, "Expecting 'JsdocTypeName', 'JsdocTypeNumber', 'JsdocStringValue' or 'JsdocTypeSpecialNamePath'");
544
+ }
545
+ if (brackets && !parser.consume("]")) {
546
+ let token = parser.lexer.current;
547
+ throw new Error(`Unterminated square brackets. Next token is '${token.type}' with text '${token.text}'`);
548
+ }
549
+ return {
550
+ type: "JsdocTypeNamePath",
551
+ left: assertRootResult(left),
552
+ right,
553
+ pathType
554
+ };
555
+ };
556
+ }
557
+ function createNameParslet({ allowedAdditionalTokens }) {
558
+ return composeParslet({
559
+ name: "nameParslet",
560
+ accept: (type) => type === "Identifier" || type === "this" || type === "new" || allowedAdditionalTokens.includes(type),
561
+ parsePrefix: (parser) => {
562
+ let { type, text } = parser.lexer.current;
563
+ return parser.consume(type), {
564
+ type: "JsdocTypeName",
565
+ value: text
566
+ };
567
+ }
568
+ });
569
+ }
570
+ let stringValueParslet = composeParslet({
571
+ name: "stringValueParslet",
572
+ accept: (type) => type === "StringValue",
573
+ parsePrefix: (parser) => {
574
+ let text = parser.lexer.current.text;
575
+ return parser.consume("StringValue"), {
576
+ type: "JsdocTypeStringValue",
577
+ value: text.slice(1, -1),
578
+ meta: {
579
+ quote: text[0] === "'" ? "single" : "double"
580
+ }
581
+ };
582
+ }
583
+ });
584
+ function createSpecialNamePathParslet({ pathGrammar: pathGrammar2, allowedTypes }) {
585
+ return composeParslet({
586
+ name: "specialNamePathParslet",
587
+ accept: (type) => allowedTypes.includes(type),
588
+ parsePrefix: (parser) => {
589
+ let type = parser.lexer.current.type;
590
+ if (parser.consume(type), !parser.consume(":"))
591
+ return {
592
+ type: "JsdocTypeName",
593
+ value: type
594
+ };
595
+ let result, token = parser.lexer.current;
596
+ if (parser.consume("StringValue"))
597
+ result = {
598
+ type: "JsdocTypeSpecialNamePath",
599
+ value: token.text.slice(1, -1),
600
+ specialType: type,
601
+ meta: {
602
+ quote: token.text[0] === "'" ? "single" : "double"
603
+ }
604
+ };
605
+ else {
606
+ let value = "", allowed = ["Identifier", "@", "/"];
607
+ for (; allowed.some((type2) => parser.consume(type2)); )
608
+ value += token.text, token = parser.lexer.current;
609
+ result = {
610
+ type: "JsdocTypeSpecialNamePath",
611
+ value,
612
+ specialType: type,
613
+ meta: {
614
+ quote: void 0
615
+ }
616
+ };
617
+ }
618
+ let moduleParser = new Parser(pathGrammar2, parser.lexer, parser), moduleResult = moduleParser.parseInfixIntermediateType(result, Precedence.ALL);
619
+ return parser.acceptLexerState(moduleParser), assertRootResult(moduleResult);
620
+ }
621
+ });
622
+ }
623
+ let basePathGrammar = [
624
+ createNameParslet({
625
+ allowedAdditionalTokens: ["external", "module"]
626
+ }),
627
+ stringValueParslet,
628
+ numberParslet,
629
+ createNamePathParslet({
630
+ allowSquareBracketsOnAnyType: !1,
631
+ allowJsdocNamePaths: !0,
632
+ pathGrammar: null
633
+ })
634
+ ], pathGrammar = [
635
+ ...basePathGrammar,
636
+ createSpecialNamePathParslet({
637
+ allowedTypes: ["event"],
638
+ pathGrammar: basePathGrammar
639
+ })
640
+ ];
641
+ function getParameters(value) {
642
+ let parameters;
643
+ if (value.type === "JsdocTypeParameterList")
644
+ parameters = value.elements;
645
+ else if (value.type === "JsdocTypeParenthesis")
646
+ parameters = [value.element];
647
+ else
648
+ throw new UnexpectedTypeError(value);
649
+ return parameters.map((p) => assertPlainKeyValueOrRootResult(p));
650
+ }
651
+ function getUnnamedParameters(value) {
652
+ let parameters = getParameters(value);
653
+ if (parameters.some((p) => p.type === "JsdocTypeKeyValue"))
654
+ throw new Error("No parameter should be named");
655
+ return parameters;
656
+ }
657
+ function createFunctionParslet({ allowNamedParameters, allowNoReturnType, allowWithoutParenthesis, allowNewAsFunctionKeyword }) {
658
+ return composeParslet({
659
+ name: "functionParslet",
660
+ accept: (type, next) => type === "function" || allowNewAsFunctionKeyword && type === "new" && next === "(",
661
+ parsePrefix: (parser) => {
662
+ let newKeyword = parser.consume("new");
663
+ parser.consume("function");
664
+ let hasParenthesis = parser.lexer.current.type === "(";
665
+ if (!hasParenthesis) {
666
+ if (!allowWithoutParenthesis)
667
+ throw new Error("function is missing parameter list");
668
+ return {
669
+ type: "JsdocTypeName",
670
+ value: "function"
671
+ };
672
+ }
673
+ let result = {
674
+ type: "JsdocTypeFunction",
675
+ parameters: [],
676
+ arrow: !1,
677
+ constructor: newKeyword,
678
+ parenthesis: hasParenthesis
679
+ }, value = parser.parseIntermediateType(Precedence.FUNCTION);
680
+ if (allowNamedParameters === void 0)
681
+ result.parameters = getUnnamedParameters(value);
682
+ else {
683
+ if (newKeyword && value.type === "JsdocTypeFunction" && value.arrow)
684
+ return result = value, result.constructor = !0, result;
685
+ result.parameters = getParameters(value);
686
+ for (let p of result.parameters)
687
+ if (p.type === "JsdocTypeKeyValue" && !allowNamedParameters.includes(p.key))
688
+ throw new Error(`only allowed named parameters are ${allowNamedParameters.join(", ")} but got ${p.type}`);
689
+ }
690
+ if (parser.consume(":"))
691
+ result.returnType = parser.parseType(Precedence.PREFIX);
692
+ else if (!allowNoReturnType)
693
+ throw new Error("function is missing return type");
694
+ return result;
695
+ }
696
+ });
697
+ }
698
+ function createVariadicParslet({ allowPostfix, allowEnclosingBrackets }) {
699
+ return composeParslet({
700
+ name: "variadicParslet",
701
+ accept: (type) => type === "...",
702
+ precedence: Precedence.PREFIX,
703
+ parsePrefix: (parser) => {
704
+ parser.consume("...");
705
+ let brackets = allowEnclosingBrackets && parser.consume("[");
706
+ try {
707
+ let element = parser.parseType(Precedence.PREFIX);
708
+ if (brackets && !parser.consume("]"))
709
+ throw new Error("Unterminated variadic type. Missing ']'");
710
+ return {
711
+ type: "JsdocTypeVariadic",
712
+ element: assertRootResult(element),
713
+ meta: {
714
+ position: "prefix",
715
+ squareBrackets: brackets
716
+ }
717
+ };
718
+ } catch (e) {
719
+ if (e instanceof NoParsletFoundError) {
720
+ if (brackets)
721
+ throw new Error("Empty square brackets for variadic are not allowed.");
722
+ return {
723
+ type: "JsdocTypeVariadic",
724
+ meta: {
725
+ position: void 0,
726
+ squareBrackets: !1
727
+ }
728
+ };
729
+ } else
730
+ throw e;
731
+ }
732
+ },
733
+ parseInfix: allowPostfix ? (parser, left) => (parser.consume("..."), {
734
+ type: "JsdocTypeVariadic",
735
+ element: assertRootResult(left),
736
+ meta: {
737
+ position: "suffix",
738
+ squareBrackets: !1
739
+ }
740
+ }) : void 0
741
+ });
742
+ }
743
+ let symbolParslet = composeParslet({
744
+ name: "symbolParslet",
745
+ accept: (type) => type === "(",
746
+ precedence: Precedence.SYMBOL,
747
+ parseInfix: (parser, left) => {
748
+ if (left.type !== "JsdocTypeName")
749
+ throw new Error("Symbol expects a name on the left side. (Reacting on '(')");
750
+ parser.consume("(");
751
+ let result = {
752
+ type: "JsdocTypeSymbol",
753
+ value: left.value
754
+ };
755
+ if (!parser.consume(")")) {
756
+ let next = parser.parseIntermediateType(Precedence.SYMBOL);
757
+ if (result.element = assertNumberOrVariadicNameResult(next), !parser.consume(")"))
758
+ throw new Error("Symbol does not end after value");
759
+ }
760
+ return result;
761
+ }
762
+ }), arrayBracketsParslet = composeParslet({
763
+ name: "arrayBracketsParslet",
764
+ precedence: Precedence.ARRAY_BRACKETS,
765
+ accept: (type, next) => type === "[" && next === "]",
766
+ parseInfix: (parser, left) => (parser.consume("["), parser.consume("]"), {
767
+ type: "JsdocTypeGeneric",
768
+ left: {
769
+ type: "JsdocTypeName",
770
+ value: "Array"
771
+ },
772
+ elements: [
773
+ assertRootResult(left)
774
+ ],
775
+ meta: {
776
+ brackets: "square",
777
+ dot: !1
778
+ }
779
+ })
780
+ });
781
+ function createObjectParslet({ objectFieldGrammar: objectFieldGrammar2, allowKeyTypes }) {
782
+ return composeParslet({
783
+ name: "objectParslet",
784
+ accept: (type) => type === "{",
785
+ parsePrefix: (parser) => {
786
+ parser.consume("{");
787
+ let result = {
788
+ type: "JsdocTypeObject",
789
+ meta: {
790
+ separator: "comma"
791
+ },
792
+ elements: []
793
+ };
794
+ if (!parser.consume("}")) {
795
+ let separator, fieldParser = new Parser(objectFieldGrammar2, parser.lexer, parser);
796
+ for (; ; ) {
797
+ fieldParser.acceptLexerState(parser);
798
+ let field = fieldParser.parseIntermediateType(Precedence.OBJECT);
799
+ parser.acceptLexerState(fieldParser), field === void 0 && allowKeyTypes && (field = parser.parseIntermediateType(Precedence.OBJECT));
800
+ let optional = !1;
801
+ if (field.type === "JsdocTypeNullable" && (optional = !0, field = field.element), field.type === "JsdocTypeNumber" || field.type === "JsdocTypeName" || field.type === "JsdocTypeStringValue") {
802
+ let quote2;
803
+ field.type === "JsdocTypeStringValue" && (quote2 = field.meta.quote), result.elements.push({
804
+ type: "JsdocTypeObjectField",
805
+ key: field.value.toString(),
806
+ right: void 0,
807
+ optional,
808
+ readonly: !1,
809
+ meta: {
810
+ quote: quote2
811
+ }
812
+ });
813
+ } else if (field.type === "JsdocTypeObjectField" || field.type === "JsdocTypeJsdocObjectField")
814
+ result.elements.push(field);
815
+ else
816
+ throw new UnexpectedTypeError(field);
817
+ if (parser.lexer.current.startOfLine)
818
+ separator = "linebreak", parser.consume(",") || parser.consume(";");
819
+ else if (parser.consume(","))
820
+ separator = "comma";
821
+ else if (parser.consume(";"))
822
+ separator = "semicolon";
823
+ else
824
+ break;
825
+ if (parser.lexer.current.type === "}")
826
+ break;
827
+ }
828
+ if (result.meta.separator = separator ?? "comma", separator === "linebreak" && (result.meta.propertyIndent = " "), !parser.consume("}"))
829
+ throw new Error("Unterminated record type. Missing '}'");
830
+ }
831
+ return result;
832
+ }
833
+ });
834
+ }
835
+ function createObjectFieldParslet({ allowSquaredProperties, allowKeyTypes, allowReadonly, allowOptional }) {
836
+ return composeParslet({
837
+ name: "objectFieldParslet",
838
+ precedence: Precedence.KEY_VALUE,
839
+ accept: (type) => type === ":",
840
+ parseInfix: (parser, left) => {
841
+ var _a;
842
+ let optional = !1, readonlyProperty = !1;
843
+ allowOptional && left.type === "JsdocTypeNullable" && (optional = !0, left = left.element), allowReadonly && left.type === "JsdocTypeReadonlyProperty" && (readonlyProperty = !0, left = left.element);
844
+ let parentParser = (_a = parser.baseParser) !== null && _a !== void 0 ? _a : parser;
845
+ if (parentParser.acceptLexerState(parser), left.type === "JsdocTypeNumber" || left.type === "JsdocTypeName" || left.type === "JsdocTypeStringValue" || isSquaredProperty(left)) {
846
+ if (isSquaredProperty(left) && !allowSquaredProperties)
847
+ throw new UnexpectedTypeError(left);
848
+ parentParser.consume(":");
849
+ let quote2;
850
+ left.type === "JsdocTypeStringValue" && (quote2 = left.meta.quote);
851
+ let right = parentParser.parseType(Precedence.KEY_VALUE);
852
+ return parser.acceptLexerState(parentParser), {
853
+ type: "JsdocTypeObjectField",
854
+ key: isSquaredProperty(left) ? left : left.value.toString(),
855
+ right,
856
+ optional,
857
+ readonly: readonlyProperty,
858
+ meta: {
859
+ quote: quote2
860
+ }
861
+ };
862
+ } else {
863
+ if (!allowKeyTypes)
864
+ throw new UnexpectedTypeError(left);
865
+ parentParser.consume(":");
866
+ let right = parentParser.parseType(Precedence.KEY_VALUE);
867
+ return parser.acceptLexerState(parentParser), {
868
+ type: "JsdocTypeJsdocObjectField",
869
+ left: assertRootResult(left),
870
+ right
871
+ };
872
+ }
873
+ }
874
+ });
875
+ }
876
+ function createKeyValueParslet({ allowOptional, allowVariadic }) {
877
+ return composeParslet({
878
+ name: "keyValueParslet",
879
+ precedence: Precedence.KEY_VALUE,
880
+ accept: (type) => type === ":",
881
+ parseInfix: (parser, left) => {
882
+ let optional = !1, variadic = !1;
883
+ if (allowOptional && left.type === "JsdocTypeNullable" && (optional = !0, left = left.element), allowVariadic && left.type === "JsdocTypeVariadic" && left.element !== void 0 && (variadic = !0, left = left.element), left.type !== "JsdocTypeName")
884
+ throw new UnexpectedTypeError(left);
885
+ parser.consume(":");
886
+ let right = parser.parseType(Precedence.KEY_VALUE);
887
+ return {
888
+ type: "JsdocTypeKeyValue",
889
+ key: left.value,
890
+ right,
891
+ optional,
892
+ variadic
893
+ };
894
+ }
895
+ });
896
+ }
897
+ let jsdocBaseGrammar = [
898
+ ...baseGrammar,
899
+ createFunctionParslet({
900
+ allowWithoutParenthesis: !0,
901
+ allowNamedParameters: ["this", "new"],
902
+ allowNoReturnType: !0,
903
+ allowNewAsFunctionKeyword: !1
904
+ }),
905
+ stringValueParslet,
906
+ createSpecialNamePathParslet({
907
+ allowedTypes: ["module", "external", "event"],
908
+ pathGrammar
909
+ }),
910
+ createVariadicParslet({
911
+ allowEnclosingBrackets: !0,
912
+ allowPostfix: !0
913
+ }),
914
+ createNameParslet({
915
+ allowedAdditionalTokens: ["keyof"]
916
+ }),
917
+ symbolParslet,
918
+ arrayBracketsParslet,
919
+ createNamePathParslet({
920
+ allowSquareBracketsOnAnyType: !1,
921
+ allowJsdocNamePaths: !0,
922
+ pathGrammar
923
+ })
924
+ ], jsdocGrammar = [
925
+ ...jsdocBaseGrammar,
926
+ createObjectParslet({
927
+ // jsdoc syntax allows full types as keys, so we need to pull in the full grammar here
928
+ // we leave out the object type deliberately
929
+ objectFieldGrammar: [
930
+ createNameParslet({
931
+ allowedAdditionalTokens: ["typeof", "module", "in"]
932
+ }),
933
+ createObjectFieldParslet({
934
+ allowSquaredProperties: !1,
935
+ allowKeyTypes: !0,
936
+ allowOptional: !1,
937
+ allowReadonly: !1
938
+ }),
939
+ ...jsdocBaseGrammar
940
+ ],
941
+ allowKeyTypes: !0
942
+ }),
943
+ createKeyValueParslet({
944
+ allowOptional: !0,
945
+ allowVariadic: !0
946
+ })
947
+ ], typeOfParslet = composeParslet({
948
+ name: "typeOfParslet",
949
+ accept: (type) => type === "typeof",
950
+ parsePrefix: (parser) => (parser.consume("typeof"), {
951
+ type: "JsdocTypeTypeof",
952
+ element: parser.parseType(Precedence.KEY_OF_TYPE_OF)
953
+ })
954
+ }), objectFieldGrammar$1 = [
955
+ createNameParslet({
956
+ allowedAdditionalTokens: ["typeof", "module", "keyof", "event", "external", "in"]
957
+ }),
958
+ nullableParslet,
959
+ optionalParslet,
960
+ stringValueParslet,
961
+ numberParslet,
962
+ createObjectFieldParslet({
963
+ allowSquaredProperties: !1,
964
+ allowKeyTypes: !1,
965
+ allowOptional: !1,
966
+ allowReadonly: !1
967
+ })
968
+ ], closureGrammar = [
969
+ ...baseGrammar,
970
+ createObjectParslet({
971
+ allowKeyTypes: !1,
972
+ objectFieldGrammar: objectFieldGrammar$1
973
+ }),
974
+ createNameParslet({
975
+ allowedAdditionalTokens: ["event", "external", "in"]
976
+ }),
977
+ typeOfParslet,
978
+ createFunctionParslet({
979
+ allowWithoutParenthesis: !1,
980
+ allowNamedParameters: ["this", "new"],
981
+ allowNoReturnType: !0,
982
+ allowNewAsFunctionKeyword: !1
983
+ }),
984
+ createVariadicParslet({
985
+ allowEnclosingBrackets: !1,
986
+ allowPostfix: !1
987
+ }),
988
+ // additional name parslet is needed for some special cases
989
+ createNameParslet({
990
+ allowedAdditionalTokens: ["keyof"]
991
+ }),
992
+ createSpecialNamePathParslet({
993
+ allowedTypes: ["module"],
994
+ pathGrammar
995
+ }),
996
+ createNamePathParslet({
997
+ allowSquareBracketsOnAnyType: !1,
998
+ allowJsdocNamePaths: !0,
999
+ pathGrammar
1000
+ }),
1001
+ createKeyValueParslet({
1002
+ allowOptional: !1,
1003
+ allowVariadic: !1
1004
+ }),
1005
+ symbolParslet
1006
+ ], assertsParslet = composeParslet({
1007
+ name: "assertsParslet",
1008
+ accept: (type) => type === "asserts",
1009
+ parsePrefix: (parser) => {
1010
+ parser.consume("asserts");
1011
+ let left = parser.parseIntermediateType(Precedence.SYMBOL);
1012
+ if (left.type !== "JsdocTypeName")
1013
+ throw new UnexpectedTypeError(left, "A typescript asserts always has to have a name on the left side.");
1014
+ return parser.consume("is") ? {
1015
+ type: "JsdocTypeAsserts",
1016
+ left,
1017
+ right: assertRootResult(parser.parseIntermediateType(Precedence.INFIX))
1018
+ } : {
1019
+ type: "JsdocTypeAssertsPlain",
1020
+ element: left
1021
+ };
1022
+ }
1023
+ });
1024
+ function createTupleParslet({ allowQuestionMark }) {
1025
+ return composeParslet({
1026
+ name: "tupleParslet",
1027
+ accept: (type) => type === "[",
1028
+ parsePrefix: (parser) => {
1029
+ parser.consume("[");
1030
+ let result = {
1031
+ type: "JsdocTypeTuple",
1032
+ elements: []
1033
+ };
1034
+ if (parser.consume("]"))
1035
+ return result;
1036
+ let typeList = parser.parseIntermediateType(Precedence.ALL);
1037
+ if (typeList.type === "JsdocTypeParameterList" ? typeList.elements[0].type === "JsdocTypeKeyValue" ? result.elements = typeList.elements.map(assertPlainKeyValueResult) : result.elements = typeList.elements.map(assertRootResult) : typeList.type === "JsdocTypeKeyValue" ? result.elements = [assertPlainKeyValueResult(typeList)] : result.elements = [assertRootResult(typeList)], !parser.consume("]"))
1038
+ throw new Error("Unterminated '['");
1039
+ if (result.elements.some((e) => e.type === "JsdocTypeUnknown"))
1040
+ throw new Error("Question mark in tuple not allowed");
1041
+ return result;
1042
+ }
1043
+ });
1044
+ }
1045
+ let keyOfParslet = composeParslet({
1046
+ name: "keyOfParslet",
1047
+ accept: (type) => type === "keyof",
1048
+ parsePrefix: (parser) => (parser.consume("keyof"), {
1049
+ type: "JsdocTypeKeyof",
1050
+ element: assertRootResult(parser.parseType(Precedence.KEY_OF_TYPE_OF))
1051
+ })
1052
+ }), importParslet = composeParslet({
1053
+ name: "importParslet",
1054
+ accept: (type) => type === "import",
1055
+ parsePrefix: (parser) => {
1056
+ if (parser.consume("import"), !parser.consume("("))
1057
+ throw new Error("Missing parenthesis after import keyword");
1058
+ let path = parser.parseType(Precedence.PREFIX);
1059
+ if (path.type !== "JsdocTypeStringValue")
1060
+ throw new Error("Only string values are allowed as paths for imports");
1061
+ if (!parser.consume(")"))
1062
+ throw new Error("Missing closing parenthesis after import keyword");
1063
+ return {
1064
+ type: "JsdocTypeImport",
1065
+ element: path
1066
+ };
1067
+ }
1068
+ }), readonlyPropertyParslet = composeParslet({
1069
+ name: "readonlyPropertyParslet",
1070
+ accept: (type) => type === "readonly",
1071
+ parsePrefix: (parser) => (parser.consume("readonly"), {
1072
+ type: "JsdocTypeReadonlyProperty",
1073
+ element: parser.parseIntermediateType(Precedence.KEY_VALUE)
1074
+ })
1075
+ }), arrowFunctionParslet = composeParslet({
1076
+ name: "arrowFunctionParslet",
1077
+ precedence: Precedence.ARROW,
1078
+ accept: (type) => type === "=>",
1079
+ parseInfix: (parser, left) => (parser.consume("=>"), {
1080
+ type: "JsdocTypeFunction",
1081
+ parameters: getParameters(left).map(assertPlainKeyValueOrNameResult),
1082
+ arrow: !0,
1083
+ constructor: !1,
1084
+ parenthesis: !0,
1085
+ returnType: parser.parseType(Precedence.OBJECT)
1086
+ })
1087
+ }), genericArrowFunctionParslet = composeParslet({
1088
+ name: "genericArrowFunctionParslet",
1089
+ accept: (type) => type === "<",
1090
+ parsePrefix: (parser) => {
1091
+ let typeParameters = [];
1092
+ parser.consume("<");
1093
+ do {
1094
+ let defaultValue, name = parser.parseIntermediateType(Precedence.SYMBOL);
1095
+ if (name.type === "JsdocTypeOptional" && (name = name.element, defaultValue = parser.parseType(Precedence.SYMBOL)), name.type !== "JsdocTypeName")
1096
+ throw new UnexpectedTypeError(name);
1097
+ let constraint;
1098
+ parser.consume("extends") && (constraint = parser.parseType(Precedence.SYMBOL), constraint.type === "JsdocTypeOptional" && (constraint = constraint.element, defaultValue = parser.parseType(Precedence.SYMBOL)));
1099
+ let typeParameter = {
1100
+ type: "JsdocTypeTypeParameter",
1101
+ name
1102
+ };
1103
+ if (constraint !== void 0 && (typeParameter.constraint = constraint), defaultValue !== void 0 && (typeParameter.defaultValue = defaultValue), typeParameters.push(typeParameter), parser.consume(">"))
1104
+ break;
1105
+ } while (parser.consume(","));
1106
+ let functionBase = parser.parseIntermediateType(Precedence.SYMBOL);
1107
+ return functionBase.typeParameters = typeParameters, functionBase;
1108
+ }
1109
+ }), intersectionParslet = composeParslet({
1110
+ name: "intersectionParslet",
1111
+ accept: (type) => type === "&",
1112
+ precedence: Precedence.INTERSECTION,
1113
+ parseInfix: (parser, left) => {
1114
+ parser.consume("&");
1115
+ let elements = [];
1116
+ do
1117
+ elements.push(parser.parseType(Precedence.INTERSECTION));
1118
+ while (parser.consume("&"));
1119
+ return {
1120
+ type: "JsdocTypeIntersection",
1121
+ elements: [assertRootResult(left), ...elements]
1122
+ };
1123
+ }
1124
+ }), predicateParslet = composeParslet({
1125
+ name: "predicateParslet",
1126
+ precedence: Precedence.INFIX,
1127
+ accept: (type) => type === "is",
1128
+ parseInfix: (parser, left) => {
1129
+ if (left.type !== "JsdocTypeName")
1130
+ throw new UnexpectedTypeError(left, "A typescript predicate always has to have a name on the left side.");
1131
+ return parser.consume("is"), {
1132
+ type: "JsdocTypePredicate",
1133
+ left,
1134
+ right: assertRootResult(parser.parseIntermediateType(Precedence.INFIX))
1135
+ };
1136
+ }
1137
+ }), objectSquaredPropertyParslet = composeParslet({
1138
+ name: "objectSquareBracketPropertyParslet",
1139
+ accept: (type) => type === "[",
1140
+ parsePrefix: (parser) => {
1141
+ if (parser.baseParser === void 0)
1142
+ throw new Error("Only allowed inside object grammar");
1143
+ parser.consume("[");
1144
+ let key = parser.lexer.current.text;
1145
+ parser.consume("Identifier");
1146
+ let result;
1147
+ if (parser.consume(":")) {
1148
+ let parentParser = parser.baseParser;
1149
+ parentParser.acceptLexerState(parser), result = {
1150
+ type: "JsdocTypeIndexSignature",
1151
+ key,
1152
+ right: parentParser.parseType(Precedence.INDEX_BRACKETS)
1153
+ }, parser.acceptLexerState(parentParser);
1154
+ } else if (parser.consume("in")) {
1155
+ let parentParser = parser.baseParser;
1156
+ parentParser.acceptLexerState(parser), result = {
1157
+ type: "JsdocTypeMappedType",
1158
+ key,
1159
+ right: parentParser.parseType(Precedence.ARRAY_BRACKETS)
1160
+ }, parser.acceptLexerState(parentParser);
1161
+ } else
1162
+ throw new Error("Missing ':' or 'in' inside square bracketed property.");
1163
+ if (!parser.consume("]"))
1164
+ throw new Error("Unterminated square brackets");
1165
+ return result;
1166
+ }
1167
+ }), readonlyArrayParslet = composeParslet({
1168
+ name: "readonlyArrayParslet",
1169
+ accept: (type) => type === "readonly",
1170
+ parsePrefix: (parser) => (parser.consume("readonly"), {
1171
+ type: "JsdocTypeReadonlyArray",
1172
+ element: assertArrayOrTupleResult(parser.parseIntermediateType(Precedence.ALL))
1173
+ })
1174
+ }), conditionalParslet = composeParslet({
1175
+ name: "conditionalParslet",
1176
+ precedence: Precedence.INFIX,
1177
+ accept: (type) => type === "extends",
1178
+ parseInfix: (parser, left) => {
1179
+ parser.consume("extends");
1180
+ let extendsType = parser.parseType(Precedence.KEY_OF_TYPE_OF).element, trueType = parser.parseType(Precedence.INFIX);
1181
+ return parser.consume(":"), {
1182
+ type: "JsdocTypeConditional",
1183
+ checksType: assertRootResult(left),
1184
+ extendsType,
1185
+ trueType,
1186
+ falseType: parser.parseType(Precedence.INFIX)
1187
+ };
1188
+ }
1189
+ }), objectFieldGrammar = [
1190
+ readonlyPropertyParslet,
1191
+ createNameParslet({
1192
+ allowedAdditionalTokens: ["typeof", "module", "keyof", "event", "external", "in"]
1193
+ }),
1194
+ nullableParslet,
1195
+ optionalParslet,
1196
+ stringValueParslet,
1197
+ numberParslet,
1198
+ createObjectFieldParslet({
1199
+ allowSquaredProperties: !0,
1200
+ allowKeyTypes: !1,
1201
+ allowOptional: !0,
1202
+ allowReadonly: !0
1203
+ }),
1204
+ objectSquaredPropertyParslet
1205
+ ], typescriptGrammar = [
1206
+ ...baseGrammar,
1207
+ createObjectParslet({
1208
+ allowKeyTypes: !1,
1209
+ objectFieldGrammar
1210
+ }),
1211
+ readonlyArrayParslet,
1212
+ typeOfParslet,
1213
+ keyOfParslet,
1214
+ importParslet,
1215
+ stringValueParslet,
1216
+ createFunctionParslet({
1217
+ allowWithoutParenthesis: !0,
1218
+ allowNoReturnType: !1,
1219
+ allowNamedParameters: ["this", "new", "args"],
1220
+ allowNewAsFunctionKeyword: !0
1221
+ }),
1222
+ createTupleParslet({
1223
+ allowQuestionMark: !1
1224
+ }),
1225
+ createVariadicParslet({
1226
+ allowEnclosingBrackets: !1,
1227
+ allowPostfix: !1
1228
+ }),
1229
+ assertsParslet,
1230
+ conditionalParslet,
1231
+ createNameParslet({
1232
+ allowedAdditionalTokens: ["event", "external", "in"]
1233
+ }),
1234
+ createSpecialNamePathParslet({
1235
+ allowedTypes: ["module"],
1236
+ pathGrammar
1237
+ }),
1238
+ arrayBracketsParslet,
1239
+ arrowFunctionParslet,
1240
+ genericArrowFunctionParslet,
1241
+ createNamePathParslet({
1242
+ allowSquareBracketsOnAnyType: !0,
1243
+ allowJsdocNamePaths: !1,
1244
+ pathGrammar
1245
+ }),
1246
+ intersectionParslet,
1247
+ predicateParslet,
1248
+ createKeyValueParslet({
1249
+ allowVariadic: !0,
1250
+ allowOptional: !0
1251
+ })
1252
+ ];
1253
+ function parse3(expression, mode) {
1254
+ switch (mode) {
1255
+ case "closure":
1256
+ return new Parser(closureGrammar, expression).parse();
1257
+ case "jsdoc":
1258
+ return new Parser(jsdocGrammar, expression).parse();
1259
+ case "typescript":
1260
+ return new Parser(typescriptGrammar, expression).parse();
1261
+ }
1262
+ }
1263
+ function tryParse(expression, modes = ["typescript", "closure", "jsdoc"]) {
1264
+ let error;
1265
+ for (let mode of modes)
1266
+ try {
1267
+ return parse3(expression, mode);
1268
+ } catch (e) {
1269
+ error = e;
1270
+ }
1271
+ throw error;
1272
+ }
1273
+ function transform(rules2, parseResult) {
1274
+ let rule = rules2[parseResult.type];
1275
+ if (rule === void 0)
1276
+ throw new Error(`In this set of transform rules exists no rule for type ${parseResult.type}.`);
1277
+ return rule(parseResult, (aParseResult) => transform(rules2, aParseResult));
1278
+ }
1279
+ function notAvailableTransform(parseResult) {
1280
+ throw new Error("This transform is not available. Are you trying the correct parsing mode?");
1281
+ }
1282
+ function extractSpecialParams(source) {
1283
+ let result = {
1284
+ params: []
1285
+ };
1286
+ for (let param of source.parameters)
1287
+ param.type === "JsdocTypeKeyValue" ? param.key === "this" ? result.this = param.right : param.key === "new" ? result.new = param.right : result.params.push(param) : result.params.push(param);
1288
+ return result;
1289
+ }
1290
+ function applyPosition(position, target, value) {
1291
+ return position === "prefix" ? value + target : target + value;
1292
+ }
1293
+ function quote(value, quote2) {
1294
+ switch (quote2) {
1295
+ case "double":
1296
+ return `"${value}"`;
1297
+ case "single":
1298
+ return `'${value}'`;
1299
+ case void 0:
1300
+ return value;
1301
+ }
1302
+ }
1303
+ function stringifyRules2() {
1304
+ return {
1305
+ JsdocTypeParenthesis: (result, transform2) => `(${result.element !== void 0 ? transform2(result.element) : ""})`,
1306
+ JsdocTypeKeyof: (result, transform2) => `keyof ${transform2(result.element)}`,
1307
+ JsdocTypeFunction: (result, transform2) => {
1308
+ var _a;
1309
+ if (result.arrow) {
1310
+ if (result.returnType === void 0)
1311
+ throw new Error("Arrow function needs a return type.");
1312
+ let stringified = `${result.typeParameters !== void 0 ? `<${(_a = result.typeParameters.map(transform2).join(", ")) !== null && _a !== void 0 ? _a : ""}>` : ""}(${result.parameters.map(transform2).join(", ")}) => ${transform2(result.returnType)}`;
1313
+ return result.constructor && (stringified = "new " + stringified), stringified;
1314
+ } else {
1315
+ let stringified = result.constructor ? "new" : "function";
1316
+ return result.parenthesis && (stringified += `(${result.parameters.map(transform2).join(", ")})`, result.returnType !== void 0 && (stringified += `: ${transform2(result.returnType)}`)), stringified;
1317
+ }
1318
+ },
1319
+ JsdocTypeName: (result) => result.value,
1320
+ JsdocTypeTuple: (result, transform2) => `[${result.elements.map(transform2).join(", ")}]`,
1321
+ JsdocTypeVariadic: (result, transform2) => result.meta.position === void 0 ? "..." : applyPosition(result.meta.position, transform2(result.element), "..."),
1322
+ JsdocTypeNamePath: (result, transform2) => {
1323
+ let left = transform2(result.left), right = transform2(result.right);
1324
+ switch (result.pathType) {
1325
+ case "inner":
1326
+ return `${left}~${right}`;
1327
+ case "instance":
1328
+ return `${left}#${right}`;
1329
+ case "property":
1330
+ return `${left}.${right}`;
1331
+ case "property-brackets":
1332
+ return `${left}[${right}]`;
1333
+ }
1334
+ },
1335
+ JsdocTypeStringValue: (result) => quote(result.value, result.meta.quote),
1336
+ JsdocTypeAny: () => "*",
1337
+ JsdocTypeGeneric: (result, transform2) => {
1338
+ if (result.meta.brackets === "square") {
1339
+ let element = result.elements[0], transformed = transform2(element);
1340
+ return element.type === "JsdocTypeUnion" || element.type === "JsdocTypeIntersection" ? `(${transformed})[]` : `${transformed}[]`;
1341
+ } else
1342
+ return `${transform2(result.left)}${result.meta.dot ? "." : ""}<${result.infer === !0 ? "infer " : ""}${result.elements.map(transform2).join(", ")}>`;
1343
+ },
1344
+ JsdocTypeImport: (result, transform2) => `import(${transform2(result.element)})`,
1345
+ JsdocTypeObjectField: (result, transform2) => {
1346
+ let text = "";
1347
+ return result.readonly && (text += "readonly "), typeof result.key == "string" ? text += quote(result.key, result.meta.quote) : text += transform2(result.key), result.optional && (text += "?"), result.right === void 0 ? text : text + `: ${transform2(result.right)}`;
1348
+ },
1349
+ JsdocTypeJsdocObjectField: (result, transform2) => `${transform2(result.left)}: ${transform2(result.right)}`,
1350
+ JsdocTypeKeyValue: (result, transform2) => {
1351
+ let text = result.key;
1352
+ return result.optional && (text += "?"), result.variadic && (text = "..." + text), result.right === void 0 ? text : text + `: ${transform2(result.right)}`;
1353
+ },
1354
+ JsdocTypeSpecialNamePath: (result) => `${result.specialType}:${quote(result.value, result.meta.quote)}`,
1355
+ JsdocTypeNotNullable: (result, transform2) => applyPosition(result.meta.position, transform2(result.element), "!"),
1356
+ JsdocTypeNull: () => "null",
1357
+ JsdocTypeNullable: (result, transform2) => applyPosition(result.meta.position, transform2(result.element), "?"),
1358
+ JsdocTypeNumber: (result) => result.value.toString(),
1359
+ JsdocTypeObject: (result, transform2) => {
1360
+ var _a, _b;
1361
+ return `{${(result.meta.separator === "linebreak" && result.elements.length > 1 ? `
1362
+ ` + ((_a = result.meta.propertyIndent) !== null && _a !== void 0 ? _a : "") : "") + result.elements.map(transform2).join(result.meta.separator === "comma" ? ", " : result.meta.separator === "linebreak" ? `
1363
+ ` + ((_b = result.meta.propertyIndent) !== null && _b !== void 0 ? _b : "") : "; ") + (result.meta.separator === "linebreak" && result.elements.length > 1 ? `
1364
+ ` : "")}}`;
1365
+ },
1366
+ JsdocTypeOptional: (result, transform2) => applyPosition(result.meta.position, transform2(result.element), "="),
1367
+ JsdocTypeSymbol: (result, transform2) => `${result.value}(${result.element !== void 0 ? transform2(result.element) : ""})`,
1368
+ JsdocTypeTypeof: (result, transform2) => `typeof ${transform2(result.element)}`,
1369
+ JsdocTypeUndefined: () => "undefined",
1370
+ JsdocTypeUnion: (result, transform2) => result.elements.map(transform2).join(" | "),
1371
+ JsdocTypeUnknown: () => "?",
1372
+ JsdocTypeIntersection: (result, transform2) => result.elements.map(transform2).join(" & "),
1373
+ JsdocTypeProperty: (result) => quote(result.value, result.meta.quote),
1374
+ JsdocTypePredicate: (result, transform2) => `${transform2(result.left)} is ${transform2(result.right)}`,
1375
+ JsdocTypeIndexSignature: (result, transform2) => `[${result.key}: ${transform2(result.right)}]`,
1376
+ JsdocTypeMappedType: (result, transform2) => `[${result.key} in ${transform2(result.right)}]`,
1377
+ JsdocTypeAsserts: (result, transform2) => `asserts ${transform2(result.left)} is ${transform2(result.right)}`,
1378
+ JsdocTypeReadonlyArray: (result, transform2) => `readonly ${transform2(result.element)}`,
1379
+ JsdocTypeAssertsPlain: (result, transform2) => `asserts ${transform2(result.element)}`,
1380
+ JsdocTypeConditional: (result, transform2) => `${transform2(result.checksType)} extends ${transform2(result.extendsType)} ? ${transform2(result.trueType)} : ${transform2(result.falseType)}`,
1381
+ JsdocTypeTypeParameter: (result, transform2) => `${transform2(result.name)}${result.constraint !== void 0 ? ` extends ${transform2(result.constraint)}` : ""}${result.defaultValue !== void 0 ? ` = ${transform2(result.defaultValue)}` : ""}`
1382
+ };
1383
+ }
1384
+ let storedStringifyRules = stringifyRules2();
1385
+ function stringify2(result) {
1386
+ return transform(storedStringifyRules, result);
1387
+ }
1388
+ let reservedWords = [
1389
+ "null",
1390
+ "true",
1391
+ "false",
1392
+ "break",
1393
+ "case",
1394
+ "catch",
1395
+ "class",
1396
+ "const",
1397
+ "continue",
1398
+ "debugger",
1399
+ "default",
1400
+ "delete",
1401
+ "do",
1402
+ "else",
1403
+ "export",
1404
+ "extends",
1405
+ "finally",
1406
+ "for",
1407
+ "function",
1408
+ "if",
1409
+ "import",
1410
+ "in",
1411
+ "instanceof",
1412
+ "new",
1413
+ "return",
1414
+ "super",
1415
+ "switch",
1416
+ "this",
1417
+ "throw",
1418
+ "try",
1419
+ "typeof",
1420
+ "var",
1421
+ "void",
1422
+ "while",
1423
+ "with",
1424
+ "yield"
1425
+ ];
1426
+ function makeName(value) {
1427
+ let result = {
1428
+ type: "NameExpression",
1429
+ name: value
1430
+ };
1431
+ return reservedWords.includes(value) && (result.reservedWord = !0), result;
1432
+ }
1433
+ let catharsisTransformRules = {
1434
+ JsdocTypeOptional: (result, transform2) => {
1435
+ let transformed = transform2(result.element);
1436
+ return transformed.optional = !0, transformed;
1437
+ },
1438
+ JsdocTypeNullable: (result, transform2) => {
1439
+ let transformed = transform2(result.element);
1440
+ return transformed.nullable = !0, transformed;
1441
+ },
1442
+ JsdocTypeNotNullable: (result, transform2) => {
1443
+ let transformed = transform2(result.element);
1444
+ return transformed.nullable = !1, transformed;
1445
+ },
1446
+ JsdocTypeVariadic: (result, transform2) => {
1447
+ if (result.element === void 0)
1448
+ throw new Error("dots without value are not allowed in catharsis mode");
1449
+ let transformed = transform2(result.element);
1450
+ return transformed.repeatable = !0, transformed;
1451
+ },
1452
+ JsdocTypeAny: () => ({
1453
+ type: "AllLiteral"
1454
+ }),
1455
+ JsdocTypeNull: () => ({
1456
+ type: "NullLiteral"
1457
+ }),
1458
+ JsdocTypeStringValue: (result) => makeName(quote(result.value, result.meta.quote)),
1459
+ JsdocTypeUndefined: () => ({
1460
+ type: "UndefinedLiteral"
1461
+ }),
1462
+ JsdocTypeUnknown: () => ({
1463
+ type: "UnknownLiteral"
1464
+ }),
1465
+ JsdocTypeFunction: (result, transform2) => {
1466
+ let params = extractSpecialParams(result), transformed = {
1467
+ type: "FunctionType",
1468
+ params: params.params.map(transform2)
1469
+ };
1470
+ return params.this !== void 0 && (transformed.this = transform2(params.this)), params.new !== void 0 && (transformed.new = transform2(params.new)), result.returnType !== void 0 && (transformed.result = transform2(result.returnType)), transformed;
1471
+ },
1472
+ JsdocTypeGeneric: (result, transform2) => ({
1473
+ type: "TypeApplication",
1474
+ applications: result.elements.map((o) => transform2(o)),
1475
+ expression: transform2(result.left)
1476
+ }),
1477
+ JsdocTypeSpecialNamePath: (result) => makeName(result.specialType + ":" + quote(result.value, result.meta.quote)),
1478
+ JsdocTypeName: (result) => result.value !== "function" ? makeName(result.value) : {
1479
+ type: "FunctionType",
1480
+ params: []
1481
+ },
1482
+ JsdocTypeNumber: (result) => makeName(result.value.toString()),
1483
+ JsdocTypeObject: (result, transform2) => {
1484
+ let transformed = {
1485
+ type: "RecordType",
1486
+ fields: []
1487
+ };
1488
+ for (let field of result.elements)
1489
+ field.type !== "JsdocTypeObjectField" && field.type !== "JsdocTypeJsdocObjectField" ? transformed.fields.push({
1490
+ type: "FieldType",
1491
+ key: transform2(field),
1492
+ value: void 0
1493
+ }) : transformed.fields.push(transform2(field));
1494
+ return transformed;
1495
+ },
1496
+ JsdocTypeObjectField: (result, transform2) => {
1497
+ if (typeof result.key != "string")
1498
+ throw new Error("Index signatures and mapped types are not supported");
1499
+ return {
1500
+ type: "FieldType",
1501
+ key: makeName(quote(result.key, result.meta.quote)),
1502
+ value: result.right === void 0 ? void 0 : transform2(result.right)
1503
+ };
1504
+ },
1505
+ JsdocTypeJsdocObjectField: (result, transform2) => ({
1506
+ type: "FieldType",
1507
+ key: transform2(result.left),
1508
+ value: transform2(result.right)
1509
+ }),
1510
+ JsdocTypeUnion: (result, transform2) => ({
1511
+ type: "TypeUnion",
1512
+ elements: result.elements.map((e) => transform2(e))
1513
+ }),
1514
+ JsdocTypeKeyValue: (result, transform2) => ({
1515
+ type: "FieldType",
1516
+ key: makeName(result.key),
1517
+ value: result.right === void 0 ? void 0 : transform2(result.right)
1518
+ }),
1519
+ JsdocTypeNamePath: (result, transform2) => {
1520
+ let leftResult = transform2(result.left), rightValue;
1521
+ result.right.type === "JsdocTypeSpecialNamePath" ? rightValue = transform2(result.right).name : rightValue = quote(result.right.value, result.right.meta.quote);
1522
+ let joiner = result.pathType === "inner" ? "~" : result.pathType === "instance" ? "#" : ".";
1523
+ return makeName(`${leftResult.name}${joiner}${rightValue}`);
1524
+ },
1525
+ JsdocTypeSymbol: (result) => {
1526
+ let value = "", element = result.element, trailingDots = !1;
1527
+ return element?.type === "JsdocTypeVariadic" && (element.meta.position === "prefix" ? value = "..." : trailingDots = !0, element = element.element), element?.type === "JsdocTypeName" ? value += element.value : element?.type === "JsdocTypeNumber" && (value += element.value.toString()), trailingDots && (value += "..."), makeName(`${result.value}(${value})`);
1528
+ },
1529
+ JsdocTypeParenthesis: (result, transform2) => transform2(assertRootResult(result.element)),
1530
+ JsdocTypeMappedType: notAvailableTransform,
1531
+ JsdocTypeIndexSignature: notAvailableTransform,
1532
+ JsdocTypeImport: notAvailableTransform,
1533
+ JsdocTypeKeyof: notAvailableTransform,
1534
+ JsdocTypeTuple: notAvailableTransform,
1535
+ JsdocTypeTypeof: notAvailableTransform,
1536
+ JsdocTypeIntersection: notAvailableTransform,
1537
+ JsdocTypeProperty: notAvailableTransform,
1538
+ JsdocTypePredicate: notAvailableTransform,
1539
+ JsdocTypeAsserts: notAvailableTransform,
1540
+ JsdocTypeReadonlyArray: notAvailableTransform,
1541
+ JsdocTypeAssertsPlain: notAvailableTransform,
1542
+ JsdocTypeConditional: notAvailableTransform,
1543
+ JsdocTypeTypeParameter: notAvailableTransform
1544
+ };
1545
+ function catharsisTransform(result) {
1546
+ return transform(catharsisTransformRules, result);
1547
+ }
1548
+ function getQuoteStyle(quote2) {
1549
+ switch (quote2) {
1550
+ case void 0:
1551
+ return "none";
1552
+ case "single":
1553
+ return "single";
1554
+ case "double":
1555
+ return "double";
1556
+ }
1557
+ }
1558
+ function getMemberType(type) {
1559
+ switch (type) {
1560
+ case "inner":
1561
+ return "INNER_MEMBER";
1562
+ case "instance":
1563
+ return "INSTANCE_MEMBER";
1564
+ case "property":
1565
+ return "MEMBER";
1566
+ case "property-brackets":
1567
+ return "MEMBER";
1568
+ }
1569
+ }
1570
+ function nestResults(type, results) {
1571
+ return results.length === 2 ? {
1572
+ type,
1573
+ left: results[0],
1574
+ right: results[1]
1575
+ } : {
1576
+ type,
1577
+ left: results[0],
1578
+ right: nestResults(type, results.slice(1))
1579
+ };
1580
+ }
1581
+ let jtpRules = {
1582
+ JsdocTypeOptional: (result, transform2) => ({
1583
+ type: "OPTIONAL",
1584
+ value: transform2(result.element),
1585
+ meta: {
1586
+ syntax: result.meta.position === "prefix" ? "PREFIX_EQUAL_SIGN" : "SUFFIX_EQUALS_SIGN"
1587
+ }
1588
+ }),
1589
+ JsdocTypeNullable: (result, transform2) => ({
1590
+ type: "NULLABLE",
1591
+ value: transform2(result.element),
1592
+ meta: {
1593
+ syntax: result.meta.position === "prefix" ? "PREFIX_QUESTION_MARK" : "SUFFIX_QUESTION_MARK"
1594
+ }
1595
+ }),
1596
+ JsdocTypeNotNullable: (result, transform2) => ({
1597
+ type: "NOT_NULLABLE",
1598
+ value: transform2(result.element),
1599
+ meta: {
1600
+ syntax: result.meta.position === "prefix" ? "PREFIX_BANG" : "SUFFIX_BANG"
1601
+ }
1602
+ }),
1603
+ JsdocTypeVariadic: (result, transform2) => {
1604
+ let transformed = {
1605
+ type: "VARIADIC",
1606
+ meta: {
1607
+ syntax: result.meta.position === "prefix" ? "PREFIX_DOTS" : result.meta.position === "suffix" ? "SUFFIX_DOTS" : "ONLY_DOTS"
1608
+ }
1609
+ };
1610
+ return result.element !== void 0 && (transformed.value = transform2(result.element)), transformed;
1611
+ },
1612
+ JsdocTypeName: (result) => ({
1613
+ type: "NAME",
1614
+ name: result.value
1615
+ }),
1616
+ JsdocTypeTypeof: (result, transform2) => ({
1617
+ type: "TYPE_QUERY",
1618
+ name: transform2(result.element)
1619
+ }),
1620
+ JsdocTypeTuple: (result, transform2) => ({
1621
+ type: "TUPLE",
1622
+ entries: result.elements.map(transform2)
1623
+ }),
1624
+ JsdocTypeKeyof: (result, transform2) => ({
1625
+ type: "KEY_QUERY",
1626
+ value: transform2(result.element)
1627
+ }),
1628
+ JsdocTypeImport: (result) => ({
1629
+ type: "IMPORT",
1630
+ path: {
1631
+ type: "STRING_VALUE",
1632
+ quoteStyle: getQuoteStyle(result.element.meta.quote),
1633
+ string: result.element.value
1634
+ }
1635
+ }),
1636
+ JsdocTypeUndefined: () => ({
1637
+ type: "NAME",
1638
+ name: "undefined"
1639
+ }),
1640
+ JsdocTypeAny: () => ({
1641
+ type: "ANY"
1642
+ }),
1643
+ JsdocTypeFunction: (result, transform2) => {
1644
+ let specialParams = extractSpecialParams(result), transformed = {
1645
+ type: result.arrow ? "ARROW" : "FUNCTION",
1646
+ params: specialParams.params.map((param) => {
1647
+ if (param.type === "JsdocTypeKeyValue") {
1648
+ if (param.right === void 0)
1649
+ throw new Error("Function parameter without ':' is not expected to be 'KEY_VALUE'");
1650
+ return {
1651
+ type: "NAMED_PARAMETER",
1652
+ name: param.key,
1653
+ typeName: transform2(param.right)
1654
+ };
1655
+ } else
1656
+ return transform2(param);
1657
+ }),
1658
+ new: null,
1659
+ returns: null
1660
+ };
1661
+ return specialParams.this !== void 0 ? transformed.this = transform2(specialParams.this) : result.arrow || (transformed.this = null), specialParams.new !== void 0 && (transformed.new = transform2(specialParams.new)), result.returnType !== void 0 && (transformed.returns = transform2(result.returnType)), transformed;
1662
+ },
1663
+ JsdocTypeGeneric: (result, transform2) => {
1664
+ let transformed = {
1665
+ type: "GENERIC",
1666
+ subject: transform2(result.left),
1667
+ objects: result.elements.map(transform2),
1668
+ meta: {
1669
+ syntax: result.meta.brackets === "square" ? "SQUARE_BRACKET" : result.meta.dot ? "ANGLE_BRACKET_WITH_DOT" : "ANGLE_BRACKET"
1670
+ }
1671
+ };
1672
+ return result.meta.brackets === "square" && result.elements[0].type === "JsdocTypeFunction" && !result.elements[0].parenthesis && (transformed.objects[0] = {
1673
+ type: "NAME",
1674
+ name: "function"
1675
+ }), transformed;
1676
+ },
1677
+ JsdocTypeObjectField: (result, transform2) => {
1678
+ if (typeof result.key != "string")
1679
+ throw new Error("Index signatures and mapped types are not supported");
1680
+ if (result.right === void 0)
1681
+ return {
1682
+ type: "RECORD_ENTRY",
1683
+ key: result.key,
1684
+ quoteStyle: getQuoteStyle(result.meta.quote),
1685
+ value: null,
1686
+ readonly: !1
1687
+ };
1688
+ let right = transform2(result.right);
1689
+ return result.optional && (right = {
1690
+ type: "OPTIONAL",
1691
+ value: right,
1692
+ meta: {
1693
+ syntax: "SUFFIX_KEY_QUESTION_MARK"
1694
+ }
1695
+ }), {
1696
+ type: "RECORD_ENTRY",
1697
+ key: result.key.toString(),
1698
+ quoteStyle: getQuoteStyle(result.meta.quote),
1699
+ value: right,
1700
+ readonly: !1
1701
+ };
1702
+ },
1703
+ JsdocTypeJsdocObjectField: () => {
1704
+ throw new Error("Keys may not be typed in jsdoctypeparser.");
1705
+ },
1706
+ JsdocTypeKeyValue: (result, transform2) => {
1707
+ if (result.right === void 0)
1708
+ return {
1709
+ type: "RECORD_ENTRY",
1710
+ key: result.key,
1711
+ quoteStyle: "none",
1712
+ value: null,
1713
+ readonly: !1
1714
+ };
1715
+ let right = transform2(result.right);
1716
+ return result.optional && (right = {
1717
+ type: "OPTIONAL",
1718
+ value: right,
1719
+ meta: {
1720
+ syntax: "SUFFIX_KEY_QUESTION_MARK"
1721
+ }
1722
+ }), {
1723
+ type: "RECORD_ENTRY",
1724
+ key: result.key,
1725
+ quoteStyle: "none",
1726
+ value: right,
1727
+ readonly: !1
1728
+ };
1729
+ },
1730
+ JsdocTypeObject: (result, transform2) => {
1731
+ let entries = [];
1732
+ for (let field of result.elements)
1733
+ (field.type === "JsdocTypeObjectField" || field.type === "JsdocTypeJsdocObjectField") && entries.push(transform2(field));
1734
+ return {
1735
+ type: "RECORD",
1736
+ entries
1737
+ };
1738
+ },
1739
+ JsdocTypeSpecialNamePath: (result) => {
1740
+ if (result.specialType !== "module")
1741
+ throw new Error(`jsdoctypeparser does not support type ${result.specialType} at this point.`);
1742
+ return {
1743
+ type: "MODULE",
1744
+ value: {
1745
+ type: "FILE_PATH",
1746
+ quoteStyle: getQuoteStyle(result.meta.quote),
1747
+ path: result.value
1748
+ }
1749
+ };
1750
+ },
1751
+ JsdocTypeNamePath: (result, transform2) => {
1752
+ let hasEventPrefix = !1, name, quoteStyle;
1753
+ result.right.type === "JsdocTypeSpecialNamePath" && result.right.specialType === "event" ? (hasEventPrefix = !0, name = result.right.value, quoteStyle = getQuoteStyle(result.right.meta.quote)) : (name = result.right.value, quoteStyle = getQuoteStyle(result.right.meta.quote));
1754
+ let transformed = {
1755
+ type: getMemberType(result.pathType),
1756
+ owner: transform2(result.left),
1757
+ name,
1758
+ quoteStyle,
1759
+ hasEventPrefix
1760
+ };
1761
+ if (transformed.owner.type === "MODULE") {
1762
+ let tModule = transformed.owner;
1763
+ return transformed.owner = transformed.owner.value, tModule.value = transformed, tModule;
1764
+ } else
1765
+ return transformed;
1766
+ },
1767
+ JsdocTypeUnion: (result, transform2) => nestResults("UNION", result.elements.map(transform2)),
1768
+ JsdocTypeParenthesis: (result, transform2) => ({
1769
+ type: "PARENTHESIS",
1770
+ value: transform2(assertRootResult(result.element))
1771
+ }),
1772
+ JsdocTypeNull: () => ({
1773
+ type: "NAME",
1774
+ name: "null"
1775
+ }),
1776
+ JsdocTypeUnknown: () => ({
1777
+ type: "UNKNOWN"
1778
+ }),
1779
+ JsdocTypeStringValue: (result) => ({
1780
+ type: "STRING_VALUE",
1781
+ quoteStyle: getQuoteStyle(result.meta.quote),
1782
+ string: result.value
1783
+ }),
1784
+ JsdocTypeIntersection: (result, transform2) => nestResults("INTERSECTION", result.elements.map(transform2)),
1785
+ JsdocTypeNumber: (result) => ({
1786
+ type: "NUMBER_VALUE",
1787
+ number: result.value.toString()
1788
+ }),
1789
+ JsdocTypeSymbol: notAvailableTransform,
1790
+ JsdocTypeProperty: notAvailableTransform,
1791
+ JsdocTypePredicate: notAvailableTransform,
1792
+ JsdocTypeMappedType: notAvailableTransform,
1793
+ JsdocTypeIndexSignature: notAvailableTransform,
1794
+ JsdocTypeAsserts: notAvailableTransform,
1795
+ JsdocTypeReadonlyArray: notAvailableTransform,
1796
+ JsdocTypeAssertsPlain: notAvailableTransform,
1797
+ JsdocTypeConditional: notAvailableTransform,
1798
+ JsdocTypeTypeParameter: notAvailableTransform
1799
+ };
1800
+ function jtpTransform(result) {
1801
+ return transform(jtpRules, result);
1802
+ }
1803
+ function identityTransformRules() {
1804
+ return {
1805
+ JsdocTypeIntersection: (result, transform2) => ({
1806
+ type: "JsdocTypeIntersection",
1807
+ elements: result.elements.map(transform2)
1808
+ }),
1809
+ JsdocTypeGeneric: (result, transform2) => ({
1810
+ type: "JsdocTypeGeneric",
1811
+ left: transform2(result.left),
1812
+ elements: result.elements.map(transform2),
1813
+ meta: {
1814
+ dot: result.meta.dot,
1815
+ brackets: result.meta.brackets
1816
+ }
1817
+ }),
1818
+ JsdocTypeNullable: (result) => result,
1819
+ JsdocTypeUnion: (result, transform2) => ({
1820
+ type: "JsdocTypeUnion",
1821
+ elements: result.elements.map(transform2)
1822
+ }),
1823
+ JsdocTypeUnknown: (result) => result,
1824
+ JsdocTypeUndefined: (result) => result,
1825
+ JsdocTypeTypeof: (result, transform2) => ({
1826
+ type: "JsdocTypeTypeof",
1827
+ element: transform2(result.element)
1828
+ }),
1829
+ JsdocTypeSymbol: (result, transform2) => {
1830
+ let transformed = {
1831
+ type: "JsdocTypeSymbol",
1832
+ value: result.value
1833
+ };
1834
+ return result.element !== void 0 && (transformed.element = transform2(result.element)), transformed;
1835
+ },
1836
+ JsdocTypeOptional: (result, transform2) => ({
1837
+ type: "JsdocTypeOptional",
1838
+ element: transform2(result.element),
1839
+ meta: {
1840
+ position: result.meta.position
1841
+ }
1842
+ }),
1843
+ JsdocTypeObject: (result, transform2) => ({
1844
+ type: "JsdocTypeObject",
1845
+ meta: {
1846
+ separator: "comma"
1847
+ },
1848
+ elements: result.elements.map(transform2)
1849
+ }),
1850
+ JsdocTypeNumber: (result) => result,
1851
+ JsdocTypeNull: (result) => result,
1852
+ JsdocTypeNotNullable: (result, transform2) => ({
1853
+ type: "JsdocTypeNotNullable",
1854
+ element: transform2(result.element),
1855
+ meta: {
1856
+ position: result.meta.position
1857
+ }
1858
+ }),
1859
+ JsdocTypeSpecialNamePath: (result) => result,
1860
+ JsdocTypeObjectField: (result, transform2) => ({
1861
+ type: "JsdocTypeObjectField",
1862
+ key: result.key,
1863
+ right: result.right === void 0 ? void 0 : transform2(result.right),
1864
+ optional: result.optional,
1865
+ readonly: result.readonly,
1866
+ meta: result.meta
1867
+ }),
1868
+ JsdocTypeJsdocObjectField: (result, transform2) => ({
1869
+ type: "JsdocTypeJsdocObjectField",
1870
+ left: transform2(result.left),
1871
+ right: transform2(result.right)
1872
+ }),
1873
+ JsdocTypeKeyValue: (result, transform2) => ({
1874
+ type: "JsdocTypeKeyValue",
1875
+ key: result.key,
1876
+ right: result.right === void 0 ? void 0 : transform2(result.right),
1877
+ optional: result.optional,
1878
+ variadic: result.variadic
1879
+ }),
1880
+ JsdocTypeImport: (result, transform2) => ({
1881
+ type: "JsdocTypeImport",
1882
+ element: transform2(result.element)
1883
+ }),
1884
+ JsdocTypeAny: (result) => result,
1885
+ JsdocTypeStringValue: (result) => result,
1886
+ JsdocTypeNamePath: (result) => result,
1887
+ JsdocTypeVariadic: (result, transform2) => {
1888
+ let transformed = {
1889
+ type: "JsdocTypeVariadic",
1890
+ meta: {
1891
+ position: result.meta.position,
1892
+ squareBrackets: result.meta.squareBrackets
1893
+ }
1894
+ };
1895
+ return result.element !== void 0 && (transformed.element = transform2(result.element)), transformed;
1896
+ },
1897
+ JsdocTypeTuple: (result, transform2) => ({
1898
+ type: "JsdocTypeTuple",
1899
+ elements: result.elements.map(transform2)
1900
+ }),
1901
+ JsdocTypeName: (result) => result,
1902
+ JsdocTypeFunction: (result, transform2) => {
1903
+ let transformed = {
1904
+ type: "JsdocTypeFunction",
1905
+ arrow: result.arrow,
1906
+ parameters: result.parameters.map(transform2),
1907
+ constructor: result.constructor,
1908
+ parenthesis: result.parenthesis
1909
+ };
1910
+ return result.returnType !== void 0 && (transformed.returnType = transform2(result.returnType)), transformed;
1911
+ },
1912
+ JsdocTypeKeyof: (result, transform2) => ({
1913
+ type: "JsdocTypeKeyof",
1914
+ element: transform2(result.element)
1915
+ }),
1916
+ JsdocTypeParenthesis: (result, transform2) => ({
1917
+ type: "JsdocTypeParenthesis",
1918
+ element: transform2(result.element)
1919
+ }),
1920
+ JsdocTypeProperty: (result) => result,
1921
+ JsdocTypePredicate: (result, transform2) => ({
1922
+ type: "JsdocTypePredicate",
1923
+ left: transform2(result.left),
1924
+ right: transform2(result.right)
1925
+ }),
1926
+ JsdocTypeIndexSignature: (result, transform2) => ({
1927
+ type: "JsdocTypeIndexSignature",
1928
+ key: result.key,
1929
+ right: transform2(result.right)
1930
+ }),
1931
+ JsdocTypeMappedType: (result, transform2) => ({
1932
+ type: "JsdocTypeMappedType",
1933
+ key: result.key,
1934
+ right: transform2(result.right)
1935
+ }),
1936
+ JsdocTypeAsserts: (result, transform2) => ({
1937
+ type: "JsdocTypeAsserts",
1938
+ left: transform2(result.left),
1939
+ right: transform2(result.right)
1940
+ }),
1941
+ JsdocTypeReadonlyArray: (result, transform2) => ({
1942
+ type: "JsdocTypeReadonlyArray",
1943
+ element: transform2(result.element)
1944
+ }),
1945
+ JsdocTypeAssertsPlain: (result, transform2) => ({
1946
+ type: "JsdocTypeAssertsPlain",
1947
+ element: transform2(result.element)
1948
+ }),
1949
+ JsdocTypeConditional: (result, transform2) => ({
1950
+ type: "JsdocTypeConditional",
1951
+ checksType: transform2(result.checksType),
1952
+ extendsType: transform2(result.extendsType),
1953
+ trueType: transform2(result.trueType),
1954
+ falseType: transform2(result.falseType)
1955
+ }),
1956
+ JsdocTypeTypeParameter: (result, transform2) => ({
1957
+ type: "JsdocTypeTypeParameter",
1958
+ name: transform2(result.name),
1959
+ constraint: result.constraint !== void 0 ? transform2(result.constraint) : void 0,
1960
+ defaultValue: result.defaultValue !== void 0 ? transform2(result.defaultValue) : void 0
1961
+ })
1962
+ };
1963
+ }
1964
+ let visitorKeys = {
1965
+ JsdocTypeAny: [],
1966
+ JsdocTypeFunction: ["parameters", "returnType"],
1967
+ JsdocTypeGeneric: ["left", "elements"],
1968
+ JsdocTypeImport: [],
1969
+ JsdocTypeIndexSignature: ["right"],
1970
+ JsdocTypeIntersection: ["elements"],
1971
+ JsdocTypeKeyof: ["element"],
1972
+ JsdocTypeKeyValue: ["right"],
1973
+ JsdocTypeMappedType: ["right"],
1974
+ JsdocTypeName: [],
1975
+ JsdocTypeNamePath: ["left", "right"],
1976
+ JsdocTypeNotNullable: ["element"],
1977
+ JsdocTypeNull: [],
1978
+ JsdocTypeNullable: ["element"],
1979
+ JsdocTypeNumber: [],
1980
+ JsdocTypeObject: ["elements"],
1981
+ JsdocTypeObjectField: ["right"],
1982
+ JsdocTypeJsdocObjectField: ["left", "right"],
1983
+ JsdocTypeOptional: ["element"],
1984
+ JsdocTypeParenthesis: ["element"],
1985
+ JsdocTypeSpecialNamePath: [],
1986
+ JsdocTypeStringValue: [],
1987
+ JsdocTypeSymbol: ["element"],
1988
+ JsdocTypeTuple: ["elements"],
1989
+ JsdocTypeTypeof: ["element"],
1990
+ JsdocTypeUndefined: [],
1991
+ JsdocTypeUnion: ["elements"],
1992
+ JsdocTypeUnknown: [],
1993
+ JsdocTypeVariadic: ["element"],
1994
+ JsdocTypeProperty: [],
1995
+ JsdocTypePredicate: ["left", "right"],
1996
+ JsdocTypeAsserts: ["left", "right"],
1997
+ JsdocTypeReadonlyArray: ["element"],
1998
+ JsdocTypeAssertsPlain: ["element"],
1999
+ JsdocTypeConditional: ["checksType", "extendsType", "trueType", "falseType"],
2000
+ JsdocTypeTypeParameter: ["name", "constraint", "defaultValue"]
2001
+ };
2002
+ function _traverse(node, parentNode, property, onEnter, onLeave) {
2003
+ onEnter?.(node, parentNode, property);
2004
+ let keysToVisit = visitorKeys[node.type];
2005
+ for (let key of keysToVisit) {
2006
+ let value = node[key];
2007
+ if (value !== void 0)
2008
+ if (Array.isArray(value))
2009
+ for (let element of value)
2010
+ _traverse(element, node, key, onEnter, onLeave);
2011
+ else
2012
+ _traverse(value, node, key, onEnter, onLeave);
2013
+ }
2014
+ onLeave?.(node, parentNode, property);
2015
+ }
2016
+ function traverse(node, onEnter, onLeave) {
2017
+ _traverse(node, void 0, void 0, onEnter, onLeave);
2018
+ }
2019
+ exports2.catharsisTransform = catharsisTransform, exports2.identityTransformRules = identityTransformRules, exports2.jtpTransform = jtpTransform, exports2.parse = parse3, exports2.stringify = stringify2, exports2.stringifyRules = stringifyRules2, exports2.transform = transform, exports2.traverse = traverse, exports2.tryParse = tryParse, exports2.visitorKeys = visitorKeys;
2020
+ }));
2021
+ }
2022
+ });
2023
+
2024
+ // src/docs-tools/argTypes/convert/flow/convert.ts
2025
+ import { UnknownArgTypesError } from "storybook/internal/preview-errors";
2026
+ var isLiteral = (type) => type.name === "literal", toEnumOption = (element) => element.value.replace(/['|"]/g, ""), convertSig = (type) => {
2027
+ switch (type.type) {
2028
+ case "function":
2029
+ return { name: "function" };
2030
+ case "object":
2031
+ let values = {};
2032
+ return type.signature.properties.forEach((prop) => {
2033
+ values[prop.key] = convert(prop.value);
2034
+ }), {
2035
+ name: "object",
2036
+ value: values
2037
+ };
2038
+ default:
2039
+ throw new UnknownArgTypesError({ type, language: "Flow" });
2040
+ }
2041
+ }, convert = (type) => {
2042
+ let { name, raw } = type, base = {};
2043
+ switch (typeof raw < "u" && (base.raw = raw), type.name) {
2044
+ case "literal":
2045
+ return { ...base, name: "other", value: type.value };
2046
+ case "string":
2047
+ case "number":
2048
+ case "symbol":
2049
+ case "boolean":
2050
+ return { ...base, name };
2051
+ case "Array":
2052
+ return { ...base, name: "array", value: type.elements.map(convert) };
2053
+ case "signature":
2054
+ return { ...base, ...convertSig(type) };
2055
+ case "union":
2056
+ return type.elements?.every(isLiteral) ? { ...base, name: "enum", value: type.elements?.map(toEnumOption) } : { ...base, name, value: type.elements?.map(convert) };
2057
+ case "intersection":
2058
+ return { ...base, name, value: type.elements?.map(convert) };
2059
+ default:
2060
+ return { ...base, name: "other", value: name };
2061
+ }
2062
+ };
2063
+
2064
+ // src/docs-tools/argTypes/convert/utils.ts
2065
+ var QUOTE_REGEX = /^['"]|['"]$/g, trimQuotes = (str2) => str2.replace(QUOTE_REGEX, ""), includesQuotes = (str2) => QUOTE_REGEX.test(str2), parseLiteral = (str2) => {
2066
+ let trimmedValue = trimQuotes(str2);
2067
+ return includesQuotes(str2) || Number.isNaN(Number(trimmedValue)) ? trimmedValue : Number(trimmedValue);
2068
+ };
2069
+
2070
+ // src/docs-tools/argTypes/convert/proptypes/convert.ts
2071
+ var SIGNATURE_REGEXP = /^\(.*\) => /, convert2 = (type) => {
2072
+ let { name, raw, computed, value } = type, base = {};
2073
+ switch (typeof raw < "u" && (base.raw = raw), name) {
2074
+ case "enum": {
2075
+ let values2 = computed ? value : value.map((v) => parseLiteral(v.value));
2076
+ return { ...base, name, value: values2 };
2077
+ }
2078
+ case "string":
2079
+ case "number":
2080
+ case "symbol":
2081
+ return { ...base, name };
2082
+ case "func":
2083
+ return { ...base, name: "function" };
2084
+ case "bool":
2085
+ case "boolean":
2086
+ return { ...base, name: "boolean" };
2087
+ case "arrayOf":
2088
+ case "array":
2089
+ return { ...base, name: "array", value: value && convert2(value) };
2090
+ case "object":
2091
+ return { ...base, name };
2092
+ case "objectOf":
2093
+ return { ...base, name, value: convert2(value) };
2094
+ case "shape":
2095
+ case "exact":
2096
+ let values = mapValues(value, (field) => convert2(field));
2097
+ return { ...base, name: "object", value: values };
2098
+ case "union":
2099
+ return { ...base, name: "union", value: value.map((v) => convert2(v)) };
2100
+ case "instanceOf":
2101
+ case "element":
2102
+ case "elementType":
2103
+ default: {
2104
+ if (name?.indexOf("|") > 0)
2105
+ try {
2106
+ let literalValues = name.split("|").map((v) => JSON.parse(v));
2107
+ return { ...base, name: "enum", value: literalValues };
2108
+ } catch {
2109
+ }
2110
+ let otherVal = value ? `${name}(${value})` : name, otherName = SIGNATURE_REGEXP.test(name) ? "function" : "other";
2111
+ return { ...base, name: otherName, value: otherVal };
2112
+ }
2113
+ }
2114
+ };
2115
+
2116
+ // src/docs-tools/argTypes/convert/typescript/convert.ts
2117
+ import { UnknownArgTypesError as UnknownArgTypesError2 } from "storybook/internal/preview-errors";
2118
+ var convertSig2 = (type) => {
2119
+ switch (type.type) {
2120
+ case "function":
2121
+ return { name: "function" };
2122
+ case "object":
2123
+ let values = {};
2124
+ return type.signature.properties.forEach((prop) => {
2125
+ values[prop.key] = convert3(prop.value);
2126
+ }), {
2127
+ name: "object",
2128
+ value: values
2129
+ };
2130
+ default:
2131
+ throw new UnknownArgTypesError2({ type, language: "Typescript" });
2132
+ }
2133
+ }, convert3 = (type) => {
2134
+ let { name, raw } = type, base = {};
2135
+ switch (typeof raw < "u" && (base.raw = raw), type.name) {
2136
+ case "string":
2137
+ case "number":
2138
+ case "symbol":
2139
+ case "boolean":
2140
+ return { ...base, name };
2141
+ case "Array":
2142
+ return { ...base, name: "array", value: type.elements.map(convert3) };
2143
+ case "signature":
2144
+ return { ...base, ...convertSig2(type) };
2145
+ case "union":
2146
+ let result;
2147
+ return type.elements?.every((element) => element.name === "literal") ? result = {
2148
+ ...base,
2149
+ name: "enum",
2150
+ // @ts-expect-error fix types
2151
+ value: type.elements?.map((v) => parseLiteral(v.value))
2152
+ } : result = { ...base, name, value: type.elements?.map(convert3) }, result;
2153
+ case "intersection":
2154
+ return { ...base, name, value: type.elements?.map(convert3) };
2155
+ default:
2156
+ return { ...base, name: "other", value: name };
2157
+ }
2158
+ };
2159
+
2160
+ // src/docs-tools/argTypes/convert/index.ts
2161
+ var convert4 = (docgenInfo) => {
2162
+ let { type, tsType, flowType } = docgenInfo;
2163
+ try {
2164
+ if (type != null)
2165
+ return convert2(type);
2166
+ if (tsType != null)
2167
+ return convert3(tsType);
2168
+ if (flowType != null)
2169
+ return convert(flowType);
2170
+ } catch (err) {
2171
+ console.error(err);
2172
+ }
2173
+ return null;
2174
+ };
2175
+
2176
+ // src/docs-tools/argTypes/docgen/types.ts
2177
+ var TypeSystem = /* @__PURE__ */ ((TypeSystem2) => (TypeSystem2.JAVASCRIPT = "JavaScript", TypeSystem2.FLOW = "Flow", TypeSystem2.TYPESCRIPT = "TypeScript", TypeSystem2.UNKNOWN = "Unknown", TypeSystem2))(TypeSystem || {});
2178
+
2179
+ // src/docs-tools/argTypes/docgen/utils/defaultValue.ts
2180
+ var BLACKLIST = ["null", "undefined"];
2181
+ function isDefaultValueBlacklisted(value) {
2182
+ return BLACKLIST.some((x) => x === value);
2183
+ }
2184
+
2185
+ // src/docs-tools/argTypes/docgen/utils/string.ts
2186
+ var str = (obj) => {
2187
+ if (!obj)
2188
+ return "";
2189
+ if (typeof obj == "string")
2190
+ return obj;
2191
+ throw new Error(`Description: expected string, got: ${JSON.stringify(obj)}`);
2192
+ };
2193
+
2194
+ // src/docs-tools/argTypes/docgen/utils/docgenInfo.ts
2195
+ function hasDocgen(component) {
2196
+ return !!component.__docgenInfo;
2197
+ }
2198
+ function isValidDocgenSection(docgenSection) {
2199
+ return docgenSection != null && Object.keys(docgenSection).length > 0;
2200
+ }
2201
+ function getDocgenSection(component, section) {
2202
+ return hasDocgen(component) ? component.__docgenInfo[section] : null;
2203
+ }
2204
+ function getDocgenDescription(component) {
2205
+ return hasDocgen(component) ? str(component.__docgenInfo.description) : "";
2206
+ }
2207
+
2208
+ // ../node_modules/comment-parser/es6/primitives.js
2209
+ var Markers;
2210
+ (function(Markers2) {
2211
+ Markers2.start = "/**", Markers2.nostart = "/***", Markers2.delim = "*", Markers2.end = "*/";
2212
+ })(Markers = Markers || (Markers = {}));
2213
+
2214
+ // ../node_modules/comment-parser/es6/util.js
2215
+ function isSpace(source) {
2216
+ return /^\s+$/.test(source);
2217
+ }
2218
+ function splitCR(source) {
2219
+ let matches = source.match(/\r+$/);
2220
+ return matches == null ? ["", source] : [source.slice(-matches[0].length), source.slice(0, -matches[0].length)];
2221
+ }
2222
+ function splitSpace(source) {
2223
+ let matches = source.match(/^\s+/);
2224
+ return matches == null ? ["", source] : [source.slice(0, matches[0].length), source.slice(matches[0].length)];
2225
+ }
2226
+ function splitLines(source) {
2227
+ return source.split(/\n/);
2228
+ }
2229
+ function seedSpec(spec = {}) {
2230
+ return Object.assign({ tag: "", name: "", type: "", optional: !1, description: "", problems: [], source: [] }, spec);
2231
+ }
2232
+ function seedTokens(tokens = {}) {
2233
+ return Object.assign({ start: "", delimiter: "", postDelimiter: "", tag: "", postTag: "", name: "", postName: "", type: "", postType: "", description: "", end: "", lineEnd: "" }, tokens);
2234
+ }
2235
+
2236
+ // ../node_modules/comment-parser/es6/parser/block-parser.js
2237
+ var reTag = /^@\S+/;
2238
+ function getParser({ fence = "```" } = {}) {
2239
+ let fencer = getFencer(fence), toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;
2240
+ return function(source) {
2241
+ let sections = [[]], isFenced = !1;
2242
+ for (let line of source)
2243
+ reTag.test(line.tokens.description) && !isFenced ? sections.push([line]) : sections[sections.length - 1].push(line), isFenced = toggleFence(line.tokens.description, isFenced);
2244
+ return sections;
2245
+ };
2246
+ }
2247
+ function getFencer(fence) {
2248
+ return typeof fence == "string" ? (source) => source.split(fence).length % 2 === 0 : fence;
2249
+ }
2250
+
2251
+ // ../node_modules/comment-parser/es6/parser/source-parser.js
2252
+ function getParser2({ startLine = 0, markers = Markers } = {}) {
2253
+ let block = null, num = startLine;
2254
+ return function(source) {
2255
+ let rest = source, tokens = seedTokens();
2256
+ if ([tokens.lineEnd, rest] = splitCR(rest), [tokens.start, rest] = splitSpace(rest), block === null && rest.startsWith(markers.start) && !rest.startsWith(markers.nostart) && (block = [], tokens.delimiter = rest.slice(0, markers.start.length), rest = rest.slice(markers.start.length), [tokens.postDelimiter, rest] = splitSpace(rest)), block === null)
2257
+ return num++, null;
2258
+ let isClosed = rest.trimRight().endsWith(markers.end);
2259
+ if (tokens.delimiter === "" && rest.startsWith(markers.delim) && !rest.startsWith(markers.end) && (tokens.delimiter = markers.delim, rest = rest.slice(markers.delim.length), [tokens.postDelimiter, rest] = splitSpace(rest)), isClosed) {
2260
+ let trimmed = rest.trimRight();
2261
+ tokens.end = rest.slice(trimmed.length - markers.end.length), rest = trimmed.slice(0, -markers.end.length);
2262
+ }
2263
+ if (tokens.description = rest, block.push({ number: num, source, tokens }), num++, isClosed) {
2264
+ let result = block.slice();
2265
+ return block = null, result;
2266
+ }
2267
+ return null;
2268
+ };
2269
+ }
2270
+
2271
+ // ../node_modules/comment-parser/es6/parser/spec-parser.js
2272
+ function getParser3({ tokenizers }) {
2273
+ return function(source) {
2274
+ var _a;
2275
+ let spec = seedSpec({ source });
2276
+ for (let tokenize of tokenizers)
2277
+ if (spec = tokenize(spec), !((_a = spec.problems[spec.problems.length - 1]) === null || _a === void 0) && _a.critical)
2278
+ break;
2279
+ return spec;
2280
+ };
2281
+ }
2282
+
2283
+ // ../node_modules/comment-parser/es6/parser/tokenizers/tag.js
2284
+ function tagTokenizer() {
2285
+ return (spec) => {
2286
+ let { tokens } = spec.source[0], match = tokens.description.match(/\s*(@(\S+))(\s*)/);
2287
+ return match === null ? (spec.problems.push({
2288
+ code: "spec:tag:prefix",
2289
+ message: 'tag should start with "@" symbol',
2290
+ line: spec.source[0].number,
2291
+ critical: !0
2292
+ }), spec) : (tokens.tag = match[1], tokens.postTag = match[3], tokens.description = tokens.description.slice(match[0].length), spec.tag = match[2], spec);
2293
+ };
2294
+ }
2295
+
2296
+ // ../node_modules/comment-parser/es6/parser/tokenizers/type.js
2297
+ function typeTokenizer(spacing = "compact") {
2298
+ let join2 = getJoiner(spacing);
2299
+ return (spec) => {
2300
+ let curlies = 0, lines = [];
2301
+ for (let [i, { tokens }] of spec.source.entries()) {
2302
+ let type = "";
2303
+ if (i === 0 && tokens.description[0] !== "{")
2304
+ return spec;
2305
+ for (let ch of tokens.description)
2306
+ if (ch === "{" && curlies++, ch === "}" && curlies--, type += ch, curlies === 0)
2307
+ break;
2308
+ if (lines.push([tokens, type]), curlies === 0)
2309
+ break;
2310
+ }
2311
+ if (curlies !== 0)
2312
+ return spec.problems.push({
2313
+ code: "spec:type:unpaired-curlies",
2314
+ message: "unpaired curlies",
2315
+ line: spec.source[0].number,
2316
+ critical: !0
2317
+ }), spec;
2318
+ let parts = [], offset = lines[0][0].postDelimiter.length;
2319
+ for (let [i, [tokens, type]] of lines.entries())
2320
+ tokens.type = type, i > 0 && (tokens.type = tokens.postDelimiter.slice(offset) + type, tokens.postDelimiter = tokens.postDelimiter.slice(0, offset)), [tokens.postType, tokens.description] = splitSpace(tokens.description.slice(type.length)), parts.push(tokens.type);
2321
+ return parts[0] = parts[0].slice(1), parts[parts.length - 1] = parts[parts.length - 1].slice(0, -1), spec.type = join2(parts), spec;
2322
+ };
2323
+ }
2324
+ var trim = (x) => x.trim();
2325
+ function getJoiner(spacing) {
2326
+ return spacing === "compact" ? (t) => t.map(trim).join("") : spacing === "preserve" ? (t) => t.join(`
2327
+ `) : spacing;
2328
+ }
2329
+
2330
+ // ../node_modules/comment-parser/es6/parser/tokenizers/name.js
2331
+ var isQuoted = (s) => s && s.startsWith('"') && s.endsWith('"');
2332
+ function nameTokenizer() {
2333
+ let typeEnd = (num, { tokens }, i) => tokens.type === "" ? num : i;
2334
+ return (spec) => {
2335
+ let { tokens } = spec.source[spec.source.reduce(typeEnd, 0)], source = tokens.description.trimLeft(), quotedGroups = source.split('"');
2336
+ if (quotedGroups.length > 1 && quotedGroups[0] === "" && quotedGroups.length % 2 === 1)
2337
+ return spec.name = quotedGroups[1], tokens.name = `"${quotedGroups[1]}"`, [tokens.postName, tokens.description] = splitSpace(source.slice(tokens.name.length)), spec;
2338
+ let brackets = 0, name = "", optional = !1, defaultValue;
2339
+ for (let ch of source) {
2340
+ if (brackets === 0 && isSpace(ch))
2341
+ break;
2342
+ ch === "[" && brackets++, ch === "]" && brackets--, name += ch;
2343
+ }
2344
+ if (brackets !== 0)
2345
+ return spec.problems.push({
2346
+ code: "spec:name:unpaired-brackets",
2347
+ message: "unpaired brackets",
2348
+ line: spec.source[0].number,
2349
+ critical: !0
2350
+ }), spec;
2351
+ let nameToken = name;
2352
+ if (name[0] === "[" && name[name.length - 1] === "]") {
2353
+ optional = !0, name = name.slice(1, -1);
2354
+ let parts = name.split("=");
2355
+ if (name = parts[0].trim(), parts[1] !== void 0 && (defaultValue = parts.slice(1).join("=").trim()), name === "")
2356
+ return spec.problems.push({
2357
+ code: "spec:name:empty-name",
2358
+ message: "empty name",
2359
+ line: spec.source[0].number,
2360
+ critical: !0
2361
+ }), spec;
2362
+ if (defaultValue === "")
2363
+ return spec.problems.push({
2364
+ code: "spec:name:empty-default",
2365
+ message: "empty default value",
2366
+ line: spec.source[0].number,
2367
+ critical: !0
2368
+ }), spec;
2369
+ if (!isQuoted(defaultValue) && /=(?!>)/.test(defaultValue))
2370
+ return spec.problems.push({
2371
+ code: "spec:name:invalid-default",
2372
+ message: "invalid default value syntax",
2373
+ line: spec.source[0].number,
2374
+ critical: !0
2375
+ }), spec;
2376
+ }
2377
+ return spec.optional = optional, spec.name = name, tokens.name = nameToken, defaultValue !== void 0 && (spec.default = defaultValue), [tokens.postName, tokens.description] = splitSpace(source.slice(tokens.name.length)), spec;
2378
+ };
2379
+ }
2380
+
2381
+ // ../node_modules/comment-parser/es6/parser/tokenizers/description.js
2382
+ function descriptionTokenizer(spacing = "compact", markers = Markers) {
2383
+ let join2 = getJoiner2(spacing);
2384
+ return (spec) => (spec.description = join2(spec.source, markers), spec);
2385
+ }
2386
+ function getJoiner2(spacing) {
2387
+ return spacing === "compact" ? compactJoiner : spacing === "preserve" ? preserveJoiner : spacing;
2388
+ }
2389
+ function compactJoiner(lines, markers = Markers) {
2390
+ return lines.map(({ tokens: { description } }) => description.trim()).filter((description) => description !== "").join(" ");
2391
+ }
2392
+ var lineNo = (num, { tokens }, i) => tokens.type === "" ? num : i, getDescription = ({ tokens }) => (tokens.delimiter === "" ? tokens.start : tokens.postDelimiter.slice(1)) + tokens.description;
2393
+ function preserveJoiner(lines, markers = Markers) {
2394
+ if (lines.length === 0)
2395
+ return "";
2396
+ lines[0].tokens.description === "" && lines[0].tokens.delimiter === markers.start && (lines = lines.slice(1));
2397
+ let lastLine = lines[lines.length - 1];
2398
+ return lastLine !== void 0 && lastLine.tokens.description === "" && lastLine.tokens.end.endsWith(markers.end) && (lines = lines.slice(0, -1)), lines = lines.slice(lines.reduce(lineNo, 0)), lines.map(getDescription).join(`
2399
+ `);
2400
+ }
2401
+
2402
+ // ../node_modules/comment-parser/es6/parser/index.js
2403
+ function getParser4({ startLine = 0, fence = "```", spacing = "compact", markers = Markers, tokenizers = [
2404
+ tagTokenizer(),
2405
+ typeTokenizer(spacing),
2406
+ nameTokenizer(),
2407
+ descriptionTokenizer(spacing)
2408
+ ] } = {}) {
2409
+ if (startLine < 0 || startLine % 1 > 0)
2410
+ throw new Error("Invalid startLine");
2411
+ let parseSource = getParser2({ startLine, markers }), parseBlock = getParser({ fence }), parseSpec = getParser3({ tokenizers }), joinDescription = getJoiner2(spacing);
2412
+ return function(source) {
2413
+ let blocks = [];
2414
+ for (let line of splitLines(source)) {
2415
+ let lines = parseSource(line);
2416
+ if (lines === null)
2417
+ continue;
2418
+ let sections = parseBlock(lines), specs = sections.slice(1).map(parseSpec);
2419
+ blocks.push({
2420
+ description: joinDescription(sections[0], markers),
2421
+ tags: specs,
2422
+ source: lines,
2423
+ problems: specs.reduce((acc, spec) => acc.concat(spec.problems), [])
2424
+ });
2425
+ }
2426
+ return blocks;
2427
+ };
2428
+ }
2429
+
2430
+ // ../node_modules/comment-parser/es6/stringifier/index.js
2431
+ function join(tokens) {
2432
+ return tokens.start + tokens.delimiter + tokens.postDelimiter + tokens.tag + tokens.postTag + tokens.type + tokens.postType + tokens.name + tokens.postName + tokens.description + tokens.end + tokens.lineEnd;
2433
+ }
2434
+ function getStringifier() {
2435
+ return (block) => block.source.map(({ tokens }) => join(tokens)).join(`
2436
+ `);
2437
+ }
2438
+
2439
+ // ../node_modules/comment-parser/es6/stringifier/inspect.js
2440
+ var zeroWidth = {
2441
+ line: 0,
2442
+ start: 0,
2443
+ delimiter: 0,
2444
+ postDelimiter: 0,
2445
+ tag: 0,
2446
+ postTag: 0,
2447
+ name: 0,
2448
+ postName: 0,
2449
+ type: 0,
2450
+ postType: 0,
2451
+ description: 0,
2452
+ end: 0,
2453
+ lineEnd: 0
2454
+ };
2455
+ var fields = Object.keys(zeroWidth);
2456
+
2457
+ // ../node_modules/comment-parser/es6/index.js
2458
+ function parse(source, options = {}) {
2459
+ return getParser4(options)(source);
2460
+ }
2461
+ var stringify = getStringifier();
2462
+
2463
+ // src/docs-tools/argTypes/jsdocParser.ts
2464
+ var import_jsdoc_type_pratt_parser = __toESM(require_dist(), 1);
2465
+ function containsJsDoc(value) {
2466
+ return value != null && value.includes("@");
2467
+ }
2468
+ function parse2(content) {
2469
+ let normalisedContent = `/**
2470
+ ` + (content ?? "").split(`
2471
+ `).map((line) => ` * ${line}`).join(`
2472
+ `) + `
2473
+ */`, ast = parse(normalisedContent, {
2474
+ spacing: "preserve"
2475
+ });
2476
+ if (!ast || ast.length === 0)
2477
+ throw new Error("Cannot parse JSDoc tags.");
2478
+ return ast[0];
2479
+ }
2480
+ var DEFAULT_OPTIONS = {
2481
+ tags: ["param", "arg", "argument", "returns", "ignore", "deprecated"]
2482
+ }, parseJsDoc = (value, options = DEFAULT_OPTIONS) => {
2483
+ if (!containsJsDoc(value))
2484
+ return {
2485
+ includesJsDoc: !1,
2486
+ ignore: !1
2487
+ };
2488
+ let jsDocAst = parse2(value), extractedTags = extractJsDocTags(jsDocAst, options.tags);
2489
+ return extractedTags.ignore ? {
2490
+ includesJsDoc: !0,
2491
+ ignore: !0
2492
+ } : {
2493
+ includesJsDoc: !0,
2494
+ ignore: !1,
2495
+ // Always use the parsed description to ensure JSDoc is removed from the description.
2496
+ description: jsDocAst.description.trim(),
2497
+ extractedTags
2498
+ };
2499
+ };
2500
+ function extractJsDocTags(ast, tags) {
2501
+ let extractedTags = {
2502
+ params: null,
2503
+ deprecated: null,
2504
+ returns: null,
2505
+ ignore: !1
2506
+ };
2507
+ for (let tagSpec of ast.tags)
2508
+ if (!(tags !== void 0 && !tags.includes(tagSpec.tag)))
2509
+ if (tagSpec.tag === "ignore") {
2510
+ extractedTags.ignore = !0;
2511
+ break;
2512
+ } else
2513
+ switch (tagSpec.tag) {
2514
+ // arg & argument are aliases for param.
2515
+ case "param":
2516
+ case "arg":
2517
+ case "argument": {
2518
+ let paramTag = extractParam(tagSpec);
2519
+ paramTag != null && (extractedTags.params == null && (extractedTags.params = []), extractedTags.params.push(paramTag));
2520
+ break;
2521
+ }
2522
+ case "deprecated": {
2523
+ let deprecatedTag = extractDeprecated(tagSpec);
2524
+ deprecatedTag != null && (extractedTags.deprecated = deprecatedTag);
2525
+ break;
2526
+ }
2527
+ case "returns": {
2528
+ let returnsTag = extractReturns(tagSpec);
2529
+ returnsTag != null && (extractedTags.returns = returnsTag);
2530
+ break;
2531
+ }
2532
+ default:
2533
+ break;
2534
+ }
2535
+ return extractedTags;
2536
+ }
2537
+ function normaliseParamName(name) {
2538
+ return name.replace(/[\.-]$/, "");
2539
+ }
2540
+ function extractParam(tag) {
2541
+ if (!tag.name || tag.name === "-")
2542
+ return null;
2543
+ let type = extractType(tag.type);
2544
+ return {
2545
+ name: tag.name,
2546
+ type,
2547
+ description: normaliseDescription(tag.description),
2548
+ getPrettyName: () => normaliseParamName(tag.name),
2549
+ getTypeName: () => type ? extractTypeName(type) : null
2550
+ };
2551
+ }
2552
+ function extractDeprecated(tag) {
2553
+ return tag.name ? joinNameAndDescription(tag.name, tag.description) : null;
2554
+ }
2555
+ function joinNameAndDescription(name, desc) {
2556
+ let joined = name === "" ? desc : `${name} ${desc}`;
2557
+ return normaliseDescription(joined);
2558
+ }
2559
+ function normaliseDescription(text) {
2560
+ let normalised = text.replace(/^- /g, "").trim();
2561
+ return normalised === "" ? null : normalised;
2562
+ }
2563
+ function extractReturns(tag) {
2564
+ let type = extractType(tag.type);
2565
+ return type ? {
2566
+ type,
2567
+ description: joinNameAndDescription(tag.name, tag.description),
2568
+ getTypeName: () => extractTypeName(type)
2569
+ } : null;
2570
+ }
2571
+ var jsdocStringifyRules = (0, import_jsdoc_type_pratt_parser.stringifyRules)(), originalJsdocStringifyObject = jsdocStringifyRules.JsdocTypeObject;
2572
+ jsdocStringifyRules.JsdocTypeAny = () => "any";
2573
+ jsdocStringifyRules.JsdocTypeObject = (result, transform) => `(${originalJsdocStringifyObject(result, transform)})`;
2574
+ jsdocStringifyRules.JsdocTypeOptional = (result, transform) => transform(result.element);
2575
+ jsdocStringifyRules.JsdocTypeNullable = (result, transform) => transform(result.element);
2576
+ jsdocStringifyRules.JsdocTypeNotNullable = (result, transform) => transform(result.element);
2577
+ jsdocStringifyRules.JsdocTypeUnion = (result, transform) => result.elements.map(transform).join("|");
2578
+ function extractType(typeString) {
2579
+ try {
2580
+ return (0, import_jsdoc_type_pratt_parser.parse)(typeString, "typescript");
2581
+ } catch {
2582
+ return null;
2583
+ }
2584
+ }
2585
+ function extractTypeName(type) {
2586
+ return (0, import_jsdoc_type_pratt_parser.transform)(jsdocStringifyRules, type);
2587
+ }
2588
+
2589
+ // src/docs-tools/argTypes/utils.ts
2590
+ var MAX_TYPE_SUMMARY_LENGTH = 90, MAX_DEFAULT_VALUE_SUMMARY_LENGTH = 50;
2591
+ function isTooLongForTypeSummary(value) {
2592
+ return value.length > 90;
2593
+ }
2594
+ function isTooLongForDefaultValueSummary(value) {
2595
+ return value.length > 50;
2596
+ }
2597
+ function createSummaryValue(summary, detail) {
2598
+ return summary === detail ? { summary } : { summary, detail };
2599
+ }
2600
+ var normalizeNewlines = (string) => string.replace(/\\r\\n/g, "\\n");
2601
+
2602
+ // src/docs-tools/argTypes/docgen/flow/createDefaultValue.ts
2603
+ function createDefaultValue(defaultValue, type) {
2604
+ if (defaultValue != null) {
2605
+ let { value } = defaultValue;
2606
+ if (!isDefaultValueBlacklisted(value))
2607
+ return isTooLongForDefaultValueSummary(value) ? createSummaryValue(type?.name, value) : createSummaryValue(value);
2608
+ }
2609
+ return null;
2610
+ }
2611
+
2612
+ // src/docs-tools/argTypes/docgen/flow/createType.ts
2613
+ function generateUnionElement({ name, value, elements, raw }) {
2614
+ return value ?? (elements != null ? elements.map(generateUnionElement).join(" | ") : raw ?? name);
2615
+ }
2616
+ function generateUnion({ name, raw, elements }) {
2617
+ return elements != null ? createSummaryValue(elements.map(generateUnionElement).join(" | ")) : raw != null ? createSummaryValue(raw.replace(/^\|\s*/, "")) : createSummaryValue(name);
2618
+ }
2619
+ function generateFuncSignature({ type, raw }) {
2620
+ return raw != null ? createSummaryValue(raw) : createSummaryValue(type);
2621
+ }
2622
+ function generateObjectSignature({ type, raw }) {
2623
+ return raw != null ? isTooLongForTypeSummary(raw) ? createSummaryValue(type, raw) : createSummaryValue(raw) : createSummaryValue(type);
2624
+ }
2625
+ function generateSignature(flowType) {
2626
+ let { type } = flowType;
2627
+ return type === "object" ? generateObjectSignature(flowType) : generateFuncSignature(flowType);
2628
+ }
2629
+ function generateDefault({ name, raw }) {
2630
+ return raw != null ? isTooLongForTypeSummary(raw) ? createSummaryValue(name, raw) : createSummaryValue(raw) : createSummaryValue(name);
2631
+ }
2632
+ function createType(type) {
2633
+ if (type == null)
2634
+ return null;
2635
+ switch (type.name) {
2636
+ case "union" /* UNION */:
2637
+ return generateUnion(type);
2638
+ case "signature" /* SIGNATURE */:
2639
+ return generateSignature(type);
2640
+ default:
2641
+ return generateDefault(type);
2642
+ }
2643
+ }
2644
+
2645
+ // src/docs-tools/argTypes/docgen/flow/createPropDef.ts
2646
+ var createFlowPropDef = (propName, docgenInfo) => {
2647
+ let { flowType, description, required, defaultValue } = docgenInfo;
2648
+ return {
2649
+ name: propName,
2650
+ type: createType(flowType),
2651
+ required,
2652
+ description,
2653
+ defaultValue: createDefaultValue(defaultValue ?? null, flowType ?? null)
2654
+ };
2655
+ };
2656
+
2657
+ // src/docs-tools/argTypes/docgen/typeScript/createDefaultValue.ts
2658
+ function createDefaultValue2({ defaultValue }) {
2659
+ if (defaultValue != null) {
2660
+ let { value } = defaultValue;
2661
+ if (!isDefaultValueBlacklisted(value))
2662
+ return createSummaryValue(value);
2663
+ }
2664
+ return null;
2665
+ }
2666
+
2667
+ // src/docs-tools/argTypes/docgen/typeScript/createType.ts
2668
+ function createType2({ tsType, required }) {
2669
+ if (tsType == null)
2670
+ return null;
2671
+ let typeName = tsType.name;
2672
+ return required || (typeName = typeName.replace(" | undefined", "")), createSummaryValue(
2673
+ ["Array", "Record", "signature"].includes(tsType.name) ? tsType.raw : typeName
2674
+ );
2675
+ }
2676
+
2677
+ // src/docs-tools/argTypes/docgen/typeScript/createPropDef.ts
2678
+ var createTsPropDef = (propName, docgenInfo) => {
2679
+ let { description, required } = docgenInfo;
2680
+ return {
2681
+ name: propName,
2682
+ type: createType2(docgenInfo),
2683
+ required,
2684
+ description,
2685
+ defaultValue: createDefaultValue2(docgenInfo)
2686
+ };
2687
+ };
2688
+
2689
+ // src/docs-tools/argTypes/docgen/createPropDef.ts
2690
+ function createType3(type) {
2691
+ return type != null ? createSummaryValue(type.name) : null;
2692
+ }
2693
+ function isReactDocgenTypescript(defaultValue) {
2694
+ let { computed, func } = defaultValue;
2695
+ return typeof computed > "u" && typeof func > "u";
2696
+ }
2697
+ function isStringValued(type) {
2698
+ return type ? type.name === "string" ? !0 : type.name === "enum" ? Array.isArray(type.value) && type.value.every(
2699
+ ({ value: tv }) => typeof tv == "string" && tv[0] === '"' && tv[tv.length - 1] === '"'
2700
+ ) : !1 : !1;
2701
+ }
2702
+ function createDefaultValue3(defaultValue, type) {
2703
+ if (defaultValue != null) {
2704
+ let { value } = defaultValue;
2705
+ if (!isDefaultValueBlacklisted(value))
2706
+ return isReactDocgenTypescript(defaultValue) && isStringValued(type) ? createSummaryValue(JSON.stringify(value)) : createSummaryValue(value);
2707
+ }
2708
+ return null;
2709
+ }
2710
+ function createBasicPropDef(name, type, docgenInfo) {
2711
+ let { description, required, defaultValue } = docgenInfo;
2712
+ return {
2713
+ name,
2714
+ type: createType3(type),
2715
+ required,
2716
+ description,
2717
+ defaultValue: createDefaultValue3(defaultValue, type)
2718
+ };
2719
+ }
2720
+ function applyJsDocResult(propDef, jsDocParsingResult) {
2721
+ if (jsDocParsingResult?.includesJsDoc) {
2722
+ let { description, extractedTags } = jsDocParsingResult;
2723
+ description != null && (propDef.description = jsDocParsingResult.description);
2724
+ let value = {
2725
+ ...extractedTags,
2726
+ params: extractedTags?.params?.map(
2727
+ (x) => ({
2728
+ name: x.getPrettyName(),
2729
+ description: x.description
2730
+ })
2731
+ )
2732
+ };
2733
+ Object.values(value).filter(Boolean).length > 0 && (propDef.jsDocTags = value);
2734
+ }
2735
+ return propDef;
2736
+ }
2737
+ var javaScriptFactory = (propName, docgenInfo, jsDocParsingResult) => {
2738
+ let propDef = createBasicPropDef(propName, docgenInfo.type, docgenInfo);
2739
+ return propDef.sbType = convert4(docgenInfo), applyJsDocResult(propDef, jsDocParsingResult);
2740
+ }, tsFactory = (propName, docgenInfo, jsDocParsingResult) => {
2741
+ let propDef = createTsPropDef(propName, docgenInfo);
2742
+ return propDef.sbType = convert4(docgenInfo), applyJsDocResult(propDef, jsDocParsingResult);
2743
+ }, flowFactory = (propName, docgenInfo, jsDocParsingResult) => {
2744
+ let propDef = createFlowPropDef(propName, docgenInfo);
2745
+ return propDef.sbType = convert4(docgenInfo), applyJsDocResult(propDef, jsDocParsingResult);
2746
+ }, unknownFactory = (propName, docgenInfo, jsDocParsingResult) => {
2747
+ let propDef = createBasicPropDef(propName, { name: "unknown" }, docgenInfo);
2748
+ return applyJsDocResult(propDef, jsDocParsingResult);
2749
+ }, getPropDefFactory = (typeSystem) => {
2750
+ switch (typeSystem) {
2751
+ case "JavaScript" /* JAVASCRIPT */:
2752
+ return javaScriptFactory;
2753
+ case "TypeScript" /* TYPESCRIPT */:
2754
+ return tsFactory;
2755
+ case "Flow" /* FLOW */:
2756
+ return flowFactory;
2757
+ default:
2758
+ return unknownFactory;
2759
+ }
2760
+ };
2761
+
2762
+ // src/docs-tools/argTypes/docgen/extractDocgenProps.ts
2763
+ var getTypeSystem = (docgenInfo) => docgenInfo.type != null ? "JavaScript" /* JAVASCRIPT */ : docgenInfo.flowType != null ? "Flow" /* FLOW */ : docgenInfo.tsType != null ? "TypeScript" /* TYPESCRIPT */ : "Unknown" /* UNKNOWN */, extractComponentSectionArray = (docgenSection) => {
2764
+ let typeSystem = getTypeSystem(docgenSection[0]), createPropDef = getPropDefFactory(typeSystem);
2765
+ return docgenSection.map((item) => {
2766
+ let sanitizedItem = item;
2767
+ return item.type?.elements && (sanitizedItem = {
2768
+ ...item,
2769
+ type: {
2770
+ ...item.type,
2771
+ value: item.type.elements
2772
+ }
2773
+ }), extractProp(sanitizedItem.name, sanitizedItem, typeSystem, createPropDef);
2774
+ });
2775
+ }, extractComponentSectionObject = (docgenSection) => {
2776
+ let docgenPropsKeys = Object.keys(docgenSection), typeSystem = getTypeSystem(docgenSection[docgenPropsKeys[0]]), createPropDef = getPropDefFactory(typeSystem);
2777
+ return docgenPropsKeys.map((propName) => {
2778
+ let docgenInfo = docgenSection[propName];
2779
+ return docgenInfo != null ? extractProp(propName, docgenInfo, typeSystem, createPropDef) : null;
2780
+ }).filter(Boolean);
2781
+ }, extractComponentProps = (component, section) => {
2782
+ let docgenSection = getDocgenSection(component, section);
2783
+ return isValidDocgenSection(docgenSection) ? Array.isArray(docgenSection) ? extractComponentSectionArray(docgenSection) : extractComponentSectionObject(docgenSection) : [];
2784
+ };
2785
+ function extractProp(propName, docgenInfo, typeSystem, createPropDef) {
2786
+ let jsDocParsingResult = parseJsDoc(docgenInfo.description);
2787
+ return jsDocParsingResult.includesJsDoc && jsDocParsingResult.ignore ? null : {
2788
+ propDef: createPropDef(propName, docgenInfo, jsDocParsingResult),
2789
+ jsDocTags: jsDocParsingResult.extractedTags,
2790
+ docgenInfo,
2791
+ typeSystem
2792
+ };
2793
+ }
2794
+ function extractComponentDescription(component) {
2795
+ return component != null ? getDocgenDescription(component) : "";
2796
+ }
2797
+
2798
+ // src/preview-api/modules/store/parameters.ts
2799
+ var combineParameters = (...parameterSets) => {
2800
+ let mergeKeys = {}, definedParametersSets = parameterSets.filter(Boolean), combined = definedParametersSets.reduce((acc, parameters) => (Object.entries(parameters).forEach(([key, value]) => {
2801
+ let existing = acc[key];
2802
+ Array.isArray(value) || typeof existing > "u" ? acc[key] = value : isPlainObject(value) && isPlainObject(existing) ? mergeKeys[key] = !0 : typeof value < "u" && (acc[key] = value);
2803
+ }), acc), {});
2804
+ return Object.keys(mergeKeys).forEach((key) => {
2805
+ let mergeValues = definedParametersSets.filter(Boolean).map((p) => p[key]).filter((value) => typeof value < "u");
2806
+ mergeValues.every((value) => isPlainObject(value)) ? combined[key] = combineParameters(...mergeValues) : combined[key] = mergeValues[mergeValues.length - 1];
2807
+ }), combined;
2808
+ };
2809
+
2810
+ // src/docs-tools/argTypes/enhanceArgTypes.ts
2811
+ var enhanceArgTypes = (context) => {
2812
+ let {
2813
+ component,
2814
+ argTypes: userArgTypes,
2815
+ parameters: { docs = {} }
2816
+ } = context, { extractArgTypes } = docs;
2817
+ if (!extractArgTypes || !component)
2818
+ return userArgTypes;
2819
+ let extractedArgTypes = extractArgTypes(component);
2820
+ return extractedArgTypes ? combineParameters(extractedArgTypes, userArgTypes) : userArgTypes;
2821
+ };
2822
+
2823
+ // src/docs-tools/shared.ts
2824
+ var ADDON_ID = "storybook/docs", PANEL_ID = `${ADDON_ID}/panel`, PARAM_KEY = "docs", SNIPPET_RENDERED = `${ADDON_ID}/snippet-rendered`, SourceType = /* @__PURE__ */ ((SourceType2) => (SourceType2.AUTO = "auto", SourceType2.CODE = "code", SourceType2.DYNAMIC = "dynamic", SourceType2))(SourceType || {});
2825
+
2826
+ export {
2827
+ combineParameters,
2828
+ convert4 as convert,
2829
+ TypeSystem,
2830
+ isDefaultValueBlacklisted,
2831
+ str,
2832
+ hasDocgen,
2833
+ isValidDocgenSection,
2834
+ getDocgenSection,
2835
+ getDocgenDescription,
2836
+ parseJsDoc,
2837
+ MAX_TYPE_SUMMARY_LENGTH,
2838
+ MAX_DEFAULT_VALUE_SUMMARY_LENGTH,
2839
+ isTooLongForTypeSummary,
2840
+ isTooLongForDefaultValueSummary,
2841
+ createSummaryValue,
2842
+ normalizeNewlines,
2843
+ extractComponentSectionArray,
2844
+ extractComponentSectionObject,
2845
+ extractComponentProps,
2846
+ extractComponentDescription,
2847
+ enhanceArgTypes,
2848
+ ADDON_ID,
2849
+ PANEL_ID,
2850
+ PARAM_KEY,
2851
+ SNIPPET_RENDERED,
2852
+ SourceType
2853
+ };