@ecodev/natural 47.0.0 → 47.0.1

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.
@@ -10,7 +10,7 @@ export function formatIsoDate(date) {
10
10
  }
11
11
  /**
12
12
  * Format a date and time in a way that will preserve the local time zone.
13
- * This allow the server side to know the day (without time) that was selected on client side.
13
+ * This allows the server side to know the day (without time) that was selected on client side.
14
14
  *
15
15
  * So something like: "2021-09-23T17:57:16+09:00"
16
16
  */
@@ -46,7 +46,10 @@ export function relationsToIds(object) {
46
46
  const newObj = {};
47
47
  Object.keys(object).forEach(key => {
48
48
  let value = object[key];
49
- if (hasId(value)) {
49
+ if (value === null || value === undefined) {
50
+ // noop
51
+ }
52
+ else if (hasId(value)) {
50
53
  value = value.id;
51
54
  }
52
55
  else if (isArray(value)) {
@@ -165,4 +168,4 @@ export function deepFreeze(o) {
165
168
  Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));
166
169
  return Object.freeze(o);
167
170
  }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3V0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBWW5ELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBaUI7SUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFekIsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVU7SUFDeEMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtJQUNoRyxNQUFNLElBQUksR0FBRyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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SyxHQUFHLElBQUksQ0FBQztJQUNuQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDZixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFvQixDQUFJO0lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFvQixDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzQXJyYXksIGlzRW1wdHksIHBpY2tCeX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1JlYWRvbmx5RGVlcH0gZnJvbSAndHlwZS1mZXN0JztcblxuLyoqXG4gKiBWZXJ5IGJhc2ljIGZvcm1hdHRpbmcgdG8gZ2V0IG9ubHkgZGF0ZSwgd2l0aG91dCB0aW1lIGFuZCBpZ25vcmluZyBlbnRpcmVseSB0aGUgdGltZXpvbmVcbiAqXG4gKiBTbyBzb21ldGhpbmcgbGlrZTogXCIyMDIxLTA5LTIzXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogbnVsbCk6IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNvRGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBjb25zdCBkID0gZGF0ZS5nZXREYXRlKCk7XG5cbiAgICByZXR1cm4geSArICctJyArIChtIDwgMTAgPyAnMCcgOiAnJykgKyBtICsgJy0nICsgKGQgPCAxMCA/ICcwJyA6ICcnKSArIGQ7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgZGF0ZSBhbmQgdGltZSBpbiBhIHdheSB0aGF0IHdpbGwgcHJlc2VydmUgdGhlIGxvY2FsIHRpbWUgem9uZS5cbiAqIFRoaXMgYWxsb3cgdGhlIHNlcnZlciBzaWRlIHRvIGtub3cgdGhlIGRheSAod2l0aG91dCB0aW1lKSB0aGF0IHdhcyBzZWxlY3RlZCBvbiBjbGllbnQgc2lkZS5cbiAqXG4gKiBTbyBzb21ldGhpbmcgbGlrZTogXCIyMDIxLTA5LTIzVDE3OjU3OjE2KzA5OjAwXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGVUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0SW5NaW51dGVzID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA9IC1NYXRoLnRydW5jKHRpbWV6b25lT2Zmc2V0SW5NaW51dGVzIC8gNjApOyAvLyBVVEMgbWludXMgbG9jYWwgdGltZVxuICAgIGNvbnN0IHNpZ24gPSB0aW1lem9uZU9mZnNldEluSG91cnMgPj0gMCA/ICcrJyA6ICctJztcbiAgICBjb25zdCBob3Vyc0xlYWRpbmdaZXJvID0gTWF0aC5hYnModGltZXpvbmVPZmZzZXRJbkhvdXJzKSA8IDEwID8gJzAnIDogJyc7XG4gICAgY29uc3QgcmVtYWluZGVyTWludXRlcyA9IC0odGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgJSA2MCk7XG4gICAgY29uc3QgbWludXRlc0xlYWRpbmdaZXJvID0gTWF0aC5hYnMocmVtYWluZGVyTWludXRlcykgPCAxMCA/ICcwJyA6ICcnO1xuXG4gICAgLy8gSXQncyBhIGJpdCB1bmZvcnR1bmF0ZSB0aGF0IHdlIG5lZWQgdG8gY29uc3RydWN0IGEgbmV3IERhdGUgaW5zdGFuY2UsXG4gICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgdGhlIG9yaWdpbmFsIERhdGUgaW5zdGFuY2UgdG8gYmUgbW9kaWZpZWRcbiAgICBjb25zdCBjb3JyZWN0ZWREYXRlID0gbmV3IERhdGUoXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCksXG4gICAgKTtcbiAgICBjb3JyZWN0ZWREYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIHRpbWV6b25lT2Zmc2V0SW5Ib3Vycyk7XG5cbiAgICBjb25zdCBpc28gPSBjb3JyZWN0ZWREYXRlXG4gICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5cXGR7M31aLywgJycpXG4gICAgICAgIC5yZXBsYWNlKCdaJywgJycpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgaXNvICtcbiAgICAgICAgc2lnbiArXG4gICAgICAgIGhvdXJzTGVhZGluZ1plcm8gK1xuICAgICAgICBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpLnRvU3RyaW5nKCkgK1xuICAgICAgICAnOicgK1xuICAgICAgICBtaW51dGVzTGVhZGluZ1plcm8gK1xuICAgICAgICByZW1haW5kZXJNaW51dGVzXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZWxhdGlvbnMgdG8gZnVsbCBvYmplY3RzIGFyZSBjb252ZXJ0ZWQgdG8gdGhlaXIgSURzIG9ubHkuXG4gKlxuICogU28ge3VzZXI6IHtpZDogMTIzfX0gYmVjb21lcyB7dXNlcjogMTIzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpb25zVG9JZHMob2JqZWN0OiBMaXRlcmFsKTogTGl0ZXJhbCB7XG4gICAgY29uc3QgbmV3T2JqOiBMaXRlcmFsID0ge307XG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTogdW5rbm93biA9IG9iamVjdFtrZXldO1xuICAgICAgICBpZiAoaGFzSWQodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmlkO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcCgoaTogdW5rbm93bikgPT4gKGhhc0lkKGkpID8gaS5pZCA6IGkpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGlja0J5KHZhbHVlLCAodiwgaykgPT4gayAhPT0gJ19fdHlwZW5hbWUnKTsgLy8gb21pdCh2YWx1ZSwgWydfX3R5cGVuYW1lJ10pID9cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld09ialtrZXldID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuXG5mdW5jdGlvbiBoYXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHtpZDogdW5rbm93bn0ge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiB2YWx1ZSAmJiAhIXZhbHVlLmlkO1xufVxuXG4vKipcbiAqIFJlbW92ZSBmcm9tIHNvdXJjZSBvYmplY3QgdGhlIGF0dHJpYnV0ZXMgd2l0aCBzYW1lIHZhbHVlIGFzIG1vZGlmaWVkXG4gKiBEb2VzIG5vdCBjb25zaWRlciBhcnJheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuU2FtZVZhbHVlcyhzb3VyY2U6IExpdGVyYWwsIG1vZGlmaWVkOiBMaXRlcmFsKTogTGl0ZXJhbCB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChzb3VyY2Vba2V5XSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgY2xlYW5TYW1lVmFsdWVzKHNvdXJjZVtrZXldLCBtb2RpZmllZFtrZXldKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtb2RpZmllZCAmJiBzb3VyY2Vba2V5XSA9PT0gbW9kaWZpZWRba2V5XSkge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc291cmNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsdXJhbCBmb3JtIG9mIHRoZSBnaXZlbiBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGx1cmFsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGx1cmFsID0gbmFtZSArICdzJztcblxuICAgIHJldHVybiBwbHVyYWwucmVwbGFjZSgveXMkLywgJ2llcycpLnJlcGxhY2UoL3NzJC8sICdzZXMnKS5yZXBsYWNlKC94cyQvLCAneGVzJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggdGhlIGZpcnN0IGxldHRlciBhcyBjYXBpdGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cHBlckNhc2VGaXJzdExldHRlcih0ZXJtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXJtLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGVybS5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCB0aGUgZmlyc3QgbGV0dGVyIGFzIGxvd2VyIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvd2VyQ2FzZUZpcnN0TGV0dGVyKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyB0ZXJtLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgYWxsIGF0dHJpYnV0ZXMgb2YgZmlyc3Qgb2JqZWN0IHdpdGggdGhlIG9uZXMgcHJvdmlkZWQgYnkgdGhlIHNlY29uZCwgYnV0IGtlZXBzIHRoZSByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKG9iajogTGl0ZXJhbCB8IG51bGwsIG5ld09iajogTGl0ZXJhbCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCAhbmV3T2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXMobmV3T2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIG9ialtrZXldID0gbmV3T2JqW2tleV07XG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0IGNvbnRyYXN0ZWQgY29sb3IgZm9yIHRleHQgaW4gdGhlIHNsaWRlciB0aHVtYlxuICogQHBhcmFtIGhleEJnQ29sb3Igc3RyaW5nIGluIGhleGFkZWNpbWFscyByZXByZXNlbnRpbmcgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcmVncm91bmRDb2xvcihoZXhCZ0NvbG9yOiBzdHJpbmcpOiAnYmxhY2snIHwgJ3doaXRlJyB7XG4gICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4QmdDb2xvci5zbGljZSgwLCA3KSk7IC8vIHNwbGljZSByZW1vdmUgYWxwaGEgYW5kIGNvbnNpZGVyIG9ubHkgXCJ2aXNpYmxlXCIgY29sb3IgYXQgMTAwJSBhbHBoYVxuICAgIGNvbnN0IG8gPSBNYXRoLnJvdW5kKChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMCk7XG5cbiAgICByZXR1cm4gbyA+IDEyNSA/ICdibGFjaycgOiAnd2hpdGUnO1xufVxuXG5mdW5jdGlvbiBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHtyOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyfSB7XG4gICAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxuICAgIGNvbnN0IHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgICBoZXggPSBoZXgucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgKG0sIHIsIGcsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHI6IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpLFxuICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcbiAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcjogMCxcbiAgICAgICAgICAgICAgZzogMCxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICB9O1xufVxuXG4vKipcbiAqIER1cmluZyBsb2Rhc2gubWVyZ2VXaXRoLCBvdmVycmlkZXMgYXJyYXlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJyaWRlQXJyYXkoZGVzdFZhbHVlOiBhbnksIHNvdXJjZTogYW55KTogYW55IHtcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxufVxuXG4vKipcbiAqIENvcHkgdGV4dCB0byBjbGlwYm9hcmQuXG4gKiBBY2NlcHRzIGxpbmUgYnJlYWtzIGBcXG5gIGFzIHRleHRhcmVhIGRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKGRvY3VtZW50OiBEb2N1bWVudCwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGlucHV0KTtcbiAgICBpbnB1dC52YWx1ZSA9IHRleHQ7XG4gICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBGcmVlemU8VCBleHRlbmRzIExpdGVyYWw+KG86IFQpOiBSZWFkb25seURlZXA8VD4ge1xuICAgIE9iamVjdC52YWx1ZXMobykuZm9yRWFjaCh2ID0+IE9iamVjdC5pc0Zyb3plbih2KSB8fCBkZWVwRnJlZXplKHYpKTtcblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG8pIGFzIFJlYWRvbmx5RGVlcDxUPjtcbn1cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3V0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBWW5ELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBaUI7SUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFekIsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVU7SUFDeEMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtJQUNoRyxNQUFNLElBQUksR0FBRyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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akQsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDbkIsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2YsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBb0IsQ0FBSTtJQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc0FycmF5LCBpc0VtcHR5LCBwaWNrQnl9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB0eXBlIHtSZWFkb25seURlZXB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogVmVyeSBiYXNpYyBmb3JtYXR0aW5nIHRvIGdldCBvbmx5IGRhdGUsIHdpdGhvdXQgdGltZSBhbmQgaWdub3JpbmcgZW50aXJlbHkgdGhlIHRpbWV6b25lXG4gKlxuICogU28gc29tZXRoaW5nIGxpa2U6IFwiMjAyMS0wOS0yM1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IG51bGwpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgcmV0dXJuIHkgKyAnLScgKyAobSA8IDEwID8gJzAnIDogJycpICsgbSArICctJyArIChkIDwgMTAgPyAnMCcgOiAnJykgKyBkO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYW5kIHRpbWUgaW4gYSB3YXkgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBsb2NhbCB0aW1lIHpvbmUuXG4gKiBUaGlzIGFsbG93cyB0aGUgc2VydmVyIHNpZGUgdG8ga25vdyB0aGUgZGF5ICh3aXRob3V0IHRpbWUpIHRoYXQgd2FzIHNlbGVjdGVkIG9uIGNsaWVudCBzaWRlLlxuICpcbiAqIFNvIHNvbWV0aGluZyBsaWtlOiBcIjIwMjEtMDktMjNUMTc6NTc6MTYrMDk6MDBcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLU1hdGgudHJ1bmModGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgLyA2MCk7IC8vIFVUQyBtaW51cyBsb2NhbCB0aW1lXG4gICAgY29uc3Qgc2lnbiA9IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA+PSAwID8gJysnIDogJy0nO1xuICAgIGNvbnN0IGhvdXJzTGVhZGluZ1plcm8gPSBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpIDwgMTAgPyAnMCcgOiAnJztcbiAgICBjb25zdCByZW1haW5kZXJNaW51dGVzID0gLSh0aW1lem9uZU9mZnNldEluTWludXRlcyAlIDYwKTtcbiAgICBjb25zdCBtaW51dGVzTGVhZGluZ1plcm8gPSBNYXRoLmFicyhyZW1haW5kZXJNaW51dGVzKSA8IDEwID8gJzAnIDogJyc7XG5cbiAgICAvLyBJdCdzIGEgYml0IHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgRGF0ZSBpbnN0YW5jZSxcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgb3JpZ2luYWwgRGF0ZSBpbnN0YW5jZSB0byBiZSBtb2RpZmllZFxuICAgIGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIGNvcnJlY3RlZERhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKTtcblxuICAgIGNvbnN0IGlzbyA9IGNvcnJlY3RlZERhdGVcbiAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcLlxcZHszfVovLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ1onLCAnJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBpc28gK1xuICAgICAgICBzaWduICtcbiAgICAgICAgaG91cnNMZWFkaW5nWmVybyArXG4gICAgICAgIE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykudG9TdHJpbmcoKSArXG4gICAgICAgICc6JyArXG4gICAgICAgIG1pbnV0ZXNMZWFkaW5nWmVybyArXG4gICAgICAgIHJlbWFpbmRlck1pbnV0ZXNcbiAgICApO1xufVxuXG4vKipcbiAqIFJlbGF0aW9ucyB0byBmdWxsIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byB0aGVpciBJRHMgb25seS5cbiAqXG4gKiBTbyB7dXNlcjoge2lkOiAxMjN9fSBiZWNvbWVzIHt1c2VyOiAxMjN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbnNUb0lkcyhvYmplY3Q6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBjb25zdCBuZXdPYmo6IExpdGVyYWwgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpOiB1bmtub3duKSA9PiAoaGFzSWQoaSkgPyBpLmlkIDogaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwaWNrQnkodmFsdWUsICh2LCBrKSA9PiBrICE9PSAnX190eXBlbmFtZScpOyAvLyBvbWl0KHZhbHVlLCBbJ19fdHlwZW5hbWUnXSkgP1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5cbmZ1bmN0aW9uIGhhc0lkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMge2lkOiB1bmtub3dufSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlICYmICEhdmFsdWUuaWQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIGZyb20gc291cmNlIG9iamVjdCB0aGUgYXR0cmlidXRlcyB3aXRoIHNhbWUgdmFsdWUgYXMgbW9kaWZpZWRcbiAqIERvZXMgbm90IGNvbnNpZGVyIGFycmF5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TYW1lVmFsdWVzKHNvdXJjZTogTGl0ZXJhbCwgbW9kaWZpZWQ6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHNvdXJjZVtrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGVhblNhbWVWYWx1ZXMoc291cmNlW2tleV0sIG1vZGlmaWVkW2tleV0pO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoc291cmNlW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGlmaWVkICYmIHNvdXJjZVtrZXldID09PSBtb2RpZmllZFtrZXldKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzb3VyY2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGx1cmFsIGZvcm0gb2YgdGhlIGdpdmVuIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQbHVyYWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwbHVyYWwgPSBuYW1lICsgJ3MnO1xuXG4gICAgcmV0dXJuIHBsdXJhbC5yZXBsYWNlKC95cyQvLCAnaWVzJykucmVwbGFjZSgvc3MkLywgJ3NlcycpLnJlcGxhY2UoL3hzJC8sICd4ZXMnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCB0aGUgZmlyc3QgbGV0dGVyIGFzIGNhcGl0YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXJtLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHRoZSBmaXJzdCBsZXR0ZXIgYXMgbG93ZXIgY2FzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG93ZXJDYXNlRmlyc3RMZXR0ZXIodGVybTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGVybS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHRlcm0uc2xpY2UoMSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBhbGwgYXR0cmlidXRlcyBvZiBmaXJzdCBvYmplY3Qgd2l0aCB0aGUgb25lcyBwcm92aWRlZCBieSB0aGUgc2Vjb25kLCBidXQga2VlcHMgdGhlIHJlZmVyZW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2Uob2JqOiBMaXRlcmFsIHwgbnVsbCwgbmV3T2JqOiBMaXRlcmFsIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghb2JqIHx8ICFuZXdPYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfSk7XG5cbiAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgb2JqW2tleV0gPSBuZXdPYmpba2V5XTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgY29udHJhc3RlZCBjb2xvciBmb3IgdGV4dCBpbiB0aGUgc2xpZGVyIHRodW1iXG4gKiBAcGFyYW0gaGV4QmdDb2xvciBzdHJpbmcgaW4gaGV4YWRlY2ltYWxzIHJlcHJlc2VudGluZyB0aGUgYmFja2dyb3VuZCBjb2xvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9yZWdyb3VuZENvbG9yKGhleEJnQ29sb3I6IHN0cmluZyk6ICdibGFjaycgfCAnd2hpdGUnIHtcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JnYihoZXhCZ0NvbG9yLnNsaWNlKDAsIDcpKTsgLy8gc3BsaWNlIHJlbW92ZSBhbHBoYSBhbmQgY29uc2lkZXIgb25seSBcInZpc2libGVcIiBjb2xvciBhdCAxMDAlIGFscGhhXG4gICAgY29uc3QgbyA9IE1hdGgucm91bmQoKHJnYi5yICogMjk5ICsgcmdiLmcgKiA1ODcgKyByZ2IuYiAqIDExNCkgLyAxMDAwKTtcblxuICAgIHJldHVybiBvID4gMTI1ID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG59XG5cbmZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nKToge3I6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXJ9IHtcbiAgICAvLyBFeHBhbmQgc2hvcnRoYW5kIGZvcm0gKGUuZy4gXCIwM0ZcIikgdG8gZnVsbCBmb3JtIChlLmcuIFwiMDAzM0ZGXCIpXG4gICAgY29uc3Qgc2hvcnRoYW5kUmVnZXggPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xuICAgIGhleCA9IGhleC5yZXBsYWNlKHNob3J0aGFuZFJlZ2V4LCAobSwgciwgZywgYikgPT4ge1xuICAgICAgICByZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gL14jPyhbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KSQvaS5leGVjKGhleCk7XG4gICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICByOiAwLFxuICAgICAgICAgICAgICBnOiAwLFxuICAgICAgICAgICAgICBiOiAwLFxuICAgICAgICAgIH07XG59XG5cbi8qKlxuICogRHVyaW5nIGxvZGFzaC5tZXJnZVdpdGgsIG92ZXJyaWRlcyBhcnJheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcnJpZGVBcnJheShkZXN0VmFsdWU6IGFueSwgc291cmNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG59XG5cbi8qKlxuICogQ29weSB0ZXh0IHRvIGNsaXBib2FyZC5cbiAqIEFjY2VwdHMgbGluZSBicmVha3MgYFxcbmAgYXMgdGV4dGFyZWEgZG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQoZG9jdW1lbnQ6IERvY3VtZW50LCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoaW5wdXQpO1xuICAgIGlucHV0LnZhbHVlID0gdGV4dDtcbiAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZyZWV6ZTxUIGV4dGVuZHMgTGl0ZXJhbD4obzogVCk6IFJlYWRvbmx5RGVlcDxUPiB7XG4gICAgT2JqZWN0LnZhbHVlcyhvKS5mb3JFYWNoKHYgPT4gT2JqZWN0LmlzRnJvemVuKHYpIHx8IGRlZXBGcmVlemUodikpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUobykgYXMgUmVhZG9ubHlEZWVwPFQ+O1xufVxuIl19
@@ -228,7 +228,7 @@ function formatIsoDate(date) {
228
228
  }
229
229
  /**
230
230
  * Format a date and time in a way that will preserve the local time zone.
231
- * This allow the server side to know the day (without time) that was selected on client side.
231
+ * This allows the server side to know the day (without time) that was selected on client side.
232
232
  *
233
233
  * So something like: "2021-09-23T17:57:16+09:00"
234
234
  */
@@ -264,7 +264,10 @@ function relationsToIds(object) {
264
264
  const newObj = {};
265
265
  Object.keys(object).forEach(key => {
266
266
  let value = object[key];
267
- if (hasId(value)) {
267
+ if (value === null || value === undefined) {
268
+ // noop
269
+ }
270
+ else if (hasId(value)) {
268
271
  value = value.id;
269
272
  }
270
273
  else if (isArray(value)) {