custom-electron-titlebar 3.2.6 → 3.2.10

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 (239) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/README.md +15 -24
  3. package/_config.yml +1 -0
  4. package/{lib → build}/browser/browser.d.ts +0 -0
  5. package/{lib → build}/browser/browser.js +0 -0
  6. package/{lib → build}/browser/browser.js.map +0 -0
  7. package/{lib → build}/browser/event.d.ts +0 -0
  8. package/{lib → build}/browser/event.js +2 -1
  9. package/{lib → build}/browser/event.js.map +1 -1
  10. package/{lib → build}/browser/iframe.d.ts +0 -0
  11. package/{lib → build}/browser/iframe.js +0 -0
  12. package/{lib → build}/browser/iframe.js.map +0 -0
  13. package/{lib → build}/browser/keyboardEvent.d.ts +0 -0
  14. package/{lib → build}/browser/keyboardEvent.js +0 -0
  15. package/{lib → build}/browser/keyboardEvent.js.map +0 -0
  16. package/{lib → build}/browser/mouseEvent.d.ts +0 -0
  17. package/{lib → build}/browser/mouseEvent.js +0 -0
  18. package/{lib → build}/browser/mouseEvent.js.map +0 -0
  19. package/{lib → build}/common/arrays.d.ts +0 -0
  20. package/{lib → build}/common/arrays.js +0 -0
  21. package/{lib → build}/common/arrays.js.map +0 -0
  22. package/{lib → build}/common/async.d.ts +0 -0
  23. package/{lib → build}/common/async.js +0 -0
  24. package/{lib → build}/common/async.js.map +0 -0
  25. package/{lib → build}/common/charCode.d.ts +0 -0
  26. package/{lib → build}/common/charCode.js +0 -0
  27. package/{lib → build}/common/charCode.js.map +0 -0
  28. package/{lib → build}/common/color.d.ts +0 -0
  29. package/{lib → build}/common/color.js +0 -0
  30. package/{lib → build}/common/color.js.map +0 -0
  31. package/{lib → build}/common/dom.d.ts +0 -0
  32. package/{lib → build}/common/dom.js +16 -14
  33. package/build/common/dom.js.map +1 -0
  34. package/{lib → build}/common/event.d.ts +0 -0
  35. package/{lib → build}/common/event.js +1 -1
  36. package/build/common/event.js.map +1 -0
  37. package/{lib → build}/common/iterator.d.ts +0 -0
  38. package/{lib → build}/common/iterator.js +0 -0
  39. package/{lib → build}/common/iterator.js.map +0 -0
  40. package/{lib → build}/common/keyCodes.d.ts +0 -0
  41. package/{lib → build}/common/keyCodes.js +0 -0
  42. package/{lib → build}/common/keyCodes.js.map +0 -0
  43. package/{lib → build}/common/lifecycle.d.ts +0 -0
  44. package/{lib → build}/common/lifecycle.js +0 -0
  45. package/{lib → build}/common/lifecycle.js.map +0 -0
  46. package/{lib → build}/common/linkedList.d.ts +0 -0
  47. package/{lib → build}/common/linkedList.js +0 -0
  48. package/{lib → build}/common/linkedList.js.map +0 -0
  49. package/{lib → build}/common/platform.d.ts +0 -0
  50. package/{lib → build}/common/platform.js +0 -0
  51. package/{lib → build}/common/platform.js.map +0 -0
  52. package/{lib → build}/index.d.ts +0 -0
  53. package/{lib → build}/index.js +0 -0
  54. package/{lib → build}/index.js.map +0 -0
  55. package/{lib → build}/menu/menu.d.ts +0 -0
  56. package/{lib → build}/menu/menu.js +38 -38
  57. package/build/menu/menu.js.map +1 -0
  58. package/{lib → build}/menu/menuitem.d.ts +10 -2
  59. package/{lib → build}/menu/menuitem.js +70 -34
  60. package/build/menu/menuitem.js.map +1 -0
  61. package/{lib → build}/menubar.d.ts +0 -0
  62. package/{lib → build}/menubar.js +29 -30
  63. package/build/menubar.js.map +1 -0
  64. package/{lib → build}/themebar.d.ts +0 -0
  65. package/{lib → build}/themebar.js +2 -2
  66. package/build/themebar.js.map +1 -0
  67. package/{lib → build}/titlebar.d.ts +0 -0
  68. package/{lib → build}/titlebar.js +61 -58
  69. package/build/titlebar.js.map +1 -0
  70. package/package.json +13 -7
  71. package/lib/common/dom.js.map +0 -1
  72. package/lib/common/enableNativeMenuCommands.d.ts +0 -1
  73. package/lib/common/enableNativeMenuCommands.js +0 -32
  74. package/lib/common/enableNativeMenuCommands.js.map +0 -1
  75. package/lib/common/event.js.map +0 -1
  76. package/lib/main.d.ts +0 -1
  77. package/lib/main.js +0 -14
  78. package/lib/main.js.map +0 -1
  79. package/lib/menu/menu.js.map +0 -1
  80. package/lib/menu/menuitem.js.map +0 -1
  81. package/lib/menubar.js.map +0 -1
  82. package/lib/themebar.js.map +0 -1
  83. package/lib/titlebar.js.map +0 -1
  84. package/lib/vs/base/browser/browser.js +0 -150
  85. package/lib/vs/base/browser/canIUse.js +0 -58
  86. package/lib/vs/base/browser/codicons.js +0 -37
  87. package/lib/vs/base/browser/contextmenu.js +0 -9
  88. package/lib/vs/base/browser/dnd.js +0 -113
  89. package/lib/vs/base/browser/dom.js +0 -1417
  90. package/lib/vs/base/browser/event.js +0 -36
  91. package/lib/vs/base/browser/fastDomNode.js +0 -265
  92. package/lib/vs/base/browser/formattedTextRenderer.js +0 -248
  93. package/lib/vs/base/browser/globalMouseMoveMonitor.js +0 -137
  94. package/lib/vs/base/browser/history.js +0 -9
  95. package/lib/vs/base/browser/iframe.js +0 -126
  96. package/lib/vs/base/browser/keyboardEvent.js +0 -599
  97. package/lib/vs/base/browser/mouseEvent.js +0 -155
  98. package/lib/vs/base/browser/touch.js +0 -315
  99. package/lib/vs/base/browser/ui/actionbar/actionViewItems.js +0 -397
  100. package/lib/vs/base/browser/ui/actionbar/actionbar.js +0 -583
  101. package/lib/vs/base/browser/ui/checkbox/checkbox.js +0 -251
  102. package/lib/vs/base/browser/ui/codicons/codiconLabel.js +0 -31
  103. package/lib/vs/base/browser/ui/codicons/codiconStyles.js +0 -47
  104. package/lib/vs/base/browser/ui/contextview/contextview.js +0 -367
  105. package/lib/vs/base/browser/ui/dropdown/dropdown.js +0 -256
  106. package/lib/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +0 -120
  107. package/lib/vs/base/browser/ui/keybindingLabel/keybindingLabel.js +0 -118
  108. package/lib/vs/base/browser/ui/list/list.js +0 -54
  109. package/lib/vs/base/browser/ui/list/listPaging.js +0 -322
  110. package/lib/vs/base/browser/ui/list/listView.js +0 -1388
  111. package/lib/vs/base/browser/ui/list/listWidget.js +0 -1709
  112. package/lib/vs/base/browser/ui/list/rangeMap.js +0 -223
  113. package/lib/vs/base/browser/ui/list/rowCache.js +0 -113
  114. package/lib/vs/base/browser/ui/list/splice.js +0 -23
  115. package/lib/vs/base/browser/ui/menu/menu.js +0 -1371
  116. package/lib/vs/base/browser/ui/menu/menubar.js +0 -1139
  117. package/lib/vs/base/browser/ui/scrollbar/abstractScrollbar.js +0 -278
  118. package/lib/vs/base/browser/ui/scrollbar/horizontalScrollbar.js +0 -115
  119. package/lib/vs/base/browser/ui/scrollbar/scrollableElement.js +0 -646
  120. package/lib/vs/base/browser/ui/scrollbar/scrollableElementOptions.js +0 -9
  121. package/lib/vs/base/browser/ui/scrollbar/scrollbarArrow.js +0 -106
  122. package/lib/vs/base/browser/ui/scrollbar/scrollbarState.js +0 -184
  123. package/lib/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js +0 -116
  124. package/lib/vs/base/browser/ui/scrollbar/verticalScrollbar.js +0 -114
  125. package/lib/vs/base/browser/ui/selectBox/selectBox.js +0 -85
  126. package/lib/vs/base/browser/ui/selectBox/selectBoxCustom.js +0 -985
  127. package/lib/vs/base/browser/ui/selectBox/selectBoxNative.js +0 -188
  128. package/lib/vs/base/browser/ui/toolbar/toolbar.js +0 -206
  129. package/lib/vs/base/browser/ui/widget.js +0 -69
  130. package/lib/vs/base/common/actions.js +0 -224
  131. package/lib/vs/base/common/amd.js +0 -31
  132. package/lib/vs/base/common/arrays.js +0 -641
  133. package/lib/vs/base/common/assert.js +0 -21
  134. package/lib/vs/base/common/async.js +0 -966
  135. package/lib/vs/base/common/buffer.js +0 -250
  136. package/lib/vs/base/common/cache.js +0 -40
  137. package/lib/vs/base/common/cancellation.js +0 -146
  138. package/lib/vs/base/common/charCode.js +0 -9
  139. package/lib/vs/base/common/codicon.js +0 -136
  140. package/lib/vs/base/common/codicons.js +0 -1378
  141. package/lib/vs/base/common/collections.js +0 -133
  142. package/lib/vs/base/common/color.js +0 -716
  143. package/lib/vs/base/common/comparers.js +0 -280
  144. package/lib/vs/base/common/console.js +0 -142
  145. package/lib/vs/base/common/date.js +0 -113
  146. package/lib/vs/base/common/decorators.js +0 -169
  147. package/lib/vs/base/common/errorMessage.js +0 -93
  148. package/lib/vs/base/common/errors.js +0 -213
  149. package/lib/vs/base/common/errorsWithActions.js +0 -28
  150. package/lib/vs/base/common/event.js +0 -873
  151. package/lib/vs/base/common/extpath.js +0 -401
  152. package/lib/vs/base/common/filters.js +0 -948
  153. package/lib/vs/base/common/functional.js +0 -28
  154. package/lib/vs/base/common/fuzzyScorer.js +0 -811
  155. package/lib/vs/base/common/glob.js +0 -696
  156. package/lib/vs/base/common/hash.js +0 -359
  157. package/lib/vs/base/common/history.js +0 -116
  158. package/lib/vs/base/common/htmlContent.js +0 -162
  159. package/lib/vs/base/common/idGenerator.js +0 -25
  160. package/lib/vs/base/common/iterator.js +0 -118
  161. package/lib/vs/base/common/json.js +0 -1624
  162. package/lib/vs/base/common/jsonEdit.js +0 -272
  163. package/lib/vs/base/common/jsonErrorMessages.js +0 -69
  164. package/lib/vs/base/common/jsonFormatter.js +0 -316
  165. package/lib/vs/base/common/jsonSchema.js +0 -9
  166. package/lib/vs/base/common/keyCodes.js +0 -591
  167. package/lib/vs/base/common/keybindingLabels.js +0 -231
  168. package/lib/vs/base/common/keybindingParser.js +0 -142
  169. package/lib/vs/base/common/labels.js +0 -430
  170. package/lib/vs/base/common/lazy.js +0 -71
  171. package/lib/vs/base/common/lifecycle.js +0 -308
  172. package/lib/vs/base/common/linkedList.js +0 -152
  173. package/lib/vs/base/common/linkedText.js +0 -73
  174. package/lib/vs/base/common/map.js +0 -1108
  175. package/lib/vs/base/common/marshalling.js +0 -80
  176. package/lib/vs/base/common/mime.js +0 -321
  177. package/lib/vs/base/common/navigator.js +0 -50
  178. package/lib/vs/base/common/network.js +0 -160
  179. package/lib/vs/base/common/normalization.js +0 -78
  180. package/lib/vs/base/common/numbers.js +0 -55
  181. package/lib/vs/base/common/objects.js +0 -268
  182. package/lib/vs/base/common/paging.js +0 -190
  183. package/lib/vs/base/common/parsers.js +0 -78
  184. package/lib/vs/base/common/path.js +0 -1550
  185. package/lib/vs/base/common/platform.js +0 -245
  186. package/lib/vs/base/common/process.js +0 -52
  187. package/lib/vs/base/common/processes.js +0 -32
  188. package/lib/vs/base/common/range.js +0 -79
  189. package/lib/vs/base/common/resourceTree.js +0 -185
  190. package/lib/vs/base/common/resources.js +0 -421
  191. package/lib/vs/base/common/scanCode.js +0 -1472
  192. package/lib/vs/base/common/scrollable.js +0 -397
  193. package/lib/vs/base/common/search.js +0 -55
  194. package/lib/vs/base/common/sequence.js +0 -64
  195. package/lib/vs/base/common/severity.js +0 -55
  196. package/lib/vs/base/common/skipList.js +0 -234
  197. package/lib/vs/base/common/stopwatch.js +0 -45
  198. package/lib/vs/base/common/stream.js +0 -418
  199. package/lib/vs/base/common/strings.js +0 -1283
  200. package/lib/vs/base/common/styler.js +0 -9
  201. package/lib/vs/base/common/types.js +0 -296
  202. package/lib/vs/base/common/uint.js +0 -46
  203. package/lib/vs/base/common/uri.js +0 -756
  204. package/lib/vs/base/common/uriIpc.js +0 -154
  205. package/lib/vs/base/common/uuid.js +0 -70
  206. package/lib/vs/nls.mock.js +0 -31
  207. package/lib/vs/platform/actions/browser/menuEntryActionViewItem.js +0 -342
  208. package/lib/vs/platform/actions/common/actions.js +0 -456
  209. package/lib/vs/platform/actions/common/menuService.js +0 -194
  210. package/lib/vs/platform/clipboard/browser/clipboardService.js +0 -99
  211. package/lib/vs/platform/clipboard/common/clipboardService.js +0 -14
  212. package/lib/vs/platform/contextkey/common/contextkey.js +0 -1210
  213. package/lib/vs/platform/contextkey/common/contextkeys.js +0 -23
  214. package/lib/vs/platform/contextview/browser/contextView.js +0 -15
  215. package/lib/vs/platform/contextview/browser/contextViewService.js +0 -96
  216. package/lib/vs/platform/environment/common/argv.js +0 -9
  217. package/lib/vs/platform/environment/common/environment.js +0 -15
  218. package/lib/vs/platform/instantiation/common/descriptors.js +0 -25
  219. package/lib/vs/platform/instantiation/common/extensions.js +0 -26
  220. package/lib/vs/platform/instantiation/common/graph.js +0 -93
  221. package/lib/vs/platform/instantiation/common/instantiation.js +0 -84
  222. package/lib/vs/platform/instantiation/common/instantiationService.js +0 -361
  223. package/lib/vs/platform/instantiation/common/serviceCollection.js +0 -39
  224. package/lib/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -73
  225. package/lib/vs/platform/keybinding/common/keybinding.js +0 -14
  226. package/lib/vs/platform/keybinding/common/keybindingResolver.js +0 -391
  227. package/lib/vs/platform/keybinding/common/keybindingsRegistry.js +0 -229
  228. package/lib/vs/platform/keybinding/common/resolvedKeybindingItem.js +0 -47
  229. package/lib/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js +0 -160
  230. package/lib/vs/platform/layout/browser/layoutService.js +0 -14
  231. package/lib/vs/platform/menubar/common/menubar.js +0 -34
  232. package/lib/vs/platform/registry/common/platform.js +0 -38
  233. package/lib/vs/platform/theme/browser/checkbox.js +0 -32
  234. package/lib/vs/platform/theme/common/colorRegistry.js +0 -1154
  235. package/lib/vs/platform/theme/common/styler.js +0 -290
  236. package/lib/vs/platform/theme/common/theme.js +0 -21
  237. package/lib/vs/platform/theme/common/themeService.js +0 -176
  238. package/lib/vs/platform/theme/common/tokenClassificationRegistry.js +0 -540
  239. package/lib/vs/platform/theme/test/common/testThemeService.js +0 -98
@@ -1,1624 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the MIT License. See License.txt in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.getNodeType = exports.stripComments = exports.visit = exports.findNodeAtOffset = exports.contains = exports.getNodeValue = exports.getNodePath = exports.findNodeAtLocation = exports.parseTree = exports.parse = exports.getLocation = exports.createScanner = exports.ParseOptions = void 0;
11
- var ParseOptions;
12
-
13
- (function (ParseOptions) {
14
- ParseOptions.DEFAULT = {
15
- allowTrailingComma: true
16
- };
17
- })(ParseOptions = exports.ParseOptions || (exports.ParseOptions = {}));
18
- /**
19
- * Creates a JSON scanner on the given text.
20
- * If ignoreTrivia is set, whitespaces or comments are ignored.
21
- */
22
-
23
-
24
- function createScanner(text, ignoreTrivia = false) {
25
- let pos = 0,
26
- len = text.length,
27
- value = '',
28
- tokenOffset = 0,
29
- token = 16
30
- /* Unknown */
31
- ,
32
- scanError = 0
33
- /* None */
34
- ;
35
-
36
- function scanHexDigits(count) {
37
- let digits = 0;
38
- let hexValue = 0;
39
-
40
- while (digits < count) {
41
- const ch = text.charCodeAt(pos);
42
-
43
- if (ch >= 48
44
- /* _0 */
45
- && ch <= 57
46
- /* _9 */
47
- ) {
48
- hexValue = hexValue * 16 + ch - 48
49
- /* _0 */
50
- ;
51
- } else if (ch >= 65
52
- /* A */
53
- && ch <= 70
54
- /* F */
55
- ) {
56
- hexValue = hexValue * 16 + ch - 65
57
- /* A */
58
- + 10;
59
- } else if (ch >= 97
60
- /* a */
61
- && ch <= 102
62
- /* f */
63
- ) {
64
- hexValue = hexValue * 16 + ch - 97
65
- /* a */
66
- + 10;
67
- } else {
68
- break;
69
- }
70
-
71
- pos++;
72
- digits++;
73
- }
74
-
75
- if (digits < count) {
76
- hexValue = -1;
77
- }
78
-
79
- return hexValue;
80
- }
81
-
82
- function setPosition(newPosition) {
83
- pos = newPosition;
84
- value = '';
85
- tokenOffset = 0;
86
- token = 16
87
- /* Unknown */
88
- ;
89
- scanError = 0
90
- /* None */
91
- ;
92
- }
93
-
94
- function scanNumber() {
95
- const start = pos;
96
-
97
- if (text.charCodeAt(pos) === 48
98
- /* _0 */
99
- ) {
100
- pos++;
101
- } else {
102
- pos++;
103
-
104
- while (pos < text.length && isDigit(text.charCodeAt(pos))) {
105
- pos++;
106
- }
107
- }
108
-
109
- if (pos < text.length && text.charCodeAt(pos) === 46
110
- /* dot */
111
- ) {
112
- pos++;
113
-
114
- if (pos < text.length && isDigit(text.charCodeAt(pos))) {
115
- pos++;
116
-
117
- while (pos < text.length && isDigit(text.charCodeAt(pos))) {
118
- pos++;
119
- }
120
- } else {
121
- scanError = 3
122
- /* UnexpectedEndOfNumber */
123
- ;
124
- return text.substring(start, pos);
125
- }
126
- }
127
-
128
- let end = pos;
129
-
130
- if (pos < text.length && (text.charCodeAt(pos) === 69
131
- /* E */
132
- || text.charCodeAt(pos) === 101
133
- /* e */
134
- )) {
135
- pos++;
136
-
137
- if (pos < text.length && text.charCodeAt(pos) === 43
138
- /* plus */
139
- || text.charCodeAt(pos) === 45
140
- /* minus */
141
- ) {
142
- pos++;
143
- }
144
-
145
- if (pos < text.length && isDigit(text.charCodeAt(pos))) {
146
- pos++;
147
-
148
- while (pos < text.length && isDigit(text.charCodeAt(pos))) {
149
- pos++;
150
- }
151
-
152
- end = pos;
153
- } else {
154
- scanError = 3
155
- /* UnexpectedEndOfNumber */
156
- ;
157
- }
158
- }
159
-
160
- return text.substring(start, end);
161
- }
162
-
163
- function scanString() {
164
- let result = '',
165
- start = pos;
166
-
167
- while (true) {
168
- if (pos >= len) {
169
- result += text.substring(start, pos);
170
- scanError = 2
171
- /* UnexpectedEndOfString */
172
- ;
173
- break;
174
- }
175
-
176
- const ch = text.charCodeAt(pos);
177
-
178
- if (ch === 34
179
- /* doubleQuote */
180
- ) {
181
- result += text.substring(start, pos);
182
- pos++;
183
- break;
184
- }
185
-
186
- if (ch === 92
187
- /* backslash */
188
- ) {
189
- result += text.substring(start, pos);
190
- pos++;
191
-
192
- if (pos >= len) {
193
- scanError = 2
194
- /* UnexpectedEndOfString */
195
- ;
196
- break;
197
- }
198
-
199
- const ch2 = text.charCodeAt(pos++);
200
-
201
- switch (ch2) {
202
- case 34
203
- /* doubleQuote */
204
- :
205
- result += '\"';
206
- break;
207
-
208
- case 92
209
- /* backslash */
210
- :
211
- result += '\\';
212
- break;
213
-
214
- case 47
215
- /* slash */
216
- :
217
- result += '/';
218
- break;
219
-
220
- case 98
221
- /* b */
222
- :
223
- result += '\b';
224
- break;
225
-
226
- case 102
227
- /* f */
228
- :
229
- result += '\f';
230
- break;
231
-
232
- case 110
233
- /* n */
234
- :
235
- result += '\n';
236
- break;
237
-
238
- case 114
239
- /* r */
240
- :
241
- result += '\r';
242
- break;
243
-
244
- case 116
245
- /* t */
246
- :
247
- result += '\t';
248
- break;
249
-
250
- case 117
251
- /* u */
252
- :
253
- const ch3 = scanHexDigits(4);
254
-
255
- if (ch3 >= 0) {
256
- result += String.fromCharCode(ch3);
257
- } else {
258
- scanError = 4
259
- /* InvalidUnicode */
260
- ;
261
- }
262
-
263
- break;
264
-
265
- default:
266
- scanError = 5
267
- /* InvalidEscapeCharacter */
268
- ;
269
- }
270
-
271
- start = pos;
272
- continue;
273
- }
274
-
275
- if (ch >= 0 && ch <= 0x1F) {
276
- if (isLineBreak(ch)) {
277
- result += text.substring(start, pos);
278
- scanError = 2
279
- /* UnexpectedEndOfString */
280
- ;
281
- break;
282
- } else {
283
- scanError = 6
284
- /* InvalidCharacter */
285
- ; // mark as error but continue with string
286
- }
287
- }
288
-
289
- pos++;
290
- }
291
-
292
- return result;
293
- }
294
-
295
- function scanNext() {
296
- value = '';
297
- scanError = 0
298
- /* None */
299
- ;
300
- tokenOffset = pos;
301
-
302
- if (pos >= len) {
303
- // at the end
304
- tokenOffset = len;
305
- return token = 17
306
- /* EOF */
307
- ;
308
- }
309
-
310
- let code = text.charCodeAt(pos); // trivia: whitespace
311
-
312
- if (isWhitespace(code)) {
313
- do {
314
- pos++;
315
- value += String.fromCharCode(code);
316
- code = text.charCodeAt(pos);
317
- } while (isWhitespace(code));
318
-
319
- return token = 15
320
- /* Trivia */
321
- ;
322
- } // trivia: newlines
323
-
324
-
325
- if (isLineBreak(code)) {
326
- pos++;
327
- value += String.fromCharCode(code);
328
-
329
- if (code === 13
330
- /* carriageReturn */
331
- && text.charCodeAt(pos) === 10
332
- /* lineFeed */
333
- ) {
334
- pos++;
335
- value += '\n';
336
- }
337
-
338
- return token = 14
339
- /* LineBreakTrivia */
340
- ;
341
- }
342
-
343
- switch (code) {
344
- // tokens: []{}:,
345
- case 123
346
- /* openBrace */
347
- :
348
- pos++;
349
- return token = 1
350
- /* OpenBraceToken */
351
- ;
352
-
353
- case 125
354
- /* closeBrace */
355
- :
356
- pos++;
357
- return token = 2
358
- /* CloseBraceToken */
359
- ;
360
-
361
- case 91
362
- /* openBracket */
363
- :
364
- pos++;
365
- return token = 3
366
- /* OpenBracketToken */
367
- ;
368
-
369
- case 93
370
- /* closeBracket */
371
- :
372
- pos++;
373
- return token = 4
374
- /* CloseBracketToken */
375
- ;
376
-
377
- case 58
378
- /* colon */
379
- :
380
- pos++;
381
- return token = 6
382
- /* ColonToken */
383
- ;
384
-
385
- case 44
386
- /* comma */
387
- :
388
- pos++;
389
- return token = 5
390
- /* CommaToken */
391
- ;
392
- // strings
393
-
394
- case 34
395
- /* doubleQuote */
396
- :
397
- pos++;
398
- value = scanString();
399
- return token = 10
400
- /* StringLiteral */
401
- ;
402
- // comments
403
-
404
- case 47
405
- /* slash */
406
- :
407
- const start = pos - 1; // Single-line comment
408
-
409
- if (text.charCodeAt(pos + 1) === 47
410
- /* slash */
411
- ) {
412
- pos += 2;
413
-
414
- while (pos < len) {
415
- if (isLineBreak(text.charCodeAt(pos))) {
416
- break;
417
- }
418
-
419
- pos++;
420
- }
421
-
422
- value = text.substring(start, pos);
423
- return token = 12
424
- /* LineCommentTrivia */
425
- ;
426
- } // Multi-line comment
427
-
428
-
429
- if (text.charCodeAt(pos + 1) === 42
430
- /* asterisk */
431
- ) {
432
- pos += 2;
433
- const safeLength = len - 1; // For lookahead.
434
-
435
- let commentClosed = false;
436
-
437
- while (pos < safeLength) {
438
- const ch = text.charCodeAt(pos);
439
-
440
- if (ch === 42
441
- /* asterisk */
442
- && text.charCodeAt(pos + 1) === 47
443
- /* slash */
444
- ) {
445
- pos += 2;
446
- commentClosed = true;
447
- break;
448
- }
449
-
450
- pos++;
451
- }
452
-
453
- if (!commentClosed) {
454
- pos++;
455
- scanError = 1
456
- /* UnexpectedEndOfComment */
457
- ;
458
- }
459
-
460
- value = text.substring(start, pos);
461
- return token = 13
462
- /* BlockCommentTrivia */
463
- ;
464
- } // just a single slash
465
-
466
-
467
- value += String.fromCharCode(code);
468
- pos++;
469
- return token = 16
470
- /* Unknown */
471
- ;
472
- // numbers
473
-
474
- case 45
475
- /* minus */
476
- :
477
- value += String.fromCharCode(code);
478
- pos++;
479
-
480
- if (pos === len || !isDigit(text.charCodeAt(pos))) {
481
- return token = 16
482
- /* Unknown */
483
- ;
484
- }
485
-
486
- // found a minus, followed by a number so
487
- // we fall through to proceed with scanning
488
- // numbers
489
-
490
- case 48
491
- /* _0 */
492
- :
493
- case 49
494
- /* _1 */
495
- :
496
- case 50
497
- /* _2 */
498
- :
499
- case 51
500
- /* _3 */
501
- :
502
- case 52
503
- /* _4 */
504
- :
505
- case 53
506
- /* _5 */
507
- :
508
- case 54
509
- /* _6 */
510
- :
511
- case 55
512
- /* _7 */
513
- :
514
- case 56
515
- /* _8 */
516
- :
517
- case 57
518
- /* _9 */
519
- :
520
- value += scanNumber();
521
- return token = 11
522
- /* NumericLiteral */
523
- ;
524
- // literals and unknown symbols
525
-
526
- default:
527
- // is a literal? Read the full word.
528
- while (pos < len && isUnknownContentCharacter(code)) {
529
- pos++;
530
- code = text.charCodeAt(pos);
531
- }
532
-
533
- if (tokenOffset !== pos) {
534
- value = text.substring(tokenOffset, pos); // keywords: true, false, null
535
-
536
- switch (value) {
537
- case 'true':
538
- return token = 8
539
- /* TrueKeyword */
540
- ;
541
-
542
- case 'false':
543
- return token = 9
544
- /* FalseKeyword */
545
- ;
546
-
547
- case 'null':
548
- return token = 7
549
- /* NullKeyword */
550
- ;
551
- }
552
-
553
- return token = 16
554
- /* Unknown */
555
- ;
556
- } // some
557
-
558
-
559
- value += String.fromCharCode(code);
560
- pos++;
561
- return token = 16
562
- /* Unknown */
563
- ;
564
- }
565
- }
566
-
567
- function isUnknownContentCharacter(code) {
568
- if (isWhitespace(code) || isLineBreak(code)) {
569
- return false;
570
- }
571
-
572
- switch (code) {
573
- case 125
574
- /* closeBrace */
575
- :
576
- case 93
577
- /* closeBracket */
578
- :
579
- case 123
580
- /* openBrace */
581
- :
582
- case 91
583
- /* openBracket */
584
- :
585
- case 34
586
- /* doubleQuote */
587
- :
588
- case 58
589
- /* colon */
590
- :
591
- case 44
592
- /* comma */
593
- :
594
- case 47
595
- /* slash */
596
- :
597
- return false;
598
- }
599
-
600
- return true;
601
- }
602
-
603
- function scanNextNonTrivia() {
604
- let result;
605
-
606
- do {
607
- result = scanNext();
608
- } while (result >= 12
609
- /* LineCommentTrivia */
610
- && result <= 15
611
- /* Trivia */
612
- );
613
-
614
- return result;
615
- }
616
-
617
- return {
618
- setPosition: setPosition,
619
- getPosition: () => pos,
620
- scan: ignoreTrivia ? scanNextNonTrivia : scanNext,
621
- getToken: () => token,
622
- getTokenValue: () => value,
623
- getTokenOffset: () => tokenOffset,
624
- getTokenLength: () => pos - tokenOffset,
625
- getTokenError: () => scanError
626
- };
627
- }
628
-
629
- exports.createScanner = createScanner;
630
-
631
- function isWhitespace(ch) {
632
- return ch === 32
633
- /* space */
634
- || ch === 9
635
- /* tab */
636
- || ch === 11
637
- /* verticalTab */
638
- || ch === 12
639
- /* formFeed */
640
- || ch === 160
641
- /* nonBreakingSpace */
642
- || ch === 5760
643
- /* ogham */
644
- || ch >= 8192
645
- /* enQuad */
646
- && ch <= 8203
647
- /* zeroWidthSpace */
648
- || ch === 8239
649
- /* narrowNoBreakSpace */
650
- || ch === 8287
651
- /* mathematicalSpace */
652
- || ch === 12288
653
- /* ideographicSpace */
654
- || ch === 65279
655
- /* byteOrderMark */
656
- ;
657
- }
658
-
659
- function isLineBreak(ch) {
660
- return ch === 10
661
- /* lineFeed */
662
- || ch === 13
663
- /* carriageReturn */
664
- || ch === 8232
665
- /* lineSeparator */
666
- || ch === 8233
667
- /* paragraphSeparator */
668
- ;
669
- }
670
-
671
- function isDigit(ch) {
672
- return ch >= 48
673
- /* _0 */
674
- && ch <= 57
675
- /* _9 */
676
- ;
677
- }
678
- /**
679
- * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.
680
- */
681
-
682
-
683
- function getLocation(text, position) {
684
- const segments = []; // strings or numbers
685
-
686
- const earlyReturnException = new Object();
687
- let previousNode = undefined;
688
- const previousNodeInst = {
689
- value: {},
690
- offset: 0,
691
- length: 0,
692
- type: 'object',
693
- parent: undefined
694
- };
695
- let isAtPropertyKey = false;
696
-
697
- function setPreviousNode(value, offset, length, type) {
698
- previousNodeInst.value = value;
699
- previousNodeInst.offset = offset;
700
- previousNodeInst.length = length;
701
- previousNodeInst.type = type;
702
- previousNodeInst.colonOffset = undefined;
703
- previousNode = previousNodeInst;
704
- }
705
-
706
- try {
707
- visit(text, {
708
- onObjectBegin: (offset, length) => {
709
- if (position <= offset) {
710
- throw earlyReturnException;
711
- }
712
-
713
- previousNode = undefined;
714
- isAtPropertyKey = position > offset;
715
- segments.push(''); // push a placeholder (will be replaced)
716
- },
717
- onObjectProperty: (name, offset, length) => {
718
- if (position < offset) {
719
- throw earlyReturnException;
720
- }
721
-
722
- setPreviousNode(name, offset, length, 'property');
723
- segments[segments.length - 1] = name;
724
-
725
- if (position <= offset + length) {
726
- throw earlyReturnException;
727
- }
728
- },
729
- onObjectEnd: (offset, length) => {
730
- if (position <= offset) {
731
- throw earlyReturnException;
732
- }
733
-
734
- previousNode = undefined;
735
- segments.pop();
736
- },
737
- onArrayBegin: (offset, length) => {
738
- if (position <= offset) {
739
- throw earlyReturnException;
740
- }
741
-
742
- previousNode = undefined;
743
- segments.push(0);
744
- },
745
- onArrayEnd: (offset, length) => {
746
- if (position <= offset) {
747
- throw earlyReturnException;
748
- }
749
-
750
- previousNode = undefined;
751
- segments.pop();
752
- },
753
- onLiteralValue: (value, offset, length) => {
754
- if (position < offset) {
755
- throw earlyReturnException;
756
- }
757
-
758
- setPreviousNode(value, offset, length, getNodeType(value));
759
-
760
- if (position <= offset + length) {
761
- throw earlyReturnException;
762
- }
763
- },
764
- onSeparator: (sep, offset, length) => {
765
- if (position <= offset) {
766
- throw earlyReturnException;
767
- }
768
-
769
- if (sep === ':' && previousNode && previousNode.type === 'property') {
770
- previousNode.colonOffset = offset;
771
- isAtPropertyKey = false;
772
- previousNode = undefined;
773
- } else if (sep === ',') {
774
- const last = segments[segments.length - 1];
775
-
776
- if (typeof last === 'number') {
777
- segments[segments.length - 1] = last + 1;
778
- } else {
779
- isAtPropertyKey = true;
780
- segments[segments.length - 1] = '';
781
- }
782
-
783
- previousNode = undefined;
784
- }
785
- }
786
- });
787
- } catch (e) {
788
- if (e !== earlyReturnException) {
789
- throw e;
790
- }
791
- }
792
-
793
- return {
794
- path: segments,
795
- previousNode,
796
- isAtPropertyKey,
797
- matches: pattern => {
798
- let k = 0;
799
-
800
- for (let i = 0; k < pattern.length && i < segments.length; i++) {
801
- if (pattern[k] === segments[i] || pattern[k] === '*') {
802
- k++;
803
- } else if (pattern[k] !== '**') {
804
- return false;
805
- }
806
- }
807
-
808
- return k === pattern.length;
809
- }
810
- };
811
- }
812
-
813
- exports.getLocation = getLocation;
814
- /**
815
- * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
816
- * Therefore always check the errors list to find out if the input was valid.
817
- */
818
-
819
- function parse(text, errors = [], options = ParseOptions.DEFAULT) {
820
- let currentProperty = null;
821
- let currentParent = [];
822
- const previousParents = [];
823
-
824
- function onValue(value) {
825
- if (Array.isArray(currentParent)) {
826
- currentParent.push(value);
827
- } else if (currentProperty !== null) {
828
- currentParent[currentProperty] = value;
829
- }
830
- }
831
-
832
- const visitor = {
833
- onObjectBegin: () => {
834
- const object = {};
835
- onValue(object);
836
- previousParents.push(currentParent);
837
- currentParent = object;
838
- currentProperty = null;
839
- },
840
- onObjectProperty: name => {
841
- currentProperty = name;
842
- },
843
- onObjectEnd: () => {
844
- currentParent = previousParents.pop();
845
- },
846
- onArrayBegin: () => {
847
- const array = [];
848
- onValue(array);
849
- previousParents.push(currentParent);
850
- currentParent = array;
851
- currentProperty = null;
852
- },
853
- onArrayEnd: () => {
854
- currentParent = previousParents.pop();
855
- },
856
- onLiteralValue: onValue,
857
- onError: (error, offset, length) => {
858
- errors.push({
859
- error,
860
- offset,
861
- length
862
- });
863
- }
864
- };
865
- visit(text, visitor, options);
866
- return currentParent[0];
867
- }
868
-
869
- exports.parse = parse;
870
- /**
871
- * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
872
- */
873
-
874
- function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {
875
- let currentParent = {
876
- type: 'array',
877
- offset: -1,
878
- length: -1,
879
- children: [],
880
- parent: undefined
881
- }; // artificial root
882
-
883
- function ensurePropertyComplete(endOffset) {
884
- if (currentParent.type === 'property') {
885
- currentParent.length = endOffset - currentParent.offset;
886
- currentParent = currentParent.parent;
887
- }
888
- }
889
-
890
- function onValue(valueNode) {
891
- currentParent.children.push(valueNode);
892
- return valueNode;
893
- }
894
-
895
- const visitor = {
896
- onObjectBegin: offset => {
897
- currentParent = onValue({
898
- type: 'object',
899
- offset,
900
- length: -1,
901
- parent: currentParent,
902
- children: []
903
- });
904
- },
905
- onObjectProperty: (name, offset, length) => {
906
- currentParent = onValue({
907
- type: 'property',
908
- offset,
909
- length: -1,
910
- parent: currentParent,
911
- children: []
912
- });
913
- currentParent.children.push({
914
- type: 'string',
915
- value: name,
916
- offset,
917
- length,
918
- parent: currentParent
919
- });
920
- },
921
- onObjectEnd: (offset, length) => {
922
- currentParent.length = offset + length - currentParent.offset;
923
- currentParent = currentParent.parent;
924
- ensurePropertyComplete(offset + length);
925
- },
926
- onArrayBegin: (offset, length) => {
927
- currentParent = onValue({
928
- type: 'array',
929
- offset,
930
- length: -1,
931
- parent: currentParent,
932
- children: []
933
- });
934
- },
935
- onArrayEnd: (offset, length) => {
936
- currentParent.length = offset + length - currentParent.offset;
937
- currentParent = currentParent.parent;
938
- ensurePropertyComplete(offset + length);
939
- },
940
- onLiteralValue: (value, offset, length) => {
941
- onValue({
942
- type: getNodeType(value),
943
- offset,
944
- length,
945
- parent: currentParent,
946
- value
947
- });
948
- ensurePropertyComplete(offset + length);
949
- },
950
- onSeparator: (sep, offset, length) => {
951
- if (currentParent.type === 'property') {
952
- if (sep === ':') {
953
- currentParent.colonOffset = offset;
954
- } else if (sep === ',') {
955
- ensurePropertyComplete(offset);
956
- }
957
- }
958
- },
959
- onError: (error, offset, length) => {
960
- errors.push({
961
- error,
962
- offset,
963
- length
964
- });
965
- }
966
- };
967
- visit(text, visitor, options);
968
- const result = currentParent.children[0];
969
-
970
- if (result) {
971
- delete result.parent;
972
- }
973
-
974
- return result;
975
- }
976
-
977
- exports.parseTree = parseTree;
978
- /**
979
- * Finds the node at the given path in a JSON DOM.
980
- */
981
-
982
- function findNodeAtLocation(root, path) {
983
- if (!root) {
984
- return undefined;
985
- }
986
-
987
- let node = root;
988
-
989
- for (let segment of path) {
990
- if (typeof segment === 'string') {
991
- if (node.type !== 'object' || !Array.isArray(node.children)) {
992
- return undefined;
993
- }
994
-
995
- let found = false;
996
-
997
- for (const propertyNode of node.children) {
998
- if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment) {
999
- node = propertyNode.children[1];
1000
- found = true;
1001
- break;
1002
- }
1003
- }
1004
-
1005
- if (!found) {
1006
- return undefined;
1007
- }
1008
- } else {
1009
- const index = segment;
1010
-
1011
- if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {
1012
- return undefined;
1013
- }
1014
-
1015
- node = node.children[index];
1016
- }
1017
- }
1018
-
1019
- return node;
1020
- }
1021
-
1022
- exports.findNodeAtLocation = findNodeAtLocation;
1023
- /**
1024
- * Gets the JSON path of the given JSON DOM node
1025
- */
1026
-
1027
- function getNodePath(node) {
1028
- if (!node.parent || !node.parent.children) {
1029
- return [];
1030
- }
1031
-
1032
- const path = getNodePath(node.parent);
1033
-
1034
- if (node.parent.type === 'property') {
1035
- const key = node.parent.children[0].value;
1036
- path.push(key);
1037
- } else if (node.parent.type === 'array') {
1038
- const index = node.parent.children.indexOf(node);
1039
-
1040
- if (index !== -1) {
1041
- path.push(index);
1042
- }
1043
- }
1044
-
1045
- return path;
1046
- }
1047
-
1048
- exports.getNodePath = getNodePath;
1049
- /**
1050
- * Evaluates the JavaScript object of the given JSON DOM node
1051
- */
1052
-
1053
- function getNodeValue(node) {
1054
- switch (node.type) {
1055
- case 'array':
1056
- return node.children.map(getNodeValue);
1057
-
1058
- case 'object':
1059
- const obj = Object.create(null);
1060
-
1061
- for (let prop of node.children) {
1062
- const valueNode = prop.children[1];
1063
-
1064
- if (valueNode) {
1065
- obj[prop.children[0].value] = getNodeValue(valueNode);
1066
- }
1067
- }
1068
-
1069
- return obj;
1070
-
1071
- case 'null':
1072
- case 'string':
1073
- case 'number':
1074
- case 'boolean':
1075
- return node.value;
1076
-
1077
- default:
1078
- return undefined;
1079
- }
1080
- }
1081
-
1082
- exports.getNodeValue = getNodeValue;
1083
-
1084
- function contains(node, offset, includeRightBound = false) {
1085
- return offset >= node.offset && offset < node.offset + node.length || includeRightBound && offset === node.offset + node.length;
1086
- }
1087
-
1088
- exports.contains = contains;
1089
- /**
1090
- * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.
1091
- */
1092
-
1093
- function findNodeAtOffset(node, offset, includeRightBound = false) {
1094
- if (contains(node, offset, includeRightBound)) {
1095
- const children = node.children;
1096
-
1097
- if (Array.isArray(children)) {
1098
- for (let i = 0; i < children.length && children[i].offset <= offset; i++) {
1099
- const item = findNodeAtOffset(children[i], offset, includeRightBound);
1100
-
1101
- if (item) {
1102
- return item;
1103
- }
1104
- }
1105
- }
1106
-
1107
- return node;
1108
- }
1109
-
1110
- return undefined;
1111
- }
1112
-
1113
- exports.findNodeAtOffset = findNodeAtOffset;
1114
- /**
1115
- * Parses the given text and invokes the visitor functions for each object, array and literal reached.
1116
- */
1117
-
1118
- function visit(text, visitor, options = ParseOptions.DEFAULT) {
1119
- const _scanner = createScanner(text, false);
1120
-
1121
- function toNoArgVisit(visitFunction) {
1122
- return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;
1123
- }
1124
-
1125
- function toOneArgVisit(visitFunction) {
1126
- return visitFunction ? arg => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;
1127
- }
1128
-
1129
- const onObjectBegin = toNoArgVisit(visitor.onObjectBegin),
1130
- onObjectProperty = toOneArgVisit(visitor.onObjectProperty),
1131
- onObjectEnd = toNoArgVisit(visitor.onObjectEnd),
1132
- onArrayBegin = toNoArgVisit(visitor.onArrayBegin),
1133
- onArrayEnd = toNoArgVisit(visitor.onArrayEnd),
1134
- onLiteralValue = toOneArgVisit(visitor.onLiteralValue),
1135
- onSeparator = toOneArgVisit(visitor.onSeparator),
1136
- onComment = toNoArgVisit(visitor.onComment),
1137
- onError = toOneArgVisit(visitor.onError);
1138
- const disallowComments = options && options.disallowComments;
1139
- const allowTrailingComma = options && options.allowTrailingComma;
1140
-
1141
- function scanNext() {
1142
- while (true) {
1143
- const token = _scanner.scan();
1144
-
1145
- switch (_scanner.getTokenError()) {
1146
- case 4
1147
- /* InvalidUnicode */
1148
- :
1149
- handleError(14
1150
- /* InvalidUnicode */
1151
- );
1152
- break;
1153
-
1154
- case 5
1155
- /* InvalidEscapeCharacter */
1156
- :
1157
- handleError(15
1158
- /* InvalidEscapeCharacter */
1159
- );
1160
- break;
1161
-
1162
- case 3
1163
- /* UnexpectedEndOfNumber */
1164
- :
1165
- handleError(13
1166
- /* UnexpectedEndOfNumber */
1167
- );
1168
- break;
1169
-
1170
- case 1
1171
- /* UnexpectedEndOfComment */
1172
- :
1173
- if (!disallowComments) {
1174
- handleError(11
1175
- /* UnexpectedEndOfComment */
1176
- );
1177
- }
1178
-
1179
- break;
1180
-
1181
- case 2
1182
- /* UnexpectedEndOfString */
1183
- :
1184
- handleError(12
1185
- /* UnexpectedEndOfString */
1186
- );
1187
- break;
1188
-
1189
- case 6
1190
- /* InvalidCharacter */
1191
- :
1192
- handleError(16
1193
- /* InvalidCharacter */
1194
- );
1195
- break;
1196
- }
1197
-
1198
- switch (token) {
1199
- case 12
1200
- /* LineCommentTrivia */
1201
- :
1202
- case 13
1203
- /* BlockCommentTrivia */
1204
- :
1205
- if (disallowComments) {
1206
- handleError(10
1207
- /* InvalidCommentToken */
1208
- );
1209
- } else {
1210
- onComment();
1211
- }
1212
-
1213
- break;
1214
-
1215
- case 16
1216
- /* Unknown */
1217
- :
1218
- handleError(1
1219
- /* InvalidSymbol */
1220
- );
1221
- break;
1222
-
1223
- case 15
1224
- /* Trivia */
1225
- :
1226
- case 14
1227
- /* LineBreakTrivia */
1228
- :
1229
- break;
1230
-
1231
- default:
1232
- return token;
1233
- }
1234
- }
1235
- }
1236
-
1237
- function handleError(error, skipUntilAfter = [], skipUntil = []) {
1238
- onError(error);
1239
-
1240
- if (skipUntilAfter.length + skipUntil.length > 0) {
1241
- let token = _scanner.getToken();
1242
-
1243
- while (token !== 17
1244
- /* EOF */
1245
- ) {
1246
- if (skipUntilAfter.indexOf(token) !== -1) {
1247
- scanNext();
1248
- break;
1249
- } else if (skipUntil.indexOf(token) !== -1) {
1250
- break;
1251
- }
1252
-
1253
- token = scanNext();
1254
- }
1255
- }
1256
- }
1257
-
1258
- function parseString(isValue) {
1259
- const value = _scanner.getTokenValue();
1260
-
1261
- if (isValue) {
1262
- onLiteralValue(value);
1263
- } else {
1264
- onObjectProperty(value);
1265
- }
1266
-
1267
- scanNext();
1268
- return true;
1269
- }
1270
-
1271
- function parseLiteral() {
1272
- switch (_scanner.getToken()) {
1273
- case 11
1274
- /* NumericLiteral */
1275
- :
1276
- let value = 0;
1277
-
1278
- try {
1279
- value = JSON.parse(_scanner.getTokenValue());
1280
-
1281
- if (typeof value !== 'number') {
1282
- handleError(2
1283
- /* InvalidNumberFormat */
1284
- );
1285
- value = 0;
1286
- }
1287
- } catch (e) {
1288
- handleError(2
1289
- /* InvalidNumberFormat */
1290
- );
1291
- }
1292
-
1293
- onLiteralValue(value);
1294
- break;
1295
-
1296
- case 7
1297
- /* NullKeyword */
1298
- :
1299
- onLiteralValue(null);
1300
- break;
1301
-
1302
- case 8
1303
- /* TrueKeyword */
1304
- :
1305
- onLiteralValue(true);
1306
- break;
1307
-
1308
- case 9
1309
- /* FalseKeyword */
1310
- :
1311
- onLiteralValue(false);
1312
- break;
1313
-
1314
- default:
1315
- return false;
1316
- }
1317
-
1318
- scanNext();
1319
- return true;
1320
- }
1321
-
1322
- function parseProperty() {
1323
- if (_scanner.getToken() !== 10
1324
- /* StringLiteral */
1325
- ) {
1326
- handleError(3
1327
- /* PropertyNameExpected */
1328
- , [], [2
1329
- /* CloseBraceToken */
1330
- , 5
1331
- /* CommaToken */
1332
- ]);
1333
- return false;
1334
- }
1335
-
1336
- parseString(false);
1337
-
1338
- if (_scanner.getToken() === 6
1339
- /* ColonToken */
1340
- ) {
1341
- onSeparator(':');
1342
- scanNext(); // consume colon
1343
-
1344
- if (!parseValue()) {
1345
- handleError(4
1346
- /* ValueExpected */
1347
- , [], [2
1348
- /* CloseBraceToken */
1349
- , 5
1350
- /* CommaToken */
1351
- ]);
1352
- }
1353
- } else {
1354
- handleError(5
1355
- /* ColonExpected */
1356
- , [], [2
1357
- /* CloseBraceToken */
1358
- , 5
1359
- /* CommaToken */
1360
- ]);
1361
- }
1362
-
1363
- return true;
1364
- }
1365
-
1366
- function parseObject() {
1367
- onObjectBegin();
1368
- scanNext(); // consume open brace
1369
-
1370
- let needsComma = false;
1371
-
1372
- while (_scanner.getToken() !== 2
1373
- /* CloseBraceToken */
1374
- && _scanner.getToken() !== 17
1375
- /* EOF */
1376
- ) {
1377
- if (_scanner.getToken() === 5
1378
- /* CommaToken */
1379
- ) {
1380
- if (!needsComma) {
1381
- handleError(4
1382
- /* ValueExpected */
1383
- , [], []);
1384
- }
1385
-
1386
- onSeparator(',');
1387
- scanNext(); // consume comma
1388
-
1389
- if (_scanner.getToken() === 2
1390
- /* CloseBraceToken */
1391
- && allowTrailingComma) {
1392
- break;
1393
- }
1394
- } else if (needsComma) {
1395
- handleError(6
1396
- /* CommaExpected */
1397
- , [], []);
1398
- }
1399
-
1400
- if (!parseProperty()) {
1401
- handleError(4
1402
- /* ValueExpected */
1403
- , [], [2
1404
- /* CloseBraceToken */
1405
- , 5
1406
- /* CommaToken */
1407
- ]);
1408
- }
1409
-
1410
- needsComma = true;
1411
- }
1412
-
1413
- onObjectEnd();
1414
-
1415
- if (_scanner.getToken() !== 2
1416
- /* CloseBraceToken */
1417
- ) {
1418
- handleError(7
1419
- /* CloseBraceExpected */
1420
- , [2
1421
- /* CloseBraceToken */
1422
- ], []);
1423
- } else {
1424
- scanNext(); // consume close brace
1425
- }
1426
-
1427
- return true;
1428
- }
1429
-
1430
- function parseArray() {
1431
- onArrayBegin();
1432
- scanNext(); // consume open bracket
1433
-
1434
- let needsComma = false;
1435
-
1436
- while (_scanner.getToken() !== 4
1437
- /* CloseBracketToken */
1438
- && _scanner.getToken() !== 17
1439
- /* EOF */
1440
- ) {
1441
- if (_scanner.getToken() === 5
1442
- /* CommaToken */
1443
- ) {
1444
- if (!needsComma) {
1445
- handleError(4
1446
- /* ValueExpected */
1447
- , [], []);
1448
- }
1449
-
1450
- onSeparator(',');
1451
- scanNext(); // consume comma
1452
-
1453
- if (_scanner.getToken() === 4
1454
- /* CloseBracketToken */
1455
- && allowTrailingComma) {
1456
- break;
1457
- }
1458
- } else if (needsComma) {
1459
- handleError(6
1460
- /* CommaExpected */
1461
- , [], []);
1462
- }
1463
-
1464
- if (!parseValue()) {
1465
- handleError(4
1466
- /* ValueExpected */
1467
- , [], [4
1468
- /* CloseBracketToken */
1469
- , 5
1470
- /* CommaToken */
1471
- ]);
1472
- }
1473
-
1474
- needsComma = true;
1475
- }
1476
-
1477
- onArrayEnd();
1478
-
1479
- if (_scanner.getToken() !== 4
1480
- /* CloseBracketToken */
1481
- ) {
1482
- handleError(8
1483
- /* CloseBracketExpected */
1484
- , [4
1485
- /* CloseBracketToken */
1486
- ], []);
1487
- } else {
1488
- scanNext(); // consume close bracket
1489
- }
1490
-
1491
- return true;
1492
- }
1493
-
1494
- function parseValue() {
1495
- switch (_scanner.getToken()) {
1496
- case 3
1497
- /* OpenBracketToken */
1498
- :
1499
- return parseArray();
1500
-
1501
- case 1
1502
- /* OpenBraceToken */
1503
- :
1504
- return parseObject();
1505
-
1506
- case 10
1507
- /* StringLiteral */
1508
- :
1509
- return parseString(true);
1510
-
1511
- default:
1512
- return parseLiteral();
1513
- }
1514
- }
1515
-
1516
- scanNext();
1517
-
1518
- if (_scanner.getToken() === 17
1519
- /* EOF */
1520
- ) {
1521
- if (options.allowEmptyContent) {
1522
- return true;
1523
- }
1524
-
1525
- handleError(4
1526
- /* ValueExpected */
1527
- , [], []);
1528
- return false;
1529
- }
1530
-
1531
- if (!parseValue()) {
1532
- handleError(4
1533
- /* ValueExpected */
1534
- , [], []);
1535
- return false;
1536
- }
1537
-
1538
- if (_scanner.getToken() !== 17
1539
- /* EOF */
1540
- ) {
1541
- handleError(9
1542
- /* EndOfFileExpected */
1543
- , [], []);
1544
- }
1545
-
1546
- return true;
1547
- }
1548
-
1549
- exports.visit = visit;
1550
- /**
1551
- * Takes JSON with JavaScript-style comments and remove
1552
- * them. Optionally replaces every none-newline character
1553
- * of comments with a replaceCharacter
1554
- */
1555
-
1556
- function stripComments(text, replaceCh) {
1557
- let _scanner = createScanner(text),
1558
- parts = [],
1559
- kind,
1560
- offset = 0,
1561
- pos;
1562
-
1563
- do {
1564
- pos = _scanner.getPosition();
1565
- kind = _scanner.scan();
1566
-
1567
- switch (kind) {
1568
- case 12
1569
- /* LineCommentTrivia */
1570
- :
1571
- case 13
1572
- /* BlockCommentTrivia */
1573
- :
1574
- case 17
1575
- /* EOF */
1576
- :
1577
- if (offset !== pos) {
1578
- parts.push(text.substring(offset, pos));
1579
- }
1580
-
1581
- if (replaceCh !== undefined) {
1582
- parts.push(_scanner.getTokenValue().replace(/[^\r\n]/g, replaceCh));
1583
- }
1584
-
1585
- offset = _scanner.getPosition();
1586
- break;
1587
- }
1588
- } while (kind !== 17
1589
- /* EOF */
1590
- );
1591
-
1592
- return parts.join('');
1593
- }
1594
-
1595
- exports.stripComments = stripComments;
1596
-
1597
- function getNodeType(value) {
1598
- switch (typeof value) {
1599
- case 'boolean':
1600
- return 'boolean';
1601
-
1602
- case 'number':
1603
- return 'number';
1604
-
1605
- case 'string':
1606
- return 'string';
1607
-
1608
- case 'object':
1609
- {
1610
- if (!value) {
1611
- return 'null';
1612
- } else if (Array.isArray(value)) {
1613
- return 'array';
1614
- }
1615
-
1616
- return 'object';
1617
- }
1618
-
1619
- default:
1620
- return 'null';
1621
- }
1622
- }
1623
-
1624
- exports.getNodeType = getNodeType;