@edge.app/drupe
Advanced tools
| import { type Cleaner } from "cleaners"; | ||
| import type { MangoSelector } from "./types"; | ||
| export declare const asMangoSelector: Cleaner<MangoSelector>; |
| /** | ||
| * Adds location information to an error message. | ||
| * | ||
| * Errors can occur inside deeply-nested cleaners, | ||
| * such as "TypeError: Expected a string at .array[0].some.property". | ||
| * To build this information, each cleaner along the path | ||
| * should add its own location information as the stack unwinds. | ||
| * | ||
| * If the error has a `insertStepAt` property, that is the character offset | ||
| * where the next step will go in the error message. Otherwise, | ||
| * the next step just goes on the end of the string with the word "at". | ||
| */ | ||
| export declare function locateError(error: unknown, step: string, offset: number): unknown; |
+73
-1513
@@ -1,3 +0,1 @@ | ||
| var __create = Object.create; | ||
| var __getProtoOf = Object.getPrototypeOf; | ||
| var __defProp = Object.defineProperty; | ||
@@ -7,13 +5,2 @@ var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __toESM = (mod, isNodeMode, target) => { | ||
| target = mod != null ? __create(__getProtoOf(mod)) : {}; | ||
| const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; | ||
| for (let key of __getOwnPropNames(mod)) | ||
| if (!__hasOwnProp.call(to, key)) | ||
| __defProp(to, key, { | ||
| get: () => mod[key], | ||
| enumerable: true | ||
| }); | ||
| return to; | ||
| }; | ||
| var __moduleCache = /* @__PURE__ */ new WeakMap; | ||
@@ -33,3 +20,2 @@ var __toCommonJS = (from) => { | ||
| }; | ||
| var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); | ||
| var __export = (target, all) => { | ||
@@ -45,1527 +31,101 @@ for (var name in all) | ||
| // node_modules/spark-md5/spark-md5.js | ||
| var require_spark_md5 = __commonJS((exports2, module2) => { | ||
| (function(factory) { | ||
| if (typeof exports2 === "object") { | ||
| module2.exports = factory(); | ||
| } else if (typeof define === "function" && define.amd) { | ||
| define(factory); | ||
| } else { | ||
| var glob; | ||
| try { | ||
| glob = window; | ||
| } catch (e) { | ||
| glob = self; | ||
| } | ||
| glob.SparkMD5 = factory(); | ||
| } | ||
| })(function(undefined2) { | ||
| var add32 = function(a, b) { | ||
| return a + b & 4294967295; | ||
| }, hex_chr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; | ||
| function cmn(q, a, b, x, s, t) { | ||
| a = add32(add32(a, q), add32(x, t)); | ||
| return add32(a << s | a >>> 32 - s, b); | ||
| } | ||
| function md5cycle(x, k) { | ||
| var a = x[0], b = x[1], c = x[2], d = x[3]; | ||
| a += (b & c | ~b & d) + k[0] - 680876936 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[1] - 389564586 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[2] + 606105819 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[3] - 1044525330 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[4] - 176418897 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[5] + 1200080426 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[6] - 1473231341 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[7] - 45705983 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[8] + 1770035416 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[9] - 1958414417 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[10] - 42063 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[11] - 1990404162 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[12] + 1804603682 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[13] - 40341101 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[14] - 1502002290 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[15] + 1236535329 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & d | c & ~d) + k[1] - 165796510 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[6] - 1069501632 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[11] + 643717713 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[0] - 373897302 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[5] - 701558691 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[10] + 38016083 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[15] - 660478335 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[4] - 405537848 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[9] + 568446438 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[14] - 1019803690 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[3] - 187363961 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[8] + 1163531501 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[13] - 1444681467 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[2] - 51403784 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[7] + 1735328473 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[12] - 1926607734 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b ^ c ^ d) + k[5] - 378558 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[8] - 2022574463 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[11] + 1839030562 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[14] - 35309556 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[1] - 1530992060 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[4] + 1272893353 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[7] - 155497632 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[10] - 1094730640 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[13] + 681279174 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[0] - 358537222 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[3] - 722521979 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[6] + 76029189 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[9] - 640364487 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[12] - 421815835 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[15] + 530742520 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[2] - 995338651 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| x[0] = a + x[0] | 0; | ||
| x[1] = b + x[1] | 0; | ||
| x[2] = c + x[2] | 0; | ||
| x[3] = d + x[3] | 0; | ||
| } | ||
| function md5blk(s) { | ||
| var md5blks = [], i; | ||
| for (i = 0;i < 64; i += 4) { | ||
| md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); | ||
| } | ||
| return md5blks; | ||
| } | ||
| function md5blk_array(a) { | ||
| var md5blks = [], i; | ||
| for (i = 0;i < 64; i += 4) { | ||
| md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); | ||
| } | ||
| return md5blks; | ||
| } | ||
| function md51(s) { | ||
| var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; | ||
| for (i = 64;i <= n; i += 64) { | ||
| md5cycle(state, md5blk(s.substring(i - 64, i))); | ||
| } | ||
| s = s.substring(i - 64); | ||
| length = s.length; | ||
| tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3); | ||
| } | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(state, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = n * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(state, tail); | ||
| return state; | ||
| } | ||
| function md51_array(a) { | ||
| var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; | ||
| for (i = 64;i <= n; i += 64) { | ||
| md5cycle(state, md5blk_array(a.subarray(i - 64, i))); | ||
| } | ||
| a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0); | ||
| length = a.length; | ||
| tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= a[i] << (i % 4 << 3); | ||
| } | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(state, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = n * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(state, tail); | ||
| return state; | ||
| } | ||
| function rhex(n) { | ||
| var s = "", j; | ||
| for (j = 0;j < 4; j += 1) { | ||
| s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15]; | ||
| } | ||
| return s; | ||
| } | ||
| function hex(x) { | ||
| var i; | ||
| for (i = 0;i < x.length; i += 1) { | ||
| x[i] = rhex(x[i]); | ||
| } | ||
| return x.join(""); | ||
| } | ||
| if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") { | ||
| add32 = function(x, y) { | ||
| var lsw = (x & 65535) + (y & 65535), msw = (x >> 16) + (y >> 16) + (lsw >> 16); | ||
| return msw << 16 | lsw & 65535; | ||
| }; | ||
| } | ||
| if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) { | ||
| (function() { | ||
| function clamp(val, length) { | ||
| val = val | 0 || 0; | ||
| if (val < 0) { | ||
| return Math.max(val + length, 0); | ||
| } | ||
| return Math.min(val, length); | ||
| } | ||
| ArrayBuffer.prototype.slice = function(from, to) { | ||
| var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray; | ||
| if (to !== undefined2) { | ||
| end = clamp(to, length); | ||
| } | ||
| if (begin > end) { | ||
| return new ArrayBuffer(0); | ||
| } | ||
| num = end - begin; | ||
| target = new ArrayBuffer(num); | ||
| targetArray = new Uint8Array(target); | ||
| sourceArray = new Uint8Array(this, begin, num); | ||
| targetArray.set(sourceArray); | ||
| return target; | ||
| }; | ||
| })(); | ||
| } | ||
| function toUtf8(str) { | ||
| if (/[\u0080-\uFFFF]/.test(str)) { | ||
| str = unescape(encodeURIComponent(str)); | ||
| } | ||
| return str; | ||
| } | ||
| function utf8Str2ArrayBuffer(str, returnUInt8Array) { | ||
| var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i; | ||
| for (i = 0;i < length; i += 1) { | ||
| arr[i] = str.charCodeAt(i); | ||
| } | ||
| return returnUInt8Array ? arr : buff; | ||
| } | ||
| function arrayBuffer2Utf8Str(buff) { | ||
| return String.fromCharCode.apply(null, new Uint8Array(buff)); | ||
| } | ||
| function concatenateArrayBuffers(first, second, returnUInt8Array) { | ||
| var result = new Uint8Array(first.byteLength + second.byteLength); | ||
| result.set(new Uint8Array(first)); | ||
| result.set(new Uint8Array(second), first.byteLength); | ||
| return returnUInt8Array ? result : result.buffer; | ||
| } | ||
| function hexToBinaryString(hex2) { | ||
| var bytes = [], length = hex2.length, x; | ||
| for (x = 0;x < length - 1; x += 2) { | ||
| bytes.push(parseInt(hex2.substr(x, 2), 16)); | ||
| } | ||
| return String.fromCharCode.apply(String, bytes); | ||
| } | ||
| function SparkMD5() { | ||
| this.reset(); | ||
| } | ||
| SparkMD5.prototype.append = function(str) { | ||
| this.appendBinary(toUtf8(str)); | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.appendBinary = function(contents) { | ||
| this._buff += contents; | ||
| this._length += contents.length; | ||
| var length = this._buff.length, i; | ||
| for (i = 64;i <= length; i += 64) { | ||
| md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i))); | ||
| } | ||
| this._buff = this._buff.substring(i - 64); | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.end = function(raw) { | ||
| var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3); | ||
| } | ||
| this._finish(tail, length); | ||
| ret = hex(this._hash); | ||
| if (raw) { | ||
| ret = hexToBinaryString(ret); | ||
| } | ||
| this.reset(); | ||
| return ret; | ||
| }; | ||
| SparkMD5.prototype.reset = function() { | ||
| this._buff = ""; | ||
| this._length = 0; | ||
| this._hash = [1732584193, -271733879, -1732584194, 271733878]; | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.getState = function() { | ||
| return { | ||
| buff: this._buff, | ||
| length: this._length, | ||
| hash: this._hash.slice() | ||
| }; | ||
| }; | ||
| SparkMD5.prototype.setState = function(state) { | ||
| this._buff = state.buff; | ||
| this._length = state.length; | ||
| this._hash = state.hash; | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.destroy = function() { | ||
| delete this._hash; | ||
| delete this._buff; | ||
| delete this._length; | ||
| }; | ||
| SparkMD5.prototype._finish = function(tail, length) { | ||
| var i = length, tmp, lo, hi; | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(this._hash, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = this._length * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(this._hash, tail); | ||
| }; | ||
| SparkMD5.hash = function(str, raw) { | ||
| return SparkMD5.hashBinary(toUtf8(str), raw); | ||
| }; | ||
| SparkMD5.hashBinary = function(content, raw) { | ||
| var hash = md51(content), ret = hex(hash); | ||
| return raw ? hexToBinaryString(ret) : ret; | ||
| }; | ||
| SparkMD5.ArrayBuffer = function() { | ||
| this.reset(); | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.append = function(arr) { | ||
| var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i; | ||
| this._length += arr.byteLength; | ||
| for (i = 64;i <= length; i += 64) { | ||
| md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i))); | ||
| } | ||
| this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0); | ||
| return this; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.end = function(raw) { | ||
| var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= buff[i] << (i % 4 << 3); | ||
| } | ||
| this._finish(tail, length); | ||
| ret = hex(this._hash); | ||
| if (raw) { | ||
| ret = hexToBinaryString(ret); | ||
| } | ||
| this.reset(); | ||
| return ret; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.reset = function() { | ||
| this._buff = new Uint8Array(0); | ||
| this._length = 0; | ||
| this._hash = [1732584193, -271733879, -1732584194, 271733878]; | ||
| return this; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.getState = function() { | ||
| var state = SparkMD5.prototype.getState.call(this); | ||
| state.buff = arrayBuffer2Utf8Str(state.buff); | ||
| return state; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.setState = function(state) { | ||
| state.buff = utf8Str2ArrayBuffer(state.buff, true); | ||
| return SparkMD5.prototype.setState.call(this, state); | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; | ||
| SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; | ||
| SparkMD5.ArrayBuffer.hash = function(arr, raw) { | ||
| var hash = md51_array(new Uint8Array(arr)), ret = hex(hash); | ||
| return raw ? hexToBinaryString(ret) : ret; | ||
| }; | ||
| return SparkMD5; | ||
| }); | ||
| }); | ||
| // src/index.ts | ||
| var exports_src = {}; | ||
| __export(exports_src, { | ||
| drupe: () => drupe | ||
| drupe: () => drupe, | ||
| asMangoSelector: () => asMangoSelector | ||
| }); | ||
| module.exports = __toCommonJS(exports_src); | ||
| var import_pouchdb_selector_core = require("pouchdb-selector-core"); | ||
| // node_modules/pouchdb-errors/lib/index.es.js | ||
| class PouchError extends Error { | ||
| constructor(status, error, reason) { | ||
| super(); | ||
| this.status = status; | ||
| this.name = error; | ||
| this.message = reason; | ||
| this.error = true; | ||
| } | ||
| toString() { | ||
| return JSON.stringify({ | ||
| status: this.status, | ||
| name: this.name, | ||
| message: this.message, | ||
| reason: this.reason | ||
| }); | ||
| } | ||
| } | ||
| var UNAUTHORIZED = new PouchError(401, "unauthorized", "Name or password is incorrect."); | ||
| var MISSING_BULK_DOCS = new PouchError(400, "bad_request", "Missing JSON list of 'docs'"); | ||
| var MISSING_DOC = new PouchError(404, "not_found", "missing"); | ||
| var REV_CONFLICT = new PouchError(409, "conflict", "Document update conflict"); | ||
| var INVALID_ID = new PouchError(400, "bad_request", "_id field must contain a string"); | ||
| var MISSING_ID = new PouchError(412, "missing_id", "_id is required for puts"); | ||
| var RESERVED_ID = new PouchError(400, "bad_request", "Only reserved document ids may start with underscore."); | ||
| var NOT_OPEN = new PouchError(412, "precondition_failed", "Database not open"); | ||
| var UNKNOWN_ERROR = new PouchError(500, "unknown_error", "Database encountered an unknown error"); | ||
| var BAD_ARG = new PouchError(500, "badarg", "Some query argument is invalid"); | ||
| var INVALID_REQUEST = new PouchError(400, "invalid_request", "Request was invalid"); | ||
| var QUERY_PARSE_ERROR = new PouchError(400, "query_parse_error", "Some query parameter is invalid"); | ||
| var DOC_VALIDATION = new PouchError(500, "doc_validation", "Bad special document member"); | ||
| var BAD_REQUEST = new PouchError(400, "bad_request", "Something wrong with the request"); | ||
| var NOT_AN_OBJECT = new PouchError(400, "bad_request", "Document must be a JSON object"); | ||
| var DB_MISSING = new PouchError(404, "not_found", "Database not found"); | ||
| var IDB_ERROR = new PouchError(500, "indexed_db_went_bad", "unknown"); | ||
| var WSQ_ERROR = new PouchError(500, "web_sql_went_bad", "unknown"); | ||
| var LDB_ERROR = new PouchError(500, "levelDB_went_went_bad", "unknown"); | ||
| var FORBIDDEN = new PouchError(403, "forbidden", "Forbidden by design doc validate_doc_update function"); | ||
| var INVALID_REV = new PouchError(400, "bad_request", "Invalid rev format"); | ||
| var FILE_EXISTS = new PouchError(412, "file_exists", "The database could not be created, the file already exists."); | ||
| var MISSING_STUB = new PouchError(412, "missing_stub", "A pre-existing attachment stub wasn't found"); | ||
| var INVALID_URL = new PouchError(413, "invalid_url", "Provided URL is invalid"); | ||
| // src/cleaners.ts | ||
| var import_cleaners = require("cleaners"); | ||
| // node:events | ||
| var SymbolFor = Symbol.for; | ||
| var kCapture = Symbol("kCapture"); | ||
| var kErrorMonitor = SymbolFor("events.errorMonitor"); | ||
| var kMaxEventTargetListeners = Symbol("events.maxEventTargetListeners"); | ||
| var kMaxEventTargetListenersWarned = Symbol("events.maxEventTargetListenersWarned"); | ||
| var kRejection = SymbolFor("nodejs.rejection"); | ||
| var captureRejectionSymbol = SymbolFor("nodejs.rejection"); | ||
| var ArrayPrototypeSlice = Array.prototype.slice; | ||
| var defaultMaxListeners = 10; | ||
| var EventEmitter = function EventEmitter2(opts) { | ||
| if (this._events === undefined || this._events === this.__proto__._events) | ||
| this._events = { __proto__: null }, this._eventsCount = 0; | ||
| if (this._maxListeners ??= undefined, this[kCapture] = opts?.captureRejections ? Boolean(opts?.captureRejections) : EventEmitterPrototype[kCapture]) | ||
| this.emit = emitWithRejectionCapture; | ||
| }; | ||
| var EventEmitterPrototype = EventEmitter.prototype = {}; | ||
| EventEmitterPrototype._events = undefined; | ||
| EventEmitterPrototype._eventsCount = 0; | ||
| EventEmitterPrototype._maxListeners = undefined; | ||
| EventEmitterPrototype.setMaxListeners = function setMaxListeners(n) { | ||
| return validateNumber(n, "setMaxListeners", 0), this._maxListeners = n, this; | ||
| }; | ||
| EventEmitterPrototype.constructor = EventEmitter; | ||
| EventEmitterPrototype.getMaxListeners = function getMaxListeners() { | ||
| return this?._maxListeners ?? defaultMaxListeners; | ||
| }; | ||
| function emitError(emitter, args) { | ||
| var { _events: events } = emitter; | ||
| if (args[0] ??= new Error("Unhandled error."), !events) | ||
| throw args[0]; | ||
| var errorMonitor = events[kErrorMonitor]; | ||
| if (errorMonitor) | ||
| for (var handler of ArrayPrototypeSlice.call(errorMonitor)) | ||
| handler.apply(emitter, args); | ||
| var handlers = events.error; | ||
| if (!handlers) | ||
| throw args[0]; | ||
| for (var handler of ArrayPrototypeSlice.call(handlers)) | ||
| handler.apply(emitter, args); | ||
| return true; | ||
| } | ||
| function addCatch(emitter, promise, type, args) { | ||
| promise.then(undefined, function(err) { | ||
| queueMicrotask(() => emitUnhandledRejectionOrErr(emitter, err, type, args)); | ||
| }); | ||
| } | ||
| function emitUnhandledRejectionOrErr(emitter, err, type, args) { | ||
| if (typeof emitter[kRejection] === "function") | ||
| emitter[kRejection](err, type, ...args); | ||
| else | ||
| try { | ||
| emitter[kCapture] = false, emitter.emit("error", err); | ||
| } finally { | ||
| emitter[kCapture] = true; | ||
| // src/util/locateError.ts | ||
| function locateError(error, step, offset) { | ||
| if (isErrorWithInsertStepAt(error)) { | ||
| if (error.insertStepAt == null) { | ||
| error.message += " at "; | ||
| error.insertStepAt = error.message.length; | ||
| } | ||
| } | ||
| var emitWithoutRejectionCapture = function emit(type, ...args) { | ||
| if (type === "error") | ||
| return emitError(this, args); | ||
| var { _events: events } = this; | ||
| if (events === undefined) | ||
| return false; | ||
| var handlers = events[type]; | ||
| if (handlers === undefined) | ||
| return false; | ||
| let maybeClonedHandlers = handlers.length > 1 ? handlers.slice() : handlers; | ||
| for (let i = 0, { length } = maybeClonedHandlers;i < length; i++) { | ||
| let handler = maybeClonedHandlers[i]; | ||
| switch (args.length) { | ||
| case 0: | ||
| handler.call(this); | ||
| break; | ||
| case 1: | ||
| handler.call(this, args[0]); | ||
| break; | ||
| case 2: | ||
| handler.call(this, args[0], args[1]); | ||
| break; | ||
| case 3: | ||
| handler.call(this, args[0], args[1], args[2]); | ||
| break; | ||
| default: | ||
| handler.apply(this, args); | ||
| break; | ||
| } | ||
| error.message = error.message.slice(0, error.insertStepAt) + step + error.message.slice(error.insertStepAt); | ||
| error.insertStepAt += offset; | ||
| } | ||
| return true; | ||
| }; | ||
| var emitWithRejectionCapture = function emit2(type, ...args) { | ||
| if (type === "error") | ||
| return emitError(this, args); | ||
| var { _events: events } = this; | ||
| if (events === undefined) | ||
| return false; | ||
| var handlers = events[type]; | ||
| if (handlers === undefined) | ||
| return false; | ||
| let maybeClonedHandlers = handlers.length > 1 ? handlers.slice() : handlers; | ||
| for (let i = 0, { length } = maybeClonedHandlers;i < length; i++) { | ||
| let handler = maybeClonedHandlers[i], result; | ||
| switch (args.length) { | ||
| case 0: | ||
| result = handler.call(this); | ||
| break; | ||
| case 1: | ||
| result = handler.call(this, args[0]); | ||
| break; | ||
| case 2: | ||
| result = handler.call(this, args[0], args[1]); | ||
| break; | ||
| case 3: | ||
| result = handler.call(this, args[0], args[1], args[2]); | ||
| break; | ||
| default: | ||
| result = handler.apply(this, args); | ||
| break; | ||
| } | ||
| if (result !== undefined && typeof result?.then === "function" && result.then === Promise.prototype.then) | ||
| addCatch(this, result, type, args); | ||
| } | ||
| return true; | ||
| }; | ||
| EventEmitterPrototype.emit = emitWithoutRejectionCapture; | ||
| EventEmitterPrototype.addListener = function addListener(type, fn) { | ||
| checkListener(fn); | ||
| var events = this._events; | ||
| if (!events) | ||
| events = this._events = { __proto__: null }, this._eventsCount = 0; | ||
| else if (events.newListener) | ||
| this.emit("newListener", type, fn.listener ?? fn); | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| events[type] = [fn], this._eventsCount++; | ||
| else { | ||
| handlers.push(fn); | ||
| var m = this._maxListeners ?? defaultMaxListeners; | ||
| if (m > 0 && handlers.length > m && !handlers.warned) | ||
| overflowWarning(this, type, handlers); | ||
| } | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.on = EventEmitterPrototype.addListener; | ||
| EventEmitterPrototype.prependListener = function prependListener(type, fn) { | ||
| checkListener(fn); | ||
| var events = this._events; | ||
| if (!events) | ||
| events = this._events = { __proto__: null }, this._eventsCount = 0; | ||
| else if (events.newListener) | ||
| this.emit("newListener", type, fn.listener ?? fn); | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| events[type] = [fn], this._eventsCount++; | ||
| else { | ||
| handlers.unshift(fn); | ||
| var m = this._maxListeners ?? defaultMaxListeners; | ||
| if (m > 0 && handlers.length > m && !handlers.warned) | ||
| overflowWarning(this, type, handlers); | ||
| } | ||
| return this; | ||
| }; | ||
| function overflowWarning(emitter, type, handlers) { | ||
| handlers.warned = true; | ||
| let warn = new Error(`Possible EventEmitter memory leak detected. ${handlers.length} ${String(type)} listeners added to [${emitter.constructor.name}]. Use emitter.setMaxListeners() to increase limit`); | ||
| warn.name = "MaxListenersExceededWarning", warn.emitter = emitter, warn.type = type, warn.count = handlers.length, console.warn(warn); | ||
| return error; | ||
| } | ||
| function onceWrapper(type, listener, ...args) { | ||
| this.removeListener(type, listener), listener.apply(this, args); | ||
| } | ||
| EventEmitterPrototype.once = function once(type, fn) { | ||
| checkListener(fn); | ||
| let bound = onceWrapper.bind(this, type, fn); | ||
| return bound.listener = fn, this.addListener(type, bound), this; | ||
| }; | ||
| EventEmitterPrototype.prependOnceListener = function prependOnceListener(type, fn) { | ||
| checkListener(fn); | ||
| let bound = onceWrapper.bind(this, type, fn); | ||
| return bound.listener = fn, this.prependListener(type, bound), this; | ||
| }; | ||
| EventEmitterPrototype.removeListener = function removeListener(type, fn) { | ||
| checkListener(fn); | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return this; | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| return this; | ||
| var length = handlers.length; | ||
| let position = -1; | ||
| for (let i = length - 1;i >= 0; i--) | ||
| if (handlers[i] === fn || handlers[i].listener === fn) { | ||
| position = i; | ||
| break; | ||
| function isErrorWithInsertStepAt(error) { | ||
| if (error instanceof Error) { | ||
| if (!("insertStepAt" in error)) { | ||
| error.insertStepAt = null; | ||
| } | ||
| if (position < 0) | ||
| return this; | ||
| if (position === 0) | ||
| handlers.shift(); | ||
| else | ||
| handlers.splice(position, 1); | ||
| if (handlers.length === 0) | ||
| delete events[type], this._eventsCount--; | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.off = EventEmitterPrototype.removeListener; | ||
| EventEmitterPrototype.removeAllListeners = function removeAllListeners(type) { | ||
| var { _events: events } = this; | ||
| if (type && events) { | ||
| if (events[type]) | ||
| delete events[type], this._eventsCount--; | ||
| } else | ||
| this._events = { __proto__: null }; | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.listeners = function listeners(type) { | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return []; | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| return []; | ||
| return handlers.map((x) => x.listener ?? x); | ||
| }; | ||
| EventEmitterPrototype.rawListeners = function rawListeners(type) { | ||
| var { _events } = this; | ||
| if (!_events) | ||
| return []; | ||
| var handlers = _events[type]; | ||
| if (!handlers) | ||
| return []; | ||
| return handlers.slice(); | ||
| }; | ||
| EventEmitterPrototype.listenerCount = function listenerCount(type) { | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return 0; | ||
| return events[type]?.length ?? 0; | ||
| }; | ||
| EventEmitterPrototype.eventNames = function eventNames() { | ||
| return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; | ||
| }; | ||
| EventEmitterPrototype[kCapture] = false; | ||
| function once2(emitter, type, options) { | ||
| var signal = options?.signal; | ||
| if (validateAbortSignal(signal, "options.signal"), signal?.aborted) | ||
| throw new AbortError(undefined, { cause: signal?.reason }); | ||
| let { resolve, reject, promise } = $newPromiseCapability(Promise), errorListener = (err) => { | ||
| if (emitter.removeListener(type, resolver), signal != null) | ||
| eventTargetAgnosticRemoveListener(signal, "abort", abortListener); | ||
| reject(err); | ||
| }, resolver = (...args) => { | ||
| if (typeof emitter.removeListener === "function") | ||
| emitter.removeListener("error", errorListener); | ||
| if (signal != null) | ||
| eventTargetAgnosticRemoveListener(signal, "abort", abortListener); | ||
| resolve(args); | ||
| }; | ||
| if (eventTargetAgnosticAddListener(emitter, type, resolver, { once: true }), type !== "error" && typeof emitter.once === "function") | ||
| emitter.once("error", errorListener); | ||
| function abortListener() { | ||
| eventTargetAgnosticRemoveListener(emitter, type, resolver), eventTargetAgnosticRemoveListener(emitter, "error", errorListener), reject(new AbortError(undefined, { cause: signal?.reason })); | ||
| } | ||
| if (signal != null) | ||
| eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true }); | ||
| return promise; | ||
| } | ||
| function getEventListeners(emitter, type) { | ||
| return emitter.listeners(type); | ||
| } | ||
| function setMaxListeners2(n, ...eventTargets) { | ||
| validateNumber(n, "setMaxListeners", 0); | ||
| var length; | ||
| if (eventTargets && (length = eventTargets.length)) | ||
| for (let i = 0;i < length; i++) | ||
| eventTargets[i].setMaxListeners(n); | ||
| else | ||
| defaultMaxListeners = n; | ||
| } | ||
| function listenerCount2(emitter, type) { | ||
| return emitter.listenerCount(type); | ||
| } | ||
| function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) { | ||
| if (typeof emitter.removeListener === "function") | ||
| emitter.removeListener(name, listener); | ||
| else | ||
| emitter.removeEventListener(name, listener, flags); | ||
| } | ||
| function eventTargetAgnosticAddListener(emitter, name, listener, flags) { | ||
| if (typeof emitter.on === "function") | ||
| if (flags.once) | ||
| emitter.once(name, listener); | ||
| else | ||
| emitter.on(name, listener); | ||
| else | ||
| emitter.addEventListener(name, listener, flags); | ||
| } | ||
| class AbortError extends Error { | ||
| constructor(message = "The operation was aborted", options = undefined) { | ||
| if (options !== undefined && typeof options !== "object") | ||
| throw ERR_INVALID_ARG_TYPE("options", "Object", options); | ||
| super(message, options); | ||
| this.code = "ABORT_ERR", this.name = "AbortError"; | ||
| } | ||
| } | ||
| function ERR_INVALID_ARG_TYPE(name, type, value) { | ||
| let err = new TypeError(`The "${name}" argument must be of type ${type}. Received ${value}`); | ||
| return err.code = "ERR_INVALID_ARG_TYPE", err; | ||
| } | ||
| function ERR_OUT_OF_RANGE(name, range, value) { | ||
| let err = new RangeError(`The "${name}" argument is out of range. It must be ${range}. Received ${value}`); | ||
| return err.code = "ERR_OUT_OF_RANGE", err; | ||
| } | ||
| function validateAbortSignal(signal, name) { | ||
| if (signal !== undefined && (signal === null || typeof signal !== "object" || !("aborted" in signal))) | ||
| throw ERR_INVALID_ARG_TYPE(name, "AbortSignal", signal); | ||
| } | ||
| function validateNumber(value, name, min, max) { | ||
| if (typeof value !== "number") | ||
| throw ERR_INVALID_ARG_TYPE(name, "number", value); | ||
| if (min != null && value < min || max != null && value > max || (min != null || max != null) && Number.isNaN(value)) | ||
| throw ERR_OUT_OF_RANGE(name, `${min != null ? `>= ${min}` : ""}${min != null && max != null ? " && " : ""}${max != null ? `<= ${max}` : ""}`, value); | ||
| } | ||
| function checkListener(listener) { | ||
| if (typeof listener !== "function") | ||
| throw new TypeError("The listener must be a function"); | ||
| } | ||
| function validateBoolean(value, name) { | ||
| if (typeof value !== "boolean") | ||
| throw ERR_INVALID_ARG_TYPE(name, "boolean", value); | ||
| } | ||
| function getMaxListeners2(emitterOrTarget) { | ||
| return emitterOrTarget?._maxListeners ?? defaultMaxListeners; | ||
| } | ||
| function addAbortListener(signal, listener) { | ||
| if (signal === undefined) | ||
| throw ERR_INVALID_ARG_TYPE("signal", "AbortSignal", signal); | ||
| if (validateAbortSignal(signal, "signal"), typeof listener !== "function") | ||
| throw ERR_INVALID_ARG_TYPE("listener", "function", listener); | ||
| let removeEventListener; | ||
| if (signal.aborted) | ||
| queueMicrotask(() => listener()); | ||
| else | ||
| signal.addEventListener("abort", listener, { __proto__: null, once: true }), removeEventListener = () => { | ||
| signal.removeEventListener("abort", listener); | ||
| }; | ||
| return { __proto__: null, [Symbol.dispose]() { | ||
| removeEventListener?.(); | ||
| } }; | ||
| } | ||
| Object.defineProperties(EventEmitter, { captureRejections: { get() { | ||
| return EventEmitterPrototype[kCapture]; | ||
| }, set(value) { | ||
| validateBoolean(value, "EventEmitter.captureRejections"), EventEmitterPrototype[kCapture] = value; | ||
| }, enumerable: true }, defaultMaxListeners: { enumerable: true, get: () => { | ||
| return defaultMaxListeners; | ||
| }, set: (arg) => { | ||
| validateNumber(arg, "defaultMaxListeners", 0), defaultMaxListeners = arg; | ||
| } }, kMaxEventTargetListeners: { value: kMaxEventTargetListeners, enumerable: false, configurable: false, writable: false }, kMaxEventTargetListenersWarned: { value: kMaxEventTargetListenersWarned, enumerable: false, configurable: false, writable: false } }); | ||
| Object.assign(EventEmitter, { once: once2, getEventListeners, getMaxListeners: getMaxListeners2, setMaxListeners: setMaxListeners2, EventEmitter, usingDomains: false, captureRejectionSymbol, errorMonitor: kErrorMonitor, addAbortListener, init: EventEmitter, listenerCount: listenerCount2 }); | ||
| // node_modules/pouchdb-md5/lib/index-browser.es.js | ||
| var import_spark_md5 = __toESM(require_spark_md5()); | ||
| var setImmediateShim = self.setImmediate || self.setTimeout; | ||
| // node_modules/pouchdb-utils/lib/index-browser.es.js | ||
| function isBinaryObject(object) { | ||
| return typeof ArrayBuffer !== "undefined" && object instanceof ArrayBuffer || typeof Blob !== "undefined" && object instanceof Blob; | ||
| } | ||
| function cloneBinaryObject(object) { | ||
| return object instanceof ArrayBuffer ? object.slice(0) : object.slice(0, object.size, object.type); | ||
| } | ||
| var funcToString = Function.prototype.toString; | ||
| var objectCtorString = funcToString.call(Object); | ||
| function isPlainObject(value) { | ||
| var proto = Object.getPrototypeOf(value); | ||
| if (proto === null) { | ||
| return true; | ||
| } | ||
| var Ctor = proto.constructor; | ||
| return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; | ||
| return false; | ||
| } | ||
| function clone(object) { | ||
| var newObject; | ||
| var i; | ||
| var len; | ||
| if (!object || typeof object !== "object") { | ||
| return object; | ||
| } | ||
| if (Array.isArray(object)) { | ||
| newObject = []; | ||
| for (i = 0, len = object.length;i < len; i++) { | ||
| newObject[i] = clone(object[i]); | ||
| } | ||
| return newObject; | ||
| } | ||
| if (object instanceof Date && isFinite(object)) { | ||
| return object.toISOString(); | ||
| } | ||
| if (isBinaryObject(object)) { | ||
| return cloneBinaryObject(object); | ||
| } | ||
| if (!isPlainObject(object)) { | ||
| return object; | ||
| } | ||
| newObject = {}; | ||
| for (i in object) { | ||
| if (Object.prototype.hasOwnProperty.call(object, i)) { | ||
| var value = clone(object[i]); | ||
| if (typeof value !== "undefined") { | ||
| newObject[i] = value; | ||
| } | ||
| } | ||
| } | ||
| return newObject; | ||
| } | ||
| var hasLocal; | ||
| try { | ||
| localStorage.setItem("_pouch_check_localstorage", 1); | ||
| hasLocal = !!localStorage.getItem("_pouch_check_localstorage"); | ||
| } catch (e) { | ||
| hasLocal = false; | ||
| } | ||
| function f() {} | ||
| var hasName = f.name; | ||
| var res; | ||
| if (hasName) { | ||
| res = function(fun) { | ||
| return fun.name; | ||
| }; | ||
| } else { | ||
| res = function(fun) { | ||
| var match = fun.toString().match(/^\s*function\s*(?:(\S+)\s*)?\(/); | ||
| if (match && match[1]) { | ||
| return match[1]; | ||
| } else { | ||
| return ""; | ||
| } | ||
| }; | ||
| } | ||
| // node_modules/pouchdb-collate/lib/index.es.js | ||
| function collate(a, b) { | ||
| if (a === b) { | ||
| return 0; | ||
| // src/cleaners.ts | ||
| var asMangoSelector = (raw) => { | ||
| if (typeof raw !== "object" || raw == null || Array.isArray(raw)) { | ||
| throw new TypeError("Expected a Mango selector object"); | ||
| } | ||
| a = normalizeKey(a); | ||
| b = normalizeKey(b); | ||
| var ai = collationIndex(a); | ||
| var bi = collationIndex(b); | ||
| if (ai - bi !== 0) { | ||
| return ai - bi; | ||
| } | ||
| switch (typeof a) { | ||
| case "number": | ||
| return a - b; | ||
| case "boolean": | ||
| return a < b ? -1 : 1; | ||
| case "string": | ||
| return stringCollate(a, b); | ||
| } | ||
| return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b); | ||
| } | ||
| function normalizeKey(key) { | ||
| switch (typeof key) { | ||
| case "undefined": | ||
| return null; | ||
| case "number": | ||
| if (key === Infinity || key === -Infinity || isNaN(key)) { | ||
| return null; | ||
| const source = raw; | ||
| const result = {}; | ||
| for (const key of Object.keys(source)) { | ||
| try { | ||
| if (key === "__proto__") | ||
| continue; | ||
| const value = source[key]; | ||
| if (value === undefined) { | ||
| result[key] = undefined; | ||
| continue; | ||
| } | ||
| return key; | ||
| case "object": | ||
| var origKey = key; | ||
| if (Array.isArray(key)) { | ||
| var len = key.length; | ||
| key = new Array(len); | ||
| for (var i = 0;i < len; i++) { | ||
| key[i] = normalizeKey(origKey[i]); | ||
| } | ||
| } else if (key instanceof Date) { | ||
| return key.toJSON(); | ||
| } else if (key !== null) { | ||
| key = {}; | ||
| for (var k in origKey) { | ||
| if (Object.prototype.hasOwnProperty.call(origKey, k)) { | ||
| var val = origKey[k]; | ||
| if (typeof val !== "undefined") { | ||
| key[k] = normalizeKey(val); | ||
| } | ||
| } | ||
| } | ||
| if (key === "$and" || key === "$or" || key === "$nor") { | ||
| result[key] = asMangoSelectorArray(value); | ||
| continue; | ||
| } | ||
| } | ||
| return key; | ||
| } | ||
| function arrayCollate(a, b) { | ||
| var len = Math.min(a.length, b.length); | ||
| for (var i = 0;i < len; i++) { | ||
| var sort = collate(a[i], b[i]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| } | ||
| return a.length === b.length ? 0 : a.length > b.length ? 1 : -1; | ||
| } | ||
| function stringCollate(a, b) { | ||
| return a === b ? 0 : a > b ? 1 : -1; | ||
| } | ||
| function objectCollate(a, b) { | ||
| var ak = Object.keys(a), bk = Object.keys(b); | ||
| var len = Math.min(ak.length, bk.length); | ||
| for (var i = 0;i < len; i++) { | ||
| var sort = collate(ak[i], bk[i]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| sort = collate(a[ak[i]], b[bk[i]]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| } | ||
| return ak.length === bk.length ? 0 : ak.length > bk.length ? 1 : -1; | ||
| } | ||
| function collationIndex(x) { | ||
| var id = ["boolean", "number", "string", "object"]; | ||
| var idx = id.indexOf(typeof x); | ||
| if (~idx) { | ||
| if (x === null) { | ||
| return 1; | ||
| } | ||
| if (Array.isArray(x)) { | ||
| return 5; | ||
| } | ||
| return idx < 3 ? idx + 2 : idx + 3; | ||
| } | ||
| if (Array.isArray(x)) { | ||
| return 5; | ||
| } | ||
| } | ||
| // node_modules/pouchdb-selector-core/lib/index.es.js | ||
| function getFieldFromDoc(doc, parsedField) { | ||
| var value = doc; | ||
| for (var i = 0, len = parsedField.length;i < len; i++) { | ||
| var key = parsedField[i]; | ||
| value = value[key]; | ||
| if (!value) { | ||
| break; | ||
| } | ||
| } | ||
| return value; | ||
| } | ||
| function compare(left, right) { | ||
| return left < right ? -1 : left > right ? 1 : 0; | ||
| } | ||
| function parseField(fieldName) { | ||
| var fields = []; | ||
| var current = ""; | ||
| for (var i = 0, len = fieldName.length;i < len; i++) { | ||
| var ch = fieldName[i]; | ||
| if (i > 0 && fieldName[i - 1] === "\\" && (ch === "$" || ch === ".")) { | ||
| current = current.substring(0, current.length - 1) + ch; | ||
| } else if (ch === ".") { | ||
| fields.push(current); | ||
| current = ""; | ||
| } else { | ||
| current += ch; | ||
| } | ||
| } | ||
| fields.push(current); | ||
| return fields; | ||
| } | ||
| var combinationFields = ["$or", "$nor", "$not"]; | ||
| function isCombinationalField(field) { | ||
| return combinationFields.indexOf(field) > -1; | ||
| } | ||
| function getKey(obj) { | ||
| return Object.keys(obj)[0]; | ||
| } | ||
| function getValue(obj) { | ||
| return obj[getKey(obj)]; | ||
| } | ||
| function mergeAndedSelectors(selectors) { | ||
| var res2 = {}; | ||
| var first = { $or: true, $nor: true }; | ||
| selectors.forEach(function(selector) { | ||
| Object.keys(selector).forEach(function(field) { | ||
| var matcher = selector[field]; | ||
| if (typeof matcher !== "object") { | ||
| matcher = { $eq: matcher }; | ||
| if (key === "$not") { | ||
| result[key] = asMangoSelector(value); | ||
| continue; | ||
| } | ||
| if (isCombinationalField(field)) { | ||
| if (matcher instanceof Array) { | ||
| if (first[field]) { | ||
| first[field] = false; | ||
| res2[field] = matcher; | ||
| return; | ||
| } | ||
| var entries = []; | ||
| res2[field].forEach(function(existing) { | ||
| Object.keys(matcher).forEach(function(key) { | ||
| var m = matcher[key]; | ||
| var longest = Math.max(Object.keys(existing).length, Object.keys(m).length); | ||
| var merged = mergeAndedSelectors([existing, m]); | ||
| if (Object.keys(merged).length <= longest) { | ||
| return; | ||
| } | ||
| entries.push(merged); | ||
| }); | ||
| }); | ||
| res2[field] = entries; | ||
| } else { | ||
| res2[field] = mergeAndedSelectors([matcher]); | ||
| } | ||
| } else { | ||
| var fieldMatchers = res2[field] = res2[field] || {}; | ||
| Object.keys(matcher).forEach(function(operator) { | ||
| var value = matcher[operator]; | ||
| if (operator === "$gt" || operator === "$gte") { | ||
| return mergeGtGte(operator, value, fieldMatchers); | ||
| } else if (operator === "$lt" || operator === "$lte") { | ||
| return mergeLtLte(operator, value, fieldMatchers); | ||
| } else if (operator === "$ne") { | ||
| return mergeNe(value, fieldMatchers); | ||
| } else if (operator === "$eq") { | ||
| return mergeEq(value, fieldMatchers); | ||
| } else if (operator === "$regex") { | ||
| return mergeRegex(value, fieldMatchers); | ||
| } | ||
| fieldMatchers[operator] = value; | ||
| }); | ||
| } | ||
| }); | ||
| }); | ||
| return res2; | ||
| } | ||
| function mergeGtGte(operator, value, fieldMatchers) { | ||
| if (typeof fieldMatchers.$eq !== "undefined") { | ||
| return; | ||
| } | ||
| if (typeof fieldMatchers.$gte !== "undefined") { | ||
| if (operator === "$gte") { | ||
| if (value > fieldMatchers.$gte) { | ||
| fieldMatchers.$gte = value; | ||
| } | ||
| } else { | ||
| if (value >= fieldMatchers.$gte) { | ||
| delete fieldMatchers.$gte; | ||
| fieldMatchers.$gt = value; | ||
| } | ||
| result[key] = import_cleaners.asEither(asMangoFieldSelector, asMangoSelectorArray)(value); | ||
| } catch (error) { | ||
| throw locateError(error, "." + key, 0); | ||
| } | ||
| } else if (typeof fieldMatchers.$gt !== "undefined") { | ||
| if (operator === "$gte") { | ||
| if (value > fieldMatchers.$gt) { | ||
| delete fieldMatchers.$gt; | ||
| fieldMatchers.$gte = value; | ||
| } | ||
| } else { | ||
| if (value > fieldMatchers.$gt) { | ||
| fieldMatchers.$gt = value; | ||
| } | ||
| } | ||
| } else { | ||
| fieldMatchers[operator] = value; | ||
| } | ||
| } | ||
| function mergeLtLte(operator, value, fieldMatchers) { | ||
| if (typeof fieldMatchers.$eq !== "undefined") { | ||
| return; | ||
| } | ||
| if (typeof fieldMatchers.$lte !== "undefined") { | ||
| if (operator === "$lte") { | ||
| if (value < fieldMatchers.$lte) { | ||
| fieldMatchers.$lte = value; | ||
| } | ||
| } else { | ||
| if (value <= fieldMatchers.$lte) { | ||
| delete fieldMatchers.$lte; | ||
| fieldMatchers.$lt = value; | ||
| } | ||
| } | ||
| } else if (typeof fieldMatchers.$lt !== "undefined") { | ||
| if (operator === "$lte") { | ||
| if (value < fieldMatchers.$lt) { | ||
| delete fieldMatchers.$lt; | ||
| fieldMatchers.$lte = value; | ||
| } | ||
| } else { | ||
| if (value < fieldMatchers.$lt) { | ||
| fieldMatchers.$lt = value; | ||
| } | ||
| } | ||
| } else { | ||
| fieldMatchers[operator] = value; | ||
| } | ||
| } | ||
| function mergeNe(value, fieldMatchers) { | ||
| if ("$ne" in fieldMatchers) { | ||
| fieldMatchers.$ne.push(value); | ||
| } else { | ||
| fieldMatchers.$ne = [value]; | ||
| } | ||
| } | ||
| function mergeEq(value, fieldMatchers) { | ||
| delete fieldMatchers.$gt; | ||
| delete fieldMatchers.$gte; | ||
| delete fieldMatchers.$lt; | ||
| delete fieldMatchers.$lte; | ||
| delete fieldMatchers.$ne; | ||
| fieldMatchers.$eq = value; | ||
| } | ||
| function mergeRegex(value, fieldMatchers) { | ||
| if ("$regex" in fieldMatchers) { | ||
| fieldMatchers.$regex.push(value); | ||
| } else { | ||
| fieldMatchers.$regex = [value]; | ||
| } | ||
| } | ||
| function mergeAndedSelectorsNested(obj) { | ||
| for (var prop in obj) { | ||
| if (Array.isArray(obj)) { | ||
| for (var i in obj) { | ||
| if (obj[i]["$and"]) { | ||
| obj[i] = mergeAndedSelectors(obj[i]["$and"]); | ||
| } | ||
| } | ||
| } | ||
| var value = obj[prop]; | ||
| if (typeof value === "object") { | ||
| mergeAndedSelectorsNested(value); | ||
| } | ||
| } | ||
| return obj; | ||
| } | ||
| function isAndInSelector(obj, isAnd) { | ||
| for (var prop in obj) { | ||
| if (prop === "$and") { | ||
| isAnd = true; | ||
| } | ||
| var value = obj[prop]; | ||
| if (typeof value === "object") { | ||
| isAnd = isAndInSelector(value, isAnd); | ||
| } | ||
| } | ||
| return isAnd; | ||
| } | ||
| function massageSelector(input) { | ||
| var result = clone(input); | ||
| if (isAndInSelector(result, false)) { | ||
| result = mergeAndedSelectorsNested(result); | ||
| if ("$and" in result) { | ||
| result = mergeAndedSelectors(result["$and"]); | ||
| } | ||
| } | ||
| ["$or", "$nor"].forEach(function(orOrNor) { | ||
| if (orOrNor in result) { | ||
| result[orOrNor].forEach(function(subSelector) { | ||
| var fields2 = Object.keys(subSelector); | ||
| for (var i2 = 0;i2 < fields2.length; i2++) { | ||
| var field2 = fields2[i2]; | ||
| var matcher2 = subSelector[field2]; | ||
| if (typeof matcher2 !== "object" || matcher2 === null) { | ||
| subSelector[field2] = { $eq: matcher2 }; | ||
| } | ||
| } | ||
| }); | ||
| } | ||
| }); | ||
| if ("$not" in result) { | ||
| result["$not"] = mergeAndedSelectors([result["$not"]]); | ||
| } | ||
| var fields = Object.keys(result); | ||
| for (var i = 0;i < fields.length; i++) { | ||
| var field = fields[i]; | ||
| var matcher = result[field]; | ||
| if (typeof matcher !== "object" || matcher === null) { | ||
| matcher = { $eq: matcher }; | ||
| } | ||
| result[field] = matcher; | ||
| } | ||
| normalizeArrayOperators(result); | ||
| return result; | ||
| } | ||
| function normalizeArrayOperators(selector) { | ||
| Object.keys(selector).forEach(function(field) { | ||
| var matcher = selector[field]; | ||
| if (Array.isArray(matcher)) { | ||
| matcher.forEach(function(matcherItem) { | ||
| if (matcherItem && typeof matcherItem === "object") { | ||
| normalizeArrayOperators(matcherItem); | ||
| } | ||
| }); | ||
| } else if (field === "$ne") { | ||
| selector.$ne = [matcher]; | ||
| } else if (field === "$regex") { | ||
| selector.$regex = [matcher]; | ||
| } else if (matcher && typeof matcher === "object") { | ||
| normalizeArrayOperators(matcher); | ||
| } | ||
| }); | ||
| } | ||
| function createFieldSorter(sort) { | ||
| function getFieldValuesAsArray(doc) { | ||
| return sort.map(function(sorting) { | ||
| var fieldName = getKey(sorting); | ||
| var parsedField = parseField(fieldName); | ||
| var docFieldValue = getFieldFromDoc(doc, parsedField); | ||
| return docFieldValue; | ||
| }); | ||
| } | ||
| return function(aRow, bRow) { | ||
| var aFieldValues = getFieldValuesAsArray(aRow.doc); | ||
| var bFieldValues = getFieldValuesAsArray(bRow.doc); | ||
| var collation = collate(aFieldValues, bFieldValues); | ||
| if (collation !== 0) { | ||
| return collation; | ||
| } | ||
| return compare(aRow.doc._id, bRow.doc._id); | ||
| }; | ||
| } | ||
| function filterInMemoryFields(rows, requestDef, inMemoryFields) { | ||
| rows = rows.filter(function(row) { | ||
| return rowFilter(row.doc, requestDef.selector, inMemoryFields); | ||
| }); | ||
| if (requestDef.sort) { | ||
| var fieldSorter = createFieldSorter(requestDef.sort); | ||
| rows = rows.sort(fieldSorter); | ||
| if (typeof requestDef.sort[0] !== "string" && getValue(requestDef.sort[0]) === "desc") { | ||
| rows = rows.reverse(); | ||
| } | ||
| } | ||
| if ("limit" in requestDef || "skip" in requestDef) { | ||
| var skip = requestDef.skip || 0; | ||
| var limit = ("limit" in requestDef ? requestDef.limit : rows.length) + skip; | ||
| rows = rows.slice(skip, limit); | ||
| } | ||
| return rows; | ||
| } | ||
| function rowFilter(doc, selector, inMemoryFields) { | ||
| return inMemoryFields.every(function(field) { | ||
| var matcher = selector[field]; | ||
| var parsedField = parseField(field); | ||
| var docFieldValue = getFieldFromDoc(doc, parsedField); | ||
| if (isCombinationalField(field)) { | ||
| return matchCominationalSelector(field, matcher, doc); | ||
| } | ||
| return matchSelector(matcher, doc, parsedField, docFieldValue); | ||
| }); | ||
| } | ||
| function matchSelector(matcher, doc, parsedField, docFieldValue) { | ||
| if (!matcher) { | ||
| return true; | ||
| } | ||
| if (typeof matcher === "object") { | ||
| return Object.keys(matcher).every(function(maybeUserOperator) { | ||
| var userValue = matcher[maybeUserOperator]; | ||
| if (maybeUserOperator.indexOf("$") === 0) { | ||
| return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue); | ||
| } else { | ||
| var subParsedField = parseField(maybeUserOperator); | ||
| if (docFieldValue === undefined && typeof userValue !== "object" && subParsedField.length > 0) { | ||
| return false; | ||
| } | ||
| var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField); | ||
| if (typeof userValue === "object") { | ||
| return matchSelector(userValue, doc, parsedField, subDocFieldValue); | ||
| } | ||
| return match("$eq", doc, userValue, subParsedField, subDocFieldValue); | ||
| } | ||
| }); | ||
| } | ||
| return matcher === docFieldValue; | ||
| } | ||
| function matchCominationalSelector(field, matcher, doc) { | ||
| if (field === "$or") { | ||
| return matcher.some(function(orMatchers) { | ||
| return rowFilter(doc, orMatchers, Object.keys(orMatchers)); | ||
| }); | ||
| } | ||
| if (field === "$not") { | ||
| return !rowFilter(doc, matcher, Object.keys(matcher)); | ||
| } | ||
| return !matcher.find(function(orMatchers) { | ||
| return rowFilter(doc, orMatchers, Object.keys(orMatchers)); | ||
| }); | ||
| } | ||
| function match(userOperator, doc, userValue, parsedField, docFieldValue) { | ||
| if (!matchers[userOperator]) { | ||
| throw new Error('unknown operator "' + userOperator + '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' + "$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all"); | ||
| } | ||
| return matchers[userOperator](doc, userValue, parsedField, docFieldValue); | ||
| } | ||
| function fieldExists(docFieldValue) { | ||
| return typeof docFieldValue !== "undefined" && docFieldValue !== null; | ||
| } | ||
| function fieldIsNotUndefined(docFieldValue) { | ||
| return typeof docFieldValue !== "undefined"; | ||
| } | ||
| function modField(docFieldValue, userValue) { | ||
| if (typeof docFieldValue !== "number" || parseInt(docFieldValue, 10) !== docFieldValue) { | ||
| return false; | ||
| } | ||
| var divisor = userValue[0]; | ||
| var mod = userValue[1]; | ||
| return docFieldValue % divisor === mod; | ||
| } | ||
| function arrayContainsValue(docFieldValue, userValue) { | ||
| return userValue.some(function(val) { | ||
| if (docFieldValue instanceof Array) { | ||
| return docFieldValue.some(function(docFieldValueItem) { | ||
| return collate(val, docFieldValueItem) === 0; | ||
| }); | ||
| } | ||
| return collate(val, docFieldValue) === 0; | ||
| }); | ||
| } | ||
| function arrayContainsAllValues(docFieldValue, userValue) { | ||
| return userValue.every(function(val) { | ||
| return docFieldValue.some(function(docFieldValueItem) { | ||
| return collate(val, docFieldValueItem) === 0; | ||
| }); | ||
| }); | ||
| } | ||
| function arraySize(docFieldValue, userValue) { | ||
| return docFieldValue.length === userValue; | ||
| } | ||
| function regexMatch(docFieldValue, userValue) { | ||
| var re = new RegExp(userValue); | ||
| return re.test(docFieldValue); | ||
| } | ||
| function typeMatch(docFieldValue, userValue) { | ||
| switch (userValue) { | ||
| case "null": | ||
| return docFieldValue === null; | ||
| case "boolean": | ||
| return typeof docFieldValue === "boolean"; | ||
| case "number": | ||
| return typeof docFieldValue === "number"; | ||
| case "string": | ||
| return typeof docFieldValue === "string"; | ||
| case "array": | ||
| return docFieldValue instanceof Array; | ||
| case "object": | ||
| return {}.toString.call(docFieldValue) === "[object Object]"; | ||
| } | ||
| } | ||
| var matchers = { | ||
| $elemMatch: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (!Array.isArray(docFieldValue)) { | ||
| return false; | ||
| } | ||
| if (docFieldValue.length === 0) { | ||
| return false; | ||
| } | ||
| if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) { | ||
| return docFieldValue.some(function(val) { | ||
| return rowFilter(val, userValue, Object.keys(userValue)); | ||
| }); | ||
| } | ||
| return docFieldValue.some(function(val) { | ||
| return matchSelector(userValue, doc, parsedField, val); | ||
| }); | ||
| }, | ||
| $allMatch: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (!Array.isArray(docFieldValue)) { | ||
| return false; | ||
| } | ||
| if (docFieldValue.length === 0) { | ||
| return false; | ||
| } | ||
| if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) { | ||
| return docFieldValue.every(function(val) { | ||
| return rowFilter(val, userValue, Object.keys(userValue)); | ||
| }); | ||
| } | ||
| return docFieldValue.every(function(val) { | ||
| return matchSelector(userValue, doc, parsedField, val); | ||
| }); | ||
| }, | ||
| $eq: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0; | ||
| }, | ||
| $gte: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0; | ||
| }, | ||
| $gt: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0; | ||
| }, | ||
| $lte: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0; | ||
| }, | ||
| $lt: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0; | ||
| }, | ||
| $exists: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (userValue) { | ||
| return fieldIsNotUndefined(docFieldValue); | ||
| } | ||
| return !fieldIsNotUndefined(docFieldValue); | ||
| }, | ||
| $mod: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && modField(docFieldValue, userValue); | ||
| }, | ||
| $ne: function(doc, userValue, parsedField, docFieldValue) { | ||
| return userValue.every(function(neValue) { | ||
| return collate(docFieldValue, neValue) !== 0; | ||
| }); | ||
| }, | ||
| $in: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue); | ||
| }, | ||
| $nin: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue); | ||
| }, | ||
| $size: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && Array.isArray(docFieldValue) && arraySize(docFieldValue, userValue); | ||
| }, | ||
| $all: function(doc, userValue, parsedField, docFieldValue) { | ||
| return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue); | ||
| }, | ||
| $regex: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && typeof docFieldValue == "string" && userValue.every(function(regexValue) { | ||
| return regexMatch(docFieldValue, regexValue); | ||
| }); | ||
| }, | ||
| $type: function(doc, userValue, parsedField, docFieldValue) { | ||
| return typeMatch(docFieldValue, userValue); | ||
| } | ||
| }; | ||
| function matchesSelector(doc, selector) { | ||
| if (typeof selector !== "object") { | ||
| throw new Error("Selector error: expected a JSON object"); | ||
| } | ||
| selector = massageSelector(selector); | ||
| var row = { | ||
| doc | ||
| }; | ||
| var rowsMatched = filterInMemoryFields([row], { selector }, Object.keys(selector)); | ||
| return rowsMatched && rowsMatched.length === 1; | ||
| } | ||
| var asMangoSelectorArray = import_cleaners.asArray(asMangoSelector); | ||
| var asMangoPrimitive = import_cleaners.asEither(import_cleaners.asNull, import_cleaners.asBoolean, import_cleaners.asNumber, import_cleaners.asString); | ||
| var asMangoValue = import_cleaners.asEither(asMangoPrimitive, import_cleaners.asArray((raw) => asMangoValue(raw)), import_cleaners.asObject((raw) => asMangoValue(raw))); | ||
| var asMangoValueArray = import_cleaners.asArray(asMangoValue); | ||
| var asMangoType = import_cleaners.asValue("null", "boolean", "number", "string", "array", "object"); | ||
| var asMangoKeyMapMatch = import_cleaners.asObject((raw) => raw === undefined ? undefined : asMangoSelector(raw)); | ||
| var asNumberPair = import_cleaners.asTuple(import_cleaners.asNumber, import_cleaners.asNumber); | ||
| var asRegex = import_cleaners.asEither(import_cleaners.asString, import_cleaners.asArray(import_cleaners.asString)); | ||
| var asMangoFieldMatcher = import_cleaners.asObject({ | ||
| $eq: import_cleaners.asOptional(asMangoValue), | ||
| $ne: import_cleaners.asOptional(import_cleaners.asEither(asMangoValue, asMangoValueArray)), | ||
| $gt: import_cleaners.asOptional(asMangoValue), | ||
| $gte: import_cleaners.asOptional(asMangoValue), | ||
| $lt: import_cleaners.asOptional(asMangoValue), | ||
| $lte: import_cleaners.asOptional(asMangoValue), | ||
| $exists: import_cleaners.asOptional(import_cleaners.asBoolean), | ||
| $type: import_cleaners.asOptional(asMangoType), | ||
| $in: import_cleaners.asOptional(asMangoValueArray), | ||
| $nin: import_cleaners.asOptional(asMangoValueArray), | ||
| $size: import_cleaners.asOptional(import_cleaners.asNumber), | ||
| $mod: import_cleaners.asOptional(asNumberPair), | ||
| $regex: import_cleaners.asOptional(asRegex), | ||
| $options: import_cleaners.asOptional(import_cleaners.asString), | ||
| $all: import_cleaners.asOptional(asMangoValueArray), | ||
| $elemMatch: import_cleaners.asOptional(asMangoSelector), | ||
| $allMatch: import_cleaners.asOptional(asMangoSelector), | ||
| $keyMapMatch: import_cleaners.asOptional(asMangoKeyMapMatch), | ||
| $not: import_cleaners.asOptional((raw) => asMangoFieldSelector(raw)) | ||
| }); | ||
| var asMangoFieldSelector = import_cleaners.asEither(asMangoValue, asMangoFieldMatcher, asMangoSelector); | ||
| // src/index.ts | ||
| var drupe = (selector) => (subject) => { | ||
| return matchesSelector(subject, selector); | ||
| return import_pouchdb_selector_core.matchesSelector(subject, selector); | ||
| }; |
+84
-1515
@@ -1,1533 +0,101 @@ | ||
| var __create = Object.create; | ||
| var __getProtoOf = Object.getPrototypeOf; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __toESM = (mod, isNodeMode, target) => { | ||
| target = mod != null ? __create(__getProtoOf(mod)) : {}; | ||
| const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; | ||
| for (let key of __getOwnPropNames(mod)) | ||
| if (!__hasOwnProp.call(to, key)) | ||
| __defProp(to, key, { | ||
| get: () => mod[key], | ||
| enumerable: true | ||
| }); | ||
| return to; | ||
| }; | ||
| var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); | ||
| // src/index.ts | ||
| import { matchesSelector } from "pouchdb-selector-core"; | ||
| // node_modules/spark-md5/spark-md5.js | ||
| var require_spark_md5 = __commonJS((exports, module) => { | ||
| (function(factory) { | ||
| if (typeof exports === "object") { | ||
| module.exports = factory(); | ||
| } else if (typeof define === "function" && define.amd) { | ||
| define(factory); | ||
| } else { | ||
| var glob; | ||
| try { | ||
| glob = window; | ||
| } catch (e) { | ||
| glob = self; | ||
| } | ||
| glob.SparkMD5 = factory(); | ||
| } | ||
| })(function(undefined2) { | ||
| var add32 = function(a, b) { | ||
| return a + b & 4294967295; | ||
| }, hex_chr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; | ||
| function cmn(q, a, b, x, s, t) { | ||
| a = add32(add32(a, q), add32(x, t)); | ||
| return add32(a << s | a >>> 32 - s, b); | ||
| } | ||
| function md5cycle(x, k) { | ||
| var a = x[0], b = x[1], c = x[2], d = x[3]; | ||
| a += (b & c | ~b & d) + k[0] - 680876936 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[1] - 389564586 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[2] + 606105819 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[3] - 1044525330 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[4] - 176418897 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[5] + 1200080426 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[6] - 1473231341 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[7] - 45705983 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[8] + 1770035416 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[9] - 1958414417 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[10] - 42063 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[11] - 1990404162 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & c | ~b & d) + k[12] + 1804603682 | 0; | ||
| a = (a << 7 | a >>> 25) + b | 0; | ||
| d += (a & b | ~a & c) + k[13] - 40341101 | 0; | ||
| d = (d << 12 | d >>> 20) + a | 0; | ||
| c += (d & a | ~d & b) + k[14] - 1502002290 | 0; | ||
| c = (c << 17 | c >>> 15) + d | 0; | ||
| b += (c & d | ~c & a) + k[15] + 1236535329 | 0; | ||
| b = (b << 22 | b >>> 10) + c | 0; | ||
| a += (b & d | c & ~d) + k[1] - 165796510 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[6] - 1069501632 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[11] + 643717713 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[0] - 373897302 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[5] - 701558691 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[10] + 38016083 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[15] - 660478335 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[4] - 405537848 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[9] + 568446438 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[14] - 1019803690 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[3] - 187363961 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[8] + 1163531501 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b & d | c & ~d) + k[13] - 1444681467 | 0; | ||
| a = (a << 5 | a >>> 27) + b | 0; | ||
| d += (a & c | b & ~c) + k[2] - 51403784 | 0; | ||
| d = (d << 9 | d >>> 23) + a | 0; | ||
| c += (d & b | a & ~b) + k[7] + 1735328473 | 0; | ||
| c = (c << 14 | c >>> 18) + d | 0; | ||
| b += (c & a | d & ~a) + k[12] - 1926607734 | 0; | ||
| b = (b << 20 | b >>> 12) + c | 0; | ||
| a += (b ^ c ^ d) + k[5] - 378558 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[8] - 2022574463 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[11] + 1839030562 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[14] - 35309556 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[1] - 1530992060 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[4] + 1272893353 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[7] - 155497632 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[10] - 1094730640 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[13] + 681279174 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[0] - 358537222 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[3] - 722521979 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[6] + 76029189 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (b ^ c ^ d) + k[9] - 640364487 | 0; | ||
| a = (a << 4 | a >>> 28) + b | 0; | ||
| d += (a ^ b ^ c) + k[12] - 421815835 | 0; | ||
| d = (d << 11 | d >>> 21) + a | 0; | ||
| c += (d ^ a ^ b) + k[15] + 530742520 | 0; | ||
| c = (c << 16 | c >>> 16) + d | 0; | ||
| b += (c ^ d ^ a) + k[2] - 995338651 | 0; | ||
| b = (b << 23 | b >>> 9) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; | ||
| a = (a << 6 | a >>> 26) + b | 0; | ||
| d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; | ||
| d = (d << 10 | d >>> 22) + a | 0; | ||
| c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; | ||
| c = (c << 15 | c >>> 17) + d | 0; | ||
| b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; | ||
| b = (b << 21 | b >>> 11) + c | 0; | ||
| x[0] = a + x[0] | 0; | ||
| x[1] = b + x[1] | 0; | ||
| x[2] = c + x[2] | 0; | ||
| x[3] = d + x[3] | 0; | ||
| } | ||
| function md5blk(s) { | ||
| var md5blks = [], i; | ||
| for (i = 0;i < 64; i += 4) { | ||
| md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); | ||
| } | ||
| return md5blks; | ||
| } | ||
| function md5blk_array(a) { | ||
| var md5blks = [], i; | ||
| for (i = 0;i < 64; i += 4) { | ||
| md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); | ||
| } | ||
| return md5blks; | ||
| } | ||
| function md51(s) { | ||
| var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; | ||
| for (i = 64;i <= n; i += 64) { | ||
| md5cycle(state, md5blk(s.substring(i - 64, i))); | ||
| } | ||
| s = s.substring(i - 64); | ||
| length = s.length; | ||
| tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3); | ||
| } | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(state, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = n * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(state, tail); | ||
| return state; | ||
| } | ||
| function md51_array(a) { | ||
| var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; | ||
| for (i = 64;i <= n; i += 64) { | ||
| md5cycle(state, md5blk_array(a.subarray(i - 64, i))); | ||
| } | ||
| a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0); | ||
| length = a.length; | ||
| tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= a[i] << (i % 4 << 3); | ||
| } | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(state, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = n * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(state, tail); | ||
| return state; | ||
| } | ||
| function rhex(n) { | ||
| var s = "", j; | ||
| for (j = 0;j < 4; j += 1) { | ||
| s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15]; | ||
| } | ||
| return s; | ||
| } | ||
| function hex(x) { | ||
| var i; | ||
| for (i = 0;i < x.length; i += 1) { | ||
| x[i] = rhex(x[i]); | ||
| } | ||
| return x.join(""); | ||
| } | ||
| if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592") { | ||
| add32 = function(x, y) { | ||
| var lsw = (x & 65535) + (y & 65535), msw = (x >> 16) + (y >> 16) + (lsw >> 16); | ||
| return msw << 16 | lsw & 65535; | ||
| }; | ||
| } | ||
| if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) { | ||
| (function() { | ||
| function clamp(val, length) { | ||
| val = val | 0 || 0; | ||
| if (val < 0) { | ||
| return Math.max(val + length, 0); | ||
| } | ||
| return Math.min(val, length); | ||
| } | ||
| ArrayBuffer.prototype.slice = function(from, to) { | ||
| var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray; | ||
| if (to !== undefined2) { | ||
| end = clamp(to, length); | ||
| } | ||
| if (begin > end) { | ||
| return new ArrayBuffer(0); | ||
| } | ||
| num = end - begin; | ||
| target = new ArrayBuffer(num); | ||
| targetArray = new Uint8Array(target); | ||
| sourceArray = new Uint8Array(this, begin, num); | ||
| targetArray.set(sourceArray); | ||
| return target; | ||
| }; | ||
| })(); | ||
| } | ||
| function toUtf8(str) { | ||
| if (/[\u0080-\uFFFF]/.test(str)) { | ||
| str = unescape(encodeURIComponent(str)); | ||
| } | ||
| return str; | ||
| } | ||
| function utf8Str2ArrayBuffer(str, returnUInt8Array) { | ||
| var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i; | ||
| for (i = 0;i < length; i += 1) { | ||
| arr[i] = str.charCodeAt(i); | ||
| } | ||
| return returnUInt8Array ? arr : buff; | ||
| } | ||
| function arrayBuffer2Utf8Str(buff) { | ||
| return String.fromCharCode.apply(null, new Uint8Array(buff)); | ||
| } | ||
| function concatenateArrayBuffers(first, second, returnUInt8Array) { | ||
| var result = new Uint8Array(first.byteLength + second.byteLength); | ||
| result.set(new Uint8Array(first)); | ||
| result.set(new Uint8Array(second), first.byteLength); | ||
| return returnUInt8Array ? result : result.buffer; | ||
| } | ||
| function hexToBinaryString(hex2) { | ||
| var bytes = [], length = hex2.length, x; | ||
| for (x = 0;x < length - 1; x += 2) { | ||
| bytes.push(parseInt(hex2.substr(x, 2), 16)); | ||
| } | ||
| return String.fromCharCode.apply(String, bytes); | ||
| } | ||
| function SparkMD5() { | ||
| this.reset(); | ||
| } | ||
| SparkMD5.prototype.append = function(str) { | ||
| this.appendBinary(toUtf8(str)); | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.appendBinary = function(contents) { | ||
| this._buff += contents; | ||
| this._length += contents.length; | ||
| var length = this._buff.length, i; | ||
| for (i = 64;i <= length; i += 64) { | ||
| md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i))); | ||
| } | ||
| this._buff = this._buff.substring(i - 64); | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.end = function(raw) { | ||
| var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3); | ||
| } | ||
| this._finish(tail, length); | ||
| ret = hex(this._hash); | ||
| if (raw) { | ||
| ret = hexToBinaryString(ret); | ||
| } | ||
| this.reset(); | ||
| return ret; | ||
| }; | ||
| SparkMD5.prototype.reset = function() { | ||
| this._buff = ""; | ||
| this._length = 0; | ||
| this._hash = [1732584193, -271733879, -1732584194, 271733878]; | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.getState = function() { | ||
| return { | ||
| buff: this._buff, | ||
| length: this._length, | ||
| hash: this._hash.slice() | ||
| }; | ||
| }; | ||
| SparkMD5.prototype.setState = function(state) { | ||
| this._buff = state.buff; | ||
| this._length = state.length; | ||
| this._hash = state.hash; | ||
| return this; | ||
| }; | ||
| SparkMD5.prototype.destroy = function() { | ||
| delete this._hash; | ||
| delete this._buff; | ||
| delete this._length; | ||
| }; | ||
| SparkMD5.prototype._finish = function(tail, length) { | ||
| var i = length, tmp, lo, hi; | ||
| tail[i >> 2] |= 128 << (i % 4 << 3); | ||
| if (i > 55) { | ||
| md5cycle(this._hash, tail); | ||
| for (i = 0;i < 16; i += 1) { | ||
| tail[i] = 0; | ||
| } | ||
| } | ||
| tmp = this._length * 8; | ||
| tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); | ||
| lo = parseInt(tmp[2], 16); | ||
| hi = parseInt(tmp[1], 16) || 0; | ||
| tail[14] = lo; | ||
| tail[15] = hi; | ||
| md5cycle(this._hash, tail); | ||
| }; | ||
| SparkMD5.hash = function(str, raw) { | ||
| return SparkMD5.hashBinary(toUtf8(str), raw); | ||
| }; | ||
| SparkMD5.hashBinary = function(content, raw) { | ||
| var hash = md51(content), ret = hex(hash); | ||
| return raw ? hexToBinaryString(ret) : ret; | ||
| }; | ||
| SparkMD5.ArrayBuffer = function() { | ||
| this.reset(); | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.append = function(arr) { | ||
| var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i; | ||
| this._length += arr.byteLength; | ||
| for (i = 64;i <= length; i += 64) { | ||
| md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i))); | ||
| } | ||
| this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0); | ||
| return this; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.end = function(raw) { | ||
| var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret; | ||
| for (i = 0;i < length; i += 1) { | ||
| tail[i >> 2] |= buff[i] << (i % 4 << 3); | ||
| } | ||
| this._finish(tail, length); | ||
| ret = hex(this._hash); | ||
| if (raw) { | ||
| ret = hexToBinaryString(ret); | ||
| } | ||
| this.reset(); | ||
| return ret; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.reset = function() { | ||
| this._buff = new Uint8Array(0); | ||
| this._length = 0; | ||
| this._hash = [1732584193, -271733879, -1732584194, 271733878]; | ||
| return this; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.getState = function() { | ||
| var state = SparkMD5.prototype.getState.call(this); | ||
| state.buff = arrayBuffer2Utf8Str(state.buff); | ||
| return state; | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.setState = function(state) { | ||
| state.buff = utf8Str2ArrayBuffer(state.buff, true); | ||
| return SparkMD5.prototype.setState.call(this, state); | ||
| }; | ||
| SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; | ||
| SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; | ||
| SparkMD5.ArrayBuffer.hash = function(arr, raw) { | ||
| var hash = md51_array(new Uint8Array(arr)), ret = hex(hash); | ||
| return raw ? hexToBinaryString(ret) : ret; | ||
| }; | ||
| return SparkMD5; | ||
| }); | ||
| }); | ||
| // src/cleaners.ts | ||
| import { | ||
| asArray, | ||
| asBoolean, | ||
| asEither, | ||
| asNull, | ||
| asNumber, | ||
| asObject, | ||
| asOptional, | ||
| asString, | ||
| asTuple, | ||
| asValue | ||
| } from "cleaners"; | ||
| // node_modules/pouchdb-errors/lib/index.es.js | ||
| class PouchError extends Error { | ||
| constructor(status, error, reason) { | ||
| super(); | ||
| this.status = status; | ||
| this.name = error; | ||
| this.message = reason; | ||
| this.error = true; | ||
| } | ||
| toString() { | ||
| return JSON.stringify({ | ||
| status: this.status, | ||
| name: this.name, | ||
| message: this.message, | ||
| reason: this.reason | ||
| }); | ||
| } | ||
| } | ||
| var UNAUTHORIZED = new PouchError(401, "unauthorized", "Name or password is incorrect."); | ||
| var MISSING_BULK_DOCS = new PouchError(400, "bad_request", "Missing JSON list of 'docs'"); | ||
| var MISSING_DOC = new PouchError(404, "not_found", "missing"); | ||
| var REV_CONFLICT = new PouchError(409, "conflict", "Document update conflict"); | ||
| var INVALID_ID = new PouchError(400, "bad_request", "_id field must contain a string"); | ||
| var MISSING_ID = new PouchError(412, "missing_id", "_id is required for puts"); | ||
| var RESERVED_ID = new PouchError(400, "bad_request", "Only reserved document ids may start with underscore."); | ||
| var NOT_OPEN = new PouchError(412, "precondition_failed", "Database not open"); | ||
| var UNKNOWN_ERROR = new PouchError(500, "unknown_error", "Database encountered an unknown error"); | ||
| var BAD_ARG = new PouchError(500, "badarg", "Some query argument is invalid"); | ||
| var INVALID_REQUEST = new PouchError(400, "invalid_request", "Request was invalid"); | ||
| var QUERY_PARSE_ERROR = new PouchError(400, "query_parse_error", "Some query parameter is invalid"); | ||
| var DOC_VALIDATION = new PouchError(500, "doc_validation", "Bad special document member"); | ||
| var BAD_REQUEST = new PouchError(400, "bad_request", "Something wrong with the request"); | ||
| var NOT_AN_OBJECT = new PouchError(400, "bad_request", "Document must be a JSON object"); | ||
| var DB_MISSING = new PouchError(404, "not_found", "Database not found"); | ||
| var IDB_ERROR = new PouchError(500, "indexed_db_went_bad", "unknown"); | ||
| var WSQ_ERROR = new PouchError(500, "web_sql_went_bad", "unknown"); | ||
| var LDB_ERROR = new PouchError(500, "levelDB_went_went_bad", "unknown"); | ||
| var FORBIDDEN = new PouchError(403, "forbidden", "Forbidden by design doc validate_doc_update function"); | ||
| var INVALID_REV = new PouchError(400, "bad_request", "Invalid rev format"); | ||
| var FILE_EXISTS = new PouchError(412, "file_exists", "The database could not be created, the file already exists."); | ||
| var MISSING_STUB = new PouchError(412, "missing_stub", "A pre-existing attachment stub wasn't found"); | ||
| var INVALID_URL = new PouchError(413, "invalid_url", "Provided URL is invalid"); | ||
| // node:events | ||
| var SymbolFor = Symbol.for; | ||
| var kCapture = Symbol("kCapture"); | ||
| var kErrorMonitor = SymbolFor("events.errorMonitor"); | ||
| var kMaxEventTargetListeners = Symbol("events.maxEventTargetListeners"); | ||
| var kMaxEventTargetListenersWarned = Symbol("events.maxEventTargetListenersWarned"); | ||
| var kRejection = SymbolFor("nodejs.rejection"); | ||
| var captureRejectionSymbol = SymbolFor("nodejs.rejection"); | ||
| var ArrayPrototypeSlice = Array.prototype.slice; | ||
| var defaultMaxListeners = 10; | ||
| var EventEmitter = function EventEmitter2(opts) { | ||
| if (this._events === undefined || this._events === this.__proto__._events) | ||
| this._events = { __proto__: null }, this._eventsCount = 0; | ||
| if (this._maxListeners ??= undefined, this[kCapture] = opts?.captureRejections ? Boolean(opts?.captureRejections) : EventEmitterPrototype[kCapture]) | ||
| this.emit = emitWithRejectionCapture; | ||
| }; | ||
| var EventEmitterPrototype = EventEmitter.prototype = {}; | ||
| EventEmitterPrototype._events = undefined; | ||
| EventEmitterPrototype._eventsCount = 0; | ||
| EventEmitterPrototype._maxListeners = undefined; | ||
| EventEmitterPrototype.setMaxListeners = function setMaxListeners(n) { | ||
| return validateNumber(n, "setMaxListeners", 0), this._maxListeners = n, this; | ||
| }; | ||
| EventEmitterPrototype.constructor = EventEmitter; | ||
| EventEmitterPrototype.getMaxListeners = function getMaxListeners() { | ||
| return this?._maxListeners ?? defaultMaxListeners; | ||
| }; | ||
| function emitError(emitter, args) { | ||
| var { _events: events } = emitter; | ||
| if (args[0] ??= new Error("Unhandled error."), !events) | ||
| throw args[0]; | ||
| var errorMonitor = events[kErrorMonitor]; | ||
| if (errorMonitor) | ||
| for (var handler of ArrayPrototypeSlice.call(errorMonitor)) | ||
| handler.apply(emitter, args); | ||
| var handlers = events.error; | ||
| if (!handlers) | ||
| throw args[0]; | ||
| for (var handler of ArrayPrototypeSlice.call(handlers)) | ||
| handler.apply(emitter, args); | ||
| return true; | ||
| } | ||
| function addCatch(emitter, promise, type, args) { | ||
| promise.then(undefined, function(err) { | ||
| queueMicrotask(() => emitUnhandledRejectionOrErr(emitter, err, type, args)); | ||
| }); | ||
| } | ||
| function emitUnhandledRejectionOrErr(emitter, err, type, args) { | ||
| if (typeof emitter[kRejection] === "function") | ||
| emitter[kRejection](err, type, ...args); | ||
| else | ||
| try { | ||
| emitter[kCapture] = false, emitter.emit("error", err); | ||
| } finally { | ||
| emitter[kCapture] = true; | ||
| // src/util/locateError.ts | ||
| function locateError(error, step, offset) { | ||
| if (isErrorWithInsertStepAt(error)) { | ||
| if (error.insertStepAt == null) { | ||
| error.message += " at "; | ||
| error.insertStepAt = error.message.length; | ||
| } | ||
| } | ||
| var emitWithoutRejectionCapture = function emit(type, ...args) { | ||
| if (type === "error") | ||
| return emitError(this, args); | ||
| var { _events: events } = this; | ||
| if (events === undefined) | ||
| return false; | ||
| var handlers = events[type]; | ||
| if (handlers === undefined) | ||
| return false; | ||
| let maybeClonedHandlers = handlers.length > 1 ? handlers.slice() : handlers; | ||
| for (let i = 0, { length } = maybeClonedHandlers;i < length; i++) { | ||
| let handler = maybeClonedHandlers[i]; | ||
| switch (args.length) { | ||
| case 0: | ||
| handler.call(this); | ||
| break; | ||
| case 1: | ||
| handler.call(this, args[0]); | ||
| break; | ||
| case 2: | ||
| handler.call(this, args[0], args[1]); | ||
| break; | ||
| case 3: | ||
| handler.call(this, args[0], args[1], args[2]); | ||
| break; | ||
| default: | ||
| handler.apply(this, args); | ||
| break; | ||
| } | ||
| error.message = error.message.slice(0, error.insertStepAt) + step + error.message.slice(error.insertStepAt); | ||
| error.insertStepAt += offset; | ||
| } | ||
| return true; | ||
| }; | ||
| var emitWithRejectionCapture = function emit2(type, ...args) { | ||
| if (type === "error") | ||
| return emitError(this, args); | ||
| var { _events: events } = this; | ||
| if (events === undefined) | ||
| return false; | ||
| var handlers = events[type]; | ||
| if (handlers === undefined) | ||
| return false; | ||
| let maybeClonedHandlers = handlers.length > 1 ? handlers.slice() : handlers; | ||
| for (let i = 0, { length } = maybeClonedHandlers;i < length; i++) { | ||
| let handler = maybeClonedHandlers[i], result; | ||
| switch (args.length) { | ||
| case 0: | ||
| result = handler.call(this); | ||
| break; | ||
| case 1: | ||
| result = handler.call(this, args[0]); | ||
| break; | ||
| case 2: | ||
| result = handler.call(this, args[0], args[1]); | ||
| break; | ||
| case 3: | ||
| result = handler.call(this, args[0], args[1], args[2]); | ||
| break; | ||
| default: | ||
| result = handler.apply(this, args); | ||
| break; | ||
| } | ||
| if (result !== undefined && typeof result?.then === "function" && result.then === Promise.prototype.then) | ||
| addCatch(this, result, type, args); | ||
| } | ||
| return true; | ||
| }; | ||
| EventEmitterPrototype.emit = emitWithoutRejectionCapture; | ||
| EventEmitterPrototype.addListener = function addListener(type, fn) { | ||
| checkListener(fn); | ||
| var events = this._events; | ||
| if (!events) | ||
| events = this._events = { __proto__: null }, this._eventsCount = 0; | ||
| else if (events.newListener) | ||
| this.emit("newListener", type, fn.listener ?? fn); | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| events[type] = [fn], this._eventsCount++; | ||
| else { | ||
| handlers.push(fn); | ||
| var m = this._maxListeners ?? defaultMaxListeners; | ||
| if (m > 0 && handlers.length > m && !handlers.warned) | ||
| overflowWarning(this, type, handlers); | ||
| } | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.on = EventEmitterPrototype.addListener; | ||
| EventEmitterPrototype.prependListener = function prependListener(type, fn) { | ||
| checkListener(fn); | ||
| var events = this._events; | ||
| if (!events) | ||
| events = this._events = { __proto__: null }, this._eventsCount = 0; | ||
| else if (events.newListener) | ||
| this.emit("newListener", type, fn.listener ?? fn); | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| events[type] = [fn], this._eventsCount++; | ||
| else { | ||
| handlers.unshift(fn); | ||
| var m = this._maxListeners ?? defaultMaxListeners; | ||
| if (m > 0 && handlers.length > m && !handlers.warned) | ||
| overflowWarning(this, type, handlers); | ||
| } | ||
| return this; | ||
| }; | ||
| function overflowWarning(emitter, type, handlers) { | ||
| handlers.warned = true; | ||
| let warn = new Error(`Possible EventEmitter memory leak detected. ${handlers.length} ${String(type)} listeners added to [${emitter.constructor.name}]. Use emitter.setMaxListeners() to increase limit`); | ||
| warn.name = "MaxListenersExceededWarning", warn.emitter = emitter, warn.type = type, warn.count = handlers.length, console.warn(warn); | ||
| return error; | ||
| } | ||
| function onceWrapper(type, listener, ...args) { | ||
| this.removeListener(type, listener), listener.apply(this, args); | ||
| } | ||
| EventEmitterPrototype.once = function once(type, fn) { | ||
| checkListener(fn); | ||
| let bound = onceWrapper.bind(this, type, fn); | ||
| return bound.listener = fn, this.addListener(type, bound), this; | ||
| }; | ||
| EventEmitterPrototype.prependOnceListener = function prependOnceListener(type, fn) { | ||
| checkListener(fn); | ||
| let bound = onceWrapper.bind(this, type, fn); | ||
| return bound.listener = fn, this.prependListener(type, bound), this; | ||
| }; | ||
| EventEmitterPrototype.removeListener = function removeListener(type, fn) { | ||
| checkListener(fn); | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return this; | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| return this; | ||
| var length = handlers.length; | ||
| let position = -1; | ||
| for (let i = length - 1;i >= 0; i--) | ||
| if (handlers[i] === fn || handlers[i].listener === fn) { | ||
| position = i; | ||
| break; | ||
| function isErrorWithInsertStepAt(error) { | ||
| if (error instanceof Error) { | ||
| if (!("insertStepAt" in error)) { | ||
| error.insertStepAt = null; | ||
| } | ||
| if (position < 0) | ||
| return this; | ||
| if (position === 0) | ||
| handlers.shift(); | ||
| else | ||
| handlers.splice(position, 1); | ||
| if (handlers.length === 0) | ||
| delete events[type], this._eventsCount--; | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.off = EventEmitterPrototype.removeListener; | ||
| EventEmitterPrototype.removeAllListeners = function removeAllListeners(type) { | ||
| var { _events: events } = this; | ||
| if (type && events) { | ||
| if (events[type]) | ||
| delete events[type], this._eventsCount--; | ||
| } else | ||
| this._events = { __proto__: null }; | ||
| return this; | ||
| }; | ||
| EventEmitterPrototype.listeners = function listeners(type) { | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return []; | ||
| var handlers = events[type]; | ||
| if (!handlers) | ||
| return []; | ||
| return handlers.map((x) => x.listener ?? x); | ||
| }; | ||
| EventEmitterPrototype.rawListeners = function rawListeners(type) { | ||
| var { _events } = this; | ||
| if (!_events) | ||
| return []; | ||
| var handlers = _events[type]; | ||
| if (!handlers) | ||
| return []; | ||
| return handlers.slice(); | ||
| }; | ||
| EventEmitterPrototype.listenerCount = function listenerCount(type) { | ||
| var { _events: events } = this; | ||
| if (!events) | ||
| return 0; | ||
| return events[type]?.length ?? 0; | ||
| }; | ||
| EventEmitterPrototype.eventNames = function eventNames() { | ||
| return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; | ||
| }; | ||
| EventEmitterPrototype[kCapture] = false; | ||
| function once2(emitter, type, options) { | ||
| var signal = options?.signal; | ||
| if (validateAbortSignal(signal, "options.signal"), signal?.aborted) | ||
| throw new AbortError(undefined, { cause: signal?.reason }); | ||
| let { resolve, reject, promise } = $newPromiseCapability(Promise), errorListener = (err) => { | ||
| if (emitter.removeListener(type, resolver), signal != null) | ||
| eventTargetAgnosticRemoveListener(signal, "abort", abortListener); | ||
| reject(err); | ||
| }, resolver = (...args) => { | ||
| if (typeof emitter.removeListener === "function") | ||
| emitter.removeListener("error", errorListener); | ||
| if (signal != null) | ||
| eventTargetAgnosticRemoveListener(signal, "abort", abortListener); | ||
| resolve(args); | ||
| }; | ||
| if (eventTargetAgnosticAddListener(emitter, type, resolver, { once: true }), type !== "error" && typeof emitter.once === "function") | ||
| emitter.once("error", errorListener); | ||
| function abortListener() { | ||
| eventTargetAgnosticRemoveListener(emitter, type, resolver), eventTargetAgnosticRemoveListener(emitter, "error", errorListener), reject(new AbortError(undefined, { cause: signal?.reason })); | ||
| } | ||
| if (signal != null) | ||
| eventTargetAgnosticAddListener(signal, "abort", abortListener, { once: true }); | ||
| return promise; | ||
| } | ||
| function getEventListeners(emitter, type) { | ||
| return emitter.listeners(type); | ||
| } | ||
| function setMaxListeners2(n, ...eventTargets) { | ||
| validateNumber(n, "setMaxListeners", 0); | ||
| var length; | ||
| if (eventTargets && (length = eventTargets.length)) | ||
| for (let i = 0;i < length; i++) | ||
| eventTargets[i].setMaxListeners(n); | ||
| else | ||
| defaultMaxListeners = n; | ||
| } | ||
| function listenerCount2(emitter, type) { | ||
| return emitter.listenerCount(type); | ||
| } | ||
| function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) { | ||
| if (typeof emitter.removeListener === "function") | ||
| emitter.removeListener(name, listener); | ||
| else | ||
| emitter.removeEventListener(name, listener, flags); | ||
| } | ||
| function eventTargetAgnosticAddListener(emitter, name, listener, flags) { | ||
| if (typeof emitter.on === "function") | ||
| if (flags.once) | ||
| emitter.once(name, listener); | ||
| else | ||
| emitter.on(name, listener); | ||
| else | ||
| emitter.addEventListener(name, listener, flags); | ||
| } | ||
| class AbortError extends Error { | ||
| constructor(message = "The operation was aborted", options = undefined) { | ||
| if (options !== undefined && typeof options !== "object") | ||
| throw ERR_INVALID_ARG_TYPE("options", "Object", options); | ||
| super(message, options); | ||
| this.code = "ABORT_ERR", this.name = "AbortError"; | ||
| } | ||
| } | ||
| function ERR_INVALID_ARG_TYPE(name, type, value) { | ||
| let err = new TypeError(`The "${name}" argument must be of type ${type}. Received ${value}`); | ||
| return err.code = "ERR_INVALID_ARG_TYPE", err; | ||
| } | ||
| function ERR_OUT_OF_RANGE(name, range, value) { | ||
| let err = new RangeError(`The "${name}" argument is out of range. It must be ${range}. Received ${value}`); | ||
| return err.code = "ERR_OUT_OF_RANGE", err; | ||
| } | ||
| function validateAbortSignal(signal, name) { | ||
| if (signal !== undefined && (signal === null || typeof signal !== "object" || !("aborted" in signal))) | ||
| throw ERR_INVALID_ARG_TYPE(name, "AbortSignal", signal); | ||
| } | ||
| function validateNumber(value, name, min, max) { | ||
| if (typeof value !== "number") | ||
| throw ERR_INVALID_ARG_TYPE(name, "number", value); | ||
| if (min != null && value < min || max != null && value > max || (min != null || max != null) && Number.isNaN(value)) | ||
| throw ERR_OUT_OF_RANGE(name, `${min != null ? `>= ${min}` : ""}${min != null && max != null ? " && " : ""}${max != null ? `<= ${max}` : ""}`, value); | ||
| } | ||
| function checkListener(listener) { | ||
| if (typeof listener !== "function") | ||
| throw new TypeError("The listener must be a function"); | ||
| } | ||
| function validateBoolean(value, name) { | ||
| if (typeof value !== "boolean") | ||
| throw ERR_INVALID_ARG_TYPE(name, "boolean", value); | ||
| } | ||
| function getMaxListeners2(emitterOrTarget) { | ||
| return emitterOrTarget?._maxListeners ?? defaultMaxListeners; | ||
| } | ||
| function addAbortListener(signal, listener) { | ||
| if (signal === undefined) | ||
| throw ERR_INVALID_ARG_TYPE("signal", "AbortSignal", signal); | ||
| if (validateAbortSignal(signal, "signal"), typeof listener !== "function") | ||
| throw ERR_INVALID_ARG_TYPE("listener", "function", listener); | ||
| let removeEventListener; | ||
| if (signal.aborted) | ||
| queueMicrotask(() => listener()); | ||
| else | ||
| signal.addEventListener("abort", listener, { __proto__: null, once: true }), removeEventListener = () => { | ||
| signal.removeEventListener("abort", listener); | ||
| }; | ||
| return { __proto__: null, [Symbol.dispose]() { | ||
| removeEventListener?.(); | ||
| } }; | ||
| } | ||
| Object.defineProperties(EventEmitter, { captureRejections: { get() { | ||
| return EventEmitterPrototype[kCapture]; | ||
| }, set(value) { | ||
| validateBoolean(value, "EventEmitter.captureRejections"), EventEmitterPrototype[kCapture] = value; | ||
| }, enumerable: true }, defaultMaxListeners: { enumerable: true, get: () => { | ||
| return defaultMaxListeners; | ||
| }, set: (arg) => { | ||
| validateNumber(arg, "defaultMaxListeners", 0), defaultMaxListeners = arg; | ||
| } }, kMaxEventTargetListeners: { value: kMaxEventTargetListeners, enumerable: false, configurable: false, writable: false }, kMaxEventTargetListenersWarned: { value: kMaxEventTargetListenersWarned, enumerable: false, configurable: false, writable: false } }); | ||
| Object.assign(EventEmitter, { once: once2, getEventListeners, getMaxListeners: getMaxListeners2, setMaxListeners: setMaxListeners2, EventEmitter, usingDomains: false, captureRejectionSymbol, errorMonitor: kErrorMonitor, addAbortListener, init: EventEmitter, listenerCount: listenerCount2 }); | ||
| // node_modules/pouchdb-md5/lib/index-browser.es.js | ||
| var import_spark_md5 = __toESM(require_spark_md5(), 1); | ||
| var setImmediateShim = self.setImmediate || self.setTimeout; | ||
| // node_modules/pouchdb-utils/lib/index-browser.es.js | ||
| function isBinaryObject(object) { | ||
| return typeof ArrayBuffer !== "undefined" && object instanceof ArrayBuffer || typeof Blob !== "undefined" && object instanceof Blob; | ||
| } | ||
| function cloneBinaryObject(object) { | ||
| return object instanceof ArrayBuffer ? object.slice(0) : object.slice(0, object.size, object.type); | ||
| } | ||
| var funcToString = Function.prototype.toString; | ||
| var objectCtorString = funcToString.call(Object); | ||
| function isPlainObject(value) { | ||
| var proto = Object.getPrototypeOf(value); | ||
| if (proto === null) { | ||
| return true; | ||
| } | ||
| var Ctor = proto.constructor; | ||
| return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; | ||
| return false; | ||
| } | ||
| function clone(object) { | ||
| var newObject; | ||
| var i; | ||
| var len; | ||
| if (!object || typeof object !== "object") { | ||
| return object; | ||
| } | ||
| if (Array.isArray(object)) { | ||
| newObject = []; | ||
| for (i = 0, len = object.length;i < len; i++) { | ||
| newObject[i] = clone(object[i]); | ||
| } | ||
| return newObject; | ||
| } | ||
| if (object instanceof Date && isFinite(object)) { | ||
| return object.toISOString(); | ||
| } | ||
| if (isBinaryObject(object)) { | ||
| return cloneBinaryObject(object); | ||
| } | ||
| if (!isPlainObject(object)) { | ||
| return object; | ||
| } | ||
| newObject = {}; | ||
| for (i in object) { | ||
| if (Object.prototype.hasOwnProperty.call(object, i)) { | ||
| var value = clone(object[i]); | ||
| if (typeof value !== "undefined") { | ||
| newObject[i] = value; | ||
| } | ||
| } | ||
| } | ||
| return newObject; | ||
| } | ||
| var hasLocal; | ||
| try { | ||
| localStorage.setItem("_pouch_check_localstorage", 1); | ||
| hasLocal = !!localStorage.getItem("_pouch_check_localstorage"); | ||
| } catch (e) { | ||
| hasLocal = false; | ||
| } | ||
| function f() {} | ||
| var hasName = f.name; | ||
| var res; | ||
| if (hasName) { | ||
| res = function(fun) { | ||
| return fun.name; | ||
| }; | ||
| } else { | ||
| res = function(fun) { | ||
| var match = fun.toString().match(/^\s*function\s*(?:(\S+)\s*)?\(/); | ||
| if (match && match[1]) { | ||
| return match[1]; | ||
| } else { | ||
| return ""; | ||
| } | ||
| }; | ||
| } | ||
| // node_modules/pouchdb-collate/lib/index.es.js | ||
| function collate(a, b) { | ||
| if (a === b) { | ||
| return 0; | ||
| // src/cleaners.ts | ||
| var asMangoSelector = (raw) => { | ||
| if (typeof raw !== "object" || raw == null || Array.isArray(raw)) { | ||
| throw new TypeError("Expected a Mango selector object"); | ||
| } | ||
| a = normalizeKey(a); | ||
| b = normalizeKey(b); | ||
| var ai = collationIndex(a); | ||
| var bi = collationIndex(b); | ||
| if (ai - bi !== 0) { | ||
| return ai - bi; | ||
| } | ||
| switch (typeof a) { | ||
| case "number": | ||
| return a - b; | ||
| case "boolean": | ||
| return a < b ? -1 : 1; | ||
| case "string": | ||
| return stringCollate(a, b); | ||
| } | ||
| return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b); | ||
| } | ||
| function normalizeKey(key) { | ||
| switch (typeof key) { | ||
| case "undefined": | ||
| return null; | ||
| case "number": | ||
| if (key === Infinity || key === -Infinity || isNaN(key)) { | ||
| return null; | ||
| const source = raw; | ||
| const result = {}; | ||
| for (const key of Object.keys(source)) { | ||
| try { | ||
| if (key === "__proto__") | ||
| continue; | ||
| const value = source[key]; | ||
| if (value === undefined) { | ||
| result[key] = undefined; | ||
| continue; | ||
| } | ||
| return key; | ||
| case "object": | ||
| var origKey = key; | ||
| if (Array.isArray(key)) { | ||
| var len = key.length; | ||
| key = new Array(len); | ||
| for (var i = 0;i < len; i++) { | ||
| key[i] = normalizeKey(origKey[i]); | ||
| } | ||
| } else if (key instanceof Date) { | ||
| return key.toJSON(); | ||
| } else if (key !== null) { | ||
| key = {}; | ||
| for (var k in origKey) { | ||
| if (Object.prototype.hasOwnProperty.call(origKey, k)) { | ||
| var val = origKey[k]; | ||
| if (typeof val !== "undefined") { | ||
| key[k] = normalizeKey(val); | ||
| } | ||
| } | ||
| } | ||
| if (key === "$and" || key === "$or" || key === "$nor") { | ||
| result[key] = asMangoSelectorArray(value); | ||
| continue; | ||
| } | ||
| } | ||
| return key; | ||
| } | ||
| function arrayCollate(a, b) { | ||
| var len = Math.min(a.length, b.length); | ||
| for (var i = 0;i < len; i++) { | ||
| var sort = collate(a[i], b[i]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| } | ||
| return a.length === b.length ? 0 : a.length > b.length ? 1 : -1; | ||
| } | ||
| function stringCollate(a, b) { | ||
| return a === b ? 0 : a > b ? 1 : -1; | ||
| } | ||
| function objectCollate(a, b) { | ||
| var ak = Object.keys(a), bk = Object.keys(b); | ||
| var len = Math.min(ak.length, bk.length); | ||
| for (var i = 0;i < len; i++) { | ||
| var sort = collate(ak[i], bk[i]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| sort = collate(a[ak[i]], b[bk[i]]); | ||
| if (sort !== 0) { | ||
| return sort; | ||
| } | ||
| } | ||
| return ak.length === bk.length ? 0 : ak.length > bk.length ? 1 : -1; | ||
| } | ||
| function collationIndex(x) { | ||
| var id = ["boolean", "number", "string", "object"]; | ||
| var idx = id.indexOf(typeof x); | ||
| if (~idx) { | ||
| if (x === null) { | ||
| return 1; | ||
| } | ||
| if (Array.isArray(x)) { | ||
| return 5; | ||
| } | ||
| return idx < 3 ? idx + 2 : idx + 3; | ||
| } | ||
| if (Array.isArray(x)) { | ||
| return 5; | ||
| } | ||
| } | ||
| // node_modules/pouchdb-selector-core/lib/index.es.js | ||
| function getFieldFromDoc(doc, parsedField) { | ||
| var value = doc; | ||
| for (var i = 0, len = parsedField.length;i < len; i++) { | ||
| var key = parsedField[i]; | ||
| value = value[key]; | ||
| if (!value) { | ||
| break; | ||
| } | ||
| } | ||
| return value; | ||
| } | ||
| function compare(left, right) { | ||
| return left < right ? -1 : left > right ? 1 : 0; | ||
| } | ||
| function parseField(fieldName) { | ||
| var fields = []; | ||
| var current = ""; | ||
| for (var i = 0, len = fieldName.length;i < len; i++) { | ||
| var ch = fieldName[i]; | ||
| if (i > 0 && fieldName[i - 1] === "\\" && (ch === "$" || ch === ".")) { | ||
| current = current.substring(0, current.length - 1) + ch; | ||
| } else if (ch === ".") { | ||
| fields.push(current); | ||
| current = ""; | ||
| } else { | ||
| current += ch; | ||
| } | ||
| } | ||
| fields.push(current); | ||
| return fields; | ||
| } | ||
| var combinationFields = ["$or", "$nor", "$not"]; | ||
| function isCombinationalField(field) { | ||
| return combinationFields.indexOf(field) > -1; | ||
| } | ||
| function getKey(obj) { | ||
| return Object.keys(obj)[0]; | ||
| } | ||
| function getValue(obj) { | ||
| return obj[getKey(obj)]; | ||
| } | ||
| function mergeAndedSelectors(selectors) { | ||
| var res2 = {}; | ||
| var first = { $or: true, $nor: true }; | ||
| selectors.forEach(function(selector) { | ||
| Object.keys(selector).forEach(function(field) { | ||
| var matcher = selector[field]; | ||
| if (typeof matcher !== "object") { | ||
| matcher = { $eq: matcher }; | ||
| if (key === "$not") { | ||
| result[key] = asMangoSelector(value); | ||
| continue; | ||
| } | ||
| if (isCombinationalField(field)) { | ||
| if (matcher instanceof Array) { | ||
| if (first[field]) { | ||
| first[field] = false; | ||
| res2[field] = matcher; | ||
| return; | ||
| } | ||
| var entries = []; | ||
| res2[field].forEach(function(existing) { | ||
| Object.keys(matcher).forEach(function(key) { | ||
| var m = matcher[key]; | ||
| var longest = Math.max(Object.keys(existing).length, Object.keys(m).length); | ||
| var merged = mergeAndedSelectors([existing, m]); | ||
| if (Object.keys(merged).length <= longest) { | ||
| return; | ||
| } | ||
| entries.push(merged); | ||
| }); | ||
| }); | ||
| res2[field] = entries; | ||
| } else { | ||
| res2[field] = mergeAndedSelectors([matcher]); | ||
| } | ||
| } else { | ||
| var fieldMatchers = res2[field] = res2[field] || {}; | ||
| Object.keys(matcher).forEach(function(operator) { | ||
| var value = matcher[operator]; | ||
| if (operator === "$gt" || operator === "$gte") { | ||
| return mergeGtGte(operator, value, fieldMatchers); | ||
| } else if (operator === "$lt" || operator === "$lte") { | ||
| return mergeLtLte(operator, value, fieldMatchers); | ||
| } else if (operator === "$ne") { | ||
| return mergeNe(value, fieldMatchers); | ||
| } else if (operator === "$eq") { | ||
| return mergeEq(value, fieldMatchers); | ||
| } else if (operator === "$regex") { | ||
| return mergeRegex(value, fieldMatchers); | ||
| } | ||
| fieldMatchers[operator] = value; | ||
| }); | ||
| } | ||
| }); | ||
| }); | ||
| return res2; | ||
| } | ||
| function mergeGtGte(operator, value, fieldMatchers) { | ||
| if (typeof fieldMatchers.$eq !== "undefined") { | ||
| return; | ||
| } | ||
| if (typeof fieldMatchers.$gte !== "undefined") { | ||
| if (operator === "$gte") { | ||
| if (value > fieldMatchers.$gte) { | ||
| fieldMatchers.$gte = value; | ||
| } | ||
| } else { | ||
| if (value >= fieldMatchers.$gte) { | ||
| delete fieldMatchers.$gte; | ||
| fieldMatchers.$gt = value; | ||
| } | ||
| result[key] = asEither(asMangoFieldSelector, asMangoSelectorArray)(value); | ||
| } catch (error) { | ||
| throw locateError(error, "." + key, 0); | ||
| } | ||
| } else if (typeof fieldMatchers.$gt !== "undefined") { | ||
| if (operator === "$gte") { | ||
| if (value > fieldMatchers.$gt) { | ||
| delete fieldMatchers.$gt; | ||
| fieldMatchers.$gte = value; | ||
| } | ||
| } else { | ||
| if (value > fieldMatchers.$gt) { | ||
| fieldMatchers.$gt = value; | ||
| } | ||
| } | ||
| } else { | ||
| fieldMatchers[operator] = value; | ||
| } | ||
| } | ||
| function mergeLtLte(operator, value, fieldMatchers) { | ||
| if (typeof fieldMatchers.$eq !== "undefined") { | ||
| return; | ||
| } | ||
| if (typeof fieldMatchers.$lte !== "undefined") { | ||
| if (operator === "$lte") { | ||
| if (value < fieldMatchers.$lte) { | ||
| fieldMatchers.$lte = value; | ||
| } | ||
| } else { | ||
| if (value <= fieldMatchers.$lte) { | ||
| delete fieldMatchers.$lte; | ||
| fieldMatchers.$lt = value; | ||
| } | ||
| } | ||
| } else if (typeof fieldMatchers.$lt !== "undefined") { | ||
| if (operator === "$lte") { | ||
| if (value < fieldMatchers.$lt) { | ||
| delete fieldMatchers.$lt; | ||
| fieldMatchers.$lte = value; | ||
| } | ||
| } else { | ||
| if (value < fieldMatchers.$lt) { | ||
| fieldMatchers.$lt = value; | ||
| } | ||
| } | ||
| } else { | ||
| fieldMatchers[operator] = value; | ||
| } | ||
| } | ||
| function mergeNe(value, fieldMatchers) { | ||
| if ("$ne" in fieldMatchers) { | ||
| fieldMatchers.$ne.push(value); | ||
| } else { | ||
| fieldMatchers.$ne = [value]; | ||
| } | ||
| } | ||
| function mergeEq(value, fieldMatchers) { | ||
| delete fieldMatchers.$gt; | ||
| delete fieldMatchers.$gte; | ||
| delete fieldMatchers.$lt; | ||
| delete fieldMatchers.$lte; | ||
| delete fieldMatchers.$ne; | ||
| fieldMatchers.$eq = value; | ||
| } | ||
| function mergeRegex(value, fieldMatchers) { | ||
| if ("$regex" in fieldMatchers) { | ||
| fieldMatchers.$regex.push(value); | ||
| } else { | ||
| fieldMatchers.$regex = [value]; | ||
| } | ||
| } | ||
| function mergeAndedSelectorsNested(obj) { | ||
| for (var prop in obj) { | ||
| if (Array.isArray(obj)) { | ||
| for (var i in obj) { | ||
| if (obj[i]["$and"]) { | ||
| obj[i] = mergeAndedSelectors(obj[i]["$and"]); | ||
| } | ||
| } | ||
| } | ||
| var value = obj[prop]; | ||
| if (typeof value === "object") { | ||
| mergeAndedSelectorsNested(value); | ||
| } | ||
| } | ||
| return obj; | ||
| } | ||
| function isAndInSelector(obj, isAnd) { | ||
| for (var prop in obj) { | ||
| if (prop === "$and") { | ||
| isAnd = true; | ||
| } | ||
| var value = obj[prop]; | ||
| if (typeof value === "object") { | ||
| isAnd = isAndInSelector(value, isAnd); | ||
| } | ||
| } | ||
| return isAnd; | ||
| } | ||
| function massageSelector(input) { | ||
| var result = clone(input); | ||
| if (isAndInSelector(result, false)) { | ||
| result = mergeAndedSelectorsNested(result); | ||
| if ("$and" in result) { | ||
| result = mergeAndedSelectors(result["$and"]); | ||
| } | ||
| } | ||
| ["$or", "$nor"].forEach(function(orOrNor) { | ||
| if (orOrNor in result) { | ||
| result[orOrNor].forEach(function(subSelector) { | ||
| var fields2 = Object.keys(subSelector); | ||
| for (var i2 = 0;i2 < fields2.length; i2++) { | ||
| var field2 = fields2[i2]; | ||
| var matcher2 = subSelector[field2]; | ||
| if (typeof matcher2 !== "object" || matcher2 === null) { | ||
| subSelector[field2] = { $eq: matcher2 }; | ||
| } | ||
| } | ||
| }); | ||
| } | ||
| }); | ||
| if ("$not" in result) { | ||
| result["$not"] = mergeAndedSelectors([result["$not"]]); | ||
| } | ||
| var fields = Object.keys(result); | ||
| for (var i = 0;i < fields.length; i++) { | ||
| var field = fields[i]; | ||
| var matcher = result[field]; | ||
| if (typeof matcher !== "object" || matcher === null) { | ||
| matcher = { $eq: matcher }; | ||
| } | ||
| result[field] = matcher; | ||
| } | ||
| normalizeArrayOperators(result); | ||
| return result; | ||
| } | ||
| function normalizeArrayOperators(selector) { | ||
| Object.keys(selector).forEach(function(field) { | ||
| var matcher = selector[field]; | ||
| if (Array.isArray(matcher)) { | ||
| matcher.forEach(function(matcherItem) { | ||
| if (matcherItem && typeof matcherItem === "object") { | ||
| normalizeArrayOperators(matcherItem); | ||
| } | ||
| }); | ||
| } else if (field === "$ne") { | ||
| selector.$ne = [matcher]; | ||
| } else if (field === "$regex") { | ||
| selector.$regex = [matcher]; | ||
| } else if (matcher && typeof matcher === "object") { | ||
| normalizeArrayOperators(matcher); | ||
| } | ||
| }); | ||
| } | ||
| function createFieldSorter(sort) { | ||
| function getFieldValuesAsArray(doc) { | ||
| return sort.map(function(sorting) { | ||
| var fieldName = getKey(sorting); | ||
| var parsedField = parseField(fieldName); | ||
| var docFieldValue = getFieldFromDoc(doc, parsedField); | ||
| return docFieldValue; | ||
| }); | ||
| } | ||
| return function(aRow, bRow) { | ||
| var aFieldValues = getFieldValuesAsArray(aRow.doc); | ||
| var bFieldValues = getFieldValuesAsArray(bRow.doc); | ||
| var collation = collate(aFieldValues, bFieldValues); | ||
| if (collation !== 0) { | ||
| return collation; | ||
| } | ||
| return compare(aRow.doc._id, bRow.doc._id); | ||
| }; | ||
| } | ||
| function filterInMemoryFields(rows, requestDef, inMemoryFields) { | ||
| rows = rows.filter(function(row) { | ||
| return rowFilter(row.doc, requestDef.selector, inMemoryFields); | ||
| }); | ||
| if (requestDef.sort) { | ||
| var fieldSorter = createFieldSorter(requestDef.sort); | ||
| rows = rows.sort(fieldSorter); | ||
| if (typeof requestDef.sort[0] !== "string" && getValue(requestDef.sort[0]) === "desc") { | ||
| rows = rows.reverse(); | ||
| } | ||
| } | ||
| if ("limit" in requestDef || "skip" in requestDef) { | ||
| var skip = requestDef.skip || 0; | ||
| var limit = ("limit" in requestDef ? requestDef.limit : rows.length) + skip; | ||
| rows = rows.slice(skip, limit); | ||
| } | ||
| return rows; | ||
| } | ||
| function rowFilter(doc, selector, inMemoryFields) { | ||
| return inMemoryFields.every(function(field) { | ||
| var matcher = selector[field]; | ||
| var parsedField = parseField(field); | ||
| var docFieldValue = getFieldFromDoc(doc, parsedField); | ||
| if (isCombinationalField(field)) { | ||
| return matchCominationalSelector(field, matcher, doc); | ||
| } | ||
| return matchSelector(matcher, doc, parsedField, docFieldValue); | ||
| }); | ||
| } | ||
| function matchSelector(matcher, doc, parsedField, docFieldValue) { | ||
| if (!matcher) { | ||
| return true; | ||
| } | ||
| if (typeof matcher === "object") { | ||
| return Object.keys(matcher).every(function(maybeUserOperator) { | ||
| var userValue = matcher[maybeUserOperator]; | ||
| if (maybeUserOperator.indexOf("$") === 0) { | ||
| return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue); | ||
| } else { | ||
| var subParsedField = parseField(maybeUserOperator); | ||
| if (docFieldValue === undefined && typeof userValue !== "object" && subParsedField.length > 0) { | ||
| return false; | ||
| } | ||
| var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField); | ||
| if (typeof userValue === "object") { | ||
| return matchSelector(userValue, doc, parsedField, subDocFieldValue); | ||
| } | ||
| return match("$eq", doc, userValue, subParsedField, subDocFieldValue); | ||
| } | ||
| }); | ||
| } | ||
| return matcher === docFieldValue; | ||
| } | ||
| function matchCominationalSelector(field, matcher, doc) { | ||
| if (field === "$or") { | ||
| return matcher.some(function(orMatchers) { | ||
| return rowFilter(doc, orMatchers, Object.keys(orMatchers)); | ||
| }); | ||
| } | ||
| if (field === "$not") { | ||
| return !rowFilter(doc, matcher, Object.keys(matcher)); | ||
| } | ||
| return !matcher.find(function(orMatchers) { | ||
| return rowFilter(doc, orMatchers, Object.keys(orMatchers)); | ||
| }); | ||
| } | ||
| function match(userOperator, doc, userValue, parsedField, docFieldValue) { | ||
| if (!matchers[userOperator]) { | ||
| throw new Error('unknown operator "' + userOperator + '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' + "$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all"); | ||
| } | ||
| return matchers[userOperator](doc, userValue, parsedField, docFieldValue); | ||
| } | ||
| function fieldExists(docFieldValue) { | ||
| return typeof docFieldValue !== "undefined" && docFieldValue !== null; | ||
| } | ||
| function fieldIsNotUndefined(docFieldValue) { | ||
| return typeof docFieldValue !== "undefined"; | ||
| } | ||
| function modField(docFieldValue, userValue) { | ||
| if (typeof docFieldValue !== "number" || parseInt(docFieldValue, 10) !== docFieldValue) { | ||
| return false; | ||
| } | ||
| var divisor = userValue[0]; | ||
| var mod = userValue[1]; | ||
| return docFieldValue % divisor === mod; | ||
| } | ||
| function arrayContainsValue(docFieldValue, userValue) { | ||
| return userValue.some(function(val) { | ||
| if (docFieldValue instanceof Array) { | ||
| return docFieldValue.some(function(docFieldValueItem) { | ||
| return collate(val, docFieldValueItem) === 0; | ||
| }); | ||
| } | ||
| return collate(val, docFieldValue) === 0; | ||
| }); | ||
| } | ||
| function arrayContainsAllValues(docFieldValue, userValue) { | ||
| return userValue.every(function(val) { | ||
| return docFieldValue.some(function(docFieldValueItem) { | ||
| return collate(val, docFieldValueItem) === 0; | ||
| }); | ||
| }); | ||
| } | ||
| function arraySize(docFieldValue, userValue) { | ||
| return docFieldValue.length === userValue; | ||
| } | ||
| function regexMatch(docFieldValue, userValue) { | ||
| var re = new RegExp(userValue); | ||
| return re.test(docFieldValue); | ||
| } | ||
| function typeMatch(docFieldValue, userValue) { | ||
| switch (userValue) { | ||
| case "null": | ||
| return docFieldValue === null; | ||
| case "boolean": | ||
| return typeof docFieldValue === "boolean"; | ||
| case "number": | ||
| return typeof docFieldValue === "number"; | ||
| case "string": | ||
| return typeof docFieldValue === "string"; | ||
| case "array": | ||
| return docFieldValue instanceof Array; | ||
| case "object": | ||
| return {}.toString.call(docFieldValue) === "[object Object]"; | ||
| } | ||
| } | ||
| var matchers = { | ||
| $elemMatch: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (!Array.isArray(docFieldValue)) { | ||
| return false; | ||
| } | ||
| if (docFieldValue.length === 0) { | ||
| return false; | ||
| } | ||
| if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) { | ||
| return docFieldValue.some(function(val) { | ||
| return rowFilter(val, userValue, Object.keys(userValue)); | ||
| }); | ||
| } | ||
| return docFieldValue.some(function(val) { | ||
| return matchSelector(userValue, doc, parsedField, val); | ||
| }); | ||
| }, | ||
| $allMatch: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (!Array.isArray(docFieldValue)) { | ||
| return false; | ||
| } | ||
| if (docFieldValue.length === 0) { | ||
| return false; | ||
| } | ||
| if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) { | ||
| return docFieldValue.every(function(val) { | ||
| return rowFilter(val, userValue, Object.keys(userValue)); | ||
| }); | ||
| } | ||
| return docFieldValue.every(function(val) { | ||
| return matchSelector(userValue, doc, parsedField, val); | ||
| }); | ||
| }, | ||
| $eq: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0; | ||
| }, | ||
| $gte: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0; | ||
| }, | ||
| $gt: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0; | ||
| }, | ||
| $lte: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0; | ||
| }, | ||
| $lt: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0; | ||
| }, | ||
| $exists: function(doc, userValue, parsedField, docFieldValue) { | ||
| if (userValue) { | ||
| return fieldIsNotUndefined(docFieldValue); | ||
| } | ||
| return !fieldIsNotUndefined(docFieldValue); | ||
| }, | ||
| $mod: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && modField(docFieldValue, userValue); | ||
| }, | ||
| $ne: function(doc, userValue, parsedField, docFieldValue) { | ||
| return userValue.every(function(neValue) { | ||
| return collate(docFieldValue, neValue) !== 0; | ||
| }); | ||
| }, | ||
| $in: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue); | ||
| }, | ||
| $nin: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue); | ||
| }, | ||
| $size: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && Array.isArray(docFieldValue) && arraySize(docFieldValue, userValue); | ||
| }, | ||
| $all: function(doc, userValue, parsedField, docFieldValue) { | ||
| return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue); | ||
| }, | ||
| $regex: function(doc, userValue, parsedField, docFieldValue) { | ||
| return fieldExists(docFieldValue) && typeof docFieldValue == "string" && userValue.every(function(regexValue) { | ||
| return regexMatch(docFieldValue, regexValue); | ||
| }); | ||
| }, | ||
| $type: function(doc, userValue, parsedField, docFieldValue) { | ||
| return typeMatch(docFieldValue, userValue); | ||
| } | ||
| }; | ||
| function matchesSelector(doc, selector) { | ||
| if (typeof selector !== "object") { | ||
| throw new Error("Selector error: expected a JSON object"); | ||
| } | ||
| selector = massageSelector(selector); | ||
| var row = { | ||
| doc | ||
| }; | ||
| var rowsMatched = filterInMemoryFields([row], { selector }, Object.keys(selector)); | ||
| return rowsMatched && rowsMatched.length === 1; | ||
| } | ||
| var asMangoSelectorArray = asArray(asMangoSelector); | ||
| var asMangoPrimitive = asEither(asNull, asBoolean, asNumber, asString); | ||
| var asMangoValue = asEither(asMangoPrimitive, asArray((raw) => asMangoValue(raw)), asObject((raw) => asMangoValue(raw))); | ||
| var asMangoValueArray = asArray(asMangoValue); | ||
| var asMangoType = asValue("null", "boolean", "number", "string", "array", "object"); | ||
| var asMangoKeyMapMatch = asObject((raw) => raw === undefined ? undefined : asMangoSelector(raw)); | ||
| var asNumberPair = asTuple(asNumber, asNumber); | ||
| var asRegex = asEither(asString, asArray(asString)); | ||
| var asMangoFieldMatcher = asObject({ | ||
| $eq: asOptional(asMangoValue), | ||
| $ne: asOptional(asEither(asMangoValue, asMangoValueArray)), | ||
| $gt: asOptional(asMangoValue), | ||
| $gte: asOptional(asMangoValue), | ||
| $lt: asOptional(asMangoValue), | ||
| $lte: asOptional(asMangoValue), | ||
| $exists: asOptional(asBoolean), | ||
| $type: asOptional(asMangoType), | ||
| $in: asOptional(asMangoValueArray), | ||
| $nin: asOptional(asMangoValueArray), | ||
| $size: asOptional(asNumber), | ||
| $mod: asOptional(asNumberPair), | ||
| $regex: asOptional(asRegex), | ||
| $options: asOptional(asString), | ||
| $all: asOptional(asMangoValueArray), | ||
| $elemMatch: asOptional(asMangoSelector), | ||
| $allMatch: asOptional(asMangoSelector), | ||
| $keyMapMatch: asOptional(asMangoKeyMapMatch), | ||
| $not: asOptional((raw) => asMangoFieldSelector(raw)) | ||
| }); | ||
| var asMangoFieldSelector = asEither(asMangoValue, asMangoFieldMatcher, asMangoSelector); | ||
@@ -1539,3 +107,4 @@ // src/index.ts | ||
| export { | ||
| drupe | ||
| drupe, | ||
| asMangoSelector | ||
| }; |
+3
-2
@@ -1,3 +0,4 @@ | ||
| import type { Drupe } from './types'; | ||
| import type { Drupe } from "./types"; | ||
| export declare const drupe: Drupe; | ||
| export type { MangoSelector } from './types'; | ||
| export type * from "./types"; | ||
| export * from "./cleaners"; |
@@ -1,6 +0,6 @@ | ||
| declare module 'pouchdb-selector-core' { | ||
| declare module "pouchdb-selector-core" { | ||
| export function matchesSelector( | ||
| subject: unknown, | ||
| selector: import('./types').MangoSelector | ||
| ): boolean | ||
| selector: import("./types").MangoSelector, | ||
| ): boolean; | ||
| } |
+1
-1
@@ -10,3 +10,3 @@ export type Drupe = (selector: MangoSelector) => DrupeQuery; | ||
| }; | ||
| export type MangoType = 'null' | 'boolean' | 'number' | 'string' | 'array' | 'object'; | ||
| export type MangoType = "null" | "boolean" | "number" | "string" | "array" | "object"; | ||
| export interface MangoKeyMapMatch { | ||
@@ -13,0 +13,0 @@ [key: string]: MangoSelector | undefined; |
+9
-5
| { | ||
| "name": "@edge.app/drupe", | ||
| "version": "0.0.8", | ||
| "version": "0.1.0", | ||
| "repository": "https://github.com/EdgeApp/drupe", | ||
@@ -27,4 +27,4 @@ "author": "Edge (Airbitz Inc.)", | ||
| "clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true});\"", | ||
| "build:esm": "bun build ./src/index.ts --outdir ./dist/esm --format esm", | ||
| "build:cjs": "bun build ./src/index.ts --outdir ./dist/cjs --format cjs && cp cjs-package.json ./dist/cjs/package.json", | ||
| "build:esm": "bun build ./src/index.ts --outdir ./dist/esm --format esm --packages external", | ||
| "build:cjs": "bun build ./src/index.ts --outdir ./dist/cjs --format cjs --packages external && cp cjs-package.json ./dist/cjs/package.json", | ||
| "build:types": "bunx tsc --project tsconfig.build.json", | ||
@@ -34,3 +34,5 @@ "build:copy-types": "node -e \"const fs=require('fs');fs.mkdirSync('dist',{recursive:true});fs.copyFileSync('src/pouchdb-selector-core.d.ts','dist/pouchdb-selector-core.d.ts');\"", | ||
| "prepare": "bun run build", | ||
| "release": "bun run prepare && bunx jsr publish && npm publish" | ||
| "release": "bun run prepare && bunx jsr publish && npm publish", | ||
| "test": "bun test", | ||
| "format": "prettier --write ." | ||
| }, | ||
@@ -40,3 +42,4 @@ "devDependencies": { | ||
| "bun-promptx": "0.2.0", | ||
| "typescript": "^5.6.3" | ||
| "typescript": "^5.6.3", | ||
| "prettier": "^3.6.2" | ||
| }, | ||
@@ -47,4 +50,5 @@ "peerDependencies": { | ||
| "dependencies": { | ||
| "cleaners": "^0.3.17", | ||
| "pouchdb-selector-core": "^9.0.0" | ||
| } | ||
| } |
+33
-31
@@ -29,17 +29,22 @@ # drupe | ||
| ```ts | ||
| import { drupe } from 'drupe' | ||
| import { drupe } from "drupe"; | ||
| const isPublishedTechArticle = drupe({ | ||
| type: 'article', | ||
| type: "article", | ||
| publishedAt: { $exists: true }, | ||
| tags: { $in: ['databases', 'javascript'] } | ||
| }) | ||
| tags: { $in: ["databases", "javascript"] }, | ||
| }); | ||
| const articles = [ | ||
| { type: 'article', slug: 'mango-101', tags: ['databases'], publishedAt: '2024-05-02' }, | ||
| { type: 'article', slug: 'draft-post', tags: ['javascript'] }, | ||
| { type: 'note', slug: 'retro' } | ||
| ] | ||
| { | ||
| type: "article", | ||
| slug: "mango-101", | ||
| tags: ["databases"], | ||
| publishedAt: "2024-05-02", | ||
| }, | ||
| { type: "article", slug: "draft-post", tags: ["javascript"] }, | ||
| { type: "note", slug: "retro" }, | ||
| ]; | ||
| const published = articles.filter(isPublishedTechArticle) | ||
| const published = articles.filter(isPublishedTechArticle); | ||
| // -> [{ type: 'article', slug: 'mango-101', tags: ['databases'], publishedAt: '2024-05-02' }] | ||
@@ -55,18 +60,15 @@ ``` | ||
| ```ts | ||
| import { drupe } from 'drupe' | ||
| import { drupe } from "drupe"; | ||
| const isHighValueCustomer = drupe({ | ||
| $and: [ | ||
| { spend: { $gte: 1000 } }, | ||
| { status: { $in: ['gold', 'platinum'] } } | ||
| ] | ||
| }) | ||
| $and: [{ spend: { $gte: 1000 } }, { status: { $in: ["gold", "platinum"] } }], | ||
| }); | ||
| const customers = [ | ||
| { name: 'Ada', spend: 3200, status: 'platinum' }, | ||
| { name: 'Lin', spend: 840, status: 'gold' }, | ||
| { name: 'Edsger', spend: 1500, status: 'silver' } | ||
| ] | ||
| { name: "Ada", spend: 3200, status: "platinum" }, | ||
| { name: "Lin", spend: 840, status: "gold" }, | ||
| { name: "Edsger", spend: 1500, status: "silver" }, | ||
| ]; | ||
| customers.filter(isHighValueCustomer) | ||
| customers.filter(isHighValueCustomer); | ||
| // -> [{ name: 'Ada', spend: 3200, status: 'platinum' }] | ||
@@ -81,9 +83,9 @@ ``` | ||
| $elemMatch: { | ||
| content_type: { $regex: '^image/' }, | ||
| length: { $gt: 1_000_000 } | ||
| } | ||
| } | ||
| }) | ||
| content_type: { $regex: "^image/" }, | ||
| length: { $gt: 1_000_000 }, | ||
| }, | ||
| }, | ||
| }); | ||
| docs.filter(containsLargeAttachment) | ||
| docs.filter(containsLargeAttachment); | ||
| ``` | ||
@@ -94,4 +96,4 @@ | ||
| ```ts | ||
| const predicate = drupe(selector) | ||
| predicate(document) // -> boolean | ||
| const predicate = drupe(selector); | ||
| predicate(document); // -> boolean | ||
| ``` | ||
@@ -109,7 +111,7 @@ | ||
| ```ts | ||
| import { matchesSelector } from 'pouchdb-selector-core' | ||
| import { matchesSelector } from "pouchdb-selector-core"; | ||
| export const drupe = (selector: any) => (subject: unknown) => { | ||
| return matchesSelector(subject, selector) | ||
| } | ||
| return matchesSelector(subject, selector); | ||
| }; | ||
| ``` | ||
@@ -116,0 +118,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
10
25%129
1.57%16570
-85.76%3
50%4
33.33%297
-90.55%+ Added
+ Added