smoothly 1.0.0-alpha.191 → 1.0.0-alpha.192

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 (66) hide show
  1. package/dist/cjs/Tuple-0ed9d0da.js +2895 -0
  2. package/dist/cjs/Tuple-0ed9d0da.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/{smoothly-app_76.cjs.entry.js → smoothly-app_77.cjs.entry.js} +288 -2643
  5. package/dist/cjs/smoothly-app_77.cjs.entry.js.map +1 -0
  6. package/dist/cjs/smoothly-checkbox.cjs.entry.js.map +1 -1
  7. package/dist/cjs/smoothly-filter-input.cjs.entry.js +77 -0
  8. package/dist/cjs/smoothly-filter-input.cjs.entry.js.map +1 -0
  9. package/dist/cjs/smoothly.cjs.js +1 -1
  10. package/dist/collection/collection-manifest.json +2 -0
  11. package/dist/collection/components/checkbox/index.js.map +1 -1
  12. package/dist/collection/components/filter/Filter.js +16 -0
  13. package/dist/collection/components/filter/Filter.js.map +1 -0
  14. package/dist/collection/components/filter/demo/Root.js +2 -0
  15. package/dist/collection/components/filter/demo/Root.js.map +1 -0
  16. package/dist/collection/components/filter/demo/index.js +60 -0
  17. package/dist/collection/components/filter/demo/index.js.map +1 -0
  18. package/dist/collection/components/filter/demo/style.css +4 -0
  19. package/dist/collection/components/filter/field/index.js +101 -0
  20. package/dist/collection/components/filter/field/index.js.map +1 -0
  21. package/dist/collection/components/filter/field/style.css +3 -0
  22. package/dist/collection/components/filter/index.js +57 -131
  23. package/dist/collection/components/filter/index.js.map +1 -1
  24. package/dist/collection/components/filter/style.css +41 -69
  25. package/dist/collection/components/table/demo/filtered/index.js +6 -11
  26. package/dist/collection/components/table/demo/filtered/index.js.map +1 -1
  27. package/dist/collection/components/table/demo/filtered/style.css +1 -0
  28. package/dist/collection/components/table/demo/index.js +2 -2
  29. package/dist/collection/components/table/demo/index.js.map +1 -1
  30. package/dist/custom-elements/index.d.ts +12 -0
  31. package/dist/custom-elements/index.js +837 -236
  32. package/dist/custom-elements/index.js.map +1 -1
  33. package/dist/esm/Tuple-89f1ea8f.js +2886 -0
  34. package/dist/esm/Tuple-89f1ea8f.js.map +1 -0
  35. package/dist/esm/loader.js +1 -1
  36. package/dist/esm/{smoothly-app_76.entry.js → smoothly-app_77.entry.js} +288 -2644
  37. package/dist/esm/smoothly-app_77.entry.js.map +1 -0
  38. package/dist/esm/smoothly-checkbox.entry.js.map +1 -1
  39. package/dist/esm/smoothly-filter-input.entry.js +73 -0
  40. package/dist/esm/smoothly-filter-input.entry.js.map +1 -0
  41. package/dist/esm/smoothly.js +1 -1
  42. package/dist/smoothly/p-58f4acdf.entry.js +2 -0
  43. package/dist/smoothly/p-58f4acdf.entry.js.map +1 -0
  44. package/dist/smoothly/p-7f8dca00.entry.js +2 -0
  45. package/dist/smoothly/p-7f8dca00.entry.js.map +1 -0
  46. package/dist/smoothly/p-b569c40a.js +2 -0
  47. package/dist/smoothly/p-b569c40a.js.map +1 -0
  48. package/dist/smoothly/p-f125610c.entry.js.map +1 -1
  49. package/dist/smoothly/smoothly.esm.js +1 -1
  50. package/dist/smoothly/smoothly.esm.js.map +1 -1
  51. package/dist/types/components/checkbox/index.d.ts +1 -1
  52. package/dist/types/components/filter/Filter.d.ts +20 -0
  53. package/dist/types/components/filter/demo/Root.d.ts +27 -0
  54. package/dist/types/components/filter/demo/index.d.ts +13 -0
  55. package/dist/types/components/filter/field/index.d.ts +9 -0
  56. package/dist/types/components/filter/index.d.ts +14 -12
  57. package/dist/types/components/table/demo/filtered/index.d.ts +4 -4
  58. package/dist/types/components.d.ts +36 -9
  59. package/package.json +1 -1
  60. package/dist/cjs/smoothly-app_76.cjs.entry.js.map +0 -1
  61. package/dist/collection/components/filter/Clearable.js +0 -8
  62. package/dist/collection/components/filter/Clearable.js.map +0 -1
  63. package/dist/esm/smoothly-app_76.entry.js.map +0 -1
  64. package/dist/smoothly/p-5602e60d.entry.js +0 -2
  65. package/dist/smoothly/p-5602e60d.entry.js.map +0 -1
  66. package/dist/types/components/filter/Clearable.d.ts +0 -6
@@ -0,0 +1,2895 @@
1
+ 'use strict';
2
+
3
+ class Rule {
4
+ filter(value) {
5
+ return value.filter(element => this.is(element));
6
+ }
7
+ stringify(precedence = 0) {
8
+ let result = this.toString();
9
+ if (this.precedence < precedence)
10
+ result = "(" + result + ")";
11
+ return result;
12
+ }
13
+ }
14
+ const creators = [
15
+ criteria => (criteria instanceof Rule ? criteria : undefined),
16
+ ];
17
+ function add$1(create) {
18
+ creators.push(create);
19
+ }
20
+ let always;
21
+ function setFallback(fallback) {
22
+ always = fallback;
23
+ }
24
+ function create(criteria) {
25
+ let result;
26
+ for (const c of creators) {
27
+ result = c(criteria);
28
+ if (result)
29
+ break;
30
+ }
31
+ return result || always;
32
+ }
33
+
34
+ class Always extends Rule {
35
+ constructor() {
36
+ super();
37
+ this.precedence = Number.MAX_SAFE_INTEGER;
38
+ this.class = "Always";
39
+ }
40
+ is(value) {
41
+ return true;
42
+ }
43
+ toString() {
44
+ return "";
45
+ }
46
+ }
47
+ setFallback(new Always());
48
+
49
+ class Any extends Rule {
50
+ constructor(criteria) {
51
+ super();
52
+ this.criteria = criteria;
53
+ this.precedence = 50;
54
+ this.class = "Any";
55
+ }
56
+ is(value) {
57
+ return (value &&
58
+ typeof value == "object" &&
59
+ Object.getOwnPropertyNames(value).some(property => this.criteria.is(value[property]) || this.is(value[property])));
60
+ }
61
+ toString() {
62
+ return this.criteria.stringify(this.precedence);
63
+ }
64
+ }
65
+
66
+ class And extends Rule {
67
+ constructor(rules) {
68
+ super();
69
+ this.precedence = 40;
70
+ this.class = "And";
71
+ this.rules = rules.reduce((r, e) => (e instanceof And ? [...r, ...e.rules] : [...r, e]), []);
72
+ }
73
+ is(value) {
74
+ return this.rules.every(c => c.is(value));
75
+ }
76
+ toString() {
77
+ return this.rules.map(c => c.stringify(this.precedence)).join(" ");
78
+ }
79
+ generalize() {
80
+ return new And(this.rules.map(r => (r.class == "Property" ? r : new Any(r))));
81
+ }
82
+ }
83
+ function and(...criterias) {
84
+ return new And(criterias.map(create));
85
+ }
86
+
87
+ var Criteria;
88
+ (function (Criteria) {
89
+ Criteria.is = isCriteria;
90
+ })(Criteria || (Criteria = {}));
91
+ function isCriteria(value, recursive = false) {
92
+ return (typeof value == "number" ||
93
+ typeof value == "string" ||
94
+ value instanceof Rule ||
95
+ (recursive &&
96
+ typeof value == "object" &&
97
+ value &&
98
+ Object.values(value).every(value => Array.isArray(value) ? value.every(value => isCriteria(value, true)) : isCriteria(value, true))));
99
+ }
100
+
101
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
102
+
103
+ function createCommonjsModule(fn, basedir, module) {
104
+ return module = {
105
+ path: basedir,
106
+ exports: {},
107
+ require: function (path, base) {
108
+ return commonjsRequire();
109
+ }
110
+ }, fn(module, module.exports), module.exports;
111
+ }
112
+
113
+ function commonjsRequire () {
114
+ throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
115
+ }
116
+
117
+ var Level_1 = createCommonjsModule(function (module, exports) {
118
+ Object.defineProperty(exports, "__esModule", { value: true });
119
+ (function (Level) {
120
+ Level[Level["Logging"] = 0] = "Logging";
121
+ Level[Level["Debug"] = 1] = "Debug";
122
+ Level[Level["Warning"] = 2] = "Warning";
123
+ Level[Level["Recoverable"] = 3] = "Recoverable";
124
+ Level[Level["Critical"] = 4] = "Critical";
125
+ })(exports.Level || (exports.Level = {}));
126
+ //# sourceMappingURL=Level.js.map
127
+ });
128
+
129
+ var Message_1 = createCommonjsModule(function (module, exports) {
130
+ Object.defineProperty(exports, "__esModule", { value: true });
131
+
132
+ class Message {
133
+ constructor(description, level = Level_1.Level.Recoverable, type = "unknown", region) {
134
+ this.description = description;
135
+ this.level = level;
136
+ this.type = type;
137
+ this.region = region;
138
+ }
139
+ toString() {
140
+ return Level_1.Level[this.level] + ": " + this.type + " error. " + this.description + (this.region ? " @ " + this.region.toString() : "");
141
+ }
142
+ }
143
+ exports.Message = Message;
144
+ //# sourceMappingURL=Message.js.map
145
+ });
146
+
147
+ var ConsoleHandler_1 = createCommonjsModule(function (module, exports) {
148
+ Object.defineProperty(exports, "__esModule", { value: true });
149
+
150
+ class ConsoleHandler {
151
+ raise(message, level, type, region) {
152
+ if (!(message instanceof Message_1.Message))
153
+ message = new Message_1.Message(message, level, type, region);
154
+ console.error(message.toString());
155
+ }
156
+ }
157
+ exports.ConsoleHandler = ConsoleHandler;
158
+ //# sourceMappingURL=ConsoleHandler.js.map
159
+ });
160
+
161
+ var Position_1 = createCommonjsModule(function (module, exports) {
162
+ Object.defineProperty(exports, "__esModule", { value: true });
163
+ class Position {
164
+ constructor(line, column) {
165
+ this.line = line;
166
+ this.column = column;
167
+ }
168
+ toString() {
169
+ return "Ln " + this.line + ", Col " + this.column;
170
+ }
171
+ }
172
+ exports.Position = Position;
173
+ //# sourceMappingURL=Position.js.map
174
+ });
175
+
176
+ var Location_1 = createCommonjsModule(function (module, exports) {
177
+ Object.defineProperty(exports, "__esModule", { value: true });
178
+
179
+ class Location extends Position_1.Position {
180
+ constructor(resource, line, column) {
181
+ super(line, column);
182
+ this.resource = resource;
183
+ }
184
+ toString() {
185
+ return this.resource.toString() + " @ " + super.toString();
186
+ }
187
+ }
188
+ exports.Location = Location;
189
+ //# sourceMappingURL=Location.js.map
190
+ });
191
+
192
+ var Region_1 = createCommonjsModule(function (module, exports) {
193
+ Object.defineProperty(exports, "__esModule", { value: true });
194
+ class Region {
195
+ constructor(resource, start, end, content) {
196
+ this.resource = resource;
197
+ this.start = start;
198
+ this.end = end;
199
+ this.content = content;
200
+ }
201
+ merge(other) { return other ? new Region(this.resource, this.start, other.end, this.content ? this.content : "" + other.content ? other.content : "") : this; }
202
+ toString() {
203
+ let result = this.resource.toString();
204
+ if (this.start && this.end)
205
+ result += " (" + this.start.toString() + " - " + this.end.toString() + ") ";
206
+ if (this.content)
207
+ result += this.content;
208
+ return result;
209
+ }
210
+ }
211
+ exports.Region = Region;
212
+ //# sourceMappingURL=Region.js.map
213
+ });
214
+
215
+ var _Error = createCommonjsModule(function (module, exports) {
216
+ Object.defineProperty(exports, "__esModule", { value: true });
217
+
218
+ exports.ConsoleHandler = ConsoleHandler_1.ConsoleHandler;
219
+
220
+ exports.Level = Level_1.Level;
221
+
222
+ exports.Location = Location_1.Location;
223
+
224
+ exports.Message = Message_1.Message;
225
+
226
+ exports.Position = Position_1.Position;
227
+
228
+ exports.Region = Region_1.Region;
229
+ //# sourceMappingURL=index.js.map
230
+ });
231
+
232
+ var User_1 = createCommonjsModule(function (module, exports) {
233
+ Object.defineProperty(exports, "__esModule", { value: true });
234
+ class User {
235
+ constructor(name, password) {
236
+ this.name = name;
237
+ this.password = password;
238
+ }
239
+ get isEmpty() {
240
+ return !this.name && !this.password;
241
+ }
242
+ toString() {
243
+ let result = "";
244
+ if (this.name)
245
+ result = this.name;
246
+ if (this.password)
247
+ result += ":" + this.password;
248
+ return result;
249
+ }
250
+ static parse(data) {
251
+ let result;
252
+ if (data) {
253
+ const splitted = data.split(":", 2);
254
+ result = new User(splitted[0], splitted[1]);
255
+ }
256
+ else
257
+ result = new User();
258
+ return result;
259
+ }
260
+ }
261
+ exports.User = User;
262
+ //# sourceMappingURL=User.js.map
263
+ });
264
+
265
+ var Endpoint_1 = createCommonjsModule(function (module, exports) {
266
+ Object.defineProperty(exports, "__esModule", { value: true });
267
+ class Endpoint {
268
+ constructor(host = [], port) {
269
+ this.host = host;
270
+ this.port = port;
271
+ }
272
+ get isEmpty() {
273
+ return this.host.length == 0 && !this.port;
274
+ }
275
+ toString() {
276
+ let result = this.host.join(".");
277
+ if (this.port)
278
+ result += ":" + this.port.toString();
279
+ return result;
280
+ }
281
+ static parse(data) {
282
+ let result;
283
+ if (data) {
284
+ const splitted = data.split(":", 2);
285
+ result = new Endpoint(splitted[0].split("."), splitted.length > 1 ? parseInt(splitted[1]) : undefined);
286
+ }
287
+ else
288
+ result = new Endpoint();
289
+ return result;
290
+ }
291
+ }
292
+ exports.Endpoint = Endpoint;
293
+ //# sourceMappingURL=Endpoint.js.map
294
+ });
295
+
296
+ var Authority_1 = createCommonjsModule(function (module, exports) {
297
+ Object.defineProperty(exports, "__esModule", { value: true });
298
+
299
+
300
+ class Authority {
301
+ constructor(user = new User_1.User(), endpoint = new Endpoint_1.Endpoint()) {
302
+ this.user = user;
303
+ this.endpoint = endpoint;
304
+ }
305
+ get isEmpty() {
306
+ return this.user.isEmpty && this.endpoint.isEmpty;
307
+ }
308
+ toString() {
309
+ let result = "";
310
+ if (!this.user.isEmpty)
311
+ result = this.user.toString() + "@";
312
+ if (!this.endpoint.isEmpty)
313
+ result = result + this.endpoint.toString();
314
+ return result;
315
+ }
316
+ static parse(data) {
317
+ let result;
318
+ if (data) {
319
+ const splitted = data.split("@", 2);
320
+ result = new Authority(User_1.User.parse(splitted.length == 2 ? splitted.pop() : undefined), Endpoint_1.Endpoint.parse(splitted.pop()));
321
+ }
322
+ return result;
323
+ }
324
+ }
325
+ exports.Authority = Authority;
326
+ //# sourceMappingURL=Authority.js.map
327
+ });
328
+
329
+ var Locator_1 = createCommonjsModule(function (module, exports) {
330
+ Object.defineProperty(exports, "__esModule", { value: true });
331
+
332
+ class Locator {
333
+ constructor(scheme = [], authority = new Authority_1.Authority(), path = [], query = {}, fragment) {
334
+ this.scheme = scheme;
335
+ this.authority = authority;
336
+ this.path = path;
337
+ this.query = query;
338
+ this.fragment = fragment;
339
+ }
340
+ get isRelative() {
341
+ return this.path[0] == "." || this.path[0] == "..";
342
+ }
343
+ get isFolder() {
344
+ return this.path[this.path.length - 1] == "";
345
+ }
346
+ get folder() {
347
+ return this.isFolder ? this : new Locator(this.scheme, this.authority, this.path.filter((value, index) => index < this.path.length - 1), this.query, this.fragment);
348
+ }
349
+ get name() {
350
+ return this.path[this.path.length - 1];
351
+ }
352
+ get extension() {
353
+ const splitted = this.name.split(".");
354
+ return splitted.length > 1 ? splitted[splitted.length - 1] : "";
355
+ }
356
+ createArray(value, count) {
357
+ const result = [];
358
+ while (count-- > 0)
359
+ result.push(value);
360
+ return result;
361
+ }
362
+ normalize() {
363
+ let skip = 0;
364
+ const path = this.path.reverse().filter((item, index) => {
365
+ let r = false;
366
+ if ((item == "" || item == ".") && index < this.path.length - 1)
367
+ r = false;
368
+ else if (item == "..")
369
+ skip++;
370
+ else if (skip > 0)
371
+ skip--;
372
+ else
373
+ r = true;
374
+ return r;
375
+ }).concat(this.createArray("..", skip)).reverse();
376
+ return new Locator(this.scheme, this.authority, path, this.query, this.fragment);
377
+ }
378
+ resolve(absolute) {
379
+ return !absolute ? this : new Locator(this.scheme.length > 0 ? this.scheme : absolute.scheme, !this.authority.isEmpty ? this.authority : absolute.authority, this.isRelative ? absolute.folder.path.concat(this.path) : this.path, this.query, this.fragment).normalize();
380
+ }
381
+ appendPath(path) {
382
+ return new Locator(this.scheme, this.authority, path instanceof Array ? [...this.path, ...path] : [...this.path, path], this.query, this.fragment);
383
+ }
384
+ toString() {
385
+ let result = "";
386
+ if (this.scheme.length > 0)
387
+ result += this.scheme.join("+") + ":";
388
+ if (!this.authority.isEmpty)
389
+ result += "//" + this.authority.toString();
390
+ else if (this.scheme.length > 0)
391
+ result += "//";
392
+ if (this.path) {
393
+ let path = this.path.join("/");
394
+ if (path[0] != "." || result.length > 0)
395
+ path = "/" + path;
396
+ result += path;
397
+ }
398
+ if (Object.keys(this.query).length > 0)
399
+ result += "?" + this.query.toString();
400
+ if (this.fragment)
401
+ result += "#" + this.fragment;
402
+ return result;
403
+ }
404
+ static parse(data) {
405
+ let result;
406
+ switch (data) {
407
+ case "":
408
+ case null:
409
+ case undefined:
410
+ break;
411
+ default:
412
+ let hasAuthority = true;
413
+ let scheme = [];
414
+ let splitted = data.split("://", 2);
415
+ if (splitted.length > 1) {
416
+ scheme = (splitted.shift() || "").split("+");
417
+ data = splitted.shift();
418
+ }
419
+ else if (data.slice(0, 2) == "//")
420
+ data = data.slice(2);
421
+ else
422
+ hasAuthority = false;
423
+ let index;
424
+ let fragment;
425
+ if (data && (index = data.lastIndexOf("#")) > -1) {
426
+ fragment = data.slice(index + 1);
427
+ data = data.slice(0, index);
428
+ }
429
+ let query = {};
430
+ if (data && (index = data.lastIndexOf("?")) > -1) {
431
+ query = new Object();
432
+ data.slice(index + 1).split(";").forEach(element => {
433
+ splitted = element.split("=");
434
+ const key = splitted.shift();
435
+ const value = splitted.shift();
436
+ if (key && value)
437
+ query[key] = value;
438
+ });
439
+ data = data.slice(0, index);
440
+ }
441
+ let authority;
442
+ let path = [];
443
+ if (data) {
444
+ splitted = data.split("/");
445
+ if (splitted.length > 0) {
446
+ switch (splitted[0]) {
447
+ case ".":
448
+ case "..":
449
+ break;
450
+ case "":
451
+ splitted.shift();
452
+ break;
453
+ default:
454
+ if (hasAuthority)
455
+ authority = Authority_1.Authority.parse(splitted.shift());
456
+ else
457
+ splitted.unshift(".");
458
+ break;
459
+ }
460
+ path = splitted;
461
+ }
462
+ }
463
+ result = new Locator(scheme, authority, path, query, fragment);
464
+ break;
465
+ }
466
+ return result;
467
+ }
468
+ }
469
+ exports.Locator = Locator;
470
+ Locator.empty = new Locator(undefined, undefined, undefined, undefined, undefined);
471
+ //# sourceMappingURL=Locator.js.map
472
+ });
473
+
474
+ var Uri = createCommonjsModule(function (module, exports) {
475
+ Object.defineProperty(exports, "__esModule", { value: true });
476
+
477
+ exports.Authority = Authority_1.Authority;
478
+
479
+ exports.Endpoint = Endpoint_1.Endpoint;
480
+
481
+ exports.Locator = Locator_1.Locator;
482
+
483
+ exports.User = User_1.User;
484
+ //# sourceMappingURL=index.js.map
485
+ });
486
+
487
+ var Device_1 = createCommonjsModule(function (module, exports) {
488
+ Object.defineProperty(exports, "__esModule", { value: true });
489
+ class Device {
490
+ }
491
+ exports.Device = Device;
492
+ //# sourceMappingURL=Device.js.map
493
+ });
494
+
495
+ var InDevice_1 = createCommonjsModule(function (module, exports) {
496
+ Object.defineProperty(exports, "__esModule", { value: true });
497
+
498
+ class InDevice extends Device_1.Device {
499
+ }
500
+ exports.InDevice = InDevice;
501
+ //# sourceMappingURL=InDevice.js.map
502
+ });
503
+
504
+ var Reader_1 = createCommonjsModule(function (module, exports) {
505
+ Object.defineProperty(exports, "__esModule", { value: true });
506
+
507
+ class Reader extends InDevice_1.InDevice {
508
+ static addOpener(open, priority) {
509
+ if (!priority)
510
+ priority = 0;
511
+ Reader.openers.push({ open, priority });
512
+ Reader.openers = Reader.openers.sort((left, right) => right.priority - left.priority);
513
+ }
514
+ static open(locator) {
515
+ let result;
516
+ let i = 0;
517
+ do
518
+ result = Reader.openers[i++].open(locator);
519
+ while (!result && i < Reader.openers.length);
520
+ return result;
521
+ }
522
+ }
523
+ exports.Reader = Reader;
524
+ Reader.openers = [];
525
+ //# sourceMappingURL=Reader.js.map
526
+ });
527
+
528
+ var BufferedReader_1 = createCommonjsModule(function (module, exports) {
529
+ Object.defineProperty(exports, "__esModule", { value: true });
530
+
531
+
532
+
533
+ var Reader_2 = Reader_1;
534
+ exports.Reader = Reader_2.Reader;
535
+ class BufferedReader extends Reader_1.Reader {
536
+ constructor(backend) {
537
+ super();
538
+ this.backend = backend;
539
+ this.buffer = [];
540
+ this.lastContent = "";
541
+ this.lastMark = this.locationValue = this.backend.location;
542
+ }
543
+ get tabSize() { return this.backend.tabSize; }
544
+ set tabSize(size) { this.backend.tabSize = size; }
545
+ get readable() { return !!this.backend; }
546
+ get opened() { return !!this.backend; }
547
+ get isEmpty() { return (this.buffer.length == 0 || this.buffer[0].data == "\0") && this.backend.isEmpty; }
548
+ get resource() {
549
+ const location = this.location;
550
+ return location ? location.resource : Uri.Locator.empty;
551
+ }
552
+ get location() {
553
+ return this.locationValue;
554
+ }
555
+ get region() {
556
+ return new _Error.Region(this.resource, this.lastMark, this.location, this.lastContent);
557
+ }
558
+ close() {
559
+ return this.backend.close();
560
+ }
561
+ peek(length) {
562
+ if (!length)
563
+ length = 1;
564
+ let next;
565
+ while (length > this.buffer.length && (next = this.backend.read()))
566
+ this.buffer.push({ data: next, location: this.backend.location });
567
+ return this.buffer.length == 0 ? undefined : this.buffer.slice(0, length > this.buffer.length ? this.buffer.length : length).map(value => value.data).join("");
568
+ }
569
+ read(length) {
570
+ if (!length)
571
+ length = 1;
572
+ const result = this.peek(length);
573
+ if (result && result.length > 0) {
574
+ this.locationValue = this.buffer[result.length - 1].location;
575
+ this.buffer.splice(0, result.length);
576
+ this.lastContent += result;
577
+ }
578
+ return result;
579
+ }
580
+ peekIs(value, count) {
581
+ let result;
582
+ if (value)
583
+ if (typeof (value) == "string") {
584
+ const v = value;
585
+ while (count && count-- > 0)
586
+ value += v;
587
+ result = this.peek(value.length) == value ? value : undefined;
588
+ }
589
+ else if (value.length > 0 && !(result = this.peekIs(value[0])) && value.length)
590
+ result = this.peekIs(value.slice(1));
591
+ return result;
592
+ }
593
+ readIf(value) {
594
+ let result;
595
+ if (value)
596
+ if (typeof (value) == "string")
597
+ result = this.peek(value.length) == value && this.read(value.length) || undefined;
598
+ else if (value.length > 0 && !(result = this.readIf(value[0])) && value.length)
599
+ result = this.readIf(value.slice(1));
600
+ return result;
601
+ }
602
+ readAll() {
603
+ let result = "";
604
+ while (this.peek())
605
+ result += this.read();
606
+ return result != "" ? result : undefined;
607
+ }
608
+ mark() {
609
+ const result = this.region;
610
+ this.lastMark = this.location;
611
+ this.lastContent = "";
612
+ return result;
613
+ }
614
+ static create(backend) {
615
+ return backend ? new BufferedReader(backend) : undefined;
616
+ }
617
+ }
618
+ exports.BufferedReader = BufferedReader;
619
+ //# sourceMappingURL=BufferedReader.js.map
620
+ });
621
+
622
+ var fs_browser = createCommonjsModule(function (module, exports) {
623
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
624
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
625
+ return new (P || (P = Promise))(function (resolve, reject) {
626
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
627
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
628
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
629
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
630
+ });
631
+ };
632
+ Object.defineProperty(exports, "__esModule", { value: true });
633
+ function close(fd) {
634
+ return __awaiter(this, void 0, void 0, function* () { });
635
+ }
636
+ exports.close = close;
637
+ function fsync(fd) {
638
+ return __awaiter(this, void 0, void 0, function* () { });
639
+ }
640
+ exports.fsync = fsync;
641
+ function open(path, flags, mode) {
642
+ return __awaiter(this, void 0, void 0, function* () { return 0; });
643
+ }
644
+ exports.open = open;
645
+ function write(fd, buffer, offset, encoding) {
646
+ return __awaiter(this, void 0, void 0, function* () { return { bytesWritten: 0 }; });
647
+ }
648
+ exports.write = write;
649
+ function lstatSync(path, options) { return { isDirectory: () => false }; }
650
+ exports.lstatSync = lstatSync;
651
+ function readdirSync(path) { return []; }
652
+ exports.readdirSync = readdirSync;
653
+ function readFileSync(path, encoding) { return ""; }
654
+ exports.readFileSync = readFileSync;
655
+ //# sourceMappingURL=fs.browser.js.map
656
+ });
657
+
658
+ var path_browser = createCommonjsModule(function (module, exports) {
659
+ Object.defineProperty(exports, "__esModule", { value: true });
660
+ const sep = "/";
661
+ exports.sep = sep;
662
+ //# sourceMappingURL=path.browser.js.map
663
+ });
664
+
665
+ var StringReader_1 = createCommonjsModule(function (module, exports) {
666
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
667
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
668
+ return new (P || (P = Promise))(function (resolve, reject) {
669
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
670
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
671
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
672
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
673
+ });
674
+ };
675
+ Object.defineProperty(exports, "__esModule", { value: true });
676
+
677
+
678
+
679
+ class StringReader extends Reader_1.Reader {
680
+ constructor(content, resource) {
681
+ super();
682
+ this.content = content;
683
+ this.resource = resource;
684
+ this.tabSize = 2;
685
+ this.count = 0;
686
+ this.line = 1;
687
+ this.column = 1;
688
+ this.lastContent = "";
689
+ this.readable = true;
690
+ this.content += "\0";
691
+ this.lastPosition = this.location;
692
+ }
693
+ get opened() { return this.count + 1 >= this.content.length; }
694
+ get isEmpty() { return this.opened; }
695
+ get location() { return new _Error.Location(this.resource, this.line, this.column); }
696
+ get region() { return new _Error.Region(this.resource, this.lastPosition, this.location, this.lastContent); }
697
+ close() {
698
+ return __awaiter(this, void 0, void 0, function* () {
699
+ const result = !(yield this.isEmpty);
700
+ if (result)
701
+ this.count = this.content.length;
702
+ return result;
703
+ });
704
+ }
705
+ read() {
706
+ let result;
707
+ if (this.count < this.content.length)
708
+ result = this.content.charAt(this.count);
709
+ else if (this.count == this.content.length)
710
+ result = undefined;
711
+ this.count++;
712
+ if (result) {
713
+ switch (result) {
714
+ case "\n":
715
+ this.line++;
716
+ this.column = 1;
717
+ break;
718
+ case "\t":
719
+ this.column += this.tabSize;
720
+ break;
721
+ default:
722
+ this.column++;
723
+ break;
724
+ }
725
+ this.lastContent += result;
726
+ }
727
+ return result;
728
+ }
729
+ mark() {
730
+ const result = this.region;
731
+ this.lastPosition = this.location;
732
+ this.lastContent = "";
733
+ return result;
734
+ }
735
+ static create(content, resource) {
736
+ return content != undefined ? new StringReader(content, resource || Uri.Locator.empty) : undefined;
737
+ }
738
+ }
739
+ exports.StringReader = StringReader;
740
+ //# sourceMappingURL=StringReader.js.map
741
+ });
742
+
743
+ var FileReader_1 = createCommonjsModule(function (module, exports) {
744
+ Object.defineProperty(exports, "__esModule", { value: true });
745
+
746
+
747
+
748
+
749
+
750
+ class FileReader extends Reader_1.Reader {
751
+ constructor(backend) {
752
+ super();
753
+ this.backend = backend;
754
+ }
755
+ get tabSize() { return this.backend.tabSize; }
756
+ set tabSize(size) { this.backend.tabSize = size; }
757
+ get readable() { return this.backend.readable; }
758
+ get opened() { return this.backend.opened; }
759
+ get isEmpty() { return this.backend.isEmpty; }
760
+ get resource() { return this.backend ? this.backend.resource : Uri.Locator.empty; }
761
+ get location() { return this.backend.location; }
762
+ get region() { return this.backend.region; }
763
+ close() {
764
+ return this.backend.close();
765
+ }
766
+ read() { return this.backend.read(); }
767
+ mark() { return this.backend.mark(); }
768
+ static open(resource) {
769
+ let backend;
770
+ if (resource && (resource.scheme.length == 0 || resource.scheme.length == 1 && resource.scheme[0] == "file"))
771
+ try {
772
+ backend = StringReader_1.StringReader.create(fs_browser.readFileSync((resource.isRelative ? "" : path_browser.sep) + resource.path.join(path_browser.sep), "utf-8"), resource);
773
+ }
774
+ catch (error) {
775
+ console.log(`Failed to open file: ${resource.toString()}`);
776
+ }
777
+ return backend ? new FileReader(backend) : undefined;
778
+ }
779
+ }
780
+ exports.FileReader = FileReader;
781
+ Reader_1.Reader.addOpener(p => FileReader.open(p), 10);
782
+ //# sourceMappingURL=FileReader.js.map
783
+ });
784
+
785
+ var FolderReader_1 = createCommonjsModule(function (module, exports) {
786
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
787
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
788
+ return new (P || (P = Promise))(function (resolve, reject) {
789
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
790
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
791
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
792
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
793
+ });
794
+ };
795
+ Object.defineProperty(exports, "__esModule", { value: true });
796
+
797
+
798
+
799
+
800
+
801
+
802
+ class FolderReader extends Reader_1.Reader {
803
+ constructor(files) {
804
+ super();
805
+ this.files = files;
806
+ this.tabSizeValue = 2;
807
+ this.lastLocation = new _Error.Location(Uri.Locator.empty, 0, 0);
808
+ }
809
+ get tabSize() { return this.tabSizeValue; }
810
+ set tabSize(size) {
811
+ this.tabSizeValue = size;
812
+ if (this.current)
813
+ this.current.tabSize = size;
814
+ }
815
+ get readable() { return this.current != undefined && this.current.readable || this.files.length > 0; }
816
+ get opened() { return this.current != undefined || this.files.length > 0; }
817
+ get isEmpty() { return this.files.length == 0 && (!this.current || this.current.isEmpty); }
818
+ get resource() { return this.current ? this.current.resource : this.lastLocation.resource; }
819
+ get location() { return this.current ? this.current.location : this.lastLocation; }
820
+ get region() { return this.current ? this.current.region : new _Error.Region(this.resource); }
821
+ close() {
822
+ return __awaiter(this, void 0, void 0, function* () {
823
+ return this.current != undefined && (yield this.current.close());
824
+ });
825
+ }
826
+ read() {
827
+ let result;
828
+ if (!this.current && this.files.length > 0) {
829
+ this.current = FileReader_1.FileReader.open(this.files.shift());
830
+ this.current.tabSize = this.tabSize;
831
+ }
832
+ if (this.current) {
833
+ result = this.current.read();
834
+ if (result == undefined || result == "\0") {
835
+ this.current.close();
836
+ this.current = undefined;
837
+ }
838
+ }
839
+ this.lastLocation = this.location;
840
+ return result;
841
+ }
842
+ mark() { return this.current ? this.current.mark() : new _Error.Region(this.resource); }
843
+ static getFiles(folder, filetype, ignoreFiles = []) {
844
+ let result = [];
845
+ const files = fs_browser.readdirSync(folder);
846
+ files.forEach(file => {
847
+ const filename = folder + path_browser.sep + file;
848
+ if (ignoreFiles.indexOf(filename) == -1) {
849
+ if (fs_browser.lstatSync(filename).isDirectory())
850
+ result = result.concat(FolderReader.getFiles(filename, filetype, ignoreFiles));
851
+ else if (file.length > filetype.length && file.lastIndexOf(filetype, file.length - filetype.length) === file.length - filetype.length)
852
+ result.push(filename);
853
+ }
854
+ });
855
+ return result;
856
+ }
857
+ static open(resource) {
858
+ let files;
859
+ try {
860
+ if (resource && (resource.scheme.length == 0 || resource.scheme.length == 1 && resource.scheme[0] == "file") && resource.isFolder || resource.name.match("*"))
861
+ files = FolderReader.getFiles((resource.isRelative ? "" : path_browser.sep) + resource.folder.path.join(path_browser.sep), resource.extension);
862
+ }
863
+ catch (error) {
864
+ }
865
+ return files ? new FolderReader(files.map(f => new Uri.Locator(["file"], undefined, f.split(path_browser.sep)))) : undefined;
866
+ }
867
+ }
868
+ exports.FolderReader = FolderReader;
869
+ Reader_1.Reader.addOpener((resource) => FolderReader.open(resource), 0);
870
+ //# sourceMappingURL=FolderReader.js.map
871
+ });
872
+
873
+ var Enumerator_1 = createCommonjsModule(function (module, exports) {
874
+ Object.defineProperty(exports, "__esModule", { value: true });
875
+ function* generate(next) {
876
+ let result;
877
+ while ((result = next()) != undefined)
878
+ yield result;
879
+ }
880
+ function isIterator(item) {
881
+ return item.next instanceof Function;
882
+ }
883
+ function* merge(left, right) {
884
+ let result;
885
+ while (!(result = left.next()).done)
886
+ yield result.value;
887
+ if (isIterator(right))
888
+ while (!(result = right.next()).done)
889
+ yield result.value;
890
+ else
891
+ yield right;
892
+ }
893
+ class Enumerator {
894
+ constructor(backend) {
895
+ this.iterator = backend instanceof Function ? generate(backend) : backend;
896
+ }
897
+ get length() {
898
+ let result = 0;
899
+ while (!this.next().done)
900
+ result++;
901
+ return result;
902
+ }
903
+ get last() {
904
+ return this.nextValue && !this.nextValue.done ? this.nextValue.value : undefined;
905
+ }
906
+ fetch() {
907
+ const result = this.next();
908
+ return result.done ? undefined : result.value;
909
+ }
910
+ next(value) {
911
+ return this.nextValue = this.iterator.next(value);
912
+ }
913
+ append(item) {
914
+ return new Enumerator(merge(this, item));
915
+ }
916
+ map(mapping) {
917
+ return new Enumerator(() => {
918
+ const item = this.fetch();
919
+ return (item != undefined) ? mapping(item) : undefined;
920
+ });
921
+ }
922
+ reduce(reduce, result) {
923
+ const item = this.fetch();
924
+ return item ? this.reduce(reduce, reduce(result, item)) : result;
925
+ }
926
+ apply(apply) {
927
+ const item = this.fetch();
928
+ if (item) {
929
+ apply(item);
930
+ this.apply(apply);
931
+ }
932
+ }
933
+ filter(filter) {
934
+ return new Enumerator(() => {
935
+ let item;
936
+ do
937
+ item = this.fetch();
938
+ while (item != undefined && !filter(item));
939
+ return item;
940
+ });
941
+ }
942
+ toArray() {
943
+ const item = this.fetch();
944
+ let result;
945
+ if (!item)
946
+ result = [];
947
+ else {
948
+ result = this.toArray();
949
+ result.unshift(item);
950
+ }
951
+ return result;
952
+ }
953
+ static from(backend) {
954
+ return new Enumerator(backend);
955
+ }
956
+ }
957
+ exports.Enumerator = Enumerator;
958
+ Enumerator.empty = Enumerator.from(() => undefined);
959
+ //# sourceMappingURL=Enumerator.js.map
960
+ });
961
+
962
+ var Enumerable_1 = createCommonjsModule(function (module, exports) {
963
+ Object.defineProperty(exports, "__esModule", { value: true });
964
+
965
+ function isIterable(other) {
966
+ return other == null ? false : typeof other[Symbol.iterator] === "function";
967
+ }
968
+ class Enumerable {
969
+ constructor(get) {
970
+ this.get = get;
971
+ }
972
+ get length() {
973
+ return this.get().length;
974
+ }
975
+ get first() {
976
+ return this.get().fetch();
977
+ }
978
+ get last() {
979
+ return this.get().last;
980
+ }
981
+ getEnumerator() {
982
+ return new Enumerator_1.Enumerator(this.get());
983
+ }
984
+ [Symbol.iterator]() {
985
+ return this.getEnumerator();
986
+ }
987
+ append(item) {
988
+ return new Enumerable(() => this.get().append(item));
989
+ }
990
+ map(mapping) {
991
+ return new Enumerable(() => this.get().map(mapping));
992
+ }
993
+ reduce(reduce, result) {
994
+ return this.get().reduce(reduce, result);
995
+ }
996
+ apply(apply) {
997
+ this.get().apply(apply);
998
+ }
999
+ filter(filter) {
1000
+ return new Enumerable(() => this.get().filter(filter));
1001
+ }
1002
+ toArray() {
1003
+ return this.getEnumerator().toArray();
1004
+ }
1005
+ static from(get) {
1006
+ return isIterable(get) ? new Enumerable(() => new Enumerator_1.Enumerator(get[Symbol.iterator]())) : new Enumerable(() => {
1007
+ const r = get();
1008
+ return r instanceof Enumerator_1.Enumerator ? r : new Enumerator_1.Enumerator(r);
1009
+ });
1010
+ }
1011
+ }
1012
+ exports.Enumerable = Enumerable;
1013
+ Enumerable.empty = Enumerable.from([]);
1014
+ //# sourceMappingURL=Enumerable.js.map
1015
+ });
1016
+
1017
+ var ArrayEnumerator_1 = createCommonjsModule(function (module, exports) {
1018
+ Object.defineProperty(exports, "__esModule", { value: true });
1019
+
1020
+ class ArrayEnumerator extends Enumerator_1.Enumerator {
1021
+ constructor(backend) {
1022
+ super(() => this.position < this.backend.length ? this.backend[this.position++] : undefined);
1023
+ this.backend = backend;
1024
+ this.position = 0;
1025
+ }
1026
+ }
1027
+ exports.ArrayEnumerator = ArrayEnumerator;
1028
+ //# sourceMappingURL=ArrayEnumerator.js.map
1029
+ });
1030
+
1031
+ var BufferedEnumerator_1 = createCommonjsModule(function (module, exports) {
1032
+ Object.defineProperty(exports, "__esModule", { value: true });
1033
+
1034
+ class BufferedEnumerator extends Enumerator_1.Enumerator {
1035
+ constructor(backend) {
1036
+ super(() => {
1037
+ const result = this.peek(0);
1038
+ if (this.buffer.length > 0)
1039
+ this.buffer.shift();
1040
+ return result;
1041
+ });
1042
+ this.backend = backend;
1043
+ this.buffer = [];
1044
+ }
1045
+ peek(position) {
1046
+ if (!position)
1047
+ position = 0;
1048
+ let next;
1049
+ while (position > this.buffer.length - 1 && (next = this.backend.fetch()))
1050
+ this.buffer.push(next);
1051
+ return position > this.buffer.length - 1 ? undefined : this.buffer[position];
1052
+ }
1053
+ }
1054
+ exports.BufferedEnumerator = BufferedEnumerator;
1055
+ //# sourceMappingURL=BufferedEnumerator.js.map
1056
+ });
1057
+
1058
+ var _String = createCommonjsModule(function (module, exports) {
1059
+ Object.defineProperty(exports, "__esModule", { value: true });
1060
+ class String {
1061
+ static padLeft(value, paddingCharacter, width) {
1062
+ return String.pad(value, paddingCharacter, width, true);
1063
+ }
1064
+ static padRight(value, paddingCharacter, width) {
1065
+ return String.pad(value, paddingCharacter, width, false);
1066
+ }
1067
+ static pad(value, paddingCharacter, width, padLeft) {
1068
+ let padding = "";
1069
+ const count = width - value.length;
1070
+ for (let i = 0; i < count; i++)
1071
+ padding += paddingCharacter;
1072
+ return padLeft ? padding + value : value + padding;
1073
+ }
1074
+ }
1075
+ exports.String = String;
1076
+ //# sourceMappingURL=String.js.map
1077
+ });
1078
+
1079
+ var Utilities = createCommonjsModule(function (module, exports) {
1080
+ Object.defineProperty(exports, "__esModule", { value: true });
1081
+
1082
+ exports.Enumerator = Enumerator_1.Enumerator;
1083
+
1084
+ exports.Enumerable = Enumerable_1.Enumerable;
1085
+
1086
+ exports.ArrayEnumerator = ArrayEnumerator_1.ArrayEnumerator;
1087
+
1088
+ exports.BufferedEnumerator = BufferedEnumerator_1.BufferedEnumerator;
1089
+
1090
+ exports.String = _String.String;
1091
+ //# sourceMappingURL=index.js.map
1092
+ });
1093
+
1094
+ var OutDevice_1 = createCommonjsModule(function (module, exports) {
1095
+ Object.defineProperty(exports, "__esModule", { value: true });
1096
+
1097
+ class OutDevice extends Device_1.Device {
1098
+ }
1099
+ exports.OutDevice = OutDevice;
1100
+ //# sourceMappingURL=OutDevice.js.map
1101
+ });
1102
+
1103
+ var Writer_1 = createCommonjsModule(function (module, exports) {
1104
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
1105
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1106
+ return new (P || (P = Promise))(function (resolve, reject) {
1107
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1108
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1109
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1110
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
1111
+ });
1112
+ };
1113
+ Object.defineProperty(exports, "__esModule", { value: true });
1114
+
1115
+
1116
+
1117
+ class Writer extends OutDevice_1.OutDevice {
1118
+ constructor() {
1119
+ super(...arguments);
1120
+ this.newLineSymbol = "\n";
1121
+ }
1122
+ write(message) {
1123
+ return __awaiter(this, void 0, void 0, function* () {
1124
+ return message instanceof Utilities.Enumerator ? this.writeImplementation(message) :
1125
+ message instanceof Array ? this.writeImplementation(new Utilities.ArrayEnumerator(message)) :
1126
+ this.writeImplementation(new Utilities.ArrayEnumerator([message]));
1127
+ });
1128
+ }
1129
+ writeLine(message) {
1130
+ return __awaiter(this, void 0, void 0, function* () {
1131
+ return message instanceof Utilities.Enumerator ? this.writeImplementation(message.append(this.newLineSymbol)) :
1132
+ message instanceof Array ? this.writeImplementation(new Utilities.ArrayEnumerator([...message, this.newLineSymbol])) :
1133
+ message ? this.writeImplementation(new Utilities.ArrayEnumerator([message, this.newLineSymbol])) :
1134
+ this.writeImplementation(new Utilities.ArrayEnumerator([this.newLineSymbol]));
1135
+ });
1136
+ }
1137
+ static addOpener(open, priority) {
1138
+ if (!priority)
1139
+ priority = 0;
1140
+ Writer.openers.push({ open, priority });
1141
+ Writer.openers = Writer.openers.sort((left, right) => right.priority - left.priority);
1142
+ }
1143
+ static open(resource) {
1144
+ return __awaiter(this, void 0, void 0, function* () {
1145
+ let result;
1146
+ if (typeof (resource) == "string") {
1147
+ const r = Uri.Locator.parse(resource);
1148
+ result = r ? yield Writer.open(r) : undefined;
1149
+ }
1150
+ else {
1151
+ let i = 0;
1152
+ do
1153
+ result = yield Writer.openers[i++].open(resource);
1154
+ while (!result && i < Writer.openers.length);
1155
+ }
1156
+ return result;
1157
+ });
1158
+ }
1159
+ }
1160
+ exports.Writer = Writer;
1161
+ Writer.openers = [];
1162
+ //# sourceMappingURL=Writer.js.map
1163
+ });
1164
+
1165
+ var Indenter_1 = createCommonjsModule(function (module, exports) {
1166
+ Object.defineProperty(exports, "__esModule", { value: true });
1167
+
1168
+ class Indenter extends Writer_1.Writer {
1169
+ constructor(backend) {
1170
+ super();
1171
+ this.backend = backend;
1172
+ this.autoFlush = true;
1173
+ this.indentionSymbol = "\t";
1174
+ this.indentionCount = 0;
1175
+ this.indentNext = false;
1176
+ }
1177
+ get resource() { return this.backend.resource; }
1178
+ get opened() { return this.backend.opened; }
1179
+ get writable() { return this.backend.writable; }
1180
+ flush() {
1181
+ return this.backend.flush();
1182
+ }
1183
+ close() {
1184
+ return this.backend.close();
1185
+ }
1186
+ increase() {
1187
+ this.indentionCount++;
1188
+ return true;
1189
+ }
1190
+ decrease() {
1191
+ this.indentionCount--;
1192
+ return this.indentionCount >= 0;
1193
+ }
1194
+ getIndention() {
1195
+ return this.indentionSymbol.repeat(this.indentionCount);
1196
+ }
1197
+ writeImplementation(buffer) {
1198
+ const result = [];
1199
+ let item;
1200
+ let next = buffer.fetch();
1201
+ if (next)
1202
+ do {
1203
+ item = next;
1204
+ next = buffer.fetch();
1205
+ if (this.indentNext)
1206
+ item = this.getIndention() + item;
1207
+ this.indentNext = item.endsWith(this.newLineSymbol);
1208
+ item = item.replace(this.newLineSymbol, this.newLineSymbol + this.getIndention());
1209
+ if (this.indentNext)
1210
+ item = item.substring(0, item.length - this.indentionCount * this.indentionSymbol.length);
1211
+ result.push(this.backend.write(item));
1212
+ } while (next);
1213
+ return Promise.all(result).then(r => r.reduce((previous, current) => previous && current, true));
1214
+ }
1215
+ }
1216
+ exports.Indenter = Indenter;
1217
+ //# sourceMappingURL=Indenter.js.map
1218
+ });
1219
+
1220
+ var PrefixReader_1 = createCommonjsModule(function (module, exports) {
1221
+ Object.defineProperty(exports, "__esModule", { value: true });
1222
+
1223
+
1224
+ class PrefixReader extends Reader_1.Reader {
1225
+ constructor(backend, prefix) {
1226
+ super();
1227
+ this.prefix = prefix;
1228
+ this.done = false;
1229
+ this.backend = backend instanceof BufferedReader_1.BufferedReader ? backend : BufferedReader_1.BufferedReader.create(backend);
1230
+ }
1231
+ get tabSize() { return this.backend.tabSize; }
1232
+ set tabSize(size) { this.backend.tabSize = size; }
1233
+ get readable() { return this.backend.readable; }
1234
+ get opened() { return this.backend.opened; }
1235
+ get isEmpty() { return this.done || this.backend.isEmpty; }
1236
+ get resource() { return this.backend.resource; }
1237
+ get location() { return this.backend.location; }
1238
+ get region() { return this.backend.region; }
1239
+ close() {
1240
+ return this.backend.close();
1241
+ }
1242
+ read() {
1243
+ let result;
1244
+ if (!this.done) {
1245
+ result = this.backend.read();
1246
+ this.done = result == "\n" && !this.backend.readIf(this.prefix) && !this.backend.peekIs("\n");
1247
+ }
1248
+ return result;
1249
+ }
1250
+ mark() { return this.backend.mark(); }
1251
+ static create(backend, prefix) {
1252
+ return backend && prefix ? new PrefixReader(backend, prefix) : backend;
1253
+ }
1254
+ }
1255
+ exports.PrefixReader = PrefixReader;
1256
+ //# sourceMappingURL=PrefixReader.js.map
1257
+ });
1258
+
1259
+ var FileWriter_1 = createCommonjsModule(function (module, exports) {
1260
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
1261
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1262
+ return new (P || (P = Promise))(function (resolve, reject) {
1263
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1264
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1265
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1266
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
1267
+ });
1268
+ };
1269
+ Object.defineProperty(exports, "__esModule", { value: true });
1270
+
1271
+
1272
+
1273
+ class FileWriter extends Writer_1.Writer {
1274
+ constructor(resource, descriptor) {
1275
+ super();
1276
+ this.resource = resource;
1277
+ this.descriptor = descriptor;
1278
+ this.autoFlush = false;
1279
+ }
1280
+ get opened() { return this.descriptor > 0; }
1281
+ get writable() { return this.descriptor > 0; }
1282
+ flush() {
1283
+ return __awaiter(this, void 0, void 0, function* () {
1284
+ let result = true;
1285
+ try {
1286
+ yield fs_browser.fsync(this.descriptor);
1287
+ }
1288
+ catch (error) {
1289
+ result = false;
1290
+ }
1291
+ return result;
1292
+ });
1293
+ }
1294
+ close() {
1295
+ return __awaiter(this, void 0, void 0, function* () {
1296
+ let result = this.opened;
1297
+ if (result) {
1298
+ try {
1299
+ yield fs_browser.close(this.descriptor);
1300
+ }
1301
+ catch (error) {
1302
+ result = false;
1303
+ }
1304
+ this.descriptor = 0;
1305
+ }
1306
+ return result;
1307
+ });
1308
+ }
1309
+ writeImplementation(buffer) {
1310
+ return __awaiter(this, void 0, void 0, function* () {
1311
+ let result = true;
1312
+ const content = Buffer.from(buffer.reduce((r, item) => r + item, ""));
1313
+ try {
1314
+ const r = yield fs_browser.write(this.descriptor, content, 0, "utf8");
1315
+ result = r.bytesWritten == content.length;
1316
+ }
1317
+ catch (error) {
1318
+ result = false;
1319
+ }
1320
+ return result && (!this.autoFlush || (yield this.flush()));
1321
+ });
1322
+ }
1323
+ static open(resource) {
1324
+ return __awaiter(this, void 0, void 0, function* () {
1325
+ let backend;
1326
+ if (resource && (resource.scheme.length == 0 || resource.scheme.length == 1 && resource.scheme[0] == "file"))
1327
+ try {
1328
+ backend = yield fs_browser.open((resource.isRelative ? "" : path_browser.sep) + resource.path.join(path_browser.sep), "w");
1329
+ }
1330
+ catch (error) {
1331
+ backend = undefined;
1332
+ }
1333
+ return backend ? new FileWriter(resource, backend) : undefined;
1334
+ });
1335
+ }
1336
+ }
1337
+ exports.FileWriter = FileWriter;
1338
+ Writer_1.Writer.addOpener(FileWriter.open);
1339
+ //# sourceMappingURL=FileWriter.js.map
1340
+ });
1341
+
1342
+ var TillReader_1 = createCommonjsModule(function (module, exports) {
1343
+ Object.defineProperty(exports, "__esModule", { value: true });
1344
+
1345
+
1346
+ class TillReader extends Reader_1.Reader {
1347
+ constructor(backend, endMark) {
1348
+ super();
1349
+ this.endMark = endMark;
1350
+ this.done = false;
1351
+ this.backend = backend instanceof BufferedReader_1.BufferedReader ? backend : BufferedReader_1.BufferedReader.create(backend);
1352
+ this.done = this.backend.peekIs(this.endMark) != undefined;
1353
+ }
1354
+ get tabSize() { return this.backend.tabSize; }
1355
+ set tabSize(size) { this.backend.tabSize = size; }
1356
+ get readable() { return this.backend.readable; }
1357
+ get opened() { return !this.done && this.backend.opened; }
1358
+ get isEmpty() { return this.done || this.backend.isEmpty; }
1359
+ get resource() { return this.backend.resource; }
1360
+ get location() { return this.backend.location; }
1361
+ get region() { return this.backend.region; }
1362
+ close() {
1363
+ const result = !this.done;
1364
+ if (result)
1365
+ this.done = true;
1366
+ return Promise.resolve(result);
1367
+ }
1368
+ read() {
1369
+ let result;
1370
+ if (!this.done) {
1371
+ result = this.backend.read();
1372
+ this.done = this.backend.peekIs(this.endMark) != undefined;
1373
+ }
1374
+ return result;
1375
+ }
1376
+ mark() { return this.backend.mark(); }
1377
+ static create(backend, endMark) {
1378
+ return backend && endMark ? new TillReader(backend, endMark) : backend;
1379
+ }
1380
+ }
1381
+ exports.TillReader = TillReader;
1382
+ //# sourceMappingURL=TillReader.js.map
1383
+ });
1384
+
1385
+ var UntilReader_1 = createCommonjsModule(function (module, exports) {
1386
+ Object.defineProperty(exports, "__esModule", { value: true });
1387
+
1388
+
1389
+ class UntilReader extends Reader_1.Reader {
1390
+ constructor(backend, endMark) {
1391
+ super();
1392
+ this.endMark = endMark;
1393
+ this.done = -1;
1394
+ this.backend = backend instanceof BufferedReader_1.BufferedReader ? backend : BufferedReader_1.BufferedReader.create(backend);
1395
+ const peeked = this.backend.peekIs(this.endMark);
1396
+ if (peeked)
1397
+ this.done = peeked.length;
1398
+ }
1399
+ get tabSize() { return this.backend.tabSize; }
1400
+ set tabSize(size) { this.backend.tabSize = size; }
1401
+ get readable() { return this.backend.readable; }
1402
+ get opened() { return !this.done && this.backend.opened; }
1403
+ get isEmpty() { return this.done == 0 || this.backend.isEmpty; }
1404
+ get resource() { return this.backend.resource; }
1405
+ get location() { return this.backend.location; }
1406
+ get region() { return this.backend.region; }
1407
+ close() {
1408
+ const result = this.done > 0;
1409
+ if (result)
1410
+ this.done = 0;
1411
+ return Promise.resolve(result);
1412
+ }
1413
+ read() {
1414
+ let result;
1415
+ if (this.done != 0) {
1416
+ result = this.backend.read();
1417
+ let peeked;
1418
+ if (this.done > 0)
1419
+ this.done--;
1420
+ else if (peeked = this.backend.peekIs(this.endMark))
1421
+ this.done = peeked.length;
1422
+ }
1423
+ return result;
1424
+ }
1425
+ mark() { return this.backend.mark(); }
1426
+ static create(backend, endMark) {
1427
+ return backend && endMark ? new UntilReader(backend, endMark) : backend;
1428
+ }
1429
+ }
1430
+ exports.UntilReader = UntilReader;
1431
+ //# sourceMappingURL=UntilReader.js.map
1432
+ });
1433
+
1434
+ var IO = createCommonjsModule(function (module, exports) {
1435
+ Object.defineProperty(exports, "__esModule", { value: true });
1436
+
1437
+ exports.BufferedReader = BufferedReader_1.BufferedReader;
1438
+
1439
+ exports.Device = Device_1.Device;
1440
+
1441
+ exports.FileReader = FileReader_1.FileReader;
1442
+
1443
+ exports.FolderReader = FolderReader_1.FolderReader;
1444
+
1445
+ exports.Indenter = Indenter_1.Indenter;
1446
+
1447
+ exports.InDevice = InDevice_1.InDevice;
1448
+
1449
+ exports.OutDevice = OutDevice_1.OutDevice;
1450
+
1451
+ exports.PrefixReader = PrefixReader_1.PrefixReader;
1452
+
1453
+ exports.Reader = Reader_1.Reader;
1454
+
1455
+ exports.StringReader = StringReader_1.StringReader;
1456
+
1457
+ exports.FileWriter = FileWriter_1.FileWriter;
1458
+
1459
+ exports.TillReader = TillReader_1.TillReader;
1460
+
1461
+ exports.UntilReader = UntilReader_1.UntilReader;
1462
+
1463
+ exports.Writer = Writer_1.Writer;
1464
+ //# sourceMappingURL=index.js.map
1465
+ });
1466
+
1467
+ var build = createCommonjsModule(function (module, exports) {
1468
+ Object.defineProperty(exports, "__esModule", { value: true });
1469
+
1470
+ exports.Error = _Error;
1471
+
1472
+ exports.IO = IO;
1473
+
1474
+ exports.Uri = Uri;
1475
+
1476
+ exports.Utilities = Utilities;
1477
+ //# sourceMappingURL=index.js.map
1478
+ });
1479
+
1480
+ class Source$1 extends build.IO.BufferedReader {
1481
+ constructor(reader, errorHandler) {
1482
+ super(typeof reader == "string" ? build.IO.StringReader.create(reader) : reader);
1483
+ this.errorHandler = errorHandler;
1484
+ }
1485
+ raise(message, level, type = "lexical", region) {
1486
+ if (!(message instanceof build.Error.Message)) {
1487
+ if (!level)
1488
+ level = build.Error.Level.Critical;
1489
+ if (!region)
1490
+ region = this.region;
1491
+ message = new build.Error.Message(message, level, type, region);
1492
+ }
1493
+ if (this.errorHandler)
1494
+ this.errorHandler.raise(message);
1495
+ }
1496
+ requirePrefix(prefix) {
1497
+ return new Source$1(new build.IO.PrefixReader(this, prefix), this.errorHandler);
1498
+ }
1499
+ till(endMark) {
1500
+ return new Source$1(build.IO.TillReader.create(this, endMark), this.errorHandler);
1501
+ }
1502
+ until(endMark) {
1503
+ return new Source$1(build.IO.UntilReader.create(this, endMark), this.errorHandler);
1504
+ }
1505
+ peekIsSymbol(symbols) {
1506
+ return (this.peekIs(symbols ?? ["!", "(", ")", "[", "]", "|", "*", ":", ".", "<=", ">=", "<", ">", " * ", " + ", " - ", " / ", ","])?.length ?? false);
1507
+ }
1508
+ peekIsWhitespace() {
1509
+ return !!this.peekIs([" ", "\n", "\t"]);
1510
+ }
1511
+ }
1512
+
1513
+ function tokenize(reader, errorHandler, symbols) {
1514
+ const source = new Source$1(reader, errorHandler);
1515
+ return new build.Utilities.Enumerator(() => {
1516
+ let result;
1517
+ let peekSymbolLength = 1;
1518
+ if (!source.isEmpty) {
1519
+ while (source.peekIsWhitespace() && !source.peekIsSymbol(symbols))
1520
+ source.read();
1521
+ if ((peekSymbolLength = source.peekIsSymbol(symbols)))
1522
+ result = { value: source.read(peekSymbolLength) || "", region: source.mark() };
1523
+ else {
1524
+ let value = "";
1525
+ while (!source.isEmpty && !source.peekIsWhitespace() && !source.peekIsSymbol(symbols))
1526
+ value += source.read();
1527
+ if (value)
1528
+ result = { value, region: source.mark() };
1529
+ }
1530
+ }
1531
+ return result;
1532
+ });
1533
+ }
1534
+
1535
+ class Base {
1536
+ tokenize(input) {
1537
+ return tokenize(input, undefined, [
1538
+ "!",
1539
+ "(",
1540
+ ")",
1541
+ "[",
1542
+ "]",
1543
+ "|",
1544
+ " | ",
1545
+ "*",
1546
+ ":",
1547
+ ".",
1548
+ "<=",
1549
+ ">=",
1550
+ "<",
1551
+ ">",
1552
+ " * ",
1553
+ " + ",
1554
+ "+",
1555
+ " - ",
1556
+ "-",
1557
+ " / ",
1558
+ ])
1559
+ .map(t => ({ value: t.value }))
1560
+ .toArray();
1561
+ }
1562
+ }
1563
+
1564
+ class Array$1 extends Base {
1565
+ constructor(input) {
1566
+ super();
1567
+ this.class = "array";
1568
+ this.array = input;
1569
+ }
1570
+ complete(input, baseObject, type) {
1571
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1572
+ return Array$1.completor
1573
+ .flatMap(p => p(tokens, this, baseObject))
1574
+ .reduce((result, element) => result.some(p => p.value == element.value && p.cursor == element.cursor) ? result : [...result, element], []);
1575
+ }
1576
+ isType(value) {
1577
+ return global.Array.isArray(value);
1578
+ }
1579
+ static add(...pattern) {
1580
+ this.completor.push(...pattern);
1581
+ }
1582
+ static is(value) {
1583
+ return value instanceof Array$1;
1584
+ }
1585
+ }
1586
+ Array$1.completor = [];
1587
+
1588
+ var Cursor;
1589
+ (function (Cursor) {
1590
+ function is(value) {
1591
+ return typeof value == "object" && typeof value.start == "number" && typeof value.end == "number";
1592
+ }
1593
+ Cursor.is = is;
1594
+ })(Cursor || (Cursor = {}));
1595
+
1596
+ var Completion;
1597
+ (function (Completion) {
1598
+ function stringify(completions) {
1599
+ return completions.map(c => typeof c.cursor == "number"
1600
+ ? c.value.slice(0, c.cursor) + "_" + c.value.slice(c.cursor, c.value.length)
1601
+ : c.value + "_");
1602
+ }
1603
+ Completion.stringify = stringify;
1604
+ function prepend(prefix, completion, suffix) {
1605
+ return Array.isArray(completion)
1606
+ ? completion.map(c => prepend(prefix, c, suffix))
1607
+ : {
1608
+ value: prefix + completion.value + (suffix ?? ""),
1609
+ cursor: typeof completion?.cursor == "number"
1610
+ ? completion?.cursor + prefix.length
1611
+ : Cursor.is(completion.cursor)
1612
+ ? { start: completion.cursor.start + prefix.length, end: completion.cursor.end + prefix.length }
1613
+ : completion.value.length + prefix.length,
1614
+ suggestion: completion.suggestion,
1615
+ };
1616
+ }
1617
+ Completion.prepend = prepend;
1618
+ })(Completion || (Completion = {}));
1619
+
1620
+ class Boolean extends Base {
1621
+ constructor() {
1622
+ super();
1623
+ this.class = "boolean";
1624
+ }
1625
+ complete(input, baseObject, type) {
1626
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1627
+ const result = type
1628
+ ? Boolean.literals.filter(c => c.value.startsWith(tokens[0]?.value ?? ""))
1629
+ : tokens[0]?.value == ":"
1630
+ ? Completion.prepend(":", Boolean.literals.filter(c => c.value.startsWith(tokens[1]?.value ?? "")))
1631
+ : [];
1632
+ return [
1633
+ ...(result ?? []),
1634
+ ...(type ? [] : Boolean.completor)
1635
+ .flatMap(p => p(tokens, this, baseObject))
1636
+ .reduce((result, element) => result.some(p => p.value == element.value && p.cursor == element.cursor) ? result : [...result, element], []),
1637
+ ];
1638
+ }
1639
+ isType(value) {
1640
+ return typeof value == "boolean";
1641
+ }
1642
+ static add(...pattern) {
1643
+ this.completor.push(...pattern);
1644
+ }
1645
+ }
1646
+ Boolean.literals = [
1647
+ { value: "true", suggestion: { value: "true" } },
1648
+ { value: "false", suggestion: { value: "false" } },
1649
+ ];
1650
+ Boolean.completor = [];
1651
+
1652
+ var Completor;
1653
+ (function (Completor) {
1654
+ function functions(tokens, argument, completion) {
1655
+ return tokens.length == 0
1656
+ ? [{ value: ":", suggestion: { value: ":" } }]
1657
+ : tokens.length <= 3 &&
1658
+ tokens[0].value == ":" &&
1659
+ completion.value.startsWith(tokens[1]?.value ?? "") &&
1660
+ (tokens[2]?.value ?? "(") == "("
1661
+ ? Completion.prepend(":", [completion])
1662
+ : tokens.length <= 4 &&
1663
+ tokens.slice(0, 4).reduce((string, token) => string + token.value, "") == ":" + completion.value
1664
+ ? Completion.prepend(":" + completion.value.substring(0, completion.value.length - 1), argument(), ")")
1665
+ : tokens.length == 5 &&
1666
+ tokens.slice(0, 3).reduce((string, token) => string + token.value, "") + tokens[4].value ==
1667
+ ":" + completion.value
1668
+ ? Completion.prepend(":" + completion.value.substring(0, completion.value.length - 1), argument(tokens.slice(3, tokens.length - 1)), ")")
1669
+ : tokens.length > 5 &&
1670
+ tokens.slice(0, 3).reduce((string, token) => string + token.value, "") + tokens[tokens.length - 1].value ==
1671
+ ":" + completion.value
1672
+ ? Completion.prepend(":" + completion.value.substring(0, completion.value.length - 1), argument(tokens.slice(3, tokens.length - 1)), ")")
1673
+ : [];
1674
+ }
1675
+ Completor.functions = functions;
1676
+ function expressions(tokens, argument, completion) {
1677
+ return tokens.length == 0
1678
+ ? [{ value: ":", suggestion: { value: ":" } }]
1679
+ : tokens[0].value != ":"
1680
+ ? []
1681
+ : tokens.length == 1
1682
+ ? Completion.prepend(":", [completion])
1683
+ : Completion.prepend(":", argument(tokens.slice(1)));
1684
+ }
1685
+ Completor.expressions = expressions;
1686
+ function operators(tokens, argument, completion) {
1687
+ return tokens.length >= 1 && tokens[0].value == completion.value
1688
+ ? Completion.prepend(completion.value, argument(tokens.slice(1)))
1689
+ : tokens.length == 0 ||
1690
+ (tokens.length == 1 && completion.value.startsWith(tokens[0].value)) ||
1691
+ tokens[0].value == completion.value.replace(/ /g, "")
1692
+ ? [completion]
1693
+ : [];
1694
+ }
1695
+ Completor.operators = operators;
1696
+ })(Completor || (Completor = {}));
1697
+
1698
+ class Number$1 extends Base {
1699
+ constructor(input) {
1700
+ super();
1701
+ this.input = input;
1702
+ this.class = "number";
1703
+ if (input)
1704
+ this.value = input;
1705
+ }
1706
+ complete(input, baseObject, type) {
1707
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1708
+ return [
1709
+ ...(tokens.length > 0 && tokens[0].value == ":" && baseObject
1710
+ ? Completion.prepend(":", baseObject.complete(tokens.slice(1), undefined, this))
1711
+ : baseObject && tokens.length >= 0 && type
1712
+ ? Completion.prepend(" ", baseObject?.complete(tokens, undefined, undefined))
1713
+ : []),
1714
+ ...(type ? Number$1.completorArgument : Number$1.completor)
1715
+ .flatMap(p => p(tokens, this, baseObject))
1716
+ .reduce((result, element) => result.some(p => p.value == element.value && p.cursor == element.cursor) ? result : [...result, element], []),
1717
+ ];
1718
+ }
1719
+ isType(value) {
1720
+ return isNaN(+value) ? false : true;
1721
+ }
1722
+ static add(...pattern) {
1723
+ this.completor.push(...pattern);
1724
+ }
1725
+ static addArgument(...pattern) {
1726
+ this.completorArgument.push(...pattern);
1727
+ }
1728
+ static is(value) {
1729
+ return value instanceof Number$1 || !global.Number.isNaN(value);
1730
+ }
1731
+ }
1732
+ Number$1.completor = [];
1733
+ Number$1.completorArgument = [];
1734
+
1735
+ class TObject extends Base {
1736
+ constructor(properties) {
1737
+ super();
1738
+ this.properties = properties;
1739
+ this.class = "object";
1740
+ this.completions = Object.keys(this.properties).map(p => ({ value: p, suggestion: { value: p } }));
1741
+ }
1742
+ complete(input, baseObject, type) {
1743
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1744
+ let result;
1745
+ const filtered = this.filterByType(type);
1746
+ if (!baseObject) {
1747
+ const matched = tokens.length > 0 ? this.match(tokens[0], filtered) : undefined;
1748
+ if (matched)
1749
+ result =
1750
+ tokens.length >= 1
1751
+ ? Completion.prepend(matched.value, this.properties[matched.value].complete(tokens.slice(1), this, type))
1752
+ : [];
1753
+ else if (type && tokens.length > 2 && type.isType(tokens[0].value + tokens[1].value + tokens[2].value))
1754
+ result = Completion.prepend(tokens[0].value + tokens[1].value + tokens[2].value, type.complete(tokens.slice(3), this, type));
1755
+ else if (type && tokens.length > 0 && type.isType(tokens[0].value))
1756
+ result = Completion.prepend(tokens[0].value, type.complete(tokens.slice(1), this, type));
1757
+ else {
1758
+ let found;
1759
+ result =
1760
+ tokens.length == 0
1761
+ ? [...this.addDot(filtered, type), ...(type?.class == "number" ? [] : TObject.wildcard)]
1762
+ : tokens.length == 1 && (found = TObject.wildcard.find(w => w.value == tokens[0].value))
1763
+ ? Completion.prepend(found.value, this.completions, type ? "." : "")
1764
+ : tokens.length >= 1 && (found = TObject.wildcard.find(w => w.value == tokens[0].value))
1765
+ ? Completion.prepend(found.value, this.complete(tokens.slice(1)))
1766
+ : this.addDot(this.partial(tokens[0], filtered), type);
1767
+ }
1768
+ }
1769
+ else
1770
+ result =
1771
+ tokens.length == 0
1772
+ ? [{ value: ".", suggestion: { value: "." } }]
1773
+ : tokens[0].value != "."
1774
+ ? []
1775
+ : tokens.length == 1
1776
+ ? Completion.prepend(".", this.addDot(filtered, type))
1777
+ : this.properties[tokens[1].value]
1778
+ ? Completion.prepend("." + tokens[1].value, this.properties[tokens[1].value].complete(tokens.slice(2), baseObject, type))
1779
+ : Completion.prepend(".", this.addDot(this.partial(tokens[1], filtered), type));
1780
+ return [
1781
+ ...result.reduce((result, element) => result.some(p => p.value == element.value && p.cursor == element.cursor) ? result : [...result, element], []),
1782
+ ...TObject.completor.flatMap(p => p(tokens, this, baseObject)),
1783
+ ];
1784
+ }
1785
+ filterByType(type) {
1786
+ return type
1787
+ ? this.completions.filter(c => this.properties[c.value].class == type.class ||
1788
+ (this.properties[c.value].class == "object"
1789
+ ? this.properties[c.value].filterByType(type).length > 0
1790
+ : false))
1791
+ : this.completions;
1792
+ }
1793
+ addDot(completions, type) {
1794
+ return !completions
1795
+ ? []
1796
+ : type
1797
+ ? completions.map(c => this.properties[c.value].class == "object"
1798
+ ? { value: c.value + ".", suggestion: { value: c.suggestion?.value + "." } }
1799
+ : c)
1800
+ : completions;
1801
+ }
1802
+ partial(token, completions) {
1803
+ const result = completions.filter(c => c.value.startsWith(token.value));
1804
+ return result && result.length > 0 ? result : undefined;
1805
+ }
1806
+ match(token, completions) {
1807
+ const result = completions.filter(c => c.value == token.value);
1808
+ return result && result.length > 0 ? result[0] : undefined;
1809
+ }
1810
+ isType(value) {
1811
+ return false;
1812
+ }
1813
+ static add(...completor) {
1814
+ this.completor.push(...completor);
1815
+ }
1816
+ }
1817
+ TObject.wildcard = [
1818
+ { value: "!", cursor: 1, suggestion: { value: "!", description: "not" } },
1819
+ ];
1820
+ TObject.completor = [];
1821
+
1822
+ class String extends Base {
1823
+ constructor(input) {
1824
+ super();
1825
+ this.class = "string";
1826
+ if (input)
1827
+ this.value = input;
1828
+ }
1829
+ complete(input, baseObject, type) {
1830
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1831
+ let result;
1832
+ if (type)
1833
+ result = this.value?.startsWith(tokens[0]?.value ?? "")
1834
+ ? [{ value: this.value, suggestion: { value: this.value } }]
1835
+ : undefined;
1836
+ else
1837
+ result =
1838
+ tokens.length == 0 || tokens[0].value != ":"
1839
+ ? undefined
1840
+ : this.value?.startsWith(tokens[1]?.value ?? "")
1841
+ ? [Completion.prepend(":", { value: this.value, suggestion: { value: this.value } })]
1842
+ : undefined;
1843
+ return [
1844
+ ...(result ?? []),
1845
+ ...(type ? [] : String.completor)
1846
+ .flatMap(p => p(tokens, this, baseObject))
1847
+ .reduce((result, element) => result.some(p => p.value == element.value && p.cursor == element.cursor) ? result : [...result, element], []),
1848
+ ];
1849
+ }
1850
+ isType(value) {
1851
+ return typeof value.value == "string";
1852
+ }
1853
+ static add(...pattern) {
1854
+ this.completor.push(...pattern);
1855
+ }
1856
+ static is(value) {
1857
+ return value instanceof String;
1858
+ }
1859
+ }
1860
+ String.completor = [];
1861
+
1862
+ class Union extends Base {
1863
+ constructor(type) {
1864
+ super();
1865
+ this.type = type;
1866
+ this.class = "union";
1867
+ }
1868
+ complete(input, baseObject, type) {
1869
+ const tokens = typeof input == "string" ? this.tokenize(input) : input;
1870
+ return this.type ? this.type?.flatMap(t => t?.complete(tokens, baseObject, type) ?? []) : [];
1871
+ }
1872
+ isType(value) {
1873
+ return value instanceof Union;
1874
+ }
1875
+ static is(value) {
1876
+ return value instanceof Union;
1877
+ }
1878
+ }
1879
+
1880
+ var Type;
1881
+ (function (Type) {
1882
+ function complete(template, input) {
1883
+ const completions = template.complete(input);
1884
+ return completions
1885
+ .filter(c => !input.includes(c.value) && c.suggestion?.value)
1886
+ .map(c => ({
1887
+ full: c.value,
1888
+ cursor: c?.cursor ?? c.value.length,
1889
+ addon: c?.suggestion?.value,
1890
+ description: c?.suggestion?.description,
1891
+ }));
1892
+ }
1893
+ Type.complete = complete;
1894
+ function convert(value) {
1895
+ let result;
1896
+ switch (typeof value) {
1897
+ case "object":
1898
+ result = global.Array.isArray(value)
1899
+ ? new Array$1(value.map(e => convert(e)))
1900
+ : new TObject(global.Object.entries(value).reduce((r, c) => {
1901
+ return { ...r, [c[0]]: convert(c[1]) };
1902
+ }, {}));
1903
+ break;
1904
+ case "string":
1905
+ result = new String(value);
1906
+ break;
1907
+ default:
1908
+ result = new Number$1(value);
1909
+ break;
1910
+ }
1911
+ return result;
1912
+ }
1913
+ Type.convert = convert;
1914
+ Type.Array = Array$1;
1915
+ Type.Boolean = Boolean;
1916
+ Type.Completion = Completion;
1917
+ Type.Object = TObject;
1918
+ Type.String = String;
1919
+ Type.Number = Number$1;
1920
+ Type.Union = Union;
1921
+ Type.Completor = Completor;
1922
+ })(Type || (Type = {}));
1923
+
1924
+ class EndsWith extends Rule {
1925
+ constructor(needle) {
1926
+ super();
1927
+ this.needle = needle;
1928
+ this.precedence = Number.MAX_SAFE_INTEGER;
1929
+ this.class = "EndsWith";
1930
+ }
1931
+ is(value) {
1932
+ return typeof value == "string" && value.endsWith(this.needle);
1933
+ }
1934
+ toString() {
1935
+ return `*${this.needle}`;
1936
+ }
1937
+ }
1938
+ function endsWith(needle, value) {
1939
+ const result = new EndsWith(needle);
1940
+ return value ? result.is(value) : result;
1941
+ }
1942
+ function complete$e(tokens, string) {
1943
+ return Completor.expressions(tokens, (tokens) => {
1944
+ return !tokens || (tokens[0].value == "*" && string.value && string.value.endsWith(tokens[1]?.value ?? ""))
1945
+ ? [Type.Completion.prepend("*", { value: string?.value ?? "", suggestion: { value: string?.value ?? "" } })]
1946
+ : [];
1947
+ }, { value: "*", suggestion: { value: "*", description: "endswith" } });
1948
+ }
1949
+ Type.String.add(complete$e);
1950
+
1951
+ class Every extends Rule {
1952
+ constructor(criteria) {
1953
+ super();
1954
+ this.criteria = criteria;
1955
+ this.precedence = 100;
1956
+ this.class = "Every";
1957
+ }
1958
+ is(value) {
1959
+ return Array.isArray(value) && value.every(v => this.criteria.is(v));
1960
+ }
1961
+ toString() {
1962
+ return `every(${this.criteria.toString()})`;
1963
+ }
1964
+ }
1965
+ function complete$d(tokens, type) {
1966
+ const arrayArgumentor = (tokens) => type.array.some(Type.String.is) && tokens
1967
+ ? type.array
1968
+ .filter(Type.String.is)
1969
+ .map(p => p.complete([{ value: ":" }, ...tokens]))
1970
+ .reduce((result, element) => Array.isArray(element) ? result.concat(element) : element ? [...result, element] : result, [])
1971
+ : !tokens && type.array.some(Type.String.is)
1972
+ ? type.array.filter(Type.String.is).map(e => ({ value: e?.value ?? "" }))
1973
+ : type.array.some(Type.Number.is) && tokens
1974
+ ? type.array
1975
+ .filter(Type.Number.is)
1976
+ .map(e => e.complete(tokens))
1977
+ .reduce((result, element) => Array.isArray(element) ? result.concat(element) : element ? [...result, element] : result, [])
1978
+ : !tokens && type.array.some(Type.Number.is)
1979
+ ? type.array.filter(Type.Number.is).map(e => ({ value: (e?.value ?? "").toString() }))
1980
+ : [];
1981
+ return Completor.functions(tokens, arrayArgumentor, {
1982
+ value: "every()",
1983
+ cursor: 6,
1984
+ suggestion: { value: "every()" },
1985
+ });
1986
+ }
1987
+ Type.Array.add(complete$d);
1988
+
1989
+ class FunctionCall extends Rule {
1990
+ constructor(identifier, argument, definition) {
1991
+ super();
1992
+ this.identifier = identifier;
1993
+ this.argument = argument;
1994
+ this.definition = definition;
1995
+ this.precedence = 85;
1996
+ this.class = "FunctionCall";
1997
+ }
1998
+ is(value) {
1999
+ return this.definition?.is(value) ?? true;
2000
+ }
2001
+ toString() {
2002
+ return `${this.identifier}(${this.argument.join(", ")})`;
2003
+ }
2004
+ }
2005
+
2006
+ class Expression {
2007
+ stringify(precedence = 0) {
2008
+ let result = this.toString();
2009
+ if (this.precedence < precedence)
2010
+ result = "(" + result + ")";
2011
+ return result;
2012
+ }
2013
+ }
2014
+
2015
+ class Value extends Expression {
2016
+ constructor(value, name) {
2017
+ super();
2018
+ this.name = name;
2019
+ this.precedence = Value.precedence;
2020
+ this.class = "Value";
2021
+ if (typeof value == "string")
2022
+ this.value = isNaN(+value.replace(",", ".")) ? value : +value.replace(",", ".");
2023
+ else
2024
+ this.value = value;
2025
+ }
2026
+ toString() {
2027
+ return this.name ? `${this.name?.toString()}.` + this.value.toString() : this.value.toString();
2028
+ }
2029
+ evaluate(variable) {
2030
+ return variable ? this.get(variable) : +this.value;
2031
+ }
2032
+ get(variable) {
2033
+ return typeof this.value == "string"
2034
+ ? +variable[this.value]
2035
+ : this.name && typeof this.value == "object"
2036
+ ? this.value.get(variable[this.name])
2037
+ : +this.value;
2038
+ }
2039
+ static create(value, name) {
2040
+ return new Value(value, name);
2041
+ }
2042
+ }
2043
+ Value.precedence = 19;
2044
+
2045
+ class GreaterThan extends Rule {
2046
+ constructor(value) {
2047
+ super();
2048
+ this.value = value;
2049
+ this.precedence = 85;
2050
+ this.class = "GreaterThan";
2051
+ this.symbol = ">";
2052
+ }
2053
+ is(value, object) {
2054
+ return ((isNaN(+value) ? value : +value) >
2055
+ ((this.value instanceof Value && typeof this.value.value == "string" && this.value.value.includes("-")) ||
2056
+ typeof this.value != "object"
2057
+ ? this.value
2058
+ : this.value.evaluate(object)));
2059
+ }
2060
+ toString() {
2061
+ return this.value.toString();
2062
+ }
2063
+ }
2064
+ function greaterThan(criteria, value) {
2065
+ const result = new GreaterThan(criteria);
2066
+ return value ? result.is(value) : result;
2067
+ }
2068
+ function complete$c(tokens, type, baseObject) {
2069
+ return Type.Completor.operators(tokens, (tokens) => (tokens && baseObject ? baseObject?.complete(tokens, undefined, type) : []), {
2070
+ value: ">",
2071
+ suggestion: { value: ">" },
2072
+ });
2073
+ }
2074
+ Type.Number.add(complete$c);
2075
+ Type.String.add(complete$c);
2076
+
2077
+ class GreaterThanOrEqual extends Rule {
2078
+ constructor(value) {
2079
+ super();
2080
+ this.value = value;
2081
+ this.precedence = 85;
2082
+ this.class = "GreaterThanOrEqual";
2083
+ this.symbol = ">=";
2084
+ }
2085
+ is(value, object) {
2086
+ return ((isNaN(+value) ? value : +value) >=
2087
+ ((this.value instanceof Value && typeof this.value.value == "string" && this.value.value.includes("-")) ||
2088
+ typeof this.value != "object"
2089
+ ? this.value
2090
+ : this.value.evaluate(object)));
2091
+ }
2092
+ toString() {
2093
+ return this.value.toString();
2094
+ }
2095
+ }
2096
+ function complete$b(tokens, type, baseObject) {
2097
+ return Type.Completor.operators(tokens, (tokens) => (tokens && baseObject ? baseObject?.complete(tokens, undefined, type) : []), {
2098
+ value: ">=",
2099
+ suggestion: { value: ">=" },
2100
+ });
2101
+ }
2102
+ Type.Number.add(complete$b);
2103
+ Type.String.add(complete$b);
2104
+
2105
+ class Has extends Rule {
2106
+ constructor(property) {
2107
+ super();
2108
+ this.property = property;
2109
+ this.precedence = 85;
2110
+ this.class = "Has";
2111
+ }
2112
+ is(value, property) {
2113
+ return typeof value == "object" && value
2114
+ ? Object.entries(value).some(e => {
2115
+ property = typeof property == "string" ? property : this.property;
2116
+ return e[0] == property
2117
+ ? true
2118
+ : typeof e[1] == "object" && e[1]
2119
+ ? this.is(e[1], property.includes(".") && property.split(".")[0] == e[0] ? property.split(".")[1] : undefined)
2120
+ : false;
2121
+ })
2122
+ : false;
2123
+ }
2124
+ toString() {
2125
+ return `has(${this.property})`;
2126
+ }
2127
+ }
2128
+ function complete$a(tokens, type, baseObject) {
2129
+ return baseObject && type?.class == "object"
2130
+ ? Completor.functions(tokens, (tokens) => type.completions.filter(c => c.value.startsWith(tokens ? tokens[0].value : "")), {
2131
+ value: "has()",
2132
+ cursor: 4,
2133
+ suggestion: { value: "has()" },
2134
+ })
2135
+ : [];
2136
+ }
2137
+ Type.Object.add(complete$a);
2138
+
2139
+ class Includes extends Rule {
2140
+ constructor(needle) {
2141
+ super();
2142
+ this.needle = needle;
2143
+ this.precedence = Number.MAX_SAFE_INTEGER;
2144
+ this.class = "Includes";
2145
+ }
2146
+ is(value) {
2147
+ return typeof value == "string" && value.includes(this.needle);
2148
+ }
2149
+ toString() {
2150
+ return `*${this.needle}*`;
2151
+ }
2152
+ }
2153
+ function includes(needle, value) {
2154
+ const result = new Includes(needle);
2155
+ return value ? result.is(value) : result;
2156
+ }
2157
+ function complete$9(tokens, string) {
2158
+ return Completor.expressions(tokens, (tokens) => {
2159
+ return !tokens ||
2160
+ (tokens.length == 3 && string.value?.includes(tokens[1].value) && string.value != tokens[1].value) ||
2161
+ (tokens.length == 2 && tokens[0].value + tokens[1].value == "**")
2162
+ ? [
2163
+ Type.Completion.prepend("*", { value: string?.value ?? "", suggestion: { value: string?.value ?? "" } }, "*"),
2164
+ ]
2165
+ : tokens.length == 1 && tokens[0].value == "*"
2166
+ ? [{ value: "**", suggestion: { value: "**", description: "includes" } }]
2167
+ : [];
2168
+ }, { value: "**", cursor: 1, suggestion: { value: "**", description: "includes" } });
2169
+ }
2170
+ Type.String.add(complete$9);
2171
+
2172
+ class Some extends Rule {
2173
+ constructor(criteria) {
2174
+ super();
2175
+ this.criteria = criteria;
2176
+ this.precedence = 100;
2177
+ this.class = "Some";
2178
+ }
2179
+ is(value, object) {
2180
+ return Array.isArray(value) && value.some(v => this.criteria.is(v, object));
2181
+ }
2182
+ toString() {
2183
+ return `some(${this.criteria.toString()})`;
2184
+ }
2185
+ }
2186
+ function some(criteria, value) {
2187
+ const result = new Some(create(criteria));
2188
+ return value ? result.is(value) : result;
2189
+ }
2190
+ function complete$8(tokens, type, baseObject) {
2191
+ return tokens.length == 0
2192
+ ? [{ value: ":", suggestion: { value: ":" } }]
2193
+ : tokens[0].value != ":"
2194
+ ? []
2195
+ : tokens.length == 1 && tokens[0].value == ":"
2196
+ ? Type.Completion.prepend(":", type.array
2197
+ .filter(Type.String.is)
2198
+ .filter(e => e.value && e.value != "string")
2199
+ .map(e => ({ value: e?.value ?? "", suggestion: { value: e?.value ?? "" } })))
2200
+ : tokens.length == 2 && tokens[0].value == ":"
2201
+ ? Type.Completion.prepend(":", type.array
2202
+ .filter(Type.String.is)
2203
+ .filter(e => e.value && e.value != "string" && e.value.startsWith(tokens[1].value))
2204
+ .map(e => ({ value: e?.value ?? "", suggestion: { value: e?.value ?? "" } })))
2205
+ : [];
2206
+ }
2207
+ Type.Array.add(complete$8);
2208
+
2209
+ class Is extends Rule {
2210
+ constructor(value) {
2211
+ super();
2212
+ this.value = value;
2213
+ this.precedence = Number.MAX_SAFE_INTEGER;
2214
+ this.class = "Is";
2215
+ this.symbol = ":";
2216
+ }
2217
+ is(value, object) {
2218
+ return Array.isArray(value) && isCriteria(this.value)
2219
+ ? some(this.value, value)
2220
+ : (typeof value == "boolean" ? value.toString() : isNaN(+value) ? value : +value) ==
2221
+ (typeof this.value == "object" ? this.value.evaluate(object) : this.value);
2222
+ }
2223
+ toString() {
2224
+ return this.value.toString();
2225
+ }
2226
+ }
2227
+ add$1(criteria => typeof criteria == "bigint" ||
2228
+ typeof criteria == "boolean" ||
2229
+ typeof criteria == "number" ||
2230
+ typeof criteria == "string"
2231
+ ? new Is(criteria)
2232
+ : undefined);
2233
+
2234
+ class LesserThan extends Rule {
2235
+ constructor(value) {
2236
+ super();
2237
+ this.value = value;
2238
+ this.precedence = 85;
2239
+ this.class = "LesserThan";
2240
+ this.symbol = "<";
2241
+ }
2242
+ is(value, object) {
2243
+ return ((isNaN(+value) ? value : +value) <
2244
+ ((this.value instanceof Value && typeof this.value.value == "string" && this.value.value.includes("-")) ||
2245
+ typeof this.value != "object"
2246
+ ? this.value
2247
+ : this.value.evaluate(object)));
2248
+ }
2249
+ toString() {
2250
+ return this.value.toString();
2251
+ }
2252
+ }
2253
+ function lesserThan(criteria, value) {
2254
+ const result = new LesserThan(criteria);
2255
+ return value ? result.is(value) : result;
2256
+ }
2257
+ function complete$7(tokens, type, baseObject) {
2258
+ return Type.Completor.operators(tokens, (tokens) => (tokens && baseObject ? baseObject?.complete(tokens, undefined, type) : []), {
2259
+ value: "<",
2260
+ suggestion: { value: "<" },
2261
+ });
2262
+ }
2263
+ Type.Number.add(complete$7);
2264
+ Type.String.add(complete$7);
2265
+
2266
+ class LesserThanOrEqual extends Rule {
2267
+ constructor(value) {
2268
+ super();
2269
+ this.value = value;
2270
+ this.precedence = 85;
2271
+ this.class = "LesserThanOrEqual";
2272
+ this.symbol = "<=";
2273
+ }
2274
+ is(value, object) {
2275
+ return ((isNaN(+value) ? value : +value) <=
2276
+ ((this.value instanceof Value && typeof this.value.value == "string" && this.value.value.includes("-")) ||
2277
+ typeof this.value != "object"
2278
+ ? this.value
2279
+ : this.value.evaluate(object)));
2280
+ }
2281
+ toString() {
2282
+ return this.value.toString();
2283
+ }
2284
+ }
2285
+ function complete$6(tokens, type, baseObject) {
2286
+ return Type.Completor.operators(tokens, (tokens) => (tokens && baseObject ? baseObject?.complete(tokens, undefined, type) : []), {
2287
+ value: "<=",
2288
+ suggestion: { value: "<=" },
2289
+ });
2290
+ }
2291
+ Type.Number.add(complete$6);
2292
+ Type.String.add(complete$6);
2293
+
2294
+ function complete$5(tokens, string) {
2295
+ return Completor.expressions(tokens, (tokens) => {
2296
+ return tokens && tokens?.length == 1 && tokens[0].value == "/" ? [{ value: "//", cursor: 1 }] : [];
2297
+ }, { value: "//", cursor: 1, suggestion: { value: "//", description: "match" } });
2298
+ }
2299
+ Type.String.add(complete$5);
2300
+
2301
+ class Not extends Rule {
2302
+ constructor(criteria) {
2303
+ super();
2304
+ this.criteria = criteria;
2305
+ this.precedence = Not.precedence;
2306
+ this.class = "Not";
2307
+ }
2308
+ is(value) {
2309
+ return !this.criteria.is(value);
2310
+ }
2311
+ toString() {
2312
+ return `!${this.criteria.stringify(this.precedence)}`;
2313
+ }
2314
+ }
2315
+ Not.precedence = 90;
2316
+ function complete$4(tokens, type, baseObject) {
2317
+ return type && type.class != "object" && baseObject
2318
+ ? Completor.expressions(tokens, (tokens) => {
2319
+ return tokens[0].value != "!"
2320
+ ? []
2321
+ : Type.Completion.prepend("!", type.complete(tokens.slice(1), baseObject, type));
2322
+ }, { value: "!", cursor: 1, suggestion: { value: "!", description: "not" } })
2323
+ : [];
2324
+ }
2325
+ Type.String.add(complete$4);
2326
+ Type.Number.add(complete$4);
2327
+ Type.Boolean.add(complete$4);
2328
+ Type.Object.add(complete$4);
2329
+
2330
+ class Or extends Rule {
2331
+ constructor(criterias) {
2332
+ super();
2333
+ this.precedence = Or.precedence;
2334
+ this.class = "Or";
2335
+ this.criteria = criterias.reduce((r, c) => (c instanceof Or ? [...r, ...c.criteria] : [...r, c]), []);
2336
+ }
2337
+ is(value) {
2338
+ return this.criteria.some(c => c.is(value));
2339
+ }
2340
+ toString() {
2341
+ return this.criteria.map(c => c.stringify(this.precedence)).join(" | ");
2342
+ }
2343
+ }
2344
+ Or.precedence = 30;
2345
+ function complete$3(tokens, type, baseObject) {
2346
+ return Type.Completor.operators(tokens, (tokens) => (tokens && baseObject ? baseObject?.complete(tokens, undefined, undefined) : []), {
2347
+ value: " | ",
2348
+ suggestion: { value: "|", description: "or" },
2349
+ });
2350
+ }
2351
+ Type.Number.addArgument(complete$3);
2352
+
2353
+ class Source extends build.Utilities.BufferedEnumerator {
2354
+ constructor(tokens, errorHandler) {
2355
+ super(Array.isArray(tokens) ? new build.Utilities.ArrayEnumerator(tokens) : tokens);
2356
+ this.errorHandler = errorHandler;
2357
+ }
2358
+ clone(start = "(", end = ")") {
2359
+ let nestingCount = 0;
2360
+ return new Source(new build.Utilities.Enumerator(() => {
2361
+ let result;
2362
+ if (this.peekIs(start))
2363
+ nestingCount++;
2364
+ else if (this.peekIs(end))
2365
+ nestingCount--;
2366
+ if (nestingCount >= 0)
2367
+ result = this.fetch();
2368
+ return result;
2369
+ }), this);
2370
+ }
2371
+ peekIs(...needles) {
2372
+ return needles.every((needle, index) => {
2373
+ const peeked = this.peek(index);
2374
+ return peeked && peeked.value && Source.is(needle, peeked.value);
2375
+ });
2376
+ }
2377
+ fetchIf(...needles) {
2378
+ const result = [];
2379
+ if (this.peekIs(...needles))
2380
+ needles.forEach(_ => result.push(this.fetch()));
2381
+ return needles.length == 1
2382
+ ? result.length == 1
2383
+ ? result[0]
2384
+ : undefined
2385
+ : needles.length == result.length
2386
+ ? result
2387
+ : undefined;
2388
+ }
2389
+ mark() {
2390
+ return build.Utilities.Enumerable.from(build.Utilities.Enumerable.empty);
2391
+ }
2392
+ raise(message, level = build.Error.Level.Critical, type = "grammatical", region) {
2393
+ if (typeof message == "string") {
2394
+ if (!region && this.last)
2395
+ region = this.last.region;
2396
+ message = new build.Error.Message(message, level, type, region);
2397
+ }
2398
+ this.errorHandler.raise(message);
2399
+ }
2400
+ static is(needle, value) {
2401
+ return Array.isArray(needle)
2402
+ ? needle.some(n => Source.is(n, value))
2403
+ : typeof needle != "string"
2404
+ ? needle.test(value)
2405
+ : needle.startsWith("!") && needle != "!"
2406
+ ? !Source.is(needle.substring(1), value)
2407
+ : needle == "any"
2408
+ ? Source.symbol.every(s => s != value)
2409
+ : needle == "symbol"
2410
+ ? Source.symbol.some(s => s == value)
2411
+ : needle == "identifier"
2412
+ ? /[A-Za-z][A-Za-z0-9_]*/.test(value)
2413
+ : needle == value;
2414
+ }
2415
+ }
2416
+ Source.wildcard = ["*", "?"];
2417
+ Source.separator = ["(", ")", "."];
2418
+ Source.operator = ["!", "|"];
2419
+ Source.comparator = ["<", "<=", ">", ">=", ":"];
2420
+ Source.binaryOperator = [" * ", " + ", " - "];
2421
+ Source.symbol = [...Source.wildcard, ...Source.separator, ...Source.operator, ...Source.comparator];
2422
+
2423
+ function parse(source, handler) {
2424
+ if (typeof source == "string") {
2425
+ handler = handler || new build.Error.ConsoleHandler();
2426
+ const tokens = tokenize(source, handler).toArray();
2427
+ source = new Source(tokens, handler);
2428
+ }
2429
+ handler = handler instanceof Rule ? handler : undefined;
2430
+ const result = [];
2431
+ while (source.peek()) {
2432
+ if (source.fetchIf("|"))
2433
+ result[result.length - 1] = new Or([result[result.length - 1], parseNext(0, source)]);
2434
+ else
2435
+ result.push(parseNext(0, source));
2436
+ }
2437
+ return result.length == 1 ? result[0] : new And(result);
2438
+ }
2439
+ function parseNext(previous, source) {
2440
+ let result;
2441
+ const precedenceTest = typeof previous == "number" ? p => previous < p : p => previous.precedence > p;
2442
+ const left = typeof previous == "number" ? undefined : previous;
2443
+ for (const parser of parsers)
2444
+ if (precedenceTest(parser[1] || Number.MAX_SAFE_INTEGER)) {
2445
+ const r = parser[0](source, left);
2446
+ if (r) {
2447
+ result = parseNext(r, source);
2448
+ break;
2449
+ }
2450
+ }
2451
+ return result || left || new And([]);
2452
+ }
2453
+ const parsers = [];
2454
+ function add(parser, precedence) {
2455
+ parsers.push([parser, precedence]);
2456
+ }
2457
+
2458
+ function parseExpression(source, handler) {
2459
+ if (typeof source == "string") {
2460
+ handler = handler || new build.Error.ConsoleHandler();
2461
+ const tokens = tokenize(source, handler).toArray();
2462
+ source = new Source(tokens, handler);
2463
+ }
2464
+ handler = handler instanceof Expression ? handler : undefined;
2465
+ let result;
2466
+ let algebra = false;
2467
+ let comparator = false;
2468
+ while (!result != algebra && !comparator && source.peek()) {
2469
+ let i = 1;
2470
+ algebra = false;
2471
+ comparator = false;
2472
+ while (!algebra && !comparator && source.peek(i)) {
2473
+ algebra = Source.binaryOperator.some(c => source.peek(i)?.value == c);
2474
+ comparator = Source.comparator.some(c => source.peek(i)?.value == c);
2475
+ i++;
2476
+ }
2477
+ result = parseNextExpression(result ?? Number.MAX_SAFE_INTEGER, source);
2478
+ }
2479
+ if (!result)
2480
+ source.raise("Missing Expression");
2481
+ return result ?? new Value(NaN);
2482
+ }
2483
+ function parseNextExpression(previous, source) {
2484
+ let result;
2485
+ const left = typeof previous == "number" ? undefined : previous;
2486
+ for (const expressionParser of expressionParsers) {
2487
+ const r = expressionParser[0](source, previous);
2488
+ if (r) {
2489
+ result = r;
2490
+ break;
2491
+ }
2492
+ }
2493
+ return result || left;
2494
+ }
2495
+ const expressionParsers = [];
2496
+ function addExpression(expressionParser, precedence) {
2497
+ expressionParsers.push([expressionParser, precedence]);
2498
+ }
2499
+
2500
+ add(source => {
2501
+ const result = source.fetchIf(":", "every", "(") && new Every(parse(source.clone()));
2502
+ if (result && !source.fetchIf(")"))
2503
+ source.raise("Missing end of parenthesis.");
2504
+ return result;
2505
+ });
2506
+
2507
+ add(source => {
2508
+ const result = source.fetchIf(":", "some", "(") && new Some(parse(source.clone()));
2509
+ if (result && !source.fetchIf(")"))
2510
+ source.raise("Missing end of parenthesis.");
2511
+ return result;
2512
+ });
2513
+
2514
+ add(getAdder(parse));
2515
+ addExpression(getAdder(parseExpression));
2516
+ function getAdder(parser) {
2517
+ return (source) => {
2518
+ const result = source.fetchIf("(") && parser(source.clone());
2519
+ if (result && !source.fetchIf(")"))
2520
+ source.raise("Missing end of parenthesis.");
2521
+ return result;
2522
+ };
2523
+ }
2524
+
2525
+ add(source => {
2526
+ return source.fetchIf(">") && new GreaterThan(parseExpression(source));
2527
+ });
2528
+
2529
+ add(source => {
2530
+ return source.fetchIf(">=") && new GreaterThanOrEqual(parseExpression(source));
2531
+ });
2532
+
2533
+ add(source => {
2534
+ return source.fetchIf("<") && new LesserThan(parseExpression(source));
2535
+ });
2536
+
2537
+ add(source => {
2538
+ return source.fetchIf("<=") && new LesserThanOrEqual(parseExpression(source));
2539
+ });
2540
+
2541
+ add(source => source.fetchIf("!") && new Not(parseNext(Not.precedence, source)));
2542
+
2543
+ add(source => {
2544
+ const fetched = source.fetchIf("has", "(", "any", ")") || source.fetchIf(":", "has", "(", "any", ")");
2545
+ return fetched && new Has(fetched.length == 4 ? fetched[2].value : fetched[3].value);
2546
+ });
2547
+
2548
+ class Within extends Rule {
2549
+ constructor(value) {
2550
+ super();
2551
+ this.value = value;
2552
+ this.precedence = 85;
2553
+ this.class = "Within";
2554
+ }
2555
+ is(value) {
2556
+ return this.value.includes(value);
2557
+ }
2558
+ toString() {
2559
+ return `within(${this.value.join(", ")})`;
2560
+ }
2561
+ }
2562
+ function complete$2(tokens, type, baseObject) {
2563
+ return baseObject && type?.class
2564
+ ? Completor.functions(tokens, (tokens) => [], {
2565
+ value: "within()",
2566
+ cursor: 7,
2567
+ suggestion: { value: "within()" },
2568
+ })
2569
+ : [];
2570
+ }
2571
+ Type.String.add(complete$2);
2572
+ Type.Number.add(complete$2);
2573
+
2574
+ add(source => {
2575
+ const fetched = source.fetchIf(":", "within", "(");
2576
+ let parameters;
2577
+ if (fetched && source.peek()) {
2578
+ parameters = [source.fetch()?.value ?? ""];
2579
+ while (source.fetchIf(","))
2580
+ parameters.push(source.fetchIf("any")?.value ?? "");
2581
+ if (!source.fetchIf(")"))
2582
+ source.raise("Missing end of parenthesis.");
2583
+ }
2584
+ return fetched && parameters ? new Within(parameters) : undefined;
2585
+ });
2586
+
2587
+ add(source => {
2588
+ const peek = source.peek(3)?.value;
2589
+ const fetched = [")", ",", "("].find(s => s == peek) || source.peek(2)?.value == ")" ? source.fetchIf("identifier", "(") : undefined;
2590
+ let parameters;
2591
+ if (fetched && source.peek()) {
2592
+ parameters = [source.fetchIf(/[A-Za-z0-9_\.\-]+/)?.value ?? ""];
2593
+ while (source.fetchIf(","))
2594
+ parameters.push(source.fetchIf(/[A-Za-z0-9_\.\-]+/)?.value ?? "");
2595
+ if (!source.fetchIf(")"))
2596
+ source.raise("Missing end of parenthesis.");
2597
+ }
2598
+ return fetched && parameters ? new FunctionCall(fetched[0].value, parameters) : undefined;
2599
+ });
2600
+
2601
+ class Property extends Rule {
2602
+ constructor(name, criteria) {
2603
+ super();
2604
+ this.name = name;
2605
+ this.criteria = criteria;
2606
+ this.precedence = Property.precedence;
2607
+ this.class = "Property";
2608
+ this.symbol = ".";
2609
+ }
2610
+ is(value, object) {
2611
+ return !this.criteria
2612
+ ? value == object?.[this.name]
2613
+ : typeof value == "object"
2614
+ ? this.criteria.is(value[this.name], object ?? value)
2615
+ : this.criteria.is(value, object?.[this.name]);
2616
+ }
2617
+ toString() {
2618
+ return `${this.name}${this.criteria ? this.criteria.symbol ?? ":" : ""}${this.criteria?.stringify(this.precedence) ?? ""}`;
2619
+ }
2620
+ }
2621
+ Property.precedence = 80;
2622
+ function property(name, criteria, value) {
2623
+ const result = (Array.isArray(name) ? name : [name]).reduceRight((r, p) => new Property(p, r), create(criteria));
2624
+ return value ? result.is(value) : result;
2625
+ }
2626
+ add$1(criteria => typeof criteria == "object" && !(criteria instanceof Rule) && !Array.isArray(criteria)
2627
+ ? and(...Object.getOwnPropertyNames(criteria).map(p => property(p, criteria[p])))
2628
+ : undefined);
2629
+
2630
+ add(source => {
2631
+ const result = [];
2632
+ let fetched;
2633
+ while ((fetched = source.fetchIf("identifier", ".")))
2634
+ result.push(fetched[0].value);
2635
+ if (source.peekIs("identifier", Source.comparator) && (fetched = source.fetchIf("identifier")))
2636
+ result.push(fetched.value);
2637
+ return result.length > 0
2638
+ ? result.reduceRight((r, name) => new Property(name, r), source.peekIs("identifier") && (fetched = source.fetchIf("identifier"))
2639
+ ? new Property(fetched.value)
2640
+ : parseNext(Property.precedence, source))
2641
+ : undefined;
2642
+ });
2643
+
2644
+ add(source => {
2645
+ const fetched = source.fetchIf(":", "*", "any", "*") || source.fetchIf("*", "any", "*");
2646
+ return fetched && new Includes(fetched.length == 4 ? fetched[2].value : fetched[1].value);
2647
+ });
2648
+
2649
+ class StartsWith extends Rule {
2650
+ constructor(needle) {
2651
+ super();
2652
+ this.needle = needle;
2653
+ this.precedence = Number.MAX_SAFE_INTEGER;
2654
+ this.class = "StartsWith";
2655
+ }
2656
+ is(value) {
2657
+ return typeof value == "string" && value.startsWith(this.needle);
2658
+ }
2659
+ toString() {
2660
+ return `${this.needle}*`;
2661
+ }
2662
+ }
2663
+ function startsWith(needle, value) {
2664
+ const result = new StartsWith(needle);
2665
+ return value ? result.is(value) : result;
2666
+ }
2667
+ function complete$1(tokens, string) {
2668
+ return Completor.expressions(tokens, (tokens) => {
2669
+ return !tokens ||
2670
+ (tokens.length == 1 && tokens[0].value == "*") ||
2671
+ (tokens.length == 2 &&
2672
+ tokens[1].value == "*" &&
2673
+ string.value &&
2674
+ string.value.startsWith(tokens[0]?.value ?? ""))
2675
+ ? [Type.Completion.prepend("", { value: string?.value ?? "", suggestion: { value: string?.value ?? "" } }, "*")]
2676
+ : [];
2677
+ }, { value: "*", cursor: 0, suggestion: { value: "*", description: "startswith" } });
2678
+ }
2679
+ Type.String.add(complete$1);
2680
+
2681
+ add(source => {
2682
+ const fetched = source.fetchIf(":", "any", "*") || source.fetchIf("any", "*");
2683
+ return fetched && new StartsWith(fetched?.length == 3 ? fetched[1].value : fetched[0].value);
2684
+ });
2685
+
2686
+ add(source => {
2687
+ const fetched = source.fetchIf(":", "*", "any") || source.fetchIf("*", "any");
2688
+ return fetched && new EndsWith(fetched?.length == 3 ? fetched[2].value : fetched[1].value);
2689
+ });
2690
+
2691
+ class InfixOperator extends Expression {
2692
+ toString() {
2693
+ const symbol = this.symbol;
2694
+ return (this.left.stringify(InfixOperator.getPrecedence(symbol)) +
2695
+ ` ${symbol} ` +
2696
+ this.right.stringify(InfixOperator.getPrecedence(symbol)));
2697
+ }
2698
+ constructor(symbol, precedence, left, right) {
2699
+ super();
2700
+ this.precedence = precedence;
2701
+ this.left = left;
2702
+ this.right = right;
2703
+ this.class = "InfixOperator";
2704
+ this.symbol = symbol.replace(/ /g, "");
2705
+ }
2706
+ evaluate(criteria) {
2707
+ let result;
2708
+ switch (this.getSymbol()) {
2709
+ case "+":
2710
+ result = this.left.evaluate(criteria) + this.right.evaluate(criteria);
2711
+ break;
2712
+ case "-":
2713
+ result = this.left.evaluate(criteria) - this.right.evaluate(criteria);
2714
+ break;
2715
+ case "*":
2716
+ result = this.left.evaluate(criteria) * this.right.evaluate(criteria);
2717
+ break;
2718
+ default:
2719
+ result = NaN;
2720
+ break;
2721
+ }
2722
+ return result;
2723
+ }
2724
+ getSymbol() {
2725
+ return this.symbol;
2726
+ }
2727
+ stringify(precedence = 0) {
2728
+ let result = this.toString();
2729
+ if (this.precedence < precedence)
2730
+ result = "(" + result + ")";
2731
+ return result;
2732
+ }
2733
+ static getPrecedence(symbol) {
2734
+ let result;
2735
+ symbol = symbol?.replace(/ /g, "");
2736
+ switch (symbol) {
2737
+ case "+":
2738
+ result = 14;
2739
+ break;
2740
+ case "-":
2741
+ result = 15;
2742
+ break;
2743
+ case "*":
2744
+ result = 16;
2745
+ break;
2746
+ default:
2747
+ result = undefined;
2748
+ break;
2749
+ }
2750
+ return result;
2751
+ }
2752
+ static create(symbol, left, right) {
2753
+ let result;
2754
+ const fallback = new InfixOperator("+", 14, left, right);
2755
+ const precedence = InfixOperator.getPrecedence(symbol);
2756
+ if (precedence)
2757
+ result = new InfixOperator(symbol, precedence, left, right);
2758
+ return result || fallback;
2759
+ }
2760
+ }
2761
+ function complete(tokens, type, baseObject) {
2762
+ return [" + ", " - ", " * "]
2763
+ .map(s => ({ value: s, suggestion: { value: s } }))
2764
+ .map(c => Type.Completor.operators(tokens, (tokens) => (tokens ? baseObject.complete(tokens, undefined, type) : []), c))
2765
+ .reduce((result, element) => result.concat(element), []);
2766
+ }
2767
+ Type.Number.addArgument(complete);
2768
+
2769
+ addExpression((source, previous) => {
2770
+ let result;
2771
+ const symbol = source.peekIs(Source.binaryOperator) && source.fetch().value;
2772
+ let precedence;
2773
+ if (symbol && typeof previous == "object") {
2774
+ let right;
2775
+ let nextPrecedence;
2776
+ let i = 0;
2777
+ precedence = InfixOperator.getPrecedence(symbol);
2778
+ while (!nextPrecedence && source.peek(i)) {
2779
+ nextPrecedence =
2780
+ source.peek(i)?.value == "(" ? Number.MAX_SAFE_INTEGER : InfixOperator.getPrecedence(source.peek(i)?.value);
2781
+ i++;
2782
+ }
2783
+ if (nextPrecedence && precedence < nextPrecedence) {
2784
+ right = parseNextExpression(precedence, source);
2785
+ if (!right) {
2786
+ source.raise("Missing right hand side of " + symbol);
2787
+ }
2788
+ }
2789
+ else
2790
+ right = parseNextExpression(NaN, source);
2791
+ if ((nextPrecedence && precedence == nextPrecedence) || nextPrecedence == Number.MAX_SAFE_INTEGER) {
2792
+ result = parseNextExpression(new InfixOperator(symbol, precedence, previous, right), source);
2793
+ }
2794
+ else
2795
+ result = new InfixOperator(symbol, precedence, previous, right);
2796
+ }
2797
+ return result;
2798
+ });
2799
+
2800
+ addExpression((source, previous) => {
2801
+ const fetchedArray = [];
2802
+ let fetched;
2803
+ while ((fetched = source.fetchIf("identifier", ".")))
2804
+ fetchedArray.push(fetched[0].value);
2805
+ let result;
2806
+ if (fetchedArray.length == 0) {
2807
+ fetched = source.fetchIf("any", ".", "any") || source.fetchIf("any", ",", "any") || source.fetchIf("any");
2808
+ result =
2809
+ fetched &&
2810
+ (Array.isArray(fetched)
2811
+ ? new Value(+fetched.map(t => t.value.replace(",", ".")).join(""))
2812
+ : new Value(fetched.value));
2813
+ }
2814
+ else {
2815
+ fetched = source.fetchIf("identifier");
2816
+ const fetchedValue = new Value(fetched ? fetched.value : 0);
2817
+ result =
2818
+ fetchedArray.length > 0
2819
+ ? fetchedArray.reduceRight((r, name) => new Value(isNaN(+r) ? r : +r, name), fetchedValue)
2820
+ : undefined;
2821
+ }
2822
+ if (result && typeof previous == "number" && !isNaN(previous) && previous != Number.MAX_SAFE_INTEGER)
2823
+ result = parseNextExpression(result, source);
2824
+ return result;
2825
+ });
2826
+
2827
+ add(source => {
2828
+ let expression;
2829
+ if (source.fetchIf(":")) {
2830
+ let algebra = false;
2831
+ let comparator = false;
2832
+ let i = 1;
2833
+ while (!algebra && !comparator && source.peek(i)) {
2834
+ algebra = Source.binaryOperator.some(c => source.peek(i)?.value == c);
2835
+ comparator = Source.comparator.some(c => source.peek(i)?.value == c);
2836
+ i++;
2837
+ }
2838
+ if (algebra)
2839
+ expression = parseExpression(source);
2840
+ }
2841
+ const fetched = source.fetchIf("any");
2842
+ return expression ? new Is(expression) : fetched && new Is(fetched.value);
2843
+ });
2844
+
2845
+ add(source => {
2846
+ source.raise(`Ignoring unknown token "${source.fetch()}"`);
2847
+ return undefined;
2848
+ });
2849
+
2850
+ var replace;
2851
+ (function (replace) {
2852
+ function argument(value, argument) {
2853
+ let result = undefined;
2854
+ let index;
2855
+ const parameter = typeof value == "string" ? value : value.toString();
2856
+ if (argument &&
2857
+ argument.input &&
2858
+ argument.identifier &&
2859
+ argument?.input?.length > 0 &&
2860
+ argument?.identifier?.length > 0 &&
2861
+ argument.identifier.includes(parameter)) {
2862
+ index = argument.identifier.indexOf(parameter);
2863
+ result = isNaN(+argument.input[index]) ? argument.input[index] : +argument.input[index];
2864
+ }
2865
+ return result;
2866
+ }
2867
+ replace.argument = argument;
2868
+ })(replace || (replace = {}));
2869
+
2870
+ class Tuple extends Rule {
2871
+ constructor(criteria) {
2872
+ super();
2873
+ this.criteria = criteria;
2874
+ this.precedence = Number.MAX_SAFE_INTEGER;
2875
+ this.class = "Tuple";
2876
+ }
2877
+ is(value) {
2878
+ return this.criteria.length == value.length && this.criteria.every((c, index) => c.is(value[index]));
2879
+ }
2880
+ toString() {
2881
+ return `[${this.criteria.map(c => c.toString()).join(", ")}]`;
2882
+ }
2883
+ }
2884
+ add$1(criteria => (Array.isArray(criteria) ? new Tuple(criteria.map(create)) : undefined));
2885
+
2886
+ exports.and = and;
2887
+ exports.create = create;
2888
+ exports.endsWith = endsWith;
2889
+ exports.greaterThan = greaterThan;
2890
+ exports.includes = includes;
2891
+ exports.lesserThan = lesserThan;
2892
+ exports.parse = parse;
2893
+ exports.startsWith = startsWith;
2894
+
2895
+ //# sourceMappingURL=Tuple-0ed9d0da.js.map