@rhinostone/swig 2.7.2 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1519 @@
1
+ /*! Swig v2.8.0 | https://github.com/gina-io/swig | @license https://github.com/gina-io/swig/blob/master/LICENSE */
2
+ /*! DateZ (c) 2011 Tomo Universalis | @license https://github.com/tomoio/DateZ/blob/master/LISENCE */
3
+ (() => {
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __commonJS = (cb, mod) => function __require() {
6
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
7
+ };
8
+
9
+ // packages/swig-core/lib/security.js
10
+ var require_security = __commonJS({
11
+ "packages/swig-core/lib/security.js"(exports) {
12
+ exports.dangerousProps = ["__proto__", "constructor", "prototype"];
13
+ }
14
+ });
15
+
16
+ // packages/swig-core/lib/utils.js
17
+ var require_utils = __commonJS({
18
+ "packages/swig-core/lib/utils.js"(exports) {
19
+ var security = require_security();
20
+ var isArray;
21
+ exports.strip = function(input) {
22
+ return input.replace(/^\s+|\s+$/g, "");
23
+ };
24
+ exports.startsWith = function(str, prefix) {
25
+ return str.indexOf(prefix) === 0;
26
+ };
27
+ exports.endsWith = function(str, suffix) {
28
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
29
+ };
30
+ exports.each = function(obj, fn) {
31
+ var i, l;
32
+ if (isArray(obj)) {
33
+ i = 0;
34
+ l = obj.length;
35
+ for (i; i < l; i += 1) {
36
+ if (fn(obj[i], i, obj) === false) {
37
+ break;
38
+ }
39
+ }
40
+ } else {
41
+ for (i in obj) {
42
+ if (obj.hasOwnProperty(i)) {
43
+ if (fn(obj[i], i, obj) === false) {
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return obj;
50
+ };
51
+ exports.isArray = isArray = Array.hasOwnProperty("isArray") ? Array.isArray : function(obj) {
52
+ return obj ? typeof obj === "object" && Object.prototype.toString.call(obj).indexOf() !== -1 : false;
53
+ };
54
+ exports.some = function(obj, fn) {
55
+ var i = 0, result, l;
56
+ if (isArray(obj)) {
57
+ l = obj.length;
58
+ for (i; i < l; i += 1) {
59
+ result = fn(obj[i], i, obj);
60
+ if (result) {
61
+ break;
62
+ }
63
+ }
64
+ } else {
65
+ exports.each(obj, function(value, index) {
66
+ result = fn(value, index, obj);
67
+ return !result;
68
+ });
69
+ }
70
+ return !!result;
71
+ };
72
+ exports.map = function(obj, fn) {
73
+ var i = 0, result = [], l;
74
+ if (isArray(obj)) {
75
+ l = obj.length;
76
+ for (i; i < l; i += 1) {
77
+ result[i] = fn(obj[i], i);
78
+ }
79
+ } else {
80
+ for (i in obj) {
81
+ if (obj.hasOwnProperty(i)) {
82
+ result[i] = fn(obj[i], i);
83
+ }
84
+ }
85
+ }
86
+ return result;
87
+ };
88
+ exports.extend = function() {
89
+ var args = arguments, target = args[0], objs = args.length > 1 ? Array.prototype.slice.call(args, 1) : [], i = 0, l = objs.length, key, obj;
90
+ for (i; i < l; i += 1) {
91
+ obj = objs[i] || {};
92
+ for (key in obj) {
93
+ if (obj.hasOwnProperty(key)) {
94
+ target[key] = obj[key];
95
+ }
96
+ }
97
+ }
98
+ return target;
99
+ };
100
+ exports.keys = function(obj) {
101
+ if (!obj) {
102
+ return [];
103
+ }
104
+ if (Object.keys) {
105
+ return Object.keys(obj);
106
+ }
107
+ return exports.map(obj, function(v, k) {
108
+ return k;
109
+ });
110
+ };
111
+ exports.throwError = function(message, line, file) {
112
+ if (line) {
113
+ message += " on line " + line;
114
+ }
115
+ if (file) {
116
+ message += " in file " + file;
117
+ }
118
+ throw new Error(message + ".");
119
+ };
120
+ exports.range = function(from, to) {
121
+ var out = [], i, fc, tc;
122
+ if (typeof from === "number" && typeof to === "number") {
123
+ if (from <= to) {
124
+ for (i = from; i <= to; i += 1) {
125
+ out.push(i);
126
+ }
127
+ } else {
128
+ for (i = from; i >= to; i -= 1) {
129
+ out.push(i);
130
+ }
131
+ }
132
+ return out;
133
+ }
134
+ if (typeof from === "string" && typeof to === "string" && from.length === 1 && to.length === 1) {
135
+ fc = from.charCodeAt(0);
136
+ tc = to.charCodeAt(0);
137
+ if (fc <= tc) {
138
+ for (i = fc; i <= tc; i += 1) {
139
+ out.push(String.fromCharCode(i));
140
+ }
141
+ } else {
142
+ for (i = fc; i >= tc; i -= 1) {
143
+ out.push(String.fromCharCode(i));
144
+ }
145
+ }
146
+ return out;
147
+ }
148
+ return out;
149
+ };
150
+ exports.slice = function(obj, start, stop, step) {
151
+ var isString = typeof obj === "string", length, lower, upper, s, e, result = [], i;
152
+ function toInt(n) {
153
+ n = Number(n);
154
+ if (isNaN(n)) {
155
+ return NaN;
156
+ }
157
+ return n < 0 ? Math.ceil(n) : Math.floor(n);
158
+ }
159
+ function clamp(v, dflt) {
160
+ if (v === null || v === void 0) {
161
+ return dflt;
162
+ }
163
+ v = toInt(v);
164
+ if (isNaN(v)) {
165
+ return dflt;
166
+ }
167
+ if (v < 0) {
168
+ v += length;
169
+ if (v < lower) {
170
+ v = lower;
171
+ }
172
+ } else if (v > upper) {
173
+ v = upper;
174
+ }
175
+ return v;
176
+ }
177
+ if (obj === null || obj === void 0 || typeof obj.length !== "number") {
178
+ return isString ? "" : [];
179
+ }
180
+ length = obj.length;
181
+ if (step === null || step === void 0) {
182
+ step = 1;
183
+ } else {
184
+ step = toInt(step);
185
+ if (isNaN(step) || step === 0) {
186
+ step = 1;
187
+ }
188
+ }
189
+ if (step < 0) {
190
+ lower = -1;
191
+ upper = length - 1;
192
+ } else {
193
+ lower = 0;
194
+ upper = length;
195
+ }
196
+ s = clamp(start, step < 0 ? upper : lower);
197
+ e = clamp(stop, step < 0 ? lower : upper);
198
+ if (step > 0) {
199
+ for (i = s; i < e; i += step) {
200
+ result.push(obj[i]);
201
+ }
202
+ } else {
203
+ for (i = s; i > e; i += step) {
204
+ result.push(obj[i]);
205
+ }
206
+ }
207
+ return isString ? result.join("") : result;
208
+ };
209
+ exports.coerceOutput = function(v) {
210
+ return v === null || v === void 0 ? "" : v;
211
+ };
212
+ function resolveSeg(obj, seg) {
213
+ var val;
214
+ if (obj === null || obj === void 0) {
215
+ return void 0;
216
+ }
217
+ if (security.dangerousProps.indexOf(seg) !== -1) {
218
+ return void 0;
219
+ }
220
+ val = obj[seg];
221
+ if (typeof val === "function") {
222
+ if (val.alters_data === true) {
223
+ return void 0;
224
+ }
225
+ if (val.do_not_call_in_templates === true) {
226
+ return val;
227
+ }
228
+ try {
229
+ return val.call(obj);
230
+ } catch (e) {
231
+ return void 0;
232
+ }
233
+ }
234
+ return val;
235
+ }
236
+ exports.resolve = function(obj, path) {
237
+ var cur = obj, i;
238
+ for (i = 0; i < path.length; i += 1) {
239
+ cur = resolveSeg(cur, path[i]);
240
+ if (cur === null || cur === void 0) {
241
+ return cur;
242
+ }
243
+ }
244
+ return cur;
245
+ };
246
+ }
247
+ });
248
+
249
+ // packages/swig-core/lib/cache.js
250
+ var require_cache = __commonJS({
251
+ "packages/swig-core/lib/cache.js"(exports) {
252
+ exports.shouldCache = function(options, engineCache) {
253
+ options = options || {};
254
+ return options.hasOwnProperty("cache") && !options.cache || !engineCache;
255
+ };
256
+ exports.cacheGet = function(key, options, engineCache, memoryStore) {
257
+ if (exports.shouldCache(options, engineCache)) {
258
+ return;
259
+ }
260
+ if (engineCache === "memory") {
261
+ return Object.prototype.hasOwnProperty.call(memoryStore, key) ? memoryStore[key] : void 0;
262
+ }
263
+ return engineCache.get(key);
264
+ };
265
+ exports.cacheSet = function(key, options, val, engineCache, memoryStore) {
266
+ if (exports.shouldCache(options, engineCache)) {
267
+ return;
268
+ }
269
+ if (engineCache === "memory") {
270
+ memoryStore[key] = val;
271
+ return;
272
+ }
273
+ engineCache.set(key, val);
274
+ };
275
+ }
276
+ });
277
+
278
+ // node_modules/path-browserify/index.js
279
+ var require_path_browserify = __commonJS({
280
+ "node_modules/path-browserify/index.js"(exports, module) {
281
+ "use strict";
282
+ function assertPath(path) {
283
+ if (typeof path !== "string") {
284
+ throw new TypeError("Path must be a string. Received " + JSON.stringify(path));
285
+ }
286
+ }
287
+ function normalizeStringPosix(path, allowAboveRoot) {
288
+ var res = "";
289
+ var lastSegmentLength = 0;
290
+ var lastSlash = -1;
291
+ var dots = 0;
292
+ var code;
293
+ for (var i = 0; i <= path.length; ++i) {
294
+ if (i < path.length)
295
+ code = path.charCodeAt(i);
296
+ else if (code === 47)
297
+ break;
298
+ else
299
+ code = 47;
300
+ if (code === 47) {
301
+ if (lastSlash === i - 1 || dots === 1) {
302
+ } else if (lastSlash !== i - 1 && dots === 2) {
303
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 || res.charCodeAt(res.length - 2) !== 46) {
304
+ if (res.length > 2) {
305
+ var lastSlashIndex = res.lastIndexOf("/");
306
+ if (lastSlashIndex !== res.length - 1) {
307
+ if (lastSlashIndex === -1) {
308
+ res = "";
309
+ lastSegmentLength = 0;
310
+ } else {
311
+ res = res.slice(0, lastSlashIndex);
312
+ lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
313
+ }
314
+ lastSlash = i;
315
+ dots = 0;
316
+ continue;
317
+ }
318
+ } else if (res.length === 2 || res.length === 1) {
319
+ res = "";
320
+ lastSegmentLength = 0;
321
+ lastSlash = i;
322
+ dots = 0;
323
+ continue;
324
+ }
325
+ }
326
+ if (allowAboveRoot) {
327
+ if (res.length > 0)
328
+ res += "/..";
329
+ else
330
+ res = "..";
331
+ lastSegmentLength = 2;
332
+ }
333
+ } else {
334
+ if (res.length > 0)
335
+ res += "/" + path.slice(lastSlash + 1, i);
336
+ else
337
+ res = path.slice(lastSlash + 1, i);
338
+ lastSegmentLength = i - lastSlash - 1;
339
+ }
340
+ lastSlash = i;
341
+ dots = 0;
342
+ } else if (code === 46 && dots !== -1) {
343
+ ++dots;
344
+ } else {
345
+ dots = -1;
346
+ }
347
+ }
348
+ return res;
349
+ }
350
+ function _format(sep, pathObject) {
351
+ var dir = pathObject.dir || pathObject.root;
352
+ var base = pathObject.base || (pathObject.name || "") + (pathObject.ext || "");
353
+ if (!dir) {
354
+ return base;
355
+ }
356
+ if (dir === pathObject.root) {
357
+ return dir + base;
358
+ }
359
+ return dir + sep + base;
360
+ }
361
+ var posix = {
362
+ // path.resolve([from ...], to)
363
+ resolve: function resolve() {
364
+ var resolvedPath = "";
365
+ var resolvedAbsolute = false;
366
+ var cwd;
367
+ for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
368
+ var path;
369
+ if (i >= 0)
370
+ path = arguments[i];
371
+ else {
372
+ if (cwd === void 0)
373
+ cwd = process.cwd();
374
+ path = cwd;
375
+ }
376
+ assertPath(path);
377
+ if (path.length === 0) {
378
+ continue;
379
+ }
380
+ resolvedPath = path + "/" + resolvedPath;
381
+ resolvedAbsolute = path.charCodeAt(0) === 47;
382
+ }
383
+ resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);
384
+ if (resolvedAbsolute) {
385
+ if (resolvedPath.length > 0)
386
+ return "/" + resolvedPath;
387
+ else
388
+ return "/";
389
+ } else if (resolvedPath.length > 0) {
390
+ return resolvedPath;
391
+ } else {
392
+ return ".";
393
+ }
394
+ },
395
+ normalize: function normalize(path) {
396
+ assertPath(path);
397
+ if (path.length === 0) return ".";
398
+ var isAbsolute = path.charCodeAt(0) === 47;
399
+ var trailingSeparator = path.charCodeAt(path.length - 1) === 47;
400
+ path = normalizeStringPosix(path, !isAbsolute);
401
+ if (path.length === 0 && !isAbsolute) path = ".";
402
+ if (path.length > 0 && trailingSeparator) path += "/";
403
+ if (isAbsolute) return "/" + path;
404
+ return path;
405
+ },
406
+ isAbsolute: function isAbsolute(path) {
407
+ assertPath(path);
408
+ return path.length > 0 && path.charCodeAt(0) === 47;
409
+ },
410
+ join: function join() {
411
+ if (arguments.length === 0)
412
+ return ".";
413
+ var joined;
414
+ for (var i = 0; i < arguments.length; ++i) {
415
+ var arg = arguments[i];
416
+ assertPath(arg);
417
+ if (arg.length > 0) {
418
+ if (joined === void 0)
419
+ joined = arg;
420
+ else
421
+ joined += "/" + arg;
422
+ }
423
+ }
424
+ if (joined === void 0)
425
+ return ".";
426
+ return posix.normalize(joined);
427
+ },
428
+ relative: function relative(from, to) {
429
+ assertPath(from);
430
+ assertPath(to);
431
+ if (from === to) return "";
432
+ from = posix.resolve(from);
433
+ to = posix.resolve(to);
434
+ if (from === to) return "";
435
+ var fromStart = 1;
436
+ for (; fromStart < from.length; ++fromStart) {
437
+ if (from.charCodeAt(fromStart) !== 47)
438
+ break;
439
+ }
440
+ var fromEnd = from.length;
441
+ var fromLen = fromEnd - fromStart;
442
+ var toStart = 1;
443
+ for (; toStart < to.length; ++toStart) {
444
+ if (to.charCodeAt(toStart) !== 47)
445
+ break;
446
+ }
447
+ var toEnd = to.length;
448
+ var toLen = toEnd - toStart;
449
+ var length = fromLen < toLen ? fromLen : toLen;
450
+ var lastCommonSep = -1;
451
+ var i = 0;
452
+ for (; i <= length; ++i) {
453
+ if (i === length) {
454
+ if (toLen > length) {
455
+ if (to.charCodeAt(toStart + i) === 47) {
456
+ return to.slice(toStart + i + 1);
457
+ } else if (i === 0) {
458
+ return to.slice(toStart + i);
459
+ }
460
+ } else if (fromLen > length) {
461
+ if (from.charCodeAt(fromStart + i) === 47) {
462
+ lastCommonSep = i;
463
+ } else if (i === 0) {
464
+ lastCommonSep = 0;
465
+ }
466
+ }
467
+ break;
468
+ }
469
+ var fromCode = from.charCodeAt(fromStart + i);
470
+ var toCode = to.charCodeAt(toStart + i);
471
+ if (fromCode !== toCode)
472
+ break;
473
+ else if (fromCode === 47)
474
+ lastCommonSep = i;
475
+ }
476
+ var out = "";
477
+ for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
478
+ if (i === fromEnd || from.charCodeAt(i) === 47) {
479
+ if (out.length === 0)
480
+ out += "..";
481
+ else
482
+ out += "/..";
483
+ }
484
+ }
485
+ if (out.length > 0)
486
+ return out + to.slice(toStart + lastCommonSep);
487
+ else {
488
+ toStart += lastCommonSep;
489
+ if (to.charCodeAt(toStart) === 47)
490
+ ++toStart;
491
+ return to.slice(toStart);
492
+ }
493
+ },
494
+ _makeLong: function _makeLong(path) {
495
+ return path;
496
+ },
497
+ dirname: function dirname(path) {
498
+ assertPath(path);
499
+ if (path.length === 0) return ".";
500
+ var code = path.charCodeAt(0);
501
+ var hasRoot = code === 47;
502
+ var end = -1;
503
+ var matchedSlash = true;
504
+ for (var i = path.length - 1; i >= 1; --i) {
505
+ code = path.charCodeAt(i);
506
+ if (code === 47) {
507
+ if (!matchedSlash) {
508
+ end = i;
509
+ break;
510
+ }
511
+ } else {
512
+ matchedSlash = false;
513
+ }
514
+ }
515
+ if (end === -1) return hasRoot ? "/" : ".";
516
+ if (hasRoot && end === 1) return "//";
517
+ return path.slice(0, end);
518
+ },
519
+ basename: function basename(path, ext) {
520
+ if (ext !== void 0 && typeof ext !== "string") throw new TypeError('"ext" argument must be a string');
521
+ assertPath(path);
522
+ var start = 0;
523
+ var end = -1;
524
+ var matchedSlash = true;
525
+ var i;
526
+ if (ext !== void 0 && ext.length > 0 && ext.length <= path.length) {
527
+ if (ext.length === path.length && ext === path) return "";
528
+ var extIdx = ext.length - 1;
529
+ var firstNonSlashEnd = -1;
530
+ for (i = path.length - 1; i >= 0; --i) {
531
+ var code = path.charCodeAt(i);
532
+ if (code === 47) {
533
+ if (!matchedSlash) {
534
+ start = i + 1;
535
+ break;
536
+ }
537
+ } else {
538
+ if (firstNonSlashEnd === -1) {
539
+ matchedSlash = false;
540
+ firstNonSlashEnd = i + 1;
541
+ }
542
+ if (extIdx >= 0) {
543
+ if (code === ext.charCodeAt(extIdx)) {
544
+ if (--extIdx === -1) {
545
+ end = i;
546
+ }
547
+ } else {
548
+ extIdx = -1;
549
+ end = firstNonSlashEnd;
550
+ }
551
+ }
552
+ }
553
+ }
554
+ if (start === end) end = firstNonSlashEnd;
555
+ else if (end === -1) end = path.length;
556
+ return path.slice(start, end);
557
+ } else {
558
+ for (i = path.length - 1; i >= 0; --i) {
559
+ if (path.charCodeAt(i) === 47) {
560
+ if (!matchedSlash) {
561
+ start = i + 1;
562
+ break;
563
+ }
564
+ } else if (end === -1) {
565
+ matchedSlash = false;
566
+ end = i + 1;
567
+ }
568
+ }
569
+ if (end === -1) return "";
570
+ return path.slice(start, end);
571
+ }
572
+ },
573
+ extname: function extname(path) {
574
+ assertPath(path);
575
+ var startDot = -1;
576
+ var startPart = 0;
577
+ var end = -1;
578
+ var matchedSlash = true;
579
+ var preDotState = 0;
580
+ for (var i = path.length - 1; i >= 0; --i) {
581
+ var code = path.charCodeAt(i);
582
+ if (code === 47) {
583
+ if (!matchedSlash) {
584
+ startPart = i + 1;
585
+ break;
586
+ }
587
+ continue;
588
+ }
589
+ if (end === -1) {
590
+ matchedSlash = false;
591
+ end = i + 1;
592
+ }
593
+ if (code === 46) {
594
+ if (startDot === -1)
595
+ startDot = i;
596
+ else if (preDotState !== 1)
597
+ preDotState = 1;
598
+ } else if (startDot !== -1) {
599
+ preDotState = -1;
600
+ }
601
+ }
602
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
603
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
604
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
605
+ return "";
606
+ }
607
+ return path.slice(startDot, end);
608
+ },
609
+ format: function format(pathObject) {
610
+ if (pathObject === null || typeof pathObject !== "object") {
611
+ throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
612
+ }
613
+ return _format("/", pathObject);
614
+ },
615
+ parse: function parse(path) {
616
+ assertPath(path);
617
+ var ret = { root: "", dir: "", base: "", ext: "", name: "" };
618
+ if (path.length === 0) return ret;
619
+ var code = path.charCodeAt(0);
620
+ var isAbsolute = code === 47;
621
+ var start;
622
+ if (isAbsolute) {
623
+ ret.root = "/";
624
+ start = 1;
625
+ } else {
626
+ start = 0;
627
+ }
628
+ var startDot = -1;
629
+ var startPart = 0;
630
+ var end = -1;
631
+ var matchedSlash = true;
632
+ var i = path.length - 1;
633
+ var preDotState = 0;
634
+ for (; i >= start; --i) {
635
+ code = path.charCodeAt(i);
636
+ if (code === 47) {
637
+ if (!matchedSlash) {
638
+ startPart = i + 1;
639
+ break;
640
+ }
641
+ continue;
642
+ }
643
+ if (end === -1) {
644
+ matchedSlash = false;
645
+ end = i + 1;
646
+ }
647
+ if (code === 46) {
648
+ if (startDot === -1) startDot = i;
649
+ else if (preDotState !== 1) preDotState = 1;
650
+ } else if (startDot !== -1) {
651
+ preDotState = -1;
652
+ }
653
+ }
654
+ if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
655
+ preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
656
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
657
+ if (end !== -1) {
658
+ if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);
659
+ else ret.base = ret.name = path.slice(startPart, end);
660
+ }
661
+ } else {
662
+ if (startPart === 0 && isAbsolute) {
663
+ ret.name = path.slice(1, startDot);
664
+ ret.base = path.slice(1, end);
665
+ } else {
666
+ ret.name = path.slice(startPart, startDot);
667
+ ret.base = path.slice(startPart, end);
668
+ }
669
+ ret.ext = path.slice(startDot, end);
670
+ }
671
+ if (startPart > 0) ret.dir = path.slice(0, startPart - 1);
672
+ else if (isAbsolute) ret.dir = "/";
673
+ return ret;
674
+ },
675
+ sep: "/",
676
+ delimiter: ":",
677
+ win32: null,
678
+ posix: null
679
+ };
680
+ posix.posix = posix;
681
+ module.exports = posix;
682
+ }
683
+ });
684
+
685
+ // packages/swig-core/lib/loaders/memory.js
686
+ var require_memory = __commonJS({
687
+ "packages/swig-core/lib/loaders/memory.js"(exports, module) {
688
+ var path = require_path_browserify();
689
+ var utils = require_utils();
690
+ module.exports = function(mapping, basepath) {
691
+ var ret = {};
692
+ basepath = basepath ? path.normalize(basepath) : null;
693
+ ret.resolve = function(to, from) {
694
+ if (basepath) {
695
+ if (/^\.\.([\\/]|$)/.test(path.normalize(to))) {
696
+ utils.throwError('Template "' + to + '" resolves outside the loader root "' + basepath + '".');
697
+ }
698
+ from = basepath;
699
+ } else {
700
+ from = from ? path.dirname(from) : "/";
701
+ }
702
+ return path.resolve(from, to);
703
+ };
704
+ ret.load = function(pathname, cb) {
705
+ var src, paths;
706
+ paths = [pathname, pathname.replace(/^(\/|\\)/, "")];
707
+ src = mapping[paths[0]] || mapping[paths[1]];
708
+ if (!src) {
709
+ utils.throwError('Unable to find template "' + pathname + '".');
710
+ }
711
+ if (cb) {
712
+ cb(null, src);
713
+ return;
714
+ }
715
+ return src;
716
+ };
717
+ return ret;
718
+ };
719
+ }
720
+ });
721
+
722
+ // packages/swig-core/lib/runtime.js
723
+ var require_runtime = __commonJS({
724
+ "packages/swig-core/lib/runtime.js"(exports) {
725
+ var utils = require_utils();
726
+ var cache = require_cache();
727
+ var memoryLoader = require_memory();
728
+ function efn() {
729
+ return "";
730
+ }
731
+ function noCompiler(what) {
732
+ return new Error(what + " \u2014 the runtime-only build has no compiler. Precompile with the swig CLI (swig compile --recursive --register) and register the output, or load the full swig bundle instead.");
733
+ }
734
+ exports.create = function(frontend) {
735
+ var filters = utils.extend({}, frontend.filters), self2 = {};
736
+ function validateRuntimeOptions(options) {
737
+ if (!options) {
738
+ return;
739
+ }
740
+ if (options.hasOwnProperty("loader") && options.loader) {
741
+ if (!options.loader.load || !options.loader.resolve) {
742
+ throw new Error("Invalid loader option " + JSON.stringify(options.loader) + " found. Expected { load: function (pathname, cb) { ... }, resolve: function (to, from) { ... } }.");
743
+ }
744
+ }
745
+ if (options.hasOwnProperty("cache") && options.cache && options.cache !== "memory") {
746
+ if (!options.cache.get || !options.cache.set) {
747
+ throw new Error("Invalid cache option " + JSON.stringify(options.cache) + ' found. Expected "memory" or { get: function (key) { ... }, set: function (key, value) { ... } }.');
748
+ }
749
+ }
750
+ }
751
+ validateRuntimeOptions(frontend.defaults);
752
+ self2.options = utils.extend({
753
+ autoescape: true,
754
+ locals: {},
755
+ cache: "memory",
756
+ loader: memoryLoader({}, "/")
757
+ }, frontend.defaults || {});
758
+ self2.cache = {};
759
+ self2.extensions = {};
760
+ function getLocals(options) {
761
+ if (!options || !options.locals) {
762
+ return self2.options.locals;
763
+ }
764
+ return utils.extend({}, self2.options.locals, options.locals);
765
+ }
766
+ function cacheGet(key, options) {
767
+ return cache.cacheGet(key, options, self2.options.cache, self2.cache);
768
+ }
769
+ function cacheSet(key, options, val) {
770
+ cache.cacheSet(key, options, val, self2.options.cache, self2.cache);
771
+ }
772
+ self2.setDefaults = function(options) {
773
+ validateRuntimeOptions(options);
774
+ self2.options = utils.extend(self2.options, options || {});
775
+ };
776
+ self2.invalidateCache = function() {
777
+ if (self2.options.cache === "memory") {
778
+ self2.cache = {};
779
+ }
780
+ };
781
+ self2.setFilter = function(name, method) {
782
+ if (typeof method !== "function") {
783
+ throw new Error('Filter "' + name + '" is not a valid function.');
784
+ }
785
+ filters[name] = method;
786
+ };
787
+ self2.setExtension = function(name, object) {
788
+ self2.extensions[name] = object;
789
+ };
790
+ function buildRegistered(fn) {
791
+ var context = getLocals(), contextLength = utils.keys(context).length;
792
+ return function registered(locals, blocks) {
793
+ var lcls;
794
+ if (locals && contextLength) {
795
+ lcls = utils.extend({}, context, locals);
796
+ } else if (locals && !contextLength) {
797
+ lcls = locals;
798
+ } else if (!locals && contextLength) {
799
+ lcls = context;
800
+ } else {
801
+ lcls = {};
802
+ }
803
+ return fn(self2, lcls, filters, utils, efn, blocks);
804
+ };
805
+ }
806
+ function validateRegistration(path, fn) {
807
+ if (typeof path !== "string" || !path.length) {
808
+ throw new Error("Template registration path must be a non-empty string.");
809
+ }
810
+ if (typeof fn !== "function") {
811
+ throw new Error('Registered template for "' + path + '" is not a function. Pass a pre-compiled template function.');
812
+ }
813
+ if (!self2.options.cache) {
814
+ throw new Error("Cannot register templates while caching is disabled (cache: " + self2.options.cache + "). The registry is the compile cache.");
815
+ }
816
+ }
817
+ self2.register = function(path, fn) {
818
+ validateRegistration(path, fn);
819
+ cacheSet(self2.options.loader.resolve(path), {}, buildRegistered(fn));
820
+ return self2;
821
+ };
822
+ self2.registerBundle = function(map) {
823
+ var entries = [];
824
+ if (!map || typeof map !== "object") {
825
+ throw new Error("Template bundle must be an object of { path: templateFn } pairs.");
826
+ }
827
+ utils.each(map, function(fn, path) {
828
+ entries.push([path, fn]);
829
+ validateRegistration(path, fn);
830
+ });
831
+ utils.each(entries, function(entry) {
832
+ self2.register(entry[0], entry[1]);
833
+ });
834
+ return self2;
835
+ };
836
+ self2.run = function(tpl, locals, filepath) {
837
+ var context = getLocals({ locals });
838
+ if (filepath) {
839
+ cacheSet(self2.options.loader.resolve(filepath), {}, buildRegistered(tpl));
840
+ }
841
+ return tpl(self2, context, filters, utils, efn);
842
+ };
843
+ self2.compileFile = function(pathname, options, cb) {
844
+ var resolved, cached, err;
845
+ if (!options) {
846
+ options = {};
847
+ }
848
+ resolved = self2.options.loader.resolve(pathname, options.resolveFrom);
849
+ cached = cacheGet(resolved, options);
850
+ if (cached) {
851
+ if (cb) {
852
+ cb(null, cached);
853
+ return;
854
+ }
855
+ return cached;
856
+ }
857
+ err = noCompiler('Template "' + pathname + '" is not registered');
858
+ if (cb) {
859
+ cb(err);
860
+ return;
861
+ }
862
+ throw err;
863
+ };
864
+ self2.renderFile = function(pathName, locals, cb) {
865
+ if (cb) {
866
+ self2.compileFile(pathName, {}, function(err, fn) {
867
+ var result;
868
+ if (err) {
869
+ cb(err);
870
+ return;
871
+ }
872
+ try {
873
+ result = fn(locals);
874
+ } catch (err2) {
875
+ cb(err2);
876
+ return;
877
+ }
878
+ cb(null, result);
879
+ });
880
+ return;
881
+ }
882
+ return self2.compileFile(pathName)(locals);
883
+ };
884
+ self2.getTemplate = function(pathname) {
885
+ return Promise.reject(noCompiler('Async template loading of "' + pathname + '" is unavailable'));
886
+ };
887
+ self2.parse = function() {
888
+ throw noCompiler("parse() is unavailable");
889
+ };
890
+ self2.parseFile = function() {
891
+ throw noCompiler("parseFile() is unavailable");
892
+ };
893
+ self2.precompile = function() {
894
+ throw noCompiler("precompile() is unavailable");
895
+ };
896
+ self2.compile = function() {
897
+ throw noCompiler("compile() is unavailable");
898
+ };
899
+ self2.render = function() {
900
+ throw noCompiler("render(source) is unavailable");
901
+ };
902
+ self2.setTag = function() {
903
+ throw noCompiler("setTag() is parse-time machinery and is unavailable");
904
+ };
905
+ self2.renderFileAsync = function() {
906
+ throw noCompiler("renderFileAsync() is unavailable");
907
+ };
908
+ self2.compileFileAsync = function() {
909
+ throw noCompiler("compileFileAsync() is unavailable");
910
+ };
911
+ return self2;
912
+ };
913
+ }
914
+ });
915
+
916
+ // lib/utils.js
917
+ var require_utils2 = __commonJS({
918
+ "lib/utils.js"(exports, module) {
919
+ module.exports = require_utils();
920
+ }
921
+ });
922
+
923
+ // packages/swig-core/lib/dateformatter.js
924
+ var require_dateformatter = __commonJS({
925
+ "packages/swig-core/lib/dateformatter.js"(exports) {
926
+ var utils = require_utils();
927
+ var _months = {
928
+ full: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
929
+ abbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
930
+ };
931
+ var _days = {
932
+ full: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
933
+ abbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
934
+ alt: { "-1": "Yesterday", 0: "Today", 1: "Tomorrow" }
935
+ };
936
+ exports.tzOffset = 0;
937
+ exports.DateZ = function() {
938
+ var members = {
939
+ "default": ["getUTCDate", "getUTCDay", "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes", "getUTCMonth", "getUTCSeconds", "toISOString", "toGMTString", "toUTCString", "valueOf", "getTime"],
940
+ z: ["getDate", "getDay", "getFullYear", "getHours", "getMilliseconds", "getMinutes", "getMonth", "getSeconds", "getYear", "toDateString", "toLocaleDateString", "toLocaleTimeString"]
941
+ }, d = this;
942
+ d.date = d.dateZ = arguments.length > 1 ? new Date(Date.UTC.apply(Date, arguments) + (/* @__PURE__ */ new Date()).getTimezoneOffset() * 6e4) : arguments.length === 1 ? new Date(new Date(arguments["0"])) : /* @__PURE__ */ new Date();
943
+ d.timezoneOffset = d.dateZ.getTimezoneOffset();
944
+ utils.each(members.z, function(name) {
945
+ d[name] = function() {
946
+ return d.dateZ[name]();
947
+ };
948
+ });
949
+ utils.each(members["default"], function(name) {
950
+ d[name] = function() {
951
+ return d.date[name]();
952
+ };
953
+ });
954
+ this.setTimezoneOffset(exports.tzOffset);
955
+ };
956
+ exports.DateZ.prototype = {
957
+ getTimezoneOffset: function() {
958
+ return this.timezoneOffset;
959
+ },
960
+ setTimezoneOffset: function(offset) {
961
+ this.timezoneOffset = offset;
962
+ this.dateZ = new Date(this.date.getTime() + this.date.getTimezoneOffset() * 6e4 - this.timezoneOffset * 6e4);
963
+ return this;
964
+ }
965
+ };
966
+ exports.d = function(input) {
967
+ return (input.getDate() < 10 ? "0" : "") + input.getDate();
968
+ };
969
+ exports.D = function(input) {
970
+ return _days.abbr[input.getDay()];
971
+ };
972
+ exports.j = function(input) {
973
+ return input.getDate();
974
+ };
975
+ exports.l = function(input) {
976
+ return _days.full[input.getDay()];
977
+ };
978
+ exports.N = function(input) {
979
+ var d = input.getDay();
980
+ return d >= 1 ? d : 7;
981
+ };
982
+ exports.S = function(input) {
983
+ var d = input.getDate();
984
+ return d % 10 === 1 && d !== 11 ? "st" : d % 10 === 2 && d !== 12 ? "nd" : d % 10 === 3 && d !== 13 ? "rd" : "th";
985
+ };
986
+ exports.w = function(input) {
987
+ return input.getDay();
988
+ };
989
+ exports.z = function(input, offset, abbr) {
990
+ var year = input.getFullYear(), e = new exports.DateZ(year, input.getMonth(), input.getDate(), 12, 0, 0), d = new exports.DateZ(year, 0, 1, 12, 0, 0);
991
+ e.setTimezoneOffset(offset, abbr);
992
+ d.setTimezoneOffset(offset, abbr);
993
+ return Math.round((e - d) / 864e5);
994
+ };
995
+ exports.W = function(input) {
996
+ var target = new Date(input.valueOf()), dayNr = (input.getDay() + 6) % 7, fThurs;
997
+ target.setDate(target.getDate() - dayNr + 3);
998
+ fThurs = target.valueOf();
999
+ target.setMonth(0, 1);
1000
+ if (target.getDay() !== 4) {
1001
+ target.setMonth(0, 1 + (4 - target.getDay() + 7) % 7);
1002
+ }
1003
+ return 1 + Math.ceil((fThurs - target) / 6048e5);
1004
+ };
1005
+ exports.F = function(input) {
1006
+ return _months.full[input.getMonth()];
1007
+ };
1008
+ exports.m = function(input) {
1009
+ return (input.getMonth() < 9 ? "0" : "") + (input.getMonth() + 1);
1010
+ };
1011
+ exports.M = function(input) {
1012
+ return _months.abbr[input.getMonth()];
1013
+ };
1014
+ exports.n = function(input) {
1015
+ return input.getMonth() + 1;
1016
+ };
1017
+ exports.t = function(input) {
1018
+ return 32 - new Date(input.getFullYear(), input.getMonth(), 32).getDate();
1019
+ };
1020
+ exports.L = function(input) {
1021
+ return new Date(input.getFullYear(), 1, 29).getDate() === 29;
1022
+ };
1023
+ exports.o = function(input) {
1024
+ var target = new Date(input.valueOf());
1025
+ target.setDate(target.getDate() - (input.getDay() + 6) % 7 + 3);
1026
+ return target.getFullYear();
1027
+ };
1028
+ exports.Y = function(input) {
1029
+ return input.getFullYear();
1030
+ };
1031
+ exports.y = function(input) {
1032
+ return input.getFullYear().toString().substr(2);
1033
+ };
1034
+ exports.a = function(input) {
1035
+ return input.getHours() < 12 ? "am" : "pm";
1036
+ };
1037
+ exports.A = function(input) {
1038
+ return input.getHours() < 12 ? "AM" : "PM";
1039
+ };
1040
+ exports.B = function(input) {
1041
+ var hours = input.getUTCHours(), beats;
1042
+ hours = hours === 23 ? 0 : hours + 1;
1043
+ beats = Math.abs(((hours * 60 + input.getUTCMinutes()) * 60 + input.getUTCSeconds()) / 86.4).toFixed(0);
1044
+ return "000".concat(beats).slice(beats.length);
1045
+ };
1046
+ exports.g = function(input) {
1047
+ var h = input.getHours();
1048
+ return h === 0 ? 12 : h > 12 ? h - 12 : h;
1049
+ };
1050
+ exports.G = function(input) {
1051
+ return input.getHours();
1052
+ };
1053
+ exports.h = function(input) {
1054
+ var h = input.getHours();
1055
+ return (h < 10 || 12 < h && 22 > h ? "0" : "") + (h < 12 ? h : h - 12);
1056
+ };
1057
+ exports.H = function(input) {
1058
+ var h = input.getHours();
1059
+ return (h < 10 ? "0" : "") + h;
1060
+ };
1061
+ exports.i = function(input) {
1062
+ var m = input.getMinutes();
1063
+ return (m < 10 ? "0" : "") + m;
1064
+ };
1065
+ exports.s = function(input) {
1066
+ var s = input.getSeconds();
1067
+ return (s < 10 ? "0" : "") + s;
1068
+ };
1069
+ exports.O = function(input) {
1070
+ var tz = input.getTimezoneOffset();
1071
+ return (tz < 0 ? "-" : "+") + (tz / 60 < 10 ? "0" : "") + Math.abs(tz / 60) + "00";
1072
+ };
1073
+ exports.Z = function(input) {
1074
+ return input.getTimezoneOffset() * 60;
1075
+ };
1076
+ exports.c = function(input) {
1077
+ return input.toISOString();
1078
+ };
1079
+ exports.r = function(input) {
1080
+ return input.toUTCString();
1081
+ };
1082
+ exports.U = function(input) {
1083
+ return input.getTime() / 1e3;
1084
+ };
1085
+ }
1086
+ });
1087
+
1088
+ // lib/dateformatter.js
1089
+ var require_dateformatter2 = __commonJS({
1090
+ "lib/dateformatter.js"(exports, module) {
1091
+ module.exports = require_dateformatter();
1092
+ }
1093
+ });
1094
+
1095
+ // packages/swig-core/lib/filters.js
1096
+ var require_filters = __commonJS({
1097
+ "packages/swig-core/lib/filters.js"(exports) {
1098
+ var utils = require_utils();
1099
+ exports.iterateFilter = function iterateFilter(input) {
1100
+ var self2 = this, out = {};
1101
+ if (utils.isArray(input)) {
1102
+ return utils.map(input, function(value) {
1103
+ return self2.apply(null, arguments);
1104
+ });
1105
+ }
1106
+ if (typeof input === "object") {
1107
+ utils.each(input, function(value, key) {
1108
+ out[key] = self2.apply(null, arguments);
1109
+ });
1110
+ return out;
1111
+ }
1112
+ return;
1113
+ };
1114
+ }
1115
+ });
1116
+
1117
+ // lib/filters.js
1118
+ var require_filters2 = __commonJS({
1119
+ "lib/filters.js"(exports) {
1120
+ var utils = require_utils2();
1121
+ var dateFormatter = require_dateformatter2();
1122
+ var iterateFilter = require_filters().iterateFilter;
1123
+ exports.addslashes = function(input) {
1124
+ var out = iterateFilter.apply(exports.addslashes, arguments);
1125
+ if (out !== void 0) {
1126
+ return out;
1127
+ }
1128
+ return input.replace(/\\/g, "\\\\").replace(/\'/g, "\\'").replace(/\"/g, '\\"');
1129
+ };
1130
+ exports.capitalize = function(input) {
1131
+ var out = iterateFilter.apply(exports.capitalize, arguments);
1132
+ if (out !== void 0) {
1133
+ return out;
1134
+ }
1135
+ return input.toString().charAt(0).toUpperCase() + input.toString().substr(1).toLowerCase();
1136
+ };
1137
+ exports.date = function(input, format, offset, abbr) {
1138
+ var l = format.length, date = new dateFormatter.DateZ(input), cur, i = 0, out = "";
1139
+ if (offset) {
1140
+ date.setTimezoneOffset(offset, abbr);
1141
+ }
1142
+ for (i; i < l; i += 1) {
1143
+ cur = format.charAt(i);
1144
+ if (cur === "\\") {
1145
+ i += 1;
1146
+ out += i < l ? format.charAt(i) : cur;
1147
+ } else if (dateFormatter.hasOwnProperty(cur)) {
1148
+ out += dateFormatter[cur](date, offset, abbr);
1149
+ } else {
1150
+ out += cur;
1151
+ }
1152
+ }
1153
+ return out;
1154
+ };
1155
+ exports["default"] = function(input, def) {
1156
+ return typeof input !== "undefined" && (input || typeof input === "number") ? input : def;
1157
+ };
1158
+ function escapeHtmlRest(ch) {
1159
+ return ch === "<" ? "&lt;" : ch === ">" ? "&gt;" : ch === '"' ? "&quot;" : "&#39;";
1160
+ }
1161
+ exports.escape = function(input, type) {
1162
+ var t, inp, out, i, code;
1163
+ if (input === null || input === void 0) {
1164
+ return input;
1165
+ }
1166
+ t = typeof input;
1167
+ if (t !== "string") {
1168
+ if (t === "object") {
1169
+ out = iterateFilter.apply(exports.escape, arguments);
1170
+ if (out !== void 0) {
1171
+ return out;
1172
+ }
1173
+ }
1174
+ return input;
1175
+ }
1176
+ if (type === "js") {
1177
+ inp = input.replace(/\\/g, "\\u005C");
1178
+ out = "";
1179
+ for (i = 0; i < inp.length; i += 1) {
1180
+ code = inp.charCodeAt(i);
1181
+ if (code < 32) {
1182
+ code = code.toString(16).toUpperCase();
1183
+ code = code.length < 2 ? "0" + code : code;
1184
+ out += "\\u00" + code;
1185
+ } else {
1186
+ out += inp[i];
1187
+ }
1188
+ }
1189
+ return out.replace(/&/g, "\\u0026").replace(/</g, "\\u003C").replace(/>/g, "\\u003E").replace(/\'/g, "\\u0027").replace(/"/g, "\\u0022").replace(/\=/g, "\\u003D").replace(/-/g, "\\u002D").replace(/;/g, "\\u003B");
1190
+ }
1191
+ return input.replace(/&(?!amp;|lt;|gt;|quot;|#39;)/g, "&amp;").replace(/[<>"']/g, escapeHtmlRest);
1192
+ };
1193
+ exports.e = exports.escape;
1194
+ exports.first = function(input) {
1195
+ if (typeof input === "object" && !utils.isArray(input)) {
1196
+ var keys = utils.keys(input);
1197
+ return input[keys[0]];
1198
+ }
1199
+ if (typeof input === "string") {
1200
+ return input.substr(0, 1);
1201
+ }
1202
+ return input[0];
1203
+ };
1204
+ exports.groupBy = function(input, key) {
1205
+ if (!utils.isArray(input)) {
1206
+ return input;
1207
+ }
1208
+ var out = {};
1209
+ utils.each(input, function(value) {
1210
+ if (!value.hasOwnProperty(key)) {
1211
+ return;
1212
+ }
1213
+ var keyname = value[key], newValue = utils.extend({}, value);
1214
+ delete newValue[key];
1215
+ if (!out[keyname]) {
1216
+ out[keyname] = [];
1217
+ }
1218
+ out[keyname].push(newValue);
1219
+ });
1220
+ return out;
1221
+ };
1222
+ exports.join = function(input, glue) {
1223
+ if (utils.isArray(input)) {
1224
+ return input.join(glue);
1225
+ }
1226
+ if (typeof input === "object") {
1227
+ var out = [];
1228
+ utils.each(input, function(value) {
1229
+ out.push(value);
1230
+ });
1231
+ return out.join(glue);
1232
+ }
1233
+ return input;
1234
+ };
1235
+ exports.json = function(input, indent) {
1236
+ var json = JSON.stringify(input, null, indent || 0);
1237
+ if (typeof json !== "string") {
1238
+ return json;
1239
+ }
1240
+ return json.replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026").replace(/'/g, "\\u0027");
1241
+ };
1242
+ exports.json.safe = true;
1243
+ exports.json_encode = exports.json;
1244
+ exports.last = function(input) {
1245
+ if (typeof input === "object" && !utils.isArray(input)) {
1246
+ var keys = utils.keys(input);
1247
+ return input[keys[keys.length - 1]];
1248
+ }
1249
+ if (typeof input === "string") {
1250
+ return input.charAt(input.length - 1);
1251
+ }
1252
+ return input[input.length - 1];
1253
+ };
1254
+ exports.length = function(input) {
1255
+ if (typeof input === "object" && !utils.isArray(input)) {
1256
+ var keys = utils.keys(input);
1257
+ return keys.length;
1258
+ }
1259
+ if (input.hasOwnProperty("length")) {
1260
+ return input.length;
1261
+ }
1262
+ return "";
1263
+ };
1264
+ exports.lower = function(input) {
1265
+ var out = iterateFilter.apply(exports.lower, arguments);
1266
+ if (out !== void 0) {
1267
+ return out;
1268
+ }
1269
+ return input.toString().toLowerCase();
1270
+ };
1271
+ exports.raw = function(input) {
1272
+ return exports.safe(input);
1273
+ };
1274
+ exports.raw.safe = true;
1275
+ exports.replace = function(input, search, replacement, flags) {
1276
+ var r = new RegExp(search, flags);
1277
+ return input.replace(r, replacement);
1278
+ };
1279
+ exports.reverse = function(input) {
1280
+ return exports.sort(input, true);
1281
+ };
1282
+ exports.safe = function(input) {
1283
+ return input;
1284
+ };
1285
+ exports.safe.safe = true;
1286
+ exports.sort = function(input, reverse) {
1287
+ var out, clone;
1288
+ if (utils.isArray(input)) {
1289
+ clone = utils.extend([], input);
1290
+ out = clone.sort();
1291
+ } else {
1292
+ switch (typeof input) {
1293
+ case "object":
1294
+ out = utils.keys(input).sort();
1295
+ break;
1296
+ case "string":
1297
+ out = input.split("");
1298
+ if (reverse) {
1299
+ return out.reverse().join("");
1300
+ }
1301
+ return out.sort().join("");
1302
+ }
1303
+ }
1304
+ if (out && reverse) {
1305
+ return out.reverse();
1306
+ }
1307
+ return out || input;
1308
+ };
1309
+ exports.striptags = function(input) {
1310
+ var out = iterateFilter.apply(exports.striptags, arguments);
1311
+ if (out !== void 0) {
1312
+ return out;
1313
+ }
1314
+ return input.toString().replace(/(<([^>]+)>)/ig, "");
1315
+ };
1316
+ exports.title = function(input) {
1317
+ var out = iterateFilter.apply(exports.title, arguments);
1318
+ if (out !== void 0) {
1319
+ return out;
1320
+ }
1321
+ return input.toString().replace(/\w\S*/g, function(str) {
1322
+ return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();
1323
+ });
1324
+ };
1325
+ exports.uniq = function(input) {
1326
+ var result;
1327
+ if (!input || !utils.isArray(input)) {
1328
+ return "";
1329
+ }
1330
+ result = [];
1331
+ utils.each(input, function(v) {
1332
+ if (result.indexOf(v) === -1) {
1333
+ result.push(v);
1334
+ }
1335
+ });
1336
+ return result;
1337
+ };
1338
+ exports.upper = function(input) {
1339
+ var out = iterateFilter.apply(exports.upper, arguments);
1340
+ if (out !== void 0) {
1341
+ return out;
1342
+ }
1343
+ return input.toString().toUpperCase();
1344
+ };
1345
+ exports.url_encode = function(input) {
1346
+ var out = iterateFilter.apply(exports.url_encode, arguments);
1347
+ if (out !== void 0) {
1348
+ return out;
1349
+ }
1350
+ return encodeURIComponent(input);
1351
+ };
1352
+ exports.url_encode.safe = true;
1353
+ exports.url_decode = function(input) {
1354
+ var out = iterateFilter.apply(exports.url_decode, arguments);
1355
+ if (out !== void 0) {
1356
+ return out;
1357
+ }
1358
+ return decodeURIComponent(input);
1359
+ };
1360
+ }
1361
+ });
1362
+
1363
+ // browser/stubs/fs.js
1364
+ var require_fs = __commonJS({
1365
+ "browser/stubs/fs.js"(exports, module) {
1366
+ module.exports = {};
1367
+ }
1368
+ });
1369
+
1370
+ // packages/swig-core/lib/loaders/filesystem.js
1371
+ var require_filesystem = __commonJS({
1372
+ "packages/swig-core/lib/loaders/filesystem.js"(exports, module) {
1373
+ var fs = require_fs();
1374
+ var path = require_path_browserify();
1375
+ module.exports = function(basepath, encoding, allowOutsideRoot) {
1376
+ var ret = {};
1377
+ encoding = encoding || "utf8";
1378
+ basepath = basepath ? path.resolve(basepath) : null;
1379
+ ret.resolve = function(to, from) {
1380
+ var resolved, rootWithSep;
1381
+ if (basepath) {
1382
+ from = basepath;
1383
+ } else {
1384
+ from = from ? path.dirname(from) : process.cwd();
1385
+ }
1386
+ resolved = path.resolve(from, to);
1387
+ if (basepath && !allowOutsideRoot) {
1388
+ rootWithSep = path.normalize(basepath + path.sep);
1389
+ if (resolved !== basepath && resolved.indexOf(rootWithSep) !== 0) {
1390
+ throw new Error('Template "' + to + '" resolves outside the loader root "' + basepath + '" (CVE-2023-25345).');
1391
+ }
1392
+ }
1393
+ return resolved;
1394
+ };
1395
+ ret.load = function(identifier, cb) {
1396
+ if (!fs || cb && !fs.readFile || !fs.readFileSync) {
1397
+ throw new Error("Unable to find file " + identifier + " because there is no filesystem to read from.");
1398
+ }
1399
+ identifier = ret.resolve(identifier);
1400
+ if (cb) {
1401
+ fs.readFile(identifier, encoding, cb);
1402
+ return;
1403
+ }
1404
+ return fs.readFileSync(identifier, encoding);
1405
+ };
1406
+ return ret;
1407
+ };
1408
+ }
1409
+ });
1410
+
1411
+ // packages/swig-core/lib/loaders/index.js
1412
+ var require_loaders = __commonJS({
1413
+ "packages/swig-core/lib/loaders/index.js"(exports) {
1414
+ exports.fs = require_filesystem();
1415
+ exports.memory = require_memory();
1416
+ }
1417
+ });
1418
+
1419
+ // lib/loaders/index.js
1420
+ var require_loaders2 = __commonJS({
1421
+ "lib/loaders/index.js"(exports, module) {
1422
+ module.exports = require_loaders();
1423
+ }
1424
+ });
1425
+
1426
+ // lib/runtime.js
1427
+ var require_runtime2 = __commonJS({
1428
+ "lib/runtime.js"(exports) {
1429
+ var runtime = require_runtime();
1430
+ var _filters = require_filters2();
1431
+ var dateformatter = require_dateformatter2();
1432
+ var loaders = require_loaders2();
1433
+ exports.version = "2.8.0";
1434
+ var defaultInstance = runtime.create({ filters: _filters });
1435
+ exports.Swig = function(opts) {
1436
+ return runtime.create({ filters: _filters, defaults: opts });
1437
+ };
1438
+ exports.loaders = loaders;
1439
+ exports.register = defaultInstance.register;
1440
+ exports.registerBundle = defaultInstance.registerBundle;
1441
+ exports.run = defaultInstance.run;
1442
+ exports.compileFile = defaultInstance.compileFile;
1443
+ exports.renderFile = defaultInstance.renderFile;
1444
+ exports.setFilter = defaultInstance.setFilter;
1445
+ exports.setExtension = defaultInstance.setExtension;
1446
+ exports.setDefaults = defaultInstance.setDefaults;
1447
+ exports.invalidateCache = defaultInstance.invalidateCache;
1448
+ exports.setDefaultTZOffset = function(offset) {
1449
+ dateformatter.tzOffset = offset;
1450
+ };
1451
+ exports.parse = defaultInstance.parse;
1452
+ exports.parseFile = defaultInstance.parseFile;
1453
+ exports.precompile = defaultInstance.precompile;
1454
+ exports.compile = defaultInstance.compile;
1455
+ exports.render = defaultInstance.render;
1456
+ exports.setTag = defaultInstance.setTag;
1457
+ exports.renderFileAsync = defaultInstance.renderFileAsync;
1458
+ exports.compileFileAsync = defaultInstance.compileFileAsync;
1459
+ }
1460
+ });
1461
+
1462
+ // browser/runtime.js
1463
+ var require_runtime3 = __commonJS({
1464
+ "browser/runtime.js"(exports) {
1465
+ var swig = require_runtime2();
1466
+ var root = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : exports;
1467
+ if (typeof root.define === "function" && typeof root.define.amd === "object") {
1468
+ root.define("swig", [], function() {
1469
+ return swig;
1470
+ });
1471
+ }
1472
+ if (!root.swig) {
1473
+ root.swig = swig;
1474
+ }
1475
+ }
1476
+ });
1477
+ require_runtime3();
1478
+ })();
1479
+ /*!
1480
+ * Resolve a single path segment against a value, Django-style. A plain
1481
+ * property access (`obj[seg]`) covers dictionary, attribute, and array /
1482
+ * string index lookup in one step (JS string-keys an array / string by a
1483
+ * numeric segment, so `["a"][0]` and `["a"]["0"]` both yield the element).
1484
+ * A callable leaf is auto-called with no arguments, bound to its receiver,
1485
+ * honoring Django's opt-outs: `fn.alters_data === true` is not called and
1486
+ * yields `undefined` (Django renders nothing for data-altering callables);
1487
+ * `fn.do_not_call_in_templates === true` is returned uncalled. A call that
1488
+ * throws (e.g. a method that needs arguments) yields `undefined`, mirroring
1489
+ * Django's `string_if_invalid` fallback on a failed auto-call. The
1490
+ * `_dangerousProps` segments are rejected at runtime as defense-in-depth.
1491
+ * @private
1492
+ */
1493
+ /*!
1494
+ * Empty function used as a fallback in compiled template code.
1495
+ */
1496
+ /*!
1497
+ * Build the error every unavailable compiling entry point throws.
1498
+ */
1499
+ /*!
1500
+ * Wrap a pre-compiled template function in the locals-binding call shape
1501
+ * cached entries have, mirroring the engine.
1502
+ * @private
1503
+ */
1504
+ /*!
1505
+ * Shared argument checks for register / registerBundle, so a bundle is
1506
+ * validated in full before any entry is committed.
1507
+ * @private
1508
+ */
1509
+ /*!
1510
+ * Default runtime instance backing the module-level exports.
1511
+ */
1512
+ /*!
1513
+ * Export methods publicly via the default instance.
1514
+ */
1515
+ /*!
1516
+ * Compiling entry points stay on the module surface as clear-error
1517
+ * stubs, so a drop-in swap from the full build fails with the
1518
+ * no-compiler explanation instead of a bare TypeError.
1519
+ */