@enspirit/elo 0.9.7 → 0.9.8
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.
- package/README.md +8 -3
- package/dist/src/bindings/python.d.ts +20 -0
- package/dist/src/bindings/python.d.ts.map +1 -0
- package/dist/src/bindings/python.js +403 -0
- package/dist/src/bindings/python.js.map +1 -0
- package/dist/src/compilers/python.d.ts +28 -0
- package/dist/src/compilers/python.d.ts.map +1 -0
- package/dist/src/compilers/python.js +297 -0
- package/dist/src/compilers/python.js.map +1 -0
- package/dist/src/eloc.js +12 -4
- package/dist/src/eloc.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/preludes/index.d.ts +1 -1
- package/dist/src/preludes/index.d.ts.map +1 -1
- package/dist/src/preludes/index.js +13 -1
- package/dist/src/preludes/index.js.map +1 -1
- package/dist/src/runtime.d.ts +7 -0
- package/dist/src/runtime.d.ts.map +1 -1
- package/dist/src/runtime.js +403 -1
- package/dist/src/runtime.js.map +1 -1
- package/package.json +1 -1
package/dist/src/runtime.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* when needed, wrapped in an IIFE for encapsulation.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.RUBY_HELPERS = exports.RUBY_HELPER_DEPS = exports.JS_HELPERS = exports.JS_HELPER_DEPS = void 0;
|
|
9
|
+
exports.PY_HELPERS = exports.PY_HELPER_DEPS = exports.RUBY_HELPERS = exports.RUBY_HELPER_DEPS = exports.JS_HELPERS = exports.JS_HELPER_DEPS = void 0;
|
|
10
10
|
/**
|
|
11
11
|
* Individual JavaScript helper function snippets.
|
|
12
12
|
* Each helper is a standalone function that can be included in the output.
|
|
@@ -370,4 +370,406 @@ end`,
|
|
|
370
370
|
v.to_s
|
|
371
371
|
end`,
|
|
372
372
|
};
|
|
373
|
+
/**
|
|
374
|
+
* Python helper function snippets.
|
|
375
|
+
* These are embedded in compiled Python output when needed.
|
|
376
|
+
* Special entries starting with _ are import statements, not functions.
|
|
377
|
+
*/
|
|
378
|
+
exports.PY_HELPER_DEPS = {
|
|
379
|
+
kEq: [],
|
|
380
|
+
kNeq: ['kEq'],
|
|
381
|
+
kFetch: [],
|
|
382
|
+
kFetchObject: ['kFetch'],
|
|
383
|
+
kFetchArray: ['kFetch'],
|
|
384
|
+
kDeepMerge: [],
|
|
385
|
+
kPatch: [],
|
|
386
|
+
kTypeOf: [],
|
|
387
|
+
kAssert: [],
|
|
388
|
+
kFail: [],
|
|
389
|
+
kAssertFails: [],
|
|
390
|
+
kAdd: [],
|
|
391
|
+
kSub: [],
|
|
392
|
+
kMul: [],
|
|
393
|
+
kDiv: [],
|
|
394
|
+
kMod: [],
|
|
395
|
+
kPow: [],
|
|
396
|
+
kNeg: [],
|
|
397
|
+
kBool: [],
|
|
398
|
+
kString: ['_elo_dur_to_iso'],
|
|
399
|
+
kParseDate: ['_elo_dt_helpers'],
|
|
400
|
+
kParseDatetime: ['_elo_dt_helpers'],
|
|
401
|
+
_elo_dt_helpers: ['_import_datetime', '_elo_duration'],
|
|
402
|
+
_elo_duration: ['_import_re'],
|
|
403
|
+
// Parser helpers
|
|
404
|
+
pAny: ['pOk'],
|
|
405
|
+
pNull: ['pOk', 'pFail'],
|
|
406
|
+
pString: ['pOk', 'pFail'],
|
|
407
|
+
pInt: ['pOk', 'pFail'],
|
|
408
|
+
pFloat: ['pOk', 'pFail'],
|
|
409
|
+
pBool: ['pOk', 'pFail'],
|
|
410
|
+
pDatetime: ['pOk', 'pFail', 'kParseDatetime'],
|
|
411
|
+
pSchema: ['pOk', 'pFail'],
|
|
412
|
+
pArray: ['pOk', 'pFail'],
|
|
413
|
+
pUnion: ['pFail'],
|
|
414
|
+
pSubtype: ['pOk', 'pFail'],
|
|
415
|
+
};
|
|
416
|
+
exports.PY_HELPERS = {
|
|
417
|
+
_import_math: `import math`,
|
|
418
|
+
_import_functools: `import functools`,
|
|
419
|
+
_import_datetime: `import datetime as _dt`,
|
|
420
|
+
_import_re: `import re`,
|
|
421
|
+
_elo_duration: `class EloDuration:
|
|
422
|
+
__slots__ = ('_ms',)
|
|
423
|
+
def __init__(self, ms):
|
|
424
|
+
self._ms = ms
|
|
425
|
+
@staticmethod
|
|
426
|
+
def from_iso(s):
|
|
427
|
+
m = re.match(r'^P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$', s)
|
|
428
|
+
if not m: raise Exception('Invalid ISO duration: ' + s)
|
|
429
|
+
yrs = int(m.group(1) or 0)
|
|
430
|
+
mos = int(m.group(2) or 0)
|
|
431
|
+
wks = int(m.group(3) or 0)
|
|
432
|
+
dys = int(m.group(4) or 0)
|
|
433
|
+
hrs = int(m.group(5) or 0)
|
|
434
|
+
mns = int(m.group(6) or 0)
|
|
435
|
+
scs = float(m.group(7) or 0)
|
|
436
|
+
total_days = yrs * 365 + mos * 30 + wks * 7 + dys
|
|
437
|
+
return EloDuration(((total_days * 24 + hrs) * 60 + mns) * 60000 + scs * 1000)
|
|
438
|
+
def to_ms(self): return self._ms
|
|
439
|
+
def plus(self, other):
|
|
440
|
+
if isinstance(other, EloDuration): return EloDuration(self._ms + other._ms)
|
|
441
|
+
if isinstance(other, _dt.datetime): return _elo_dt_plus(other, self)
|
|
442
|
+
raise Exception('Cannot add duration to ' + type(other).__name__)
|
|
443
|
+
def minus(self, other):
|
|
444
|
+
if isinstance(other, EloDuration): return EloDuration(self._ms - other._ms)
|
|
445
|
+
raise Exception('Cannot subtract ' + type(other).__name__ + ' from duration')
|
|
446
|
+
def scale(self, n): return EloDuration(self._ms * n)
|
|
447
|
+
def divide(self, n): return EloDuration(self._ms / n)
|
|
448
|
+
def negate(self): return EloDuration(-self._ms)
|
|
449
|
+
def __eq__(self, other): return isinstance(other, EloDuration) and self._ms == other._ms
|
|
450
|
+
def __ne__(self, other): return not self.__eq__(other)
|
|
451
|
+
def __lt__(self, other): return self._ms < other._ms
|
|
452
|
+
def __le__(self, other): return self._ms <= other._ms
|
|
453
|
+
def __gt__(self, other): return self._ms > other._ms
|
|
454
|
+
def __ge__(self, other): return self._ms >= other._ms
|
|
455
|
+
def __repr__(self): return f'EloDuration({self._ms}ms)'
|
|
456
|
+
def in_seconds(self): return self._ms / 1000.0
|
|
457
|
+
def in_minutes(self): return self._ms / 60000.0
|
|
458
|
+
def in_hours(self): return self._ms / 3600000.0
|
|
459
|
+
def in_days(self): return self._ms / 86400000.0
|
|
460
|
+
def in_weeks(self): return self._ms / 604800000.0
|
|
461
|
+
def in_months(self): return self._ms / (30.4375 * 86400000.0)
|
|
462
|
+
def in_quarters(self): return self._ms / (91.3125 * 86400000.0)
|
|
463
|
+
def in_years(self): return self._ms / (365.25 * 86400000.0)`,
|
|
464
|
+
_elo_dt_helpers: `def _elo_dt_plus(dt, dur):
|
|
465
|
+
from datetime import timedelta
|
|
466
|
+
return dt + timedelta(milliseconds=dur.to_ms())
|
|
467
|
+
def _elo_dt_minus_dur(dt, dur):
|
|
468
|
+
from datetime import timedelta
|
|
469
|
+
return dt - timedelta(milliseconds=dur.to_ms())
|
|
470
|
+
def _elo_dt_diff(a, b):
|
|
471
|
+
diff = a - b
|
|
472
|
+
return EloDuration(diff.total_seconds() * 1000)
|
|
473
|
+
def _elo_dt(y, mo, d, h=0, mi=0, s=0):
|
|
474
|
+
return _dt.datetime(y, mo, d, h, mi, s)
|
|
475
|
+
def _elo_start_of_day(dt):
|
|
476
|
+
return dt.replace(hour=0, minute=0, second=0, microsecond=0)
|
|
477
|
+
def _elo_end_of_day(dt):
|
|
478
|
+
return dt.replace(hour=23, minute=59, second=59, microsecond=999000)
|
|
479
|
+
def _elo_start_of_week(dt):
|
|
480
|
+
d = dt - _dt.timedelta(days=dt.weekday())
|
|
481
|
+
return d.replace(hour=0, minute=0, second=0, microsecond=0)
|
|
482
|
+
def _elo_end_of_week(dt):
|
|
483
|
+
d = dt + _dt.timedelta(days=6 - dt.weekday())
|
|
484
|
+
return d.replace(hour=23, minute=59, second=59, microsecond=999000)
|
|
485
|
+
def _elo_start_of_month(dt):
|
|
486
|
+
return dt.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
|
|
487
|
+
def _elo_end_of_month(dt):
|
|
488
|
+
import calendar
|
|
489
|
+
last_day = calendar.monthrange(dt.year, dt.month)[1]
|
|
490
|
+
return dt.replace(day=last_day, hour=23, minute=59, second=59, microsecond=999000)
|
|
491
|
+
def _elo_start_of_quarter(dt):
|
|
492
|
+
qm = ((dt.month - 1) // 3) * 3 + 1
|
|
493
|
+
return dt.replace(month=qm, day=1, hour=0, minute=0, second=0, microsecond=0)
|
|
494
|
+
def _elo_end_of_quarter(dt):
|
|
495
|
+
import calendar
|
|
496
|
+
qm = ((dt.month - 1) // 3) * 3 + 3
|
|
497
|
+
last_day = calendar.monthrange(dt.year, qm)[1]
|
|
498
|
+
return dt.replace(month=qm, day=last_day, hour=23, minute=59, second=59, microsecond=999000)
|
|
499
|
+
def _elo_start_of_year(dt):
|
|
500
|
+
return dt.replace(month=1, day=1, hour=0, minute=0, second=0, microsecond=0)
|
|
501
|
+
def _elo_end_of_year(dt):
|
|
502
|
+
return dt.replace(month=12, day=31, hour=23, minute=59, second=59, microsecond=999000)`,
|
|
503
|
+
kAssert: `def kAssert(cond, msg="Assertion failed"):
|
|
504
|
+
if not cond: raise Exception(msg)
|
|
505
|
+
return True`,
|
|
506
|
+
kFail: `def kFail(msg):
|
|
507
|
+
raise Exception(msg)`,
|
|
508
|
+
kAssertFails: `def kAssertFails(fn):
|
|
509
|
+
try:
|
|
510
|
+
fn()
|
|
511
|
+
raise Exception("Expected function to fail but it did not")
|
|
512
|
+
except Exception as e:
|
|
513
|
+
if str(e) == "Expected function to fail but it did not": raise
|
|
514
|
+
return True`,
|
|
515
|
+
kEq: `def kEq(l, r):
|
|
516
|
+
if isinstance(l, EloDuration) and isinstance(r, EloDuration): return l == r
|
|
517
|
+
if isinstance(l, _dt.datetime) and isinstance(r, _dt.datetime): return l == r
|
|
518
|
+
if isinstance(l, list) and isinstance(r, list):
|
|
519
|
+
if len(l) != len(r): return False
|
|
520
|
+
return all(kEq(a, b) for a, b in zip(l, r))
|
|
521
|
+
if isinstance(l, dict) and isinstance(r, dict):
|
|
522
|
+
if set(l.keys()) != set(r.keys()): return False
|
|
523
|
+
return all(kEq(l[k], r[k]) for k in l)
|
|
524
|
+
return l == r`,
|
|
525
|
+
kNeq: `def kNeq(l, r):
|
|
526
|
+
return not kEq(l, r)`,
|
|
527
|
+
kTypeOf: `def kTypeOf(v):
|
|
528
|
+
if v is None: return 'Null'
|
|
529
|
+
if isinstance(v, EloDuration): return 'Duration'
|
|
530
|
+
if isinstance(v, _dt.datetime): return 'DateTime'
|
|
531
|
+
if isinstance(v, bool): return 'Bool'
|
|
532
|
+
if isinstance(v, int): return 'Int'
|
|
533
|
+
if isinstance(v, float): return 'Float'
|
|
534
|
+
if isinstance(v, str): return 'String'
|
|
535
|
+
if isinstance(v, list): return 'List'
|
|
536
|
+
if isinstance(v, dict): return 'Tuple'
|
|
537
|
+
if callable(v): return 'Function'
|
|
538
|
+
return 'Unknown'`,
|
|
539
|
+
kFetch: `def kFetch(data, path):
|
|
540
|
+
current = data
|
|
541
|
+
for segment in path:
|
|
542
|
+
if current is None: return None
|
|
543
|
+
if isinstance(segment, int):
|
|
544
|
+
if not isinstance(current, list): return None
|
|
545
|
+
if segment >= len(current): return None
|
|
546
|
+
current = current[segment]
|
|
547
|
+
else:
|
|
548
|
+
if not isinstance(current, dict): return None
|
|
549
|
+
current = current.get(segment)
|
|
550
|
+
return current`,
|
|
551
|
+
kFetchObject: `def kFetchObject(data, paths):
|
|
552
|
+
return {key: kFetch(data, paths[key]) for key in paths}`,
|
|
553
|
+
kFetchArray: `def kFetchArray(data, paths):
|
|
554
|
+
return [kFetch(data, p) for p in paths]`,
|
|
555
|
+
kPatch: `def kPatch(data, path, value):
|
|
556
|
+
if len(path) == 0: return value
|
|
557
|
+
seg = path[0]
|
|
558
|
+
rest = path[1:]
|
|
559
|
+
next_default = None if len(rest) == 0 else ([] if isinstance(rest[0], int) else {})
|
|
560
|
+
if isinstance(seg, int):
|
|
561
|
+
if data is not None and not isinstance(data, list): raise Exception('cannot patch array index on non-array')
|
|
562
|
+
arr = list(data) if isinstance(data, list) else []
|
|
563
|
+
while len(arr) <= seg: arr.append(None)
|
|
564
|
+
existing = arr[seg]
|
|
565
|
+
arr[seg] = kPatch(next_default if existing is None else existing, rest, value)
|
|
566
|
+
return arr
|
|
567
|
+
else:
|
|
568
|
+
if isinstance(data, list): raise Exception('cannot patch object key on array')
|
|
569
|
+
obj = dict(data) if isinstance(data, dict) else {}
|
|
570
|
+
existing = obj.get(seg)
|
|
571
|
+
obj[seg] = kPatch(next_default if existing is None else existing, rest, value)
|
|
572
|
+
return obj`,
|
|
573
|
+
kDeepMerge: `def kDeepMerge(a, b):
|
|
574
|
+
if not isinstance(a, dict) or not isinstance(b, dict): return b
|
|
575
|
+
result = dict(a)
|
|
576
|
+
for key in b:
|
|
577
|
+
result[key] = kDeepMerge(a.get(key), b[key])
|
|
578
|
+
return result`,
|
|
579
|
+
kFirst: `def kFirst(arr):
|
|
580
|
+
return arr[0] if len(arr) > 0 else None`,
|
|
581
|
+
kLast: `def kLast(arr):
|
|
582
|
+
return arr[-1] if len(arr) > 0 else None`,
|
|
583
|
+
kAt: `def kAt(arr, idx):
|
|
584
|
+
if idx < 0 or idx >= len(arr): return None
|
|
585
|
+
return arr[idx]`,
|
|
586
|
+
kIndexOf: `def kIndexOf(s, sub):
|
|
587
|
+
idx = s.find(sub)
|
|
588
|
+
return None if idx == -1 else idx`,
|
|
589
|
+
kSplit: `def kSplit(s, sep):
|
|
590
|
+
if s == '': return []
|
|
591
|
+
return s.split(sep)`,
|
|
592
|
+
kData: `def kData(v):
|
|
593
|
+
import json
|
|
594
|
+
if v is None: return None
|
|
595
|
+
if isinstance(v, str):
|
|
596
|
+
try: return json.loads(v)
|
|
597
|
+
except: raise Exception('invalid JSON: ' + repr(v))
|
|
598
|
+
return v`,
|
|
599
|
+
kString: `def kString(v):
|
|
600
|
+
if v is None: return 'null'
|
|
601
|
+
if isinstance(v, bool): return 'true' if v else 'false'
|
|
602
|
+
if isinstance(v, int): return str(v)
|
|
603
|
+
if isinstance(v, float): return str(v)
|
|
604
|
+
if isinstance(v, str): return "'" + v.replace("\\\\", "\\\\\\\\").replace("'", "\\\\'") + "'"
|
|
605
|
+
if isinstance(v, EloDuration): return _elo_dur_to_iso(v)
|
|
606
|
+
if isinstance(v, _dt.datetime):
|
|
607
|
+
if v.hour == 0 and v.minute == 0 and v.second == 0: return 'D' + v.strftime('%Y-%m-%d')
|
|
608
|
+
return 'D' + v.strftime('%Y-%m-%dT%H:%M:%S')
|
|
609
|
+
if isinstance(v, list): return '[' + ', '.join(kString(e) for e in v) + ']'
|
|
610
|
+
if isinstance(v, dict): return '{' + ', '.join(k + ': ' + kString(v[k]) for k in v) + '}'
|
|
611
|
+
return str(v)`,
|
|
612
|
+
_elo_dur_to_iso: `def _elo_dur_to_iso(d):
|
|
613
|
+
ms = d.to_ms()
|
|
614
|
+
if ms == 0: return 'PT0S'
|
|
615
|
+
neg = ms < 0
|
|
616
|
+
ms = abs(ms)
|
|
617
|
+
secs = ms / 1000
|
|
618
|
+
days = int(secs // 86400); secs -= days * 86400
|
|
619
|
+
hours = int(secs // 3600); secs -= hours * 3600
|
|
620
|
+
mins = int(secs // 60); secs -= mins * 60
|
|
621
|
+
s = '-P' if neg else 'P'
|
|
622
|
+
if days: s += str(days) + 'D'
|
|
623
|
+
if hours or mins or secs: s += 'T'
|
|
624
|
+
if hours: s += str(hours) + 'H'
|
|
625
|
+
if mins: s += str(mins) + 'M'
|
|
626
|
+
if secs: s += str(int(secs) if secs == int(secs) else secs) + 'S'
|
|
627
|
+
return s`,
|
|
628
|
+
kAdd: `def kAdd(l, r):
|
|
629
|
+
if isinstance(l, _dt.datetime) and isinstance(r, EloDuration): return _elo_dt_plus(l, r)
|
|
630
|
+
if isinstance(l, EloDuration) and isinstance(r, _dt.datetime): return _elo_dt_plus(r, l)
|
|
631
|
+
if isinstance(l, EloDuration) and isinstance(r, EloDuration): return l.plus(r)
|
|
632
|
+
return l + r`,
|
|
633
|
+
kSub: `def kSub(l, r):
|
|
634
|
+
if isinstance(l, _dt.datetime) and isinstance(r, EloDuration): return _elo_dt_minus_dur(l, r)
|
|
635
|
+
if isinstance(l, _dt.datetime) and isinstance(r, _dt.datetime): return _elo_dt_diff(l, r)
|
|
636
|
+
if isinstance(l, EloDuration) and isinstance(r, EloDuration): return l.minus(r)
|
|
637
|
+
return l - r`,
|
|
638
|
+
kMul: `def kMul(l, r):
|
|
639
|
+
if isinstance(l, EloDuration): return l.scale(r)
|
|
640
|
+
if isinstance(r, EloDuration): return r.scale(l)
|
|
641
|
+
return l * r`,
|
|
642
|
+
kDiv: `def kDiv(l, r):
|
|
643
|
+
if isinstance(l, EloDuration) and isinstance(r, (int, float)): return l.divide(r)
|
|
644
|
+
return l / r`,
|
|
645
|
+
kMod: `def kMod(l, r):
|
|
646
|
+
return l % r`,
|
|
647
|
+
kPow: `def kPow(l, r):
|
|
648
|
+
return l ** r`,
|
|
649
|
+
kNeg: `def kNeg(v):
|
|
650
|
+
if isinstance(v, EloDuration): return v.negate()
|
|
651
|
+
return -v`,
|
|
652
|
+
kBool: `def kBool(v):
|
|
653
|
+
if isinstance(v, bool): return v
|
|
654
|
+
if isinstance(v, str):
|
|
655
|
+
if v == 'true': return True
|
|
656
|
+
if v == 'false': return False
|
|
657
|
+
raise Exception('Cannot convert to Bool: ' + repr(v))
|
|
658
|
+
raise Exception('Cannot convert to Bool: ' + repr(v))`,
|
|
659
|
+
kParseDate: `def kParseDate(v):
|
|
660
|
+
if isinstance(v, _dt.datetime): return _elo_dt(v.year, v.month, v.day)
|
|
661
|
+
if isinstance(v, str):
|
|
662
|
+
parts = v.split('-')
|
|
663
|
+
if len(parts) == 3: return _elo_dt(int(parts[0]), int(parts[1]), int(parts[2]))
|
|
664
|
+
raise Exception('Cannot parse date: ' + repr(v))`,
|
|
665
|
+
kParseDatetime: `def kParseDatetime(v):
|
|
666
|
+
if isinstance(v, _dt.datetime): return v
|
|
667
|
+
if isinstance(v, str):
|
|
668
|
+
v2 = v.replace('Z', '')
|
|
669
|
+
if 'T' in v2:
|
|
670
|
+
dp, tp = v2.split('T')
|
|
671
|
+
dy, dm, dd = dp.split('-')
|
|
672
|
+
tps = tp.split(':')
|
|
673
|
+
return _elo_dt(int(dy), int(dm), int(dd), int(tps[0]), int(tps[1]), int(tps[2]) if len(tps) > 2 else 0)
|
|
674
|
+
parts = v2.split('-')
|
|
675
|
+
if len(parts) == 3: return _elo_dt(int(parts[0]), int(parts[1]), int(parts[2]))
|
|
676
|
+
raise Exception('Cannot parse datetime: ' + repr(v))`,
|
|
677
|
+
// Parser helpers - return Result: { "success": bool, "path": str, "message": str, "value": any, "cause": list }
|
|
678
|
+
pOk: `def pOk(v, p):
|
|
679
|
+
return {"success": True, "path": p, "message": "", "value": v, "cause": []}`,
|
|
680
|
+
pFail: `def pFail(p, m=None, c=None):
|
|
681
|
+
return {"success": False, "path": p, "message": m or "", "value": None, "cause": c or []}`,
|
|
682
|
+
pUnwrap: `def pUnwrap(r):
|
|
683
|
+
if r["success"]: return r["value"]
|
|
684
|
+
def find_error(e):
|
|
685
|
+
if e.get("message"): return e
|
|
686
|
+
if e.get("cause") and len(e["cause"]) > 0: return find_error(e["cause"][0])
|
|
687
|
+
return e
|
|
688
|
+
err = find_error(r)
|
|
689
|
+
raise Exception((err.get("path") or ".") + ": " + (err.get("message") or "type error"))`,
|
|
690
|
+
pAny: `def pAny(v, p):
|
|
691
|
+
return pOk(v, p)`,
|
|
692
|
+
pNull: `def pNull(v, p):
|
|
693
|
+
if v is None: return pOk(None, p)
|
|
694
|
+
return pFail(p, "expected Null, got " + type(v).__name__)`,
|
|
695
|
+
pString: `def pString(v, p):
|
|
696
|
+
if isinstance(v, str): return pOk(v, p)
|
|
697
|
+
return pFail(p, "expected String, got " + ("Null" if v is None else type(v).__name__))`,
|
|
698
|
+
pInt: `def pInt(v, p):
|
|
699
|
+
if isinstance(v, bool): return pFail(p, "expected Int, got Bool")
|
|
700
|
+
if isinstance(v, int): return pOk(v, p)
|
|
701
|
+
if isinstance(v, str):
|
|
702
|
+
try: return pOk(int(v), p)
|
|
703
|
+
except: pass
|
|
704
|
+
return pFail(p, "expected Int, got " + ("Null" if v is None else repr(v) if isinstance(v, str) else type(v).__name__))`,
|
|
705
|
+
pFloat: `def pFloat(v, p):
|
|
706
|
+
if isinstance(v, bool): return pFail(p, "expected Float, got Bool")
|
|
707
|
+
if isinstance(v, (int, float)): return pOk(float(v), p)
|
|
708
|
+
if isinstance(v, str):
|
|
709
|
+
try: return pOk(float(v), p)
|
|
710
|
+
except: pass
|
|
711
|
+
return pFail(p, "expected Float, got " + ("Null" if v is None else repr(v) if isinstance(v, str) else type(v).__name__))`,
|
|
712
|
+
pBool: `def pBool(v, p):
|
|
713
|
+
if isinstance(v, bool): return pOk(v, p)
|
|
714
|
+
if v == "true": return pOk(True, p)
|
|
715
|
+
if v == "false": return pOk(False, p)
|
|
716
|
+
return pFail(p, "expected Bool, got " + ("Null" if v is None else repr(v) if isinstance(v, str) else type(v).__name__))`,
|
|
717
|
+
pDatetime: `def pDatetime(v, p):
|
|
718
|
+
if isinstance(v, _dt.datetime): return pOk(v, p)
|
|
719
|
+
if isinstance(v, str):
|
|
720
|
+
try: return pOk(kParseDatetime(v), p)
|
|
721
|
+
except: pass
|
|
722
|
+
return pFail(p, "expected Datetime, got " + ("Null" if v is None else "invalid datetime " + repr(v) if isinstance(v, str) else type(v).__name__))`,
|
|
723
|
+
pSchema: `def pSchema(props, extras_mode, extras_parser=None):
|
|
724
|
+
known_keys = [p[0] for p in props]
|
|
725
|
+
def parser(v, p):
|
|
726
|
+
if not isinstance(v, dict): return pFail(p, "expected object, got " + ("Null" if v is None else type(v).__name__))
|
|
727
|
+
o = {}
|
|
728
|
+
for key, prop_parser, optional in props:
|
|
729
|
+
val = v.get(key)
|
|
730
|
+
if optional and val is None:
|
|
731
|
+
continue
|
|
732
|
+
r = prop_parser(val, p + "." + key)
|
|
733
|
+
if not r["success"]: return pFail(p, None, [r])
|
|
734
|
+
o[key] = r["value"]
|
|
735
|
+
if extras_mode == "closed":
|
|
736
|
+
for k in v:
|
|
737
|
+
if k not in known_keys: return pFail(p + "." + k, "unexpected attribute")
|
|
738
|
+
elif extras_mode == "typed" and extras_parser is not None:
|
|
739
|
+
for k in v:
|
|
740
|
+
if k not in known_keys:
|
|
741
|
+
re = extras_parser(v[k], p + "." + k)
|
|
742
|
+
if not re["success"]: return pFail(p, None, [re])
|
|
743
|
+
o[k] = re["value"]
|
|
744
|
+
return pOk(o, p)
|
|
745
|
+
return parser`,
|
|
746
|
+
pArray: `def pArray(elem_parser):
|
|
747
|
+
def parser(v, p):
|
|
748
|
+
if not isinstance(v, list): return pFail(p, "expected array, got " + ("Null" if v is None else type(v).__name__))
|
|
749
|
+
a = []
|
|
750
|
+
for i, e in enumerate(v):
|
|
751
|
+
r = elem_parser(e, p + "." + str(i))
|
|
752
|
+
if not r["success"]: return pFail(p, None, [r])
|
|
753
|
+
a.append(r["value"])
|
|
754
|
+
return pOk(a, p)
|
|
755
|
+
return parser`,
|
|
756
|
+
pUnion: `def pUnion(parsers):
|
|
757
|
+
def parser(v, p):
|
|
758
|
+
causes = []
|
|
759
|
+
for up in parsers:
|
|
760
|
+
r = up(v, p)
|
|
761
|
+
if r["success"]: return r
|
|
762
|
+
causes.append(r)
|
|
763
|
+
return pFail(p, "no union alternative matched", causes)
|
|
764
|
+
return parser`,
|
|
765
|
+
pSubtype: `def pSubtype(base_parser, checks):
|
|
766
|
+
def parser(v, p):
|
|
767
|
+
r = base_parser(v, p)
|
|
768
|
+
if not r["success"]: return r
|
|
769
|
+
val = r["value"]
|
|
770
|
+
for label, check in checks:
|
|
771
|
+
if not check(val): return pFail(p, label)
|
|
772
|
+
return r
|
|
773
|
+
return parser`,
|
|
774
|
+
};
|
|
373
775
|
//# sourceMappingURL=runtime.js.map
|
package/dist/src/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|