(function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 78); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { var toPropertyKey = __webpack_require__(57); function _defineProperty(e, r, t) { return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 1 */ /***/ (function(module, exports) { function _getPrototypeOf(t) { return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t); } module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 2 */ /***/ (function(module, exports) { function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { var toPropertyKey = __webpack_require__(57); function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, "a", function() { return /* reexport */ mat2_namespaceObject; }); __webpack_require__.d(__webpack_exports__, "b", function() { return /* reexport */ vec2_namespaceObject; }); __webpack_require__.d(__webpack_exports__, "c", function() { return /* reexport */ vec3_namespaceObject; }); // UNUSED EXPORTS: glMatrix, mat2d, mat3, mat4, quat, quat2, vec4 // NAMESPACE OBJECT: ./node_modules/gl-matrix/esm/mat2.js var mat2_namespaceObject = {}; __webpack_require__.r(mat2_namespaceObject); __webpack_require__.d(mat2_namespaceObject, "create", function() { return create; }); __webpack_require__.d(mat2_namespaceObject, "clone", function() { return clone; }); __webpack_require__.d(mat2_namespaceObject, "copy", function() { return copy; }); __webpack_require__.d(mat2_namespaceObject, "identity", function() { return identity; }); __webpack_require__.d(mat2_namespaceObject, "fromValues", function() { return fromValues; }); __webpack_require__.d(mat2_namespaceObject, "set", function() { return set; }); __webpack_require__.d(mat2_namespaceObject, "transpose", function() { return transpose; }); __webpack_require__.d(mat2_namespaceObject, "invert", function() { return invert; }); __webpack_require__.d(mat2_namespaceObject, "adjoint", function() { return adjoint; }); __webpack_require__.d(mat2_namespaceObject, "determinant", function() { return determinant; }); __webpack_require__.d(mat2_namespaceObject, "multiply", function() { return multiply; }); __webpack_require__.d(mat2_namespaceObject, "rotate", function() { return rotate; }); __webpack_require__.d(mat2_namespaceObject, "scale", function() { return mat2_scale; }); __webpack_require__.d(mat2_namespaceObject, "fromRotation", function() { return fromRotation; }); __webpack_require__.d(mat2_namespaceObject, "fromScaling", function() { return fromScaling; }); __webpack_require__.d(mat2_namespaceObject, "str", function() { return str; }); __webpack_require__.d(mat2_namespaceObject, "frob", function() { return frob; }); __webpack_require__.d(mat2_namespaceObject, "LDU", function() { return LDU; }); __webpack_require__.d(mat2_namespaceObject, "add", function() { return add; }); __webpack_require__.d(mat2_namespaceObject, "subtract", function() { return subtract; }); __webpack_require__.d(mat2_namespaceObject, "exactEquals", function() { return exactEquals; }); __webpack_require__.d(mat2_namespaceObject, "equals", function() { return mat2_equals; }); __webpack_require__.d(mat2_namespaceObject, "multiplyScalar", function() { return multiplyScalar; }); __webpack_require__.d(mat2_namespaceObject, "multiplyScalarAndAdd", function() { return multiplyScalarAndAdd; }); __webpack_require__.d(mat2_namespaceObject, "mul", function() { return mul; }); __webpack_require__.d(mat2_namespaceObject, "sub", function() { return sub; }); // NAMESPACE OBJECT: ./node_modules/gl-matrix/esm/vec2.js var vec2_namespaceObject = {}; __webpack_require__.r(vec2_namespaceObject); __webpack_require__.d(vec2_namespaceObject, "create", function() { return vec2_create; }); __webpack_require__.d(vec2_namespaceObject, "clone", function() { return vec2_clone; }); __webpack_require__.d(vec2_namespaceObject, "fromValues", function() { return vec2_fromValues; }); __webpack_require__.d(vec2_namespaceObject, "copy", function() { return vec2_copy; }); __webpack_require__.d(vec2_namespaceObject, "set", function() { return vec2_set; }); __webpack_require__.d(vec2_namespaceObject, "add", function() { return vec2_add; }); __webpack_require__.d(vec2_namespaceObject, "subtract", function() { return vec2_subtract; }); __webpack_require__.d(vec2_namespaceObject, "multiply", function() { return vec2_multiply; }); __webpack_require__.d(vec2_namespaceObject, "divide", function() { return divide; }); __webpack_require__.d(vec2_namespaceObject, "ceil", function() { return ceil; }); __webpack_require__.d(vec2_namespaceObject, "floor", function() { return floor; }); __webpack_require__.d(vec2_namespaceObject, "min", function() { return min; }); __webpack_require__.d(vec2_namespaceObject, "max", function() { return max; }); __webpack_require__.d(vec2_namespaceObject, "round", function() { return vec2_round; }); __webpack_require__.d(vec2_namespaceObject, "scale", function() { return vec2_scale; }); __webpack_require__.d(vec2_namespaceObject, "scaleAndAdd", function() { return scaleAndAdd; }); __webpack_require__.d(vec2_namespaceObject, "distance", function() { return distance; }); __webpack_require__.d(vec2_namespaceObject, "squaredDistance", function() { return squaredDistance; }); __webpack_require__.d(vec2_namespaceObject, "length", function() { return vec2_length; }); __webpack_require__.d(vec2_namespaceObject, "squaredLength", function() { return squaredLength; }); __webpack_require__.d(vec2_namespaceObject, "negate", function() { return negate; }); __webpack_require__.d(vec2_namespaceObject, "inverse", function() { return inverse; }); __webpack_require__.d(vec2_namespaceObject, "normalize", function() { return normalize; }); __webpack_require__.d(vec2_namespaceObject, "dot", function() { return dot; }); __webpack_require__.d(vec2_namespaceObject, "cross", function() { return cross; }); __webpack_require__.d(vec2_namespaceObject, "lerp", function() { return lerp; }); __webpack_require__.d(vec2_namespaceObject, "random", function() { return random; }); __webpack_require__.d(vec2_namespaceObject, "transformMat2", function() { return transformMat2; }); __webpack_require__.d(vec2_namespaceObject, "transformMat2d", function() { return transformMat2d; }); __webpack_require__.d(vec2_namespaceObject, "transformMat3", function() { return transformMat3; }); __webpack_require__.d(vec2_namespaceObject, "transformMat4", function() { return transformMat4; }); __webpack_require__.d(vec2_namespaceObject, "rotate", function() { return vec2_rotate; }); __webpack_require__.d(vec2_namespaceObject, "angle", function() { return angle; }); __webpack_require__.d(vec2_namespaceObject, "signedAngle", function() { return signedAngle; }); __webpack_require__.d(vec2_namespaceObject, "zero", function() { return zero; }); __webpack_require__.d(vec2_namespaceObject, "str", function() { return vec2_str; }); __webpack_require__.d(vec2_namespaceObject, "exactEquals", function() { return vec2_exactEquals; }); __webpack_require__.d(vec2_namespaceObject, "equals", function() { return vec2_equals; }); __webpack_require__.d(vec2_namespaceObject, "len", function() { return len; }); __webpack_require__.d(vec2_namespaceObject, "sub", function() { return vec2_sub; }); __webpack_require__.d(vec2_namespaceObject, "mul", function() { return vec2_mul; }); __webpack_require__.d(vec2_namespaceObject, "div", function() { return div; }); __webpack_require__.d(vec2_namespaceObject, "dist", function() { return dist; }); __webpack_require__.d(vec2_namespaceObject, "sqrDist", function() { return sqrDist; }); __webpack_require__.d(vec2_namespaceObject, "sqrLen", function() { return sqrLen; }); __webpack_require__.d(vec2_namespaceObject, "forEach", function() { return forEach; }); // NAMESPACE OBJECT: ./node_modules/gl-matrix/esm/vec3.js var vec3_namespaceObject = {}; __webpack_require__.r(vec3_namespaceObject); __webpack_require__.d(vec3_namespaceObject, "create", function() { return vec3_create; }); __webpack_require__.d(vec3_namespaceObject, "clone", function() { return vec3_clone; }); __webpack_require__.d(vec3_namespaceObject, "length", function() { return vec3_length; }); __webpack_require__.d(vec3_namespaceObject, "fromValues", function() { return vec3_fromValues; }); __webpack_require__.d(vec3_namespaceObject, "copy", function() { return vec3_copy; }); __webpack_require__.d(vec3_namespaceObject, "set", function() { return vec3_set; }); __webpack_require__.d(vec3_namespaceObject, "add", function() { return vec3_add; }); __webpack_require__.d(vec3_namespaceObject, "subtract", function() { return vec3_subtract; }); __webpack_require__.d(vec3_namespaceObject, "multiply", function() { return vec3_multiply; }); __webpack_require__.d(vec3_namespaceObject, "divide", function() { return vec3_divide; }); __webpack_require__.d(vec3_namespaceObject, "ceil", function() { return vec3_ceil; }); __webpack_require__.d(vec3_namespaceObject, "floor", function() { return vec3_floor; }); __webpack_require__.d(vec3_namespaceObject, "min", function() { return vec3_min; }); __webpack_require__.d(vec3_namespaceObject, "max", function() { return vec3_max; }); __webpack_require__.d(vec3_namespaceObject, "round", function() { return vec3_round; }); __webpack_require__.d(vec3_namespaceObject, "scale", function() { return vec3_scale; }); __webpack_require__.d(vec3_namespaceObject, "scaleAndAdd", function() { return vec3_scaleAndAdd; }); __webpack_require__.d(vec3_namespaceObject, "distance", function() { return vec3_distance; }); __webpack_require__.d(vec3_namespaceObject, "squaredDistance", function() { return vec3_squaredDistance; }); __webpack_require__.d(vec3_namespaceObject, "squaredLength", function() { return vec3_squaredLength; }); __webpack_require__.d(vec3_namespaceObject, "negate", function() { return vec3_negate; }); __webpack_require__.d(vec3_namespaceObject, "inverse", function() { return vec3_inverse; }); __webpack_require__.d(vec3_namespaceObject, "normalize", function() { return vec3_normalize; }); __webpack_require__.d(vec3_namespaceObject, "dot", function() { return vec3_dot; }); __webpack_require__.d(vec3_namespaceObject, "cross", function() { return vec3_cross; }); __webpack_require__.d(vec3_namespaceObject, "lerp", function() { return vec3_lerp; }); __webpack_require__.d(vec3_namespaceObject, "slerp", function() { return slerp; }); __webpack_require__.d(vec3_namespaceObject, "hermite", function() { return hermite; }); __webpack_require__.d(vec3_namespaceObject, "bezier", function() { return bezier; }); __webpack_require__.d(vec3_namespaceObject, "random", function() { return vec3_random; }); __webpack_require__.d(vec3_namespaceObject, "transformMat4", function() { return vec3_transformMat4; }); __webpack_require__.d(vec3_namespaceObject, "transformMat3", function() { return vec3_transformMat3; }); __webpack_require__.d(vec3_namespaceObject, "transformQuat", function() { return transformQuat; }); __webpack_require__.d(vec3_namespaceObject, "rotateX", function() { return rotateX; }); __webpack_require__.d(vec3_namespaceObject, "rotateY", function() { return rotateY; }); __webpack_require__.d(vec3_namespaceObject, "rotateZ", function() { return rotateZ; }); __webpack_require__.d(vec3_namespaceObject, "angle", function() { return vec3_angle; }); __webpack_require__.d(vec3_namespaceObject, "zero", function() { return vec3_zero; }); __webpack_require__.d(vec3_namespaceObject, "str", function() { return vec3_str; }); __webpack_require__.d(vec3_namespaceObject, "exactEquals", function() { return vec3_exactEquals; }); __webpack_require__.d(vec3_namespaceObject, "equals", function() { return vec3_equals; }); __webpack_require__.d(vec3_namespaceObject, "sub", function() { return vec3_sub; }); __webpack_require__.d(vec3_namespaceObject, "mul", function() { return vec3_mul; }); __webpack_require__.d(vec3_namespaceObject, "div", function() { return vec3_div; }); __webpack_require__.d(vec3_namespaceObject, "dist", function() { return vec3_dist; }); __webpack_require__.d(vec3_namespaceObject, "sqrDist", function() { return vec3_sqrDist; }); __webpack_require__.d(vec3_namespaceObject, "len", function() { return vec3_len; }); __webpack_require__.d(vec3_namespaceObject, "sqrLen", function() { return vec3_sqrLen; }); __webpack_require__.d(vec3_namespaceObject, "forEach", function() { return vec3_forEach; }); // CONCATENATED MODULE: ./node_modules/gl-matrix/esm/common.js /** * Common utilities * @module glMatrix */ // Configuration Constants var EPSILON = 0.000001; var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array; var RANDOM = Math.random; var ANGLE_ORDER = "zyx"; /** * Symmetric round * see https://www.npmjs.com/package/round-half-up-symmetric#user-content-detailed-background * * @param {Number} a value to round */ function round(a) { if (a >= 0) return Math.round(a); return a % 0.5 === 0 ? Math.floor(a) : Math.round(a); } /** * Sets the type of array used when creating new vectors and matrices * * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array */ function setMatrixArrayType(type) { ARRAY_TYPE = type; } var degree = Math.PI / 180; var radian = 180 / Math.PI; /** * Convert Degree To Radian * * @param {Number} a Angle in Degrees */ function toRadian(a) { return a * degree; } /** * Convert Radian To Degree * * @param {Number} a Angle in Radians */ function toDegree(a) { return a * radian; } /** * Tests whether or not the arguments have approximately the same value, within an absolute * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less * than or equal to 1.0, and a relative tolerance is used for larger values) * * @param {Number} a The first number to test. * @param {Number} b The second number to test. * @param {Number} tolerance Absolute or relative tolerance (default glMatrix.EPSILON) * @returns {Boolean} True if the numbers are approximately equal, false otherwise. */ function equals(a, b) { var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON; return Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b)); } // CONCATENATED MODULE: ./node_modules/gl-matrix/esm/mat2.js /** * 2x2 Matrix * @module mat2 */ /** * Creates a new identity mat2 * * @returns {mat2} a new 2x2 matrix */ function create() { var out = new ARRAY_TYPE(4); if (ARRAY_TYPE != Float32Array) { out[1] = 0; out[2] = 0; } out[0] = 1; out[3] = 1; return out; } /** * Creates a new mat2 initialized with values from an existing matrix * * @param {ReadonlyMat2} a matrix to clone * @returns {mat2} a new 2x2 matrix */ function clone(a) { var out = new ARRAY_TYPE(4); out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out; } /** * Copy the values from one mat2 to another * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the source matrix * @returns {mat2} out */ function copy(out, a) { out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out; } /** * Set a mat2 to the identity matrix * * @param {mat2} out the receiving matrix * @returns {mat2} out */ function identity(out) { out[0] = 1; out[1] = 0; out[2] = 0; out[3] = 1; return out; } /** * Create a new mat2 with the given values * * @param {Number} m00 Component in column 0, row 0 position (index 0) * @param {Number} m01 Component in column 0, row 1 position (index 1) * @param {Number} m10 Component in column 1, row 0 position (index 2) * @param {Number} m11 Component in column 1, row 1 position (index 3) * @returns {mat2} out A new 2x2 matrix */ function fromValues(m00, m01, m10, m11) { var out = new ARRAY_TYPE(4); out[0] = m00; out[1] = m01; out[2] = m10; out[3] = m11; return out; } /** * Set the components of a mat2 to the given values * * @param {mat2} out the receiving matrix * @param {Number} m00 Component in column 0, row 0 position (index 0) * @param {Number} m01 Component in column 0, row 1 position (index 1) * @param {Number} m10 Component in column 1, row 0 position (index 2) * @param {Number} m11 Component in column 1, row 1 position (index 3) * @returns {mat2} out */ function set(out, m00, m01, m10, m11) { out[0] = m00; out[1] = m01; out[2] = m10; out[3] = m11; return out; } /** * Transpose the values of a mat2 * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the source matrix * @returns {mat2} out */ function transpose(out, a) { // If we are transposing ourselves we can skip a few steps but have to cache // some values if (out === a) { var a1 = a[1]; out[1] = a[2]; out[2] = a1; } else { out[0] = a[0]; out[1] = a[2]; out[2] = a[1]; out[3] = a[3]; } return out; } /** * Inverts a mat2 * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the source matrix * @returns {mat2 | null} out, or null if source matrix is not invertible */ function invert(out, a) { var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; // Calculate the determinant var det = a0 * a3 - a2 * a1; if (!det) { return null; } det = 1.0 / det; out[0] = a3 * det; out[1] = -a1 * det; out[2] = -a2 * det; out[3] = a0 * det; return out; } /** * Calculates the adjugate of a mat2 * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the source matrix * @returns {mat2} out */ function adjoint(out, a) { // Caching this value is necessary if out == a var a0 = a[0]; out[0] = a[3]; out[1] = -a[1]; out[2] = -a[2]; out[3] = a0; return out; } /** * Calculates the determinant of a mat2 * * @param {ReadonlyMat2} a the source matrix * @returns {Number} determinant of a */ function determinant(a) { return a[0] * a[3] - a[2] * a[1]; } /** * Multiplies two mat2's * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the first operand * @param {ReadonlyMat2} b the second operand * @returns {mat2} out */ function multiply(out, a, b) { var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; out[0] = a0 * b0 + a2 * b1; out[1] = a1 * b0 + a3 * b1; out[2] = a0 * b2 + a2 * b3; out[3] = a1 * b2 + a3 * b3; return out; } /** * Rotates a mat2 by the given angle * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the matrix to rotate * @param {Number} rad the angle to rotate the matrix by * @returns {mat2} out */ function rotate(out, a, rad) { var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; var s = Math.sin(rad); var c = Math.cos(rad); out[0] = a0 * c + a2 * s; out[1] = a1 * c + a3 * s; out[2] = a0 * -s + a2 * c; out[3] = a1 * -s + a3 * c; return out; } /** * Scales the mat2 by the dimensions in the given vec2 * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the matrix to rotate * @param {ReadonlyVec2} v the vec2 to scale the matrix by * @returns {mat2} out **/ function mat2_scale(out, a, v) { var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; var v0 = v[0], v1 = v[1]; out[0] = a0 * v0; out[1] = a1 * v0; out[2] = a2 * v1; out[3] = a3 * v1; return out; } /** * Creates a matrix from a given angle * This is equivalent to (but much faster than): * * mat2.identity(dest); * mat2.rotate(dest, dest, rad); * * @param {mat2} out mat2 receiving operation result * @param {Number} rad the angle to rotate the matrix by * @returns {mat2} out */ function fromRotation(out, rad) { var s = Math.sin(rad); var c = Math.cos(rad); out[0] = c; out[1] = s; out[2] = -s; out[3] = c; return out; } /** * Creates a matrix from a vector scaling * This is equivalent to (but much faster than): * * mat2.identity(dest); * mat2.scale(dest, dest, vec); * * @param {mat2} out mat2 receiving operation result * @param {ReadonlyVec2} v Scaling vector * @returns {mat2} out */ function fromScaling(out, v) { out[0] = v[0]; out[1] = 0; out[2] = 0; out[3] = v[1]; return out; } /** * Returns a string representation of a mat2 * * @param {ReadonlyMat2} a matrix to represent as a string * @returns {String} string representation of the matrix */ function str(a) { return "mat2(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")"; } /** * Returns Frobenius norm of a mat2 * * @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of * @returns {Number} Frobenius norm */ function frob(a) { return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); } /** * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix * @param {ReadonlyMat2} L the lower triangular matrix * @param {ReadonlyMat2} D the diagonal matrix * @param {ReadonlyMat2} U the upper triangular matrix * @param {ReadonlyMat2} a the input matrix to factorize */ function LDU(L, D, U, a) { L[2] = a[2] / a[0]; U[0] = a[0]; U[1] = a[1]; U[3] = a[3] - L[2] * U[1]; return [L, D, U]; } /** * Adds two mat2's * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the first operand * @param {ReadonlyMat2} b the second operand * @returns {mat2} out */ function add(out, a, b) { out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; out[2] = a[2] + b[2]; out[3] = a[3] + b[3]; return out; } /** * Subtracts matrix b from matrix a * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the first operand * @param {ReadonlyMat2} b the second operand * @returns {mat2} out */ function subtract(out, a, b) { out[0] = a[0] - b[0]; out[1] = a[1] - b[1]; out[2] = a[2] - b[2]; out[3] = a[3] - b[3]; return out; } /** * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===) * * @param {ReadonlyMat2} a The first matrix. * @param {ReadonlyMat2} b The second matrix. * @returns {Boolean} True if the matrices are equal, false otherwise. */ function exactEquals(a, b) { return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]; } /** * Returns whether or not the matrices have approximately the same elements in the same position. * * @param {ReadonlyMat2} a The first matrix. * @param {ReadonlyMat2} b The second matrix. * @returns {Boolean} True if the matrices are equal, false otherwise. */ function mat2_equals(a, b) { var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)); } /** * Multiply each element of the matrix by a scalar. * * @param {mat2} out the receiving matrix * @param {ReadonlyMat2} a the matrix to scale * @param {Number} b amount to scale the matrix's elements by * @returns {mat2} out */ function multiplyScalar(out, a, b) { out[0] = a[0] * b; out[1] = a[1] * b; out[2] = a[2] * b; out[3] = a[3] * b; return out; } /** * Adds two mat2's after multiplying each element of the second operand by a scalar value. * * @param {mat2} out the receiving vector * @param {ReadonlyMat2} a the first operand * @param {ReadonlyMat2} b the second operand * @param {Number} scale the amount to scale b's elements by before adding * @returns {mat2} out */ function multiplyScalarAndAdd(out, a, b, scale) { out[0] = a[0] + b[0] * scale; out[1] = a[1] + b[1] * scale; out[2] = a[2] + b[2] * scale; out[3] = a[3] + b[3] * scale; return out; } /** * Alias for {@link mat2.multiply} * @function */ var mul = multiply; /** * Alias for {@link mat2.subtract} * @function */ var sub = subtract; // CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec2.js /** * 2 Dimensional Vector * @module vec2 */ /** * Creates a new, empty vec2 * * @returns {vec2} a new 2D vector */ function vec2_create() { var out = new ARRAY_TYPE(2); if (ARRAY_TYPE != Float32Array) { out[0] = 0; out[1] = 0; } return out; } /** * Creates a new vec2 initialized with values from an existing vector * * @param {ReadonlyVec2} a vector to clone * @returns {vec2} a new 2D vector */ function vec2_clone(a) { var out = new ARRAY_TYPE(2); out[0] = a[0]; out[1] = a[1]; return out; } /** * Creates a new vec2 initialized with the given values * * @param {Number} x X component * @param {Number} y Y component * @returns {vec2} a new 2D vector */ function vec2_fromValues(x, y) { var out = new ARRAY_TYPE(2); out[0] = x; out[1] = y; return out; } /** * Copy the values from one vec2 to another * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the source vector * @returns {vec2} out */ function vec2_copy(out, a) { out[0] = a[0]; out[1] = a[1]; return out; } /** * Set the components of a vec2 to the given values * * @param {vec2} out the receiving vector * @param {Number} x X component * @param {Number} y Y component * @returns {vec2} out */ function vec2_set(out, x, y) { out[0] = x; out[1] = y; return out; } /** * Adds two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function vec2_add(out, a, b) { out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; return out; } /** * Subtracts vector b from vector a * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function vec2_subtract(out, a, b) { out[0] = a[0] - b[0]; out[1] = a[1] - b[1]; return out; } /** * Multiplies two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function vec2_multiply(out, a, b) { out[0] = a[0] * b[0]; out[1] = a[1] * b[1]; return out; } /** * Divides two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function divide(out, a, b) { out[0] = a[0] / b[0]; out[1] = a[1] / b[1]; return out; } /** * Math.ceil the components of a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to ceil * @returns {vec2} out */ function ceil(out, a) { out[0] = Math.ceil(a[0]); out[1] = Math.ceil(a[1]); return out; } /** * Math.floor the components of a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to floor * @returns {vec2} out */ function floor(out, a) { out[0] = Math.floor(a[0]); out[1] = Math.floor(a[1]); return out; } /** * Returns the minimum of two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function min(out, a, b) { out[0] = Math.min(a[0], b[0]); out[1] = Math.min(a[1], b[1]); return out; } /** * Returns the maximum of two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec2} out */ function max(out, a, b) { out[0] = Math.max(a[0], b[0]); out[1] = Math.max(a[1], b[1]); return out; } /** * symmetric round the components of a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to round * @returns {vec2} out */ function vec2_round(out, a) { out[0] = round(a[0]); out[1] = round(a[1]); return out; } /** * Scales a vec2 by a scalar number * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the vector to scale * @param {Number} b amount to scale the vector by * @returns {vec2} out */ function vec2_scale(out, a, b) { out[0] = a[0] * b; out[1] = a[1] * b; return out; } /** * Adds two vec2's after scaling the second operand by a scalar value * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @param {Number} scale the amount to scale b by before adding * @returns {vec2} out */ function scaleAndAdd(out, a, b, scale) { out[0] = a[0] + b[0] * scale; out[1] = a[1] + b[1] * scale; return out; } /** * Calculates the euclidian distance between two vec2's * * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {Number} distance between a and b */ function distance(a, b) { var x = b[0] - a[0], y = b[1] - a[1]; return Math.sqrt(x * x + y * y); } /** * Calculates the squared euclidian distance between two vec2's * * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {Number} squared distance between a and b */ function squaredDistance(a, b) { var x = b[0] - a[0], y = b[1] - a[1]; return x * x + y * y; } /** * Calculates the length of a vec2 * * @param {ReadonlyVec2} a vector to calculate length of * @returns {Number} length of a */ function vec2_length(a) { var x = a[0], y = a[1]; return Math.sqrt(x * x + y * y); } /** * Calculates the squared length of a vec2 * * @param {ReadonlyVec2} a vector to calculate squared length of * @returns {Number} squared length of a */ function squaredLength(a) { var x = a[0], y = a[1]; return x * x + y * y; } /** * Negates the components of a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to negate * @returns {vec2} out */ function negate(out, a) { out[0] = -a[0]; out[1] = -a[1]; return out; } /** * Returns the inverse of the components of a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to invert * @returns {vec2} out */ function inverse(out, a) { out[0] = 1.0 / a[0]; out[1] = 1.0 / a[1]; return out; } /** * Normalize a vec2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a vector to normalize * @returns {vec2} out */ function normalize(out, a) { var x = a[0], y = a[1]; var len = x * x + y * y; if (len > 0) { //TODO: evaluate use of glm_invsqrt here? len = 1 / Math.sqrt(len); } out[0] = a[0] * len; out[1] = a[1] * len; return out; } /** * Calculates the dot product of two vec2's * * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {Number} dot product of a and b */ function dot(a, b) { return a[0] * b[0] + a[1] * b[1]; } /** * Computes the cross product of two vec2's * Note that the cross product must by definition produce a 3D vector * * @param {vec3} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @returns {vec3} out */ function cross(out, a, b) { var z = a[0] * b[1] - a[1] * b[0]; out[0] = out[1] = 0; out[2] = z; return out; } /** * Performs a linear interpolation between two vec2's * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the first operand * @param {ReadonlyVec2} b the second operand * @param {Number} t interpolation amount, in the range [0-1], between the two inputs * @returns {vec2} out */ function lerp(out, a, b, t) { var ax = a[0], ay = a[1]; out[0] = ax + t * (b[0] - ax); out[1] = ay + t * (b[1] - ay); return out; } /** * Generates a random vector with the given scale * * @param {vec2} out the receiving vector * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned * @returns {vec2} out */ function random(out, scale) { scale = scale === undefined ? 1.0 : scale; var r = RANDOM() * 2.0 * Math.PI; out[0] = Math.cos(r) * scale; out[1] = Math.sin(r) * scale; return out; } /** * Transforms the vec2 with a mat2 * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the vector to transform * @param {ReadonlyMat2} m matrix to transform with * @returns {vec2} out */ function transformMat2(out, a, m) { var x = a[0], y = a[1]; out[0] = m[0] * x + m[2] * y; out[1] = m[1] * x + m[3] * y; return out; } /** * Transforms the vec2 with a mat2d * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the vector to transform * @param {ReadonlyMat2d} m matrix to transform with * @returns {vec2} out */ function transformMat2d(out, a, m) { var x = a[0], y = a[1]; out[0] = m[0] * x + m[2] * y + m[4]; out[1] = m[1] * x + m[3] * y + m[5]; return out; } /** * Transforms the vec2 with a mat3 * 3rd vector component is implicitly '1' * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the vector to transform * @param {ReadonlyMat3} m matrix to transform with * @returns {vec2} out */ function transformMat3(out, a, m) { var x = a[0], y = a[1]; out[0] = m[0] * x + m[3] * y + m[6]; out[1] = m[1] * x + m[4] * y + m[7]; return out; } /** * Transforms the vec2 with a mat4 * 3rd vector component is implicitly '0' * 4th vector component is implicitly '1' * * @param {vec2} out the receiving vector * @param {ReadonlyVec2} a the vector to transform * @param {ReadonlyMat4} m matrix to transform with * @returns {vec2} out */ function transformMat4(out, a, m) { var x = a[0]; var y = a[1]; out[0] = m[0] * x + m[4] * y + m[12]; out[1] = m[1] * x + m[5] * y + m[13]; return out; } /** * Rotate a 2D vector * @param {vec2} out The receiving vec2 * @param {ReadonlyVec2} a The vec2 point to rotate * @param {ReadonlyVec2} b The origin of the rotation * @param {Number} rad The angle of rotation in radians * @returns {vec2} out */ function vec2_rotate(out, a, b, rad) { //Translate point to the origin var p0 = a[0] - b[0], p1 = a[1] - b[1], sinC = Math.sin(rad), cosC = Math.cos(rad); //perform rotation and translate to correct position out[0] = p0 * cosC - p1 * sinC + b[0]; out[1] = p0 * sinC + p1 * cosC + b[1]; return out; } /** * Get the smallest angle between two 2D vectors * @param {ReadonlyVec2} a The first operand * @param {ReadonlyVec2} b The second operand * @returns {Number} The angle in radians */ function angle(a, b) { var ax = a[0], ay = a[1], bx = b[0], by = b[1]; return Math.abs(Math.atan2(ay * bx - ax * by, ax * bx + ay * by)); } /** * Get the signed angle in the interval [-pi,pi] between two 2D vectors (positive if `a` is to the right of `b`) * * @param {ReadonlyVec2} a The first vector * @param {ReadonlyVec2} b The second vector * @returns {number} The signed angle in radians */ function signedAngle(a, b) { var ax = a[0], ay = a[1], bx = b[0], by = b[1]; return Math.atan2(ax * by - ay * bx, ax * bx + ay * by); } /** * Set the components of a vec2 to zero * * @param {vec2} out the receiving vector * @returns {vec2} out */ function zero(out) { out[0] = 0.0; out[1] = 0.0; return out; } /** * Returns a string representation of a vector * * @param {ReadonlyVec2} a vector to represent as a string * @returns {String} string representation of the vector */ function vec2_str(a) { return "vec2(" + a[0] + ", " + a[1] + ")"; } /** * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===) * * @param {ReadonlyVec2} a The first vector. * @param {ReadonlyVec2} b The second vector. * @returns {Boolean} True if the vectors are equal, false otherwise. */ function vec2_exactEquals(a, b) { return a[0] === b[0] && a[1] === b[1]; } /** * Returns whether or not the vectors have approximately the same elements in the same position. * * @param {ReadonlyVec2} a The first vector. * @param {ReadonlyVec2} b The second vector. * @returns {Boolean} True if the vectors are equal, false otherwise. */ function vec2_equals(a, b) { var a0 = a[0], a1 = a[1]; var b0 = b[0], b1 = b[1]; return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)); } /** * Alias for {@link vec2.length} * @function */ var len = vec2_length; /** * Alias for {@link vec2.subtract} * @function */ var vec2_sub = vec2_subtract; /** * Alias for {@link vec2.multiply} * @function */ var vec2_mul = vec2_multiply; /** * Alias for {@link vec2.divide} * @function */ var div = divide; /** * Alias for {@link vec2.distance} * @function */ var dist = distance; /** * Alias for {@link vec2.squaredDistance} * @function */ var sqrDist = squaredDistance; /** * Alias for {@link vec2.squaredLength} * @function */ var sqrLen = squaredLength; /** * Perform some operation over an array of vec2s. * * @param {Array} a the array of vectors to iterate over * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed * @param {Number} offset Number of elements to skip at the beginning of the array * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array * @param {Function} fn Function to call for each vector in the array * @param {Object} [arg] additional argument to pass to fn * @returns {Array} a * @function */ var forEach = function () { var vec = vec2_create(); return function (a, stride, offset, count, fn, arg) { var i, l; if (!stride) { stride = 2; } if (!offset) { offset = 0; } if (count) { l = Math.min(count * stride + offset, a.length); } else { l = a.length; } for (i = offset; i < l; i += stride) { vec[0] = a[i]; vec[1] = a[i + 1]; fn(vec, vec, arg); a[i] = vec[0]; a[i + 1] = vec[1]; } return a; }; }(); // CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec3.js /** * 3 Dimensional Vector * @module vec3 */ /** * Creates a new, empty vec3 * * @returns {vec3} a new 3D vector */ function vec3_create() { var out = new ARRAY_TYPE(3); if (ARRAY_TYPE != Float32Array) { out[0] = 0; out[1] = 0; out[2] = 0; } return out; } /** * Creates a new vec3 initialized with values from an existing vector * * @param {ReadonlyVec3} a vector to clone * @returns {vec3} a new 3D vector */ function vec3_clone(a) { var out = new ARRAY_TYPE(3); out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; return out; } /** * Calculates the length of a vec3 * * @param {ReadonlyVec3} a vector to calculate length of * @returns {Number} length of a */ function vec3_length(a) { var x = a[0]; var y = a[1]; var z = a[2]; return Math.sqrt(x * x + y * y + z * z); } /** * Creates a new vec3 initialized with the given values * * @param {Number} x X component * @param {Number} y Y component * @param {Number} z Z component * @returns {vec3} a new 3D vector */ function vec3_fromValues(x, y, z) { var out = new ARRAY_TYPE(3); out[0] = x; out[1] = y; out[2] = z; return out; } /** * Copy the values from one vec3 to another * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the source vector * @returns {vec3} out */ function vec3_copy(out, a) { out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; return out; } /** * Set the components of a vec3 to the given values * * @param {vec3} out the receiving vector * @param {Number} x X component * @param {Number} y Y component * @param {Number} z Z component * @returns {vec3} out */ function vec3_set(out, x, y, z) { out[0] = x; out[1] = y; out[2] = z; return out; } /** * Adds two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_add(out, a, b) { out[0] = a[0] + b[0]; out[1] = a[1] + b[1]; out[2] = a[2] + b[2]; return out; } /** * Subtracts vector b from vector a * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_subtract(out, a, b) { out[0] = a[0] - b[0]; out[1] = a[1] - b[1]; out[2] = a[2] - b[2]; return out; } /** * Multiplies two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_multiply(out, a, b) { out[0] = a[0] * b[0]; out[1] = a[1] * b[1]; out[2] = a[2] * b[2]; return out; } /** * Divides two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_divide(out, a, b) { out[0] = a[0] / b[0]; out[1] = a[1] / b[1]; out[2] = a[2] / b[2]; return out; } /** * Math.ceil the components of a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to ceil * @returns {vec3} out */ function vec3_ceil(out, a) { out[0] = Math.ceil(a[0]); out[1] = Math.ceil(a[1]); out[2] = Math.ceil(a[2]); return out; } /** * Math.floor the components of a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to floor * @returns {vec3} out */ function vec3_floor(out, a) { out[0] = Math.floor(a[0]); out[1] = Math.floor(a[1]); out[2] = Math.floor(a[2]); return out; } /** * Returns the minimum of two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_min(out, a, b) { out[0] = Math.min(a[0], b[0]); out[1] = Math.min(a[1], b[1]); out[2] = Math.min(a[2], b[2]); return out; } /** * Returns the maximum of two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_max(out, a, b) { out[0] = Math.max(a[0], b[0]); out[1] = Math.max(a[1], b[1]); out[2] = Math.max(a[2], b[2]); return out; } /** * symmetric round the components of a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to round * @returns {vec3} out */ function vec3_round(out, a) { out[0] = round(a[0]); out[1] = round(a[1]); out[2] = round(a[2]); return out; } /** * Scales a vec3 by a scalar number * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the vector to scale * @param {Number} b amount to scale the vector by * @returns {vec3} out */ function vec3_scale(out, a, b) { out[0] = a[0] * b; out[1] = a[1] * b; out[2] = a[2] * b; return out; } /** * Adds two vec3's after scaling the second operand by a scalar value * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @param {Number} scale the amount to scale b by before adding * @returns {vec3} out */ function vec3_scaleAndAdd(out, a, b, scale) { out[0] = a[0] + b[0] * scale; out[1] = a[1] + b[1] * scale; out[2] = a[2] + b[2] * scale; return out; } /** * Calculates the euclidian distance between two vec3's * * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {Number} distance between a and b */ function vec3_distance(a, b) { var x = b[0] - a[0]; var y = b[1] - a[1]; var z = b[2] - a[2]; return Math.sqrt(x * x + y * y + z * z); } /** * Calculates the squared euclidian distance between two vec3's * * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {Number} squared distance between a and b */ function vec3_squaredDistance(a, b) { var x = b[0] - a[0]; var y = b[1] - a[1]; var z = b[2] - a[2]; return x * x + y * y + z * z; } /** * Calculates the squared length of a vec3 * * @param {ReadonlyVec3} a vector to calculate squared length of * @returns {Number} squared length of a */ function vec3_squaredLength(a) { var x = a[0]; var y = a[1]; var z = a[2]; return x * x + y * y + z * z; } /** * Negates the components of a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to negate * @returns {vec3} out */ function vec3_negate(out, a) { out[0] = -a[0]; out[1] = -a[1]; out[2] = -a[2]; return out; } /** * Returns the inverse of the components of a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to invert * @returns {vec3} out */ function vec3_inverse(out, a) { out[0] = 1.0 / a[0]; out[1] = 1.0 / a[1]; out[2] = 1.0 / a[2]; return out; } /** * Normalize a vec3 * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a vector to normalize * @returns {vec3} out */ function vec3_normalize(out, a) { var x = a[0]; var y = a[1]; var z = a[2]; var len = x * x + y * y + z * z; if (len > 0) { //TODO: evaluate use of glm_invsqrt here? len = 1 / Math.sqrt(len); } out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; return out; } /** * Calculates the dot product of two vec3's * * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {Number} dot product of a and b */ function vec3_dot(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } /** * Computes the cross product of two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @returns {vec3} out */ function vec3_cross(out, a, b) { var ax = a[0], ay = a[1], az = a[2]; var bx = b[0], by = b[1], bz = b[2]; out[0] = ay * bz - az * by; out[1] = az * bx - ax * bz; out[2] = ax * by - ay * bx; return out; } /** * Performs a linear interpolation between two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @param {Number} t interpolation amount, in the range [0-1], between the two inputs * @returns {vec3} out */ function vec3_lerp(out, a, b, t) { var ax = a[0]; var ay = a[1]; var az = a[2]; out[0] = ax + t * (b[0] - ax); out[1] = ay + t * (b[1] - ay); out[2] = az + t * (b[2] - az); return out; } /** * Performs a spherical linear interpolation between two vec3's * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @param {Number} t interpolation amount, in the range [0-1], between the two inputs * @returns {vec3} out */ function slerp(out, a, b, t) { var angle = Math.acos(Math.min(Math.max(vec3_dot(a, b), -1), 1)); var sinTotal = Math.sin(angle); var ratioA = Math.sin((1 - t) * angle) / sinTotal; var ratioB = Math.sin(t * angle) / sinTotal; out[0] = ratioA * a[0] + ratioB * b[0]; out[1] = ratioA * a[1] + ratioB * b[1]; out[2] = ratioA * a[2] + ratioB * b[2]; return out; } /** * Performs a hermite interpolation with two control points * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @param {ReadonlyVec3} c the third operand * @param {ReadonlyVec3} d the fourth operand * @param {Number} t interpolation amount, in the range [0-1], between the two inputs * @returns {vec3} out */ function hermite(out, a, b, c, d, t) { var factorTimes2 = t * t; var factor1 = factorTimes2 * (2 * t - 3) + 1; var factor2 = factorTimes2 * (t - 2) + t; var factor3 = factorTimes2 * (t - 1); var factor4 = factorTimes2 * (3 - 2 * t); out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4; out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4; out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4; return out; } /** * Performs a bezier interpolation with two control points * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the first operand * @param {ReadonlyVec3} b the second operand * @param {ReadonlyVec3} c the third operand * @param {ReadonlyVec3} d the fourth operand * @param {Number} t interpolation amount, in the range [0-1], between the two inputs * @returns {vec3} out */ function bezier(out, a, b, c, d, t) { var inverseFactor = 1 - t; var inverseFactorTimesTwo = inverseFactor * inverseFactor; var factorTimes2 = t * t; var factor1 = inverseFactorTimesTwo * inverseFactor; var factor2 = 3 * t * inverseFactorTimesTwo; var factor3 = 3 * factorTimes2 * inverseFactor; var factor4 = factorTimes2 * t; out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4; out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4; out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4; return out; } /** * Generates a random vector with the given scale * * @param {vec3} out the receiving vector * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned * @returns {vec3} out */ function vec3_random(out, scale) { scale = scale === undefined ? 1.0 : scale; var r = RANDOM() * 2.0 * Math.PI; var z = RANDOM() * 2.0 - 1.0; var zScale = Math.sqrt(1.0 - z * z) * scale; out[0] = Math.cos(r) * zScale; out[1] = Math.sin(r) * zScale; out[2] = z * scale; return out; } /** * Transforms the vec3 with a mat4. * 4th vector component is implicitly '1' * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the vector to transform * @param {ReadonlyMat4} m matrix to transform with * @returns {vec3} out */ function vec3_transformMat4(out, a, m) { var x = a[0], y = a[1], z = a[2]; var w = m[3] * x + m[7] * y + m[11] * z + m[15]; w = w || 1.0; out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w; out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w; out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w; return out; } /** * Transforms the vec3 with a mat3. * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the vector to transform * @param {ReadonlyMat3} m the 3x3 matrix to transform with * @returns {vec3} out */ function vec3_transformMat3(out, a, m) { var x = a[0], y = a[1], z = a[2]; out[0] = x * m[0] + y * m[3] + z * m[6]; out[1] = x * m[1] + y * m[4] + z * m[7]; out[2] = x * m[2] + y * m[5] + z * m[8]; return out; } /** * Transforms the vec3 with a quat * Can also be used for dual quaternions. (Multiply it with the real part) * * @param {vec3} out the receiving vector * @param {ReadonlyVec3} a the vector to transform * @param {ReadonlyQuat} q normalized quaternion to transform with * @returns {vec3} out */ function transformQuat(out, a, q) { // Fast Vector Rotation using Quaternions by Robert Eisele // https://raw.org/proof/vector-rotation-using-quaternions/ var qx = q[0], qy = q[1], qz = q[2], qw = q[3]; var vx = a[0], vy = a[1], vz = a[2]; // t = q x v var tx = qy * vz - qz * vy; var ty = qz * vx - qx * vz; var tz = qx * vy - qy * vx; // t = 2t tx = tx + tx; ty = ty + ty; tz = tz + tz; // v + w t + q x t out[0] = vx + qw * tx + qy * tz - qz * ty; out[1] = vy + qw * ty + qz * tx - qx * tz; out[2] = vz + qw * tz + qx * ty - qy * tx; return out; } /** * Rotate a 3D vector around the x-axis * @param {vec3} out The receiving vec3 * @param {ReadonlyVec3} a The vec3 point to rotate * @param {ReadonlyVec3} b The origin of the rotation * @param {Number} rad The angle of rotation in radians * @returns {vec3} out */ function rotateX(out, a, b, rad) { var p = [], r = []; //Translate point to the origin p[0] = a[0] - b[0]; p[1] = a[1] - b[1]; p[2] = a[2] - b[2]; //perform rotation r[0] = p[0]; r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad); r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position out[0] = r[0] + b[0]; out[1] = r[1] + b[1]; out[2] = r[2] + b[2]; return out; } /** * Rotate a 3D vector around the y-axis * @param {vec3} out The receiving vec3 * @param {ReadonlyVec3} a The vec3 point to rotate * @param {ReadonlyVec3} b The origin of the rotation * @param {Number} rad The angle of rotation in radians * @returns {vec3} out */ function rotateY(out, a, b, rad) { var p = [], r = []; //Translate point to the origin p[0] = a[0] - b[0]; p[1] = a[1] - b[1]; p[2] = a[2] - b[2]; //perform rotation r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad); r[1] = p[1]; r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position out[0] = r[0] + b[0]; out[1] = r[1] + b[1]; out[2] = r[2] + b[2]; return out; } /** * Rotate a 3D vector around the z-axis * @param {vec3} out The receiving vec3 * @param {ReadonlyVec3} a The vec3 point to rotate * @param {ReadonlyVec3} b The origin of the rotation * @param {Number} rad The angle of rotation in radians * @returns {vec3} out */ function rotateZ(out, a, b, rad) { var p = [], r = []; //Translate point to the origin p[0] = a[0] - b[0]; p[1] = a[1] - b[1]; p[2] = a[2] - b[2]; //perform rotation r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad); r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad); r[2] = p[2]; //translate to correct position out[0] = r[0] + b[0]; out[1] = r[1] + b[1]; out[2] = r[2] + b[2]; return out; } /** * Get the angle between two 3D vectors * @param {ReadonlyVec3} a The first operand * @param {ReadonlyVec3} b The second operand * @returns {Number} The angle in radians */ function vec3_angle(a, b) { var ax = a[0], ay = a[1], az = a[2], bx = b[0], by = b[1], bz = b[2], mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz)), cosine = mag && vec3_dot(a, b) / mag; return Math.acos(Math.min(Math.max(cosine, -1), 1)); } /** * Set the components of a vec3 to zero * * @param {vec3} out the receiving vector * @returns {vec3} out */ function vec3_zero(out) { out[0] = 0.0; out[1] = 0.0; out[2] = 0.0; return out; } /** * Returns a string representation of a vector * * @param {ReadonlyVec3} a vector to represent as a string * @returns {String} string representation of the vector */ function vec3_str(a) { return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")"; } /** * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===) * * @param {ReadonlyVec3} a The first vector. * @param {ReadonlyVec3} b The second vector. * @returns {Boolean} True if the vectors are equal, false otherwise. */ function vec3_exactEquals(a, b) { return a[0] === b[0] && a[1] === b[1] && a[2] === b[2]; } /** * Returns whether or not the vectors have approximately the same elements in the same position. * * @param {ReadonlyVec3} a The first vector. * @param {ReadonlyVec3} b The second vector. * @returns {Boolean} True if the vectors are equal, false otherwise. */ function vec3_equals(a, b) { var a0 = a[0], a1 = a[1], a2 = a[2]; var b0 = b[0], b1 = b[1], b2 = b[2]; return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)); } /** * Alias for {@link vec3.subtract} * @function */ var vec3_sub = vec3_subtract; /** * Alias for {@link vec3.multiply} * @function */ var vec3_mul = vec3_multiply; /** * Alias for {@link vec3.divide} * @function */ var vec3_div = vec3_divide; /** * Alias for {@link vec3.distance} * @function */ var vec3_dist = vec3_distance; /** * Alias for {@link vec3.squaredDistance} * @function */ var vec3_sqrDist = vec3_squaredDistance; /** * Alias for {@link vec3.length} * @function */ var vec3_len = vec3_length; /** * Alias for {@link vec3.squaredLength} * @function */ var vec3_sqrLen = vec3_squaredLength; /** * Perform some operation over an array of vec3s. * * @param {Array} a the array of vectors to iterate over * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed * @param {Number} offset Number of elements to skip at the beginning of the array * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array * @param {Function} fn Function to call for each vector in the array * @param {Object} [arg] additional argument to pass to fn * @returns {Array} a * @function */ var vec3_forEach = function () { var vec = vec3_create(); return function (a, stride, offset, count, fn, arg) { var i, l; if (!stride) { stride = 3; } if (!offset) { offset = 0; } if (count) { l = Math.min(count * stride + offset, a.length); } else { l = a.length; } for (i = offset; i < l; i += stride) { vec[0] = a[i]; vec[1] = a[i + 1]; vec[2] = a[i + 2]; fn(vec, vec, arg); a[i] = vec[0]; a[i + 1] = vec[1]; a[i + 2] = vec[2]; } return a; }; }(); // CONCATENATED MODULE: ./node_modules/gl-matrix/esm/index.js /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { var _typeof = __webpack_require__(11)["default"]; var assertThisInitialized = __webpack_require__(150); function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return assertThisInitialized(t); } module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { var setPrototypeOf = __webpack_require__(36); function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && setPrototypeOf(t, e); } module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { // TODO(Babel 8): Remove this file. var runtime = __webpack_require__(146)(); module.exports = runtime; // Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736= try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { if (typeof globalThis === "object") { globalThis.regeneratorRuntime = runtime; } else { Function("r", "regeneratorRuntime = r")(runtime); } } /***/ }), /* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* eslint-disable no-param-reassign */ /* harmony default export */ __webpack_exports__["a"] = ({ init: function init(arr, val) { arr.fill(val); }, /** * IN-PLACE Shuffles the content of an array */ shuffle: function shuffle(arr) { // Durstenfeld shuffle algorithm // https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array for (var i = arr.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var _ref = [arr[j], arr[i]]; arr[i] = _ref[0]; arr[j] = _ref[1]; } return arr; }, toPointList: function toPointList(arr) { var rows = arr.reduce(function (p, n) { var row = "[".concat(n.join(','), "]"); p.push(row); return p; }, []); return "[".concat(rows.join(',\r\n'), "]"); }, /** * returns the elements which's score is bigger than the threshold */ // eslint-disable-next-line no-unused-vars threshold: function threshold(arr, _threshold, scoreFunc) { var queue = arr.reduce(function (prev, next) { if (scoreFunc.apply(arr, [next]) >= _threshold) { prev.push(next); } return prev; }, []); return queue; }, maxIndex: function maxIndex(arr) { var max = 0; for (var i = 0; i < arr.length; i++) { if (arr[i] > arr[max]) { max = i; } } return max; }, max: function max(arr) { var max = 0; for (var i = 0; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } return max; }, sum: function sum(arr) { var length = arr.length; var sum = 0; while (length--) { sum += arr[length]; } return sum; } }); /***/ }), /* 9 */ /***/ (function(module, exports) { function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, "imageRef", function() { return /* binding */ imageRef; }); __webpack_require__.d(__webpack_exports__, "computeIntegralImage2", function() { return /* binding */ computeIntegralImage2; }); __webpack_require__.d(__webpack_exports__, "computeIntegralImage", function() { return /* binding */ computeIntegralImage; }); __webpack_require__.d(__webpack_exports__, "thresholdImage", function() { return /* binding */ thresholdImage; }); __webpack_require__.d(__webpack_exports__, "computeHistogram", function() { return /* binding */ computeHistogram; }); __webpack_require__.d(__webpack_exports__, "sharpenLine", function() { return /* binding */ sharpenLine; }); __webpack_require__.d(__webpack_exports__, "determineOtsuThreshold", function() { return /* binding */ determineOtsuThreshold; }); __webpack_require__.d(__webpack_exports__, "otsuThreshold", function() { return /* binding */ otsuThreshold; }); __webpack_require__.d(__webpack_exports__, "computeBinaryImage", function() { return /* binding */ computeBinaryImage; }); __webpack_require__.d(__webpack_exports__, "cluster", function() { return /* binding */ cv_utils_cluster; }); __webpack_require__.d(__webpack_exports__, "Tracer", function() { return /* binding */ Tracer; }); __webpack_require__.d(__webpack_exports__, "DILATE", function() { return /* binding */ DILATE; }); __webpack_require__.d(__webpack_exports__, "ERODE", function() { return /* binding */ ERODE; }); __webpack_require__.d(__webpack_exports__, "dilate", function() { return /* binding */ dilate; }); __webpack_require__.d(__webpack_exports__, "erode", function() { return /* binding */ erode; }); __webpack_require__.d(__webpack_exports__, "subtract", function() { return /* binding */ subtract; }); __webpack_require__.d(__webpack_exports__, "bitwiseOr", function() { return /* binding */ bitwiseOr; }); __webpack_require__.d(__webpack_exports__, "countNonZero", function() { return /* binding */ countNonZero; }); __webpack_require__.d(__webpack_exports__, "topGeneric", function() { return /* binding */ topGeneric; }); __webpack_require__.d(__webpack_exports__, "grayArrayFromImage", function() { return /* binding */ grayArrayFromImage; }); __webpack_require__.d(__webpack_exports__, "grayArrayFromContext", function() { return /* binding */ grayArrayFromContext; }); __webpack_require__.d(__webpack_exports__, "grayAndHalfSampleFromCanvasData", function() { return /* binding */ grayAndHalfSampleFromCanvasData; }); __webpack_require__.d(__webpack_exports__, "computeGray", function() { return /* binding */ computeGray; }); __webpack_require__.d(__webpack_exports__, "loadImageArray", function() { return /* binding */ loadImageArray; }); __webpack_require__.d(__webpack_exports__, "halfSample", function() { return /* binding */ halfSample; }); __webpack_require__.d(__webpack_exports__, "hsv2rgb", function() { return /* binding */ hsv2rgb; }); __webpack_require__.d(__webpack_exports__, "_computeDivisors", function() { return /* binding */ _computeDivisors; }); __webpack_require__.d(__webpack_exports__, "calculatePatchSize", function() { return /* binding */ calculatePatchSize; }); __webpack_require__.d(__webpack_exports__, "_parseCSSDimensionValues", function() { return /* binding */ _parseCSSDimensionValues; }); __webpack_require__.d(__webpack_exports__, "_dimensionsConverters", function() { return /* binding */ _dimensionsConverters; }); __webpack_require__.d(__webpack_exports__, "computeImageArea", function() { return /* binding */ computeImageArea; }); // EXTERNAL MODULE: ./node_modules/gl-matrix/esm/index.js + 4 modules var esm = __webpack_require__(4); // EXTERNAL MODULE: ./src/common/array_helper.ts var array_helper = __webpack_require__(8); // CONCATENATED MODULE: ./src/common/cluster.js // TODO: cluster.js and cv_utils.js are pretty tightly intertwined, making for a complex conversion // into typescript. be warned. :-) /** * Creates a cluster for grouping similar orientations of datapoints */ /* harmony default export */ var cluster = ({ create: function create(point, threshold) { var points = []; var center = { rad: 0, vec: esm["b" /* vec2 */].clone([0, 0]) }; var pointMap = {}; function _add(pointToAdd) { pointMap[pointToAdd.id] = pointToAdd; points.push(pointToAdd); } function updateCenter() { var i; var sum = 0; for (i = 0; i < points.length; i++) { sum += points[i].rad; } center.rad = sum / points.length; center.vec = esm["b" /* vec2 */].clone([Math.cos(center.rad), Math.sin(center.rad)]); } function init() { _add(point); updateCenter(); } init(); return { add: function add(pointToAdd) { if (!pointMap[pointToAdd.id]) { _add(pointToAdd); updateCenter(); } }, fits: function fits(otherPoint) { // check cosine similarity to center-angle var similarity = Math.abs(esm["b" /* vec2 */].dot(otherPoint.point.vec, center.vec)); if (similarity > threshold) { return true; } return false; }, getPoints: function getPoints() { return points; }, getCenter: function getCenter() { return center; } }; }, createPoint: function createPoint(newPoint, id, property) { return { rad: newPoint[property], point: newPoint, id: id }; } }); // CONCATENATED MODULE: ./src/common/cv_utils.js /* eslint-disable no-mixed-operators */ /* eslint-disable no-bitwise */ /** * @param x x-coordinate * @param y y-coordinate * @return ImageReference {x,y} Coordinate */ function imageRef(x, y) { var that = { x: x, y: y, toVec2: function toVec2() { return esm["b" /* vec2 */].clone([this.x, this.y]); }, toVec3: function toVec3() { return esm["c" /* vec3 */].clone([this.x, this.y, 1]); }, round: function round() { this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5); this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5); return this; } }; return that; } /** * Computes an integral image of a given grayscale image. * @param imageDataContainer {ImageDataContainer} the image to be integrated */ function computeIntegralImage2(imageWrapper, integralWrapper) { var imageData = imageWrapper.data; var width = imageWrapper.size.x; var height = imageWrapper.size.y; var integralImageData = integralWrapper.data; var sum = 0; var posA = 0; var posB = 0; var posC = 0; var posD = 0; var x; var y; // sum up first column posB = width; sum = 0; for (y = 1; y < height; y++) { sum += imageData[posA]; integralImageData[posB] += sum; posA += width; posB += width; } posA = 0; posB = 1; sum = 0; for (x = 1; x < width; x++) { sum += imageData[posA]; integralImageData[posB] += sum; posA++; posB++; } for (y = 1; y < height; y++) { posA = y * width + 1; posB = (y - 1) * width + 1; posC = y * width; posD = (y - 1) * width; for (x = 1; x < width; x++) { integralImageData[posA] += imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD]; posA++; posB++; posC++; posD++; } } } function computeIntegralImage(imageWrapper, integralWrapper) { var imageData = imageWrapper.data; var width = imageWrapper.size.x; var height = imageWrapper.size.y; var integralImageData = integralWrapper.data; var sum = 0; // sum up first row for (var i = 0; i < width; i++) { sum += imageData[i]; integralImageData[i] = sum; } for (var v = 1; v < height; v++) { sum = 0; for (var u = 0; u < width; u++) { sum += imageData[v * width + u]; integralImageData[v * width + u] = sum + integralImageData[(v - 1) * width + u]; } } } function thresholdImage(imageWrapper, threshold, targetWrapper) { if (!targetWrapper) { // eslint-disable-next-line no-param-reassign targetWrapper = imageWrapper; } var imageData = imageWrapper.data; var length = imageData.length; var targetData = targetWrapper.data; while (length--) { targetData[length] = imageData[length] < threshold ? 1 : 0; } } function computeHistogram(imageWrapper, bitsPerPixel) { if (!bitsPerPixel) { // eslint-disable-next-line no-param-reassign bitsPerPixel = 8; } var imageData = imageWrapper.data; var length = imageData.length; var bitShift = 8 - bitsPerPixel; var bucketCnt = 1 << bitsPerPixel; var hist = new Int32Array(bucketCnt); while (length--) { hist[imageData[length] >> bitShift]++; } return hist; } function sharpenLine(line) { var i; var length = line.length; var left = line[0]; var center = line[1]; var right; for (i = 1; i < length - 1; i++) { right = line[i + 1]; // -1 4 -1 kernel // eslint-disable-next-line no-param-reassign line[i - 1] = center * 2 - left - right & 255; left = center; center = right; } return line; } function determineOtsuThreshold(imageWrapper) { var bitsPerPixel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8; var hist; var bitShift = 8 - bitsPerPixel; function px(init, end) { var sum = 0; for (var i = init; i <= end; i++) { sum += hist[i]; } return sum; } function mx(init, end) { var sum = 0; for (var i = init; i <= end; i++) { sum += i * hist[i]; } return sum; } function determineThreshold() { var vet = [0]; var p1; var p2; var p12; var m1; var m2; var m12; var max = (1 << bitsPerPixel) - 1; hist = computeHistogram(imageWrapper, bitsPerPixel); for (var k = 1; k < max; k++) { p1 = px(0, k); p2 = px(k + 1, max); p12 = p1 * p2; if (p12 === 0) { p12 = 1; } m1 = mx(0, k) * p2; m2 = mx(k + 1, max) * p1; m12 = m1 - m2; vet[k] = m12 * m12 / p12; } return array_helper["a" /* default */].maxIndex(vet); } var threshold = determineThreshold(); return threshold << bitShift; } function otsuThreshold(imageWrapper, targetWrapper) { var threshold = determineOtsuThreshold(imageWrapper); thresholdImage(imageWrapper, threshold, targetWrapper); return threshold; } // local thresholding function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) { computeIntegralImage(imageWrapper, integralWrapper); if (!targetWrapper) { // eslint-disable-next-line no-param-reassign targetWrapper = imageWrapper; } var imageData = imageWrapper.data; var targetData = targetWrapper.data; var width = imageWrapper.size.x; var height = imageWrapper.size.y; var integralImageData = integralWrapper.data; var sum = 0; var v; var u; var kernel = 3; var A; var B; var C; var D; var avg; var size = (kernel * 2 + 1) * (kernel * 2 + 1); // clear out top & bottom-border for (v = 0; v <= kernel; v++) { for (u = 0; u < width; u++) { targetData[v * width + u] = 0; targetData[(height - 1 - v) * width + u] = 0; } } // clear out left & right border for (v = kernel; v < height - kernel; v++) { for (u = 0; u <= kernel; u++) { targetData[v * width + u] = 0; targetData[v * width + (width - 1 - u)] = 0; } } for (v = kernel + 1; v < height - kernel - 1; v++) { for (u = kernel + 1; u < width - kernel; u++) { A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)]; B = integralImageData[(v - kernel - 1) * width + (u + kernel)]; C = integralImageData[(v + kernel) * width + (u - kernel - 1)]; D = integralImageData[(v + kernel) * width + (u + kernel)]; sum = D - C - B + A; avg = sum / size; targetData[v * width + u] = imageData[v * width + u] > avg + 5 ? 0 : 1; } } } function cv_utils_cluster(points, threshold, property) { var i; var k; var thisCluster; var point; var clusters = []; if (!property) { // eslint-disable-next-line no-param-reassign property = 'rad'; } function addToCluster(newPoint) { var found = false; for (k = 0; k < clusters.length; k++) { thisCluster = clusters[k]; if (thisCluster.fits(newPoint)) { thisCluster.add(newPoint); found = true; } } return found; } // iterate over each cloud for (i = 0; i < points.length; i++) { point = cluster.createPoint(points[i], i, property); if (!addToCluster(point)) { clusters.push(cluster.create(point, threshold)); } } return clusters; } var Tracer = { trace: function trace(points, vec) { var iteration; var maxIterations = 10; var top = []; var result = []; var centerPos = 0; var currentPos = 0; function trace(idx, forward) { var to; var toIdx; var predictedPos; var thresholdX = 1; var thresholdY = Math.abs(vec[1] / 10); var found = false; function match(pos, predicted) { if (pos.x > predicted.x - thresholdX && pos.x < predicted.x + thresholdX && pos.y > predicted.y - thresholdY && pos.y < predicted.y + thresholdY) { return true; } return false; } // check if the next index is within the vec specifications // if not, check as long as the threshold is met var from = points[idx]; if (forward) { predictedPos = { x: from.x + vec[0], y: from.y + vec[1] }; } else { predictedPos = { x: from.x - vec[0], y: from.y - vec[1] }; } toIdx = forward ? idx + 1 : idx - 1; to = points[toIdx]; // eslint-disable-next-line no-cond-assign while (to && (found = match(to, predictedPos)) !== true && Math.abs(to.y - from.y) < vec[1]) { toIdx = forward ? toIdx + 1 : toIdx - 1; to = points[toIdx]; } return found ? toIdx : null; } for (iteration = 0; iteration < maxIterations; iteration++) { // randomly select point to start with centerPos = Math.floor(Math.random() * points.length); // trace forward top = []; currentPos = centerPos; top.push(points[currentPos]); // eslint-disable-next-line no-cond-assign while ((currentPos = trace(currentPos, true)) !== null) { top.push(points[currentPos]); } if (centerPos > 0) { currentPos = centerPos; // eslint-disable-next-line no-cond-assign while ((currentPos = trace(currentPos, false)) !== null) { top.push(points[currentPos]); } } if (top.length > result.length) { result = top; } } return result; } }; var DILATE = 1; var ERODE = 2; function dilate(inImageWrapper, outImageWrapper) { var v; var u; var inImageData = inImageWrapper.data; var outImageData = outImageWrapper.data; var height = inImageWrapper.size.y; var width = inImageWrapper.size.x; var sum; var yStart1; var yStart2; var xStart1; var xStart2; for (v = 1; v < height - 1; v++) { for (u = 1; u < width - 1; u++) { yStart1 = v - 1; yStart2 = v + 1; xStart1 = u - 1; xStart2 = u + 1; sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; outImageData[v * width + u] = sum > 0 ? 1 : 0; } } } function erode(inImageWrapper, outImageWrapper) { var v; var u; var inImageData = inImageWrapper.data; var outImageData = outImageWrapper.data; var height = inImageWrapper.size.y; var width = inImageWrapper.size.x; var sum; var yStart1; var yStart2; var xStart1; var xStart2; for (v = 1; v < height - 1; v++) { for (u = 1; u < width - 1; u++) { yStart1 = v - 1; yStart2 = v + 1; xStart1 = u - 1; xStart2 = u + 1; sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; outImageData[v * width + u] = sum === 5 ? 1 : 0; } } } function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) { if (!resultImageWrapper) { // eslint-disable-next-line no-param-reassign resultImageWrapper = aImageWrapper; } var length = aImageWrapper.data.length; var aImageData = aImageWrapper.data; var bImageData = bImageWrapper.data; var cImageData = resultImageWrapper.data; while (length--) { cImageData[length] = aImageData[length] - bImageData[length]; } } function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) { if (!resultImageWrapper) { // eslint-disable-next-line no-param-reassign resultImageWrapper = aImageWrapper; } var length = aImageWrapper.data.length; var aImageData = aImageWrapper.data; var bImageData = bImageWrapper.data; var cImageData = resultImageWrapper.data; while (length--) { cImageData[length] = aImageData[length] || bImageData[length]; } } function countNonZero(imageWrapper) { var length = imageWrapper.data.length; var data = imageWrapper.data; var sum = 0; while (length--) { sum += data[length]; } return sum; } function topGeneric(list, top, scoreFunc) { var i; var minIdx = 0; var min = 0; var queue = []; var score; var hit; var pos; for (i = 0; i < top; i++) { queue[i] = { score: 0, item: null }; } for (i = 0; i < list.length; i++) { score = scoreFunc.apply(this, [list[i]]); if (score > min) { hit = queue[minIdx]; hit.score = score; hit.item = list[i]; min = Number.MAX_VALUE; for (pos = 0; pos < top; pos++) { if (queue[pos].score < min) { min = queue[pos].score; minIdx = pos; } } } } return queue; } function grayArrayFromImage(htmlImage, offsetX, ctx, array) { ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height); var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data; computeGray(ctxData, array); } function grayArrayFromContext(ctx, size, offset, array) { var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data; computeGray(ctxData, array); } function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) { var topRowIdx = 0; var bottomRowIdx = size.x; var endIdx = Math.floor(canvasData.length / 4); var outWidth = size.x / 2; var outImgIdx = 0; var inWidth = size.x; var i; while (bottomRowIdx < endIdx) { for (i = 0; i < outWidth; i++) { // eslint-disable-next-line no-param-reassign outArray[outImgIdx] = (0.299 * canvasData[topRowIdx * 4 + 0] + 0.587 * canvasData[topRowIdx * 4 + 1] + 0.114 * canvasData[topRowIdx * 4 + 2] + (0.299 * canvasData[(topRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(topRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(topRowIdx + 1) * 4 + 2]) + (0.299 * canvasData[bottomRowIdx * 4 + 0] + 0.587 * canvasData[bottomRowIdx * 4 + 1] + 0.114 * canvasData[bottomRowIdx * 4 + 2]) + (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4; outImgIdx++; topRowIdx += 2; bottomRowIdx += 2; } topRowIdx += inWidth; bottomRowIdx += inWidth; } } function computeGray(imageData, outArray, config) { var l = imageData.length / 4 | 0; var singleChannel = config && config.singleChannel === true; if (singleChannel) { for (var i = 0; i < l; i++) { // eslint-disable-next-line no-param-reassign outArray[i] = imageData[i * 4 + 0]; } } else { for (var _i = 0; _i < l; _i++) { // eslint-disable-next-line no-param-reassign outArray[_i] = 0.299 * imageData[_i * 4 + 0] + 0.587 * imageData[_i * 4 + 1] + 0.114 * imageData[_i * 4 + 2]; } } } function loadImageArray(src, callback) { var canvas = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document && document.createElement('canvas'); var img = new Image(); img.callback = callback; img.onload = function () { // eslint-disable-next-line no-param-reassign canvas.width = this.width; // eslint-disable-next-line no-param-reassign canvas.height = this.height; console.warn('* loadImageArray getContext 2d'); var ctx = canvas.getContext('2d'); ctx.drawImage(this, 0, 0); var array = new Uint8Array(this.width * this.height); ctx.drawImage(this, 0, 0); var _ctx$getImageData = ctx.getImageData(0, 0, this.width, this.height), data = _ctx$getImageData.data; computeGray(data, array); this.callback(array, { x: this.width, y: this.height }, this); }; img.src = src; } /** * @param inImg {ImageWrapper} input image to be sampled * @param outImg {ImageWrapper} to be stored in */ function halfSample(inImgWrapper, outImgWrapper) { var inImg = inImgWrapper.data; var inWidth = inImgWrapper.size.x; var outImg = outImgWrapper.data; var topRowIdx = 0; var bottomRowIdx = inWidth; var endIdx = inImg.length; var outWidth = inWidth / 2; var outImgIdx = 0; while (bottomRowIdx < endIdx) { for (var i = 0; i < outWidth; i++) { outImg[outImgIdx] = Math.floor((inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4); outImgIdx++; topRowIdx += 2; bottomRowIdx += 2; } topRowIdx += inWidth; bottomRowIdx += inWidth; } } function hsv2rgb(hsv) { var rgb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0]; var h = hsv[0]; var s = hsv[1]; var v = hsv[2]; var c = v * s; var x = c * (1 - Math.abs(h / 60 % 2 - 1)); var m = v - c; var r = 0; var g = 0; var b = 0; if (h < 60) { r = c; g = x; } else if (h < 120) { r = x; g = c; } else if (h < 180) { g = c; b = x; } else if (h < 240) { g = x; b = c; } else if (h < 300) { r = x; b = c; } else if (h < 360) { r = c; b = x; } // eslint-disable-next-line no-param-reassign rgb[0] = (r + m) * 255 | 0; // eslint-disable-next-line no-param-reassign rgb[1] = (g + m) * 255 | 0; // eslint-disable-next-line no-param-reassign rgb[2] = (b + m) * 255 | 0; return rgb; } function _computeDivisors(n) { var largeDivisors = []; var divisors = []; for (var i = 1; i < Math.sqrt(n) + 1; i++) { if (n % i === 0) { divisors.push(i); if (i !== n / i) { largeDivisors.unshift(Math.floor(n / i)); } } } return divisors.concat(largeDivisors); } function _computeIntersection(arr1, arr2) { var i = 0; var j = 0; var result = []; while (i < arr1.length && j < arr2.length) { if (arr1[i] === arr2[j]) { result.push(arr1[i]); i++; j++; } else if (arr1[i] > arr2[j]) { j++; } else { i++; } } return result; } function calculatePatchSize(patchSize, imgSize) { var divisorsX = _computeDivisors(imgSize.x); var divisorsY = _computeDivisors(imgSize.y); var wideSide = Math.max(imgSize.x, imgSize.y); var common = _computeIntersection(divisorsX, divisorsY); var nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80]; var nrOfPatchesMap = { 'x-small': 5, small: 4, medium: 3, large: 2, 'x-large': 1 }; var nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium; var nrOfPatches = nrOfPatchesList[nrOfPatchesIdx]; var desiredPatchSize = Math.floor(wideSide / nrOfPatches); var optimalPatchSize; function findPatchSizeForDivisors(divisors) { var i = 0; var found = divisors[Math.floor(divisors.length / 2)]; while (i < divisors.length - 1 && divisors[i] < desiredPatchSize) { i++; } if (i > 0) { if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) { found = divisors[i - 1]; } else { found = divisors[i]; } } if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx] && desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx]) { return { x: found, y: found }; } return null; } optimalPatchSize = findPatchSizeForDivisors(common); if (!optimalPatchSize) { optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide)); if (!optimalPatchSize) { optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(desiredPatchSize * nrOfPatches)); } } return optimalPatchSize; } function _parseCSSDimensionValues(value) { var dimension = { value: parseFloat(value), unit: value.indexOf('%') === value.length - 1 ? '%' : '%' }; return dimension; } var _dimensionsConverters = { top: function top(dimension, context) { return dimension.unit === '%' ? Math.floor(context.height * (dimension.value / 100)) : null; }, right: function right(dimension, context) { return dimension.unit === '%' ? Math.floor(context.width - context.width * (dimension.value / 100)) : null; }, bottom: function bottom(dimension, context) { return dimension.unit === '%' ? Math.floor(context.height - context.height * (dimension.value / 100)) : null; }, left: function left(dimension, context) { return dimension.unit === '%' ? Math.floor(context.width * (dimension.value / 100)) : null; } }; function computeImageArea(inputWidth, inputHeight, area) { var context = { width: inputWidth, height: inputHeight }; var parsedArea = Object.keys(area).reduce(function (result, key) { var value = area[key]; var parsed = _parseCSSDimensionValues(value); var calculated = _dimensionsConverters[key](parsed, context); // eslint-disable-next-line no-param-reassign result[key] = calculated; return result; }, {}); return { sx: parsedArea.left, sy: parsedArea.top, sw: parsedArea.right - parsedArea.left, sh: parsedArea.bottom - parsedArea.top }; } /***/ }), /* 11 */ /***/ (function(module, exports) { function _typeof(o) { "@babel/helpers - typeof"; return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o); } module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 12 */ /***/ (function(module, exports) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { var superPropBase = __webpack_require__(151); function _get() { return module.exports = _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, module.exports.__esModule = true, module.exports["default"] = module.exports, _get.apply(null, arguments); } module.exports = _get, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 14 */ /***/ (function(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { var baseMerge = __webpack_require__(79), createAssigner = __webpack_require__(134); /** * This method is like `_.assign` except that it recursively merges own and * inherited enumerable string keyed properties of source objects into the * destination object. Source properties that resolve to `undefined` are * skipped if a destination value exists. Array and plain object properties * are merged recursively. Other objects and value types are overridden by * assignment. Source objects are applied from left to right. Subsequent * sources overwrite property assignments of previous sources. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 0.5.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @example * * var object = { * 'a': [{ 'b': 2 }, { 'd': 4 }] * }; * * var other = { * 'a': [{ 'c': 3 }, { 'e': 5 }] * }; * * _.merge(object, other); * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } */ var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); module.exports = merge; /***/ }), /* 16 */ /***/ (function(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__(40); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }), /* 17 */ /***/ (function(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; /***/ }), /* 18 */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(22), getRawTag = __webpack_require__(92), objectToString = __webpack_require__(93); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { var listCacheClear = __webpack_require__(81), listCacheDelete = __webpack_require__(82), listCacheGet = __webpack_require__(83), listCacheHas = __webpack_require__(84), listCacheSet = __webpack_require__(85); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { var eq = __webpack_require__(21); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }), /* 21 */ /***/ (function(module, exports) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(16); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(30); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { var isKeyable = __webpack_require__(106); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; /***/ }), /* 25 */ /***/ (function(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__(121), isObjectLike = __webpack_require__(17); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }), /* 26 */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; /***/ }), /* 27 */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(14), isKey = __webpack_require__(158), stringToPath = __webpack_require__(159), toString = __webpack_require__(162); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; /***/ }), /* 28 */ /***/ (function(module, exports, __webpack_require__) { var arrayWithHoles = __webpack_require__(142); var iterableToArrayLimit = __webpack_require__(143); var unsupportedIterableToArray = __webpack_require__(55); var nonIterableRest = __webpack_require__(144); function _slicedToArray(r, e) { return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest(); } module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { var arrayWithoutHoles = __webpack_require__(152); var iterableToArray = __webpack_require__(153); var unsupportedIterableToArray = __webpack_require__(55); var nonIterableSpread = __webpack_require__(154); function _toConsumableArray(r) { return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread(); } module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { var baseIsNative = __webpack_require__(91), getValue = __webpack_require__(97); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }), /* 31 */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(18), isObject = __webpack_require__(12); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }), /* 32 */ /***/ (function(module, exports, __webpack_require__) { var defineProperty = __webpack_require__(44); /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue(object, key, value) { if (key == '__proto__' && defineProperty) { defineProperty(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } module.exports = baseAssignValue; /***/ }), /* 33 */ /***/ (function(module, exports) { module.exports = function(module) { if (!module.webpackPolyfill) { module.deprecate = function() {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /* 34 */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(31), isLength = __webpack_require__(35); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; /***/ }), /* 35 */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; /***/ }), /* 36 */ /***/ (function(module, exports) { function _setPrototypeOf(t, e) { return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e); } module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 37 */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(18), isObjectLike = __webpack_require__(17); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; /***/ }), /* 38 */ /***/ (function(module, exports, __webpack_require__) { var isSymbol = __webpack_require__(37); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; /***/ }), /* 39 */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(30), root = __webpack_require__(16); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; /***/ }), /* 40 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(41))) /***/ }), /* 41 */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /* 42 */ /***/ (function(module, exports, __webpack_require__) { var mapCacheClear = __webpack_require__(98), mapCacheDelete = __webpack_require__(105), mapCacheGet = __webpack_require__(107), mapCacheHas = __webpack_require__(108), mapCacheSet = __webpack_require__(109); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }), /* 43 */ /***/ (function(module, exports, __webpack_require__) { var baseAssignValue = __webpack_require__(32), eq = __webpack_require__(21); /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignMergeValue(object, key, value) { if ((value !== undefined && !eq(object[key], value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignMergeValue; /***/ }), /* 44 */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(30); var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); module.exports = defineProperty; /***/ }), /* 45 */ /***/ (function(module, exports, __webpack_require__) { var overArg = __webpack_require__(120); /** Built-in value references. */ var getPrototype = overArg(Object.getPrototypeOf, Object); module.exports = getPrototype; /***/ }), /* 46 */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; /***/ }), /* 47 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(16), stubFalse = __webpack_require__(123); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(33)(module))) /***/ }), /* 48 */ /***/ (function(module, exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(125), baseUnary = __webpack_require__(126), nodeUtil = __webpack_require__(127); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }), /* 49 */ /***/ (function(module, exports) { /** * Gets the value at `key`, unless `key` is "__proto__" or "constructor". * * @private * @param {Object} object The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function safeGet(object, key) { if (key === 'constructor' && typeof object[key] === 'function') { return; } if (key == '__proto__') { return; } return object[key]; } module.exports = safeGet; /***/ }), /* 50 */ /***/ (function(module, exports, __webpack_require__) { var baseAssignValue = __webpack_require__(32), eq = __webpack_require__(21); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue(object, key, value); } } module.exports = assignValue; /***/ }), /* 51 */ /***/ (function(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(130), baseKeysIn = __webpack_require__(132), isArrayLike = __webpack_require__(34); /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } module.exports = keysIn; /***/ }), /* 52 */ /***/ (function(module, exports) { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; /***/ }), /* 53 */ /***/ (function(module, exports, __webpack_require__) { var apply = __webpack_require__(136); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } module.exports = overRest; /***/ }), /* 54 */ /***/ (function(module, exports, __webpack_require__) { var baseSetToString = __webpack_require__(137), shortOut = __webpack_require__(139); /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString = shortOut(baseSetToString); module.exports = setToString; /***/ }), /* 55 */ /***/ (function(module, exports, __webpack_require__) { var arrayLikeToArray = __webpack_require__(56); function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0; } } module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 56 */ /***/ (function(module, exports) { function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 57 */ /***/ (function(module, exports, __webpack_require__) { var _typeof = __webpack_require__(11)["default"]; var toPrimitive = __webpack_require__(145); function toPropertyKey(t) { var i = toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 58 */ /***/ (function(module, exports) { function _OverloadYield(e, d) { this.v = e, this.k = d; } module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 59 */ /***/ (function(module, exports, __webpack_require__) { var regeneratorDefine = __webpack_require__(60); function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return regeneratorDefine(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (regeneratorDefine(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), regeneratorDefine(u), regeneratorDefine(u, o, "Generator"), regeneratorDefine(u, n, function () { return this; }), regeneratorDefine(u, "toString", function () { return "[object Generator]"; }), (module.exports = _regenerator = function _regenerator() { return { w: i, m: f }; }, module.exports.__esModule = true, module.exports["default"] = module.exports)(); } module.exports = _regenerator, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 60 */ /***/ (function(module, exports) { function _regeneratorDefine(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } module.exports = _regeneratorDefine = function regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, module.exports.__esModule = true, module.exports["default"] = module.exports, _regeneratorDefine(e, r, n, t); } module.exports = _regeneratorDefine, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 61 */ /***/ (function(module, exports, __webpack_require__) { var regenerator = __webpack_require__(59); var regeneratorAsyncIterator = __webpack_require__(62); function _regeneratorAsyncGen(r, e, t, o, n) { return new regeneratorAsyncIterator(regenerator().w(r, e, t, o), n || Promise); } module.exports = _regeneratorAsyncGen, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 62 */ /***/ (function(module, exports, __webpack_require__) { var OverloadYield = __webpack_require__(58); var regeneratorDefine = __webpack_require__(60); function AsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (regeneratorDefine(AsyncIterator.prototype), regeneratorDefine(AsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), regeneratorDefine(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); } module.exports = AsyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 63 */ /***/ (function(module, exports, __webpack_require__) { var basePick = __webpack_require__(155), flatRest = __webpack_require__(169); /** * Creates an object composed of the picked `object` properties. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The source object. * @param {...(string|string[])} [paths] The property paths to pick. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pick(object, ['a', 'c']); * // => { 'a': 1, 'c': 3 } */ var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); module.exports = pick; /***/ }), /* 64 */ /***/ (function(module, exports, __webpack_require__) { var getPrototypeOf = __webpack_require__(1); var setPrototypeOf = __webpack_require__(36); var isNativeFunction = __webpack_require__(174); var construct = __webpack_require__(175); function _wrapNativeSuper(t) { var r = "function" == typeof Map ? new Map() : void 0; return module.exports = _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !isNativeFunction(t)) return t; if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return construct(t, arguments, getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), setPrototypeOf(Wrapper, t); }, module.exports.__esModule = true, module.exports["default"] = module.exports, _wrapNativeSuper(t); } module.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 65 */ /***/ (function(module, exports, __webpack_require__) { // NOTE FOR ANYONE IN HERE IN THE FUTURE: This module is used when the module is built for use in Node. // Webpack.config.js explicitly REPLACES this module with the file called frame_grabber_browser when it is packing the Browser distribution. var CVUtils = __webpack_require__(10); var Ndarray = __webpack_require__(177); var Interp2D = __webpack_require__(180).d2; var FrameGrabber = {}; FrameGrabber.create = function (inputStream, canvas) { var _streamConfig$debug; // console.warn('*** FrameGrabberNode create()'); var _that = {}; var _videoSize = CVUtils.imageRef(inputStream.getRealWidth(), inputStream.getRealHeight()); var _canvasSize = inputStream.getCanvasSize(); var _size = CVUtils.imageRef(inputStream.getWidth(), inputStream.getHeight()); var _topRight = inputStream.getTopRight(); var _data = new Uint8Array(_size.x * _size.y); var _grayData = new Uint8Array(_videoSize.x * _videoSize.y); var _canvasData = new Uint8Array(_canvasSize.x * _canvasSize.y); /* eslint-disable new-cap */ var _grayImageArray = Ndarray(_grayData, [_videoSize.y, _videoSize.x]).transpose(1, 0); var _canvasImageArray = Ndarray(_canvasData, [_canvasSize.y, _canvasSize.x]).transpose(1, 0); var _targetImageArray = _canvasImageArray.hi(_topRight.x + _size.x, _topRight.y + _size.y).lo(_topRight.x, _topRight.y); var _stepSizeX = _videoSize.x / _canvasSize.x; var _stepSizeY = _videoSize.y / _canvasSize.y; var _streamConfig = inputStream.getConfig(); if (false) {} /** * Uses the given array as frame-buffer */ _that.attachData = function (data) { _data = data; }; /** * Returns the used frame-buffer */ _that.getData = function () { return _data; }; /** * Fetches a frame from the input-stream and puts into the frame-buffer. * The image-data is converted to gray-scale and then half-sampled if configured. */ _that.grab = function () { var frame = inputStream.getFrame(); if (frame) { this.scaleAndCrop(frame); return true; } return false; }; // eslint-disable-next-line _that.scaleAndCrop = function (frame) { // 1. compute full-sized gray image CVUtils.computeGray(frame.data, _grayData); // 2. interpolate for (var y = 0; y < _canvasSize.y; y++) { for (var x = 0; x < _canvasSize.x; x++) { // eslint-disable-next-line no-bitwise _canvasImageArray.set(x, y, Interp2D(_grayImageArray, x * _stepSizeX, y * _stepSizeY) | 0); } } // targetImageArray must be equal to targetSize if (_targetImageArray.shape[0] !== _size.x || _targetImageArray.shape[1] !== _size.y) { throw new Error('Shapes do not match!'); } // 3. crop for (var _y = 0; _y < _size.y; _y++) { for (var _x = 0; _x < _size.x; _x++) { _data[_y * _size.x + _x] = _targetImageArray.get(_x, _y); } } }; _that.getSize = function () { return _size; }; return _that; }; module.exports = FrameGrabber; /***/ }), /* 66 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28); /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9); /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(67); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var http__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68); /* harmony import */ var http__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(http__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var https__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(69); /* harmony import */ var https__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(https__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70); /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(url__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var ndarray_pixels__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(71); /* harmony import */ var ndarray_pixels__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(ndarray_pixels__WEBPACK_IMPORTED_MODULE_7__); // TODO: It's pretty likely that this shares code with the browser version, investigate that // FOR ANYONE IN HERE IN THE FUTURE: This is the default input_stream module used for the Node bundle. // webpack.config.js *replaces* this with input_stream_browser.ts when the bundle is being built for browser. var inputStreamFactory = { createVideoStream: function createVideoStream() { throw new Error('createVideoStream not available'); }, createLiveStream: function createLiveStream() { throw new Error('createLiveStream not available'); }, createImageStream: function createImageStream() { // console.warn('* InputStreamNode createImageStream'); var _config = null; var width = 0; var height = 0; var loaded = false; // TODO: frame should be a type NdArray, but NdArray doesn't have ts definitions // TODO: there is a ts-ndarray that might work, though var frame = null; var baseUrl; var _ended = false; var calculatedWidth; var calculatedHeight; var _eventNames = ['canrecord', 'ended']; var _eventHandlers = {}; var _topRight = { x: 0, y: 0, type: 'Point' }; var _canvasSize = { x: 0, y: 0, type: 'XYSize' }; /* eslint-disable no-unused-vars */ // false eslint errors? weird. // @ts-ignore var size = 0; // @ts-ignore var frameIdx = 0; // @ts-ignore var paused = false; /* eslint-enable no-unused-vars */ function loadImageData(_x) { return _loadImageData.apply(this, arguments); } function _loadImageData() { _loadImageData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee(url) { return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", new Promise(function (resolve, reject) { // Handle file paths if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) { fs__WEBPACK_IMPORTED_MODULE_3__["readFile"](url, function (err, data) { if (err) reject(err);else resolve(data); }); return; } // Handle data URLs if (url.startsWith('data:')) { var matches = url.match(/^data:([^;]+);base64,(.+)$/); if (!matches) { reject(new Error('Invalid data URL')); return; } resolve(Buffer.from(matches[2], 'base64')); return; } // Handle HTTP/HTTPS URLs var parsedUrl = new url__WEBPACK_IMPORTED_MODULE_6__["URL"](url); var client = parsedUrl.protocol === 'https:' ? https__WEBPACK_IMPORTED_MODULE_5__ : http__WEBPACK_IMPORTED_MODULE_4__; client.get(url, function (response) { if (!response.statusCode || response.statusCode < 200 || response.statusCode >= 300) { reject(new Error("Failed to fetch ".concat(url, ": ").concat(response.statusCode || 'unknown status'))); return; } var chunks = []; response.on('data', function (chunk) { return chunks.push(chunk); }); response.on('end', function () { return resolve(Buffer.concat(chunks)); }); response.on('error', reject); }).on('error', reject); })); case 1: case "end": return _context.stop(); } }, _callee); })); return _loadImageData.apply(this, arguments); } function loadImages() { return _loadImages.apply(this, arguments); } function _loadImages() { _loadImages = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.mark(function _callee2() { var _config3, _config4, _config5, imageData, mimeType, uint8Data, pixels, _pixels$shape, _t; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default.a.wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: loaded = false; _context2.prev = 1; _context2.next = 2; return loadImageData(baseUrl); case 2: imageData = _context2.sent; // Determine the mime type mimeType = 'image/jpeg'; if ((_config3 = _config) !== null && _config3 !== void 0 && _config3.mime) { mimeType = _config.mime; } else if (baseUrl.endsWith('.png')) { mimeType = 'image/png'; } else if (baseUrl.endsWith('.jpg') || baseUrl.endsWith('.jpeg')) { mimeType = 'image/jpeg'; } // Use ndarray-pixels to decode the image // Cast to Uint8Array for ndarray-pixels compatibility uint8Data = new Uint8Array(imageData.buffer, imageData.byteOffset, imageData.byteLength); _context2.next = 3; return Object(ndarray_pixels__WEBPACK_IMPORTED_MODULE_7__["getPixels"])(uint8Data, mimeType); case 3: pixels = _context2.sent; loaded = true; if (false) {} // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment frame = pixels; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access // eslint-disable-next-line no-nested-ternary _pixels$shape = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(pixels.shape, 2); width = _pixels$shape[0]; height = _pixels$shape[1]; calculatedWidth = (_config4 = _config) !== null && _config4 !== void 0 && _config4.size ? width / height > 1 ? _config.size : Math.floor(width / height * _config.size) : width; // eslint-disable-next-line no-nested-ternary calculatedHeight = (_config5 = _config) !== null && _config5 !== void 0 && _config5.size ? width / height > 1 ? Math.floor(height / width * _config.size) : _config.size : height; _canvasSize.x = calculatedWidth; _canvasSize.y = calculatedHeight; setTimeout(function () { // eslint-disable-next-line @typescript-eslint/no-use-before-define publishEvent('canrecord', []); }, 0); _context2.next = 5; break; case 4: _context2.prev = 4; _t = _context2["catch"](1); console.error('**** quagga loadImages error:', _t); throw new Error('error decoding pixels in loadImages'); case 5: case "end": return _context2.stop(); } }, _callee2, null, [[1, 4]]); })); return _loadImages.apply(this, arguments); } function publishEvent(eventName, args) { var handlers = _eventHandlers[eventName]; if (handlers && handlers.length > 0) { for (var j = 0; j < handlers.length; j++) { // eslint-disable-next-line @typescript-eslint/no-use-before-define handlers[j].apply(inputStream, args); } } } // eslint-disable-next-line no-var,vars-on-top var inputStream = { trigger: publishEvent, getWidth: function getWidth() { return calculatedWidth; }, getHeight: function getHeight() { return calculatedHeight; }, setWidth: function setWidth(w) { calculatedWidth = w; }, setHeight: function setHeight(h) { calculatedHeight = h; }, getRealWidth: function getRealWidth() { return width; }, getRealHeight: function getRealHeight() { return height; }, setInputStream: function setInputStream(stream) { var _config2; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment _config = stream; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access baseUrl = (_config2 = _config) === null || _config2 === void 0 ? void 0 : _config2.src; size = 1; loadImages()["catch"](function (err) { console.error('Failed to load images:', err); }); }, ended: function ended() { return _ended; }, setAttribute: function setAttribute() {}, getConfig: function getConfig() { return _config; }, pause: function pause() { paused = true; }, play: function play() { paused = false; }, setCurrentTime: function setCurrentTime(time) { frameIdx = time; }, addEventListener: function addEventListener(event, f) { if (_eventNames.indexOf(event) !== -1) { if (!_eventHandlers[event]) { _eventHandlers[event] = []; } _eventHandlers[event].push(f); } }, clearEventHandlers: function clearEventHandlers() { Object.keys(_eventHandlers).forEach(function (ind) { return delete _eventHandlers[ind]; }); }, setTopRight: function setTopRight(topRight) { _topRight.x = topRight.x; _topRight.y = topRight.y; }, getTopRight: function getTopRight() { return _topRight; }, setCanvasSize: function setCanvasSize(sz) { _canvasSize.x = sz.x; _canvasSize.y = sz.y; }, getCanvasSize: function getCanvasSize() { return _canvasSize; }, getFrame: function getFrame() { if (!loaded) { return null; } // eslint-disable-next-line @typescript-eslint/no-unsafe-return return frame; } }; return inputStream; } }; /* harmony default export */ __webpack_exports__["a"] = (inputStreamFactory); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(181).Buffer)) /***/ }), /* 67 */ /***/ (function(module, exports) { module.exports = require("fs"); /***/ }), /* 68 */ /***/ (function(module, exports) { module.exports = require("http"); /***/ }), /* 69 */ /***/ (function(module, exports) { module.exports = require("https"); /***/ }), /* 70 */ /***/ (function(module, exports) { module.exports = require("url"); /***/ }), /* 71 */ /***/ (function(module, exports) { module.exports = require("ndarray-pixels"); /***/ }), /* 72 */, /* 73 */, /* 74 */, /* 75 */, /* 76 */, /* 77 */, /* 78 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(185); /***/ }), /* 79 */ /***/ (function(module, exports, __webpack_require__) { var Stack = __webpack_require__(80), assignMergeValue = __webpack_require__(43), baseFor = __webpack_require__(110), baseMergeDeep = __webpack_require__(112), isObject = __webpack_require__(12), keysIn = __webpack_require__(51), safeGet = __webpack_require__(49); /** * The base implementation of `_.merge` without support for multiple sources. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {number} srcIndex The index of `source`. * @param {Function} [customizer] The function to customize merged values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack); if (isObject(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } module.exports = baseMerge; /***/ }), /* 80 */ /***/ (function(module, exports, __webpack_require__) { var ListCache = __webpack_require__(19), stackClear = __webpack_require__(86), stackDelete = __webpack_require__(87), stackGet = __webpack_require__(88), stackHas = __webpack_require__(89), stackSet = __webpack_require__(90); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; /***/ }), /* 81 */ /***/ (function(module, exports) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; /***/ }), /* 82 */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(20); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; /***/ }), /* 83 */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(20); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; /***/ }), /* 84 */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(20); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; /***/ }), /* 85 */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(20); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; /***/ }), /* 86 */ /***/ (function(module, exports, __webpack_require__) { var ListCache = __webpack_require__(19); /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache; this.size = 0; } module.exports = stackClear; /***/ }), /* 87 */ /***/ (function(module, exports) { /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } module.exports = stackDelete; /***/ }), /* 88 */ /***/ (function(module, exports) { /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } module.exports = stackGet; /***/ }), /* 89 */ /***/ (function(module, exports) { /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } module.exports = stackHas; /***/ }), /* 90 */ /***/ (function(module, exports, __webpack_require__) { var ListCache = __webpack_require__(19), Map = __webpack_require__(39), MapCache = __webpack_require__(42); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } module.exports = stackSet; /***/ }), /* 91 */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(31), isMasked = __webpack_require__(94), isObject = __webpack_require__(12), toSource = __webpack_require__(96); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; /***/ }), /* 92 */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(22); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }), /* 93 */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /* 94 */ /***/ (function(module, exports, __webpack_require__) { var coreJsData = __webpack_require__(95); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; /***/ }), /* 95 */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(16); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; /***/ }), /* 96 */ /***/ (function(module, exports) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; /***/ }), /* 97 */ /***/ (function(module, exports) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; /***/ }), /* 98 */ /***/ (function(module, exports, __webpack_require__) { var Hash = __webpack_require__(99), ListCache = __webpack_require__(19), Map = __webpack_require__(39); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; /***/ }), /* 99 */ /***/ (function(module, exports, __webpack_require__) { var hashClear = __webpack_require__(100), hashDelete = __webpack_require__(101), hashGet = __webpack_require__(102), hashHas = __webpack_require__(103), hashSet = __webpack_require__(104); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; /***/ }), /* 100 */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(23); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; /***/ }), /* 101 */ /***/ (function(module, exports) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; /***/ }), /* 102 */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(23); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; /***/ }), /* 103 */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(23); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; /***/ }), /* 104 */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(23); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; /***/ }), /* 105 */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(24); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; /***/ }), /* 106 */ /***/ (function(module, exports) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; /***/ }), /* 107 */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(24); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; /***/ }), /* 108 */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(24); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; /***/ }), /* 109 */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(24); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; /***/ }), /* 110 */ /***/ (function(module, exports, __webpack_require__) { var createBaseFor = __webpack_require__(111); /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); module.exports = baseFor; /***/ }), /* 111 */ /***/ (function(module, exports) { /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } module.exports = createBaseFor; /***/ }), /* 112 */ /***/ (function(module, exports, __webpack_require__) { var assignMergeValue = __webpack_require__(43), cloneBuffer = __webpack_require__(113), cloneTypedArray = __webpack_require__(114), copyArray = __webpack_require__(117), initCloneObject = __webpack_require__(118), isArguments = __webpack_require__(25), isArray = __webpack_require__(14), isArrayLikeObject = __webpack_require__(122), isBuffer = __webpack_require__(47), isFunction = __webpack_require__(31), isObject = __webpack_require__(12), isPlainObject = __webpack_require__(124), isTypedArray = __webpack_require__(48), safeGet = __webpack_require__(49), toPlainObject = __webpack_require__(128); /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular * references to be merged. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {string} key The key of the value to merge. * @param {number} srcIndex The index of `source`. * @param {Function} mergeFunc The function to merge values. * @param {Function} [customizer] The function to customize assigned values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) : undefined; var isCommon = newValue === undefined; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack['delete'](srcValue); } assignMergeValue(object, key, newValue); } module.exports = baseMergeDeep; /***/ }), /* 113 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(16); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; /** * Creates a clone of `buffer`. * * @private * @param {Buffer} buffer The buffer to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } module.exports = cloneBuffer; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(33)(module))) /***/ }), /* 114 */ /***/ (function(module, exports, __webpack_require__) { var cloneArrayBuffer = __webpack_require__(115); /** * Creates a clone of `typedArray`. * * @private * @param {Object} typedArray The typed array to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } module.exports = cloneTypedArray; /***/ }), /* 115 */ /***/ (function(module, exports, __webpack_require__) { var Uint8Array = __webpack_require__(116); /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array(result).set(new Uint8Array(arrayBuffer)); return result; } module.exports = cloneArrayBuffer; /***/ }), /* 116 */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(16); /** Built-in value references. */ var Uint8Array = root.Uint8Array; module.exports = Uint8Array; /***/ }), /* 117 */ /***/ (function(module, exports) { /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } module.exports = copyArray; /***/ }), /* 118 */ /***/ (function(module, exports, __webpack_require__) { var baseCreate = __webpack_require__(119), getPrototype = __webpack_require__(45), isPrototype = __webpack_require__(46); /** * Initializes an object clone. * * @private * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ function initCloneObject(object) { return (typeof object.constructor == 'function' && !isPrototype(object)) ? baseCreate(getPrototype(object)) : {}; } module.exports = initCloneObject; /***/ }), /* 119 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(12); /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate = (function() { function object() {} return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); module.exports = baseCreate; /***/ }), /* 120 */ /***/ (function(module, exports) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; /***/ }), /* 121 */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(18), isObjectLike = __webpack_require__(17); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }), /* 122 */ /***/ (function(module, exports, __webpack_require__) { var isArrayLike = __webpack_require__(34), isObjectLike = __webpack_require__(17); /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } module.exports = isArrayLikeObject; /***/ }), /* 123 */ /***/ (function(module, exports) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; /***/ }), /* 124 */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(18), getPrototype = __webpack_require__(45), isObjectLike = __webpack_require__(17); /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } module.exports = isPlainObject; /***/ }), /* 125 */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(18), isLength = __webpack_require__(35), isObjectLike = __webpack_require__(17); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; /***/ }), /* 126 */ /***/ (function(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }), /* 127 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(40); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(33)(module))) /***/ }), /* 128 */ /***/ (function(module, exports, __webpack_require__) { var copyObject = __webpack_require__(129), keysIn = __webpack_require__(51); /** * Converts `value` to a plain object flattening inherited enumerable string * keyed properties of `value` to own properties of the plain object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to convert. * @returns {Object} Returns the converted plain object. * @example * * function Foo() { * this.b = 2; * } * * Foo.prototype.c = 3; * * _.assign({ 'a': 1 }, new Foo); * // => { 'a': 1, 'b': 2 } * * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ function toPlainObject(value) { return copyObject(value, keysIn(value)); } module.exports = toPlainObject; /***/ }), /* 129 */ /***/ (function(module, exports, __webpack_require__) { var assignValue = __webpack_require__(50), baseAssignValue = __webpack_require__(32); /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } module.exports = copyObject; /***/ }), /* 130 */ /***/ (function(module, exports, __webpack_require__) { var baseTimes = __webpack_require__(131), isArguments = __webpack_require__(25), isArray = __webpack_require__(14), isBuffer = __webpack_require__(47), isIndex = __webpack_require__(26), isTypedArray = __webpack_require__(48); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; /***/ }), /* 131 */ /***/ (function(module, exports) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; /***/ }), /* 132 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(12), isPrototype = __webpack_require__(46), nativeKeysIn = __webpack_require__(133); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { result.push(key); } } return result; } module.exports = baseKeysIn; /***/ }), /* 133 */ /***/ (function(module, exports) { /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } module.exports = nativeKeysIn; /***/ }), /* 134 */ /***/ (function(module, exports, __webpack_require__) { var baseRest = __webpack_require__(135), isIterateeCall = __webpack_require__(140); /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner(assigner) { return baseRest(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } module.exports = createAssigner; /***/ }), /* 135 */ /***/ (function(module, exports, __webpack_require__) { var identity = __webpack_require__(52), overRest = __webpack_require__(53), setToString = __webpack_require__(54); /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ''); } module.exports = baseRest; /***/ }), /* 136 */ /***/ (function(module, exports) { /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } module.exports = apply; /***/ }), /* 137 */ /***/ (function(module, exports, __webpack_require__) { var constant = __webpack_require__(138), defineProperty = __webpack_require__(44), identity = __webpack_require__(52); /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; module.exports = baseSetToString; /***/ }), /* 138 */ /***/ (function(module, exports) { /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant(value) { return function() { return value; }; } module.exports = constant; /***/ }), /* 139 */ /***/ (function(module, exports) { /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } module.exports = shortOut; /***/ }), /* 140 */ /***/ (function(module, exports, __webpack_require__) { var eq = __webpack_require__(21), isArrayLike = __webpack_require__(34), isIndex = __webpack_require__(26), isObject = __webpack_require__(12); /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object) ) { return eq(object[index], value); } return false; } module.exports = isIterateeCall; /***/ }), /* 141 */ /***/ (function(module, exports) { /* * typedefs.js * Normalizes browser-specific prefixes and provide some basic polyfills */ if (typeof window !== 'undefined') { if (!window.requestAnimationFrame) { window.requestAnimationFrame = function () { return window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (/* function FrameRequestCallback */callback) { window.setTimeout(callback, 1000 / 60); }; }(); } } if (typeof Math.imul !== 'function') { /* eslint-disable no-bitwise */ Math.imul = function (a, b) { var ah = a >>> 16 & 0xffff; var al = a & 0xffff; var bh = b >>> 16 & 0xffff; var bl = b & 0xffff; // the shift by 0 fixes the sign on the high part // the final |0 converts the unsigned value into a signed value return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0; }; /* eslint-enable no-bitwise */ } if (typeof Object.assign !== 'function') { Object.assign = function (target) { // .length of function is 2 'use strict'; if (target === null) { // TypeError if undefined or null throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { // eslint-disable-next-line prefer-rest-params var nextSource = arguments[index]; if (nextSource !== null) { // Skip over if undefined or null // eslint-disable-next-line no-restricted-syntax for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }; } /***/ }), /* 142 */ /***/ (function(module, exports) { function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 143 */ /***/ (function(module, exports) { function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 144 */ /***/ (function(module, exports) { function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 145 */ /***/ (function(module, exports, __webpack_require__) { var _typeof = __webpack_require__(11)["default"]; function toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 146 */ /***/ (function(module, exports, __webpack_require__) { var OverloadYield = __webpack_require__(58); var regenerator = __webpack_require__(59); var regeneratorAsync = __webpack_require__(147); var regeneratorAsyncGen = __webpack_require__(61); var regeneratorAsyncIterator = __webpack_require__(62); var regeneratorKeys = __webpack_require__(148); var regeneratorValues = __webpack_require__(149); function _regeneratorRuntime() { "use strict"; var r = regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (module.exports = _regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new OverloadYield(r, e); }, AsyncIterator: regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? regeneratorAsyncGen : regeneratorAsync)(a(r), e, t, o, u); }, keys: regeneratorKeys, values: regeneratorValues }; }, module.exports.__esModule = true, module.exports["default"] = module.exports)(); } module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 147 */ /***/ (function(module, exports, __webpack_require__) { var regeneratorAsyncGen = __webpack_require__(61); function _regeneratorAsync(n, e, r, t, o) { var a = regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); } module.exports = _regeneratorAsync, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 148 */ /***/ (function(module, exports) { function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; } module.exports = _regeneratorKeys, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 149 */ /***/ (function(module, exports, __webpack_require__) { var _typeof = __webpack_require__(11)["default"]; function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); } module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 150 */ /***/ (function(module, exports) { function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 151 */ /***/ (function(module, exports, __webpack_require__) { var getPrototypeOf = __webpack_require__(1); function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t));); return t; } module.exports = _superPropBase, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 152 */ /***/ (function(module, exports, __webpack_require__) { var arrayLikeToArray = __webpack_require__(56); function _arrayWithoutHoles(r) { if (Array.isArray(r)) return arrayLikeToArray(r); } module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 153 */ /***/ (function(module, exports) { function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 154 */ /***/ (function(module, exports) { function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 155 */ /***/ (function(module, exports, __webpack_require__) { var basePickBy = __webpack_require__(156), hasIn = __webpack_require__(166); /** * The base implementation of `_.pick` without support for individual * property identifiers. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @returns {Object} Returns the new object. */ function basePick(object, paths) { return basePickBy(object, paths, function(value, path) { return hasIn(object, path); }); } module.exports = basePick; /***/ }), /* 156 */ /***/ (function(module, exports, __webpack_require__) { var baseGet = __webpack_require__(157), baseSet = __webpack_require__(165), castPath = __webpack_require__(27); /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet(object, path); if (predicate(value, path)) { baseSet(result, castPath(path, object), value); } } return result; } module.exports = basePickBy; /***/ }), /* 157 */ /***/ (function(module, exports, __webpack_require__) { var castPath = __webpack_require__(27), toKey = __webpack_require__(38); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; /***/ }), /* 158 */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(14), isSymbol = __webpack_require__(37); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; /***/ }), /* 159 */ /***/ (function(module, exports, __webpack_require__) { var memoizeCapped = __webpack_require__(160); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; /***/ }), /* 160 */ /***/ (function(module, exports, __webpack_require__) { var memoize = __webpack_require__(161); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; /***/ }), /* 161 */ /***/ (function(module, exports, __webpack_require__) { var MapCache = __webpack_require__(42); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; /***/ }), /* 162 */ /***/ (function(module, exports, __webpack_require__) { var baseToString = __webpack_require__(163); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }), /* 163 */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(22), arrayMap = __webpack_require__(164), isArray = __webpack_require__(14), isSymbol = __webpack_require__(37); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; /***/ }), /* 164 */ /***/ (function(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }), /* 165 */ /***/ (function(module, exports, __webpack_require__) { var assignValue = __webpack_require__(50), castPath = __webpack_require__(27), isIndex = __webpack_require__(26), isObject = __webpack_require__(12), toKey = __webpack_require__(38); /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { if (!isObject(object)) { return object; } path = castPath(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject(objValue) ? objValue : (isIndex(path[index + 1]) ? [] : {}); } } assignValue(nested, key, newValue); nested = nested[key]; } return object; } module.exports = baseSet; /***/ }), /* 166 */ /***/ (function(module, exports, __webpack_require__) { var baseHasIn = __webpack_require__(167), hasPath = __webpack_require__(168); /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } module.exports = hasIn; /***/ }), /* 167 */ /***/ (function(module, exports) { /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } module.exports = baseHasIn; /***/ }), /* 168 */ /***/ (function(module, exports, __webpack_require__) { var castPath = __webpack_require__(27), isArguments = __webpack_require__(25), isArray = __webpack_require__(14), isIndex = __webpack_require__(26), isLength = __webpack_require__(35), toKey = __webpack_require__(38); /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } module.exports = hasPath; /***/ }), /* 169 */ /***/ (function(module, exports, __webpack_require__) { var flatten = __webpack_require__(170), overRest = __webpack_require__(53), setToString = __webpack_require__(54); /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest(func) { return setToString(overRest(func, undefined, flatten), func + ''); } module.exports = flatRest; /***/ }), /* 170 */ /***/ (function(module, exports, __webpack_require__) { var baseFlatten = __webpack_require__(171); /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } module.exports = flatten; /***/ }), /* 171 */ /***/ (function(module, exports, __webpack_require__) { var arrayPush = __webpack_require__(172), isFlattenable = __webpack_require__(173); /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } module.exports = baseFlatten; /***/ }), /* 172 */ /***/ (function(module, exports) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; /***/ }), /* 173 */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(22), isArguments = __webpack_require__(25), isArray = __webpack_require__(14); /** Built-in value references. */ var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } module.exports = isFlattenable; /***/ }), /* 174 */ /***/ (function(module, exports) { function _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf("[native code]"); } catch (n) { return "function" == typeof t; } } module.exports = _isNativeFunction, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 175 */ /***/ (function(module, exports, __webpack_require__) { var isNativeReflectConstruct = __webpack_require__(176); var setPrototypeOf = __webpack_require__(36); function _construct(t, e, r) { if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && setPrototypeOf(p, r.prototype), p; } module.exports = _construct, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 176 */ /***/ (function(module, exports) { function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; }, module.exports.__esModule = true, module.exports["default"] = module.exports)(); } module.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /* 177 */ /***/ (function(module, exports, __webpack_require__) { var iota = __webpack_require__(178) var isBuffer = __webpack_require__(179) var hasTypedArrays = ((typeof Float64Array) !== "undefined") function compare1st(a, b) { return a[0] - b[0] } function order() { var stride = this.stride var terms = new Array(stride.length) var i for(i=0; iMath.abs(this.stride[1]))?[1,0]:[0,1]}})") } else if(dimension === 3) { code.push( "var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);\ if(s0>s1){\ if(s1>s2){\ return [2,1,0];\ }else if(s0>s2){\ return [1,2,0];\ }else{\ return [1,0,2];\ }\ }else if(s0>s2){\ return [2,0,1];\ }else if(s2>s1){\ return [0,1,2];\ }else{\ return [0,2,1];\ }}})") } } else { code.push("ORDER})") } } //view.set(i0, ..., v): code.push( "proto.set=function "+className+"_set("+args.join(",")+",v){") if(useGetters) { code.push("return this.data.set("+index_str+",v)}") } else { code.push("return this.data["+index_str+"]=v}") } //view.get(i0, ...): code.push("proto.get=function "+className+"_get("+args.join(",")+"){") if(useGetters) { code.push("return this.data.get("+index_str+")}") } else { code.push("return this.data["+index_str+"]}") } //view.index: code.push( "proto.index=function "+className+"_index(", args.join(), "){return "+index_str+"}") //view.hi(): code.push("proto.hi=function "+className+"_hi("+args.join(",")+"){return new "+className+"(this.data,"+ indices.map(function(i) { return ["(typeof i",i,"!=='number'||i",i,"<0)?this.shape[", i, "]:i", i,"|0"].join("") }).join(",")+","+ indices.map(function(i) { return "this.stride["+i + "]" }).join(",")+",this.offset)}") //view.lo(): var a_vars = indices.map(function(i) { return "a"+i+"=this.shape["+i+"]" }) var c_vars = indices.map(function(i) { return "c"+i+"=this.stride["+i+"]" }) code.push("proto.lo=function "+className+"_lo("+args.join(",")+"){var b=this.offset,d=0,"+a_vars.join(",")+","+c_vars.join(",")) for(var i=0; i=0){\ d=i"+i+"|0;\ b+=c"+i+"*d;\ a"+i+"-=d}") } code.push("return new "+className+"(this.data,"+ indices.map(function(i) { return "a"+i }).join(",")+","+ indices.map(function(i) { return "c"+i }).join(",")+",b)}") //view.step(): code.push("proto.step=function "+className+"_step("+args.join(",")+"){var "+ indices.map(function(i) { return "a"+i+"=this.shape["+i+"]" }).join(",")+","+ indices.map(function(i) { return "b"+i+"=this.stride["+i+"]" }).join(",")+",c=this.offset,d=0,ceil=Math.ceil") for(var i=0; i=0){c=(c+this.stride["+i+"]*i"+i+")|0}else{a.push(this.shape["+i+"]);b.push(this.stride["+i+"])}") } code.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}") //Add return statement code.push("return function construct_"+className+"(data,shape,stride,offset){return new "+className+"(data,"+ indices.map(function(i) { return "shape["+i+"]" }).join(",")+","+ indices.map(function(i) { return "stride["+i+"]" }).join(",")+",offset)}") //Compile procedure var procedure = new Function("CTOR_LIST", "ORDER", code.join("\n")) return procedure(CACHED_CONSTRUCTORS[dtype], order) } function arrayDType(data) { if(isBuffer(data)) { return "buffer" } if(hasTypedArrays) { switch(Object.prototype.toString.call(data)) { case "[object Float64Array]": return "float64" case "[object Float32Array]": return "float32" case "[object Int8Array]": return "int8" case "[object Int16Array]": return "int16" case "[object Int32Array]": return "int32" case "[object Uint8Array]": return "uint8" case "[object Uint16Array]": return "uint16" case "[object Uint32Array]": return "uint32" case "[object Uint8ClampedArray]": return "uint8_clamped" case "[object BigInt64Array]": return "bigint64" case "[object BigUint64Array]": return "biguint64" } } if(Array.isArray(data)) { return "array" } return "generic" } var CACHED_CONSTRUCTORS = { "float32":[], "float64":[], "int8":[], "int16":[], "int32":[], "uint8":[], "uint16":[], "uint32":[], "array":[], "uint8_clamped":[], "bigint64": [], "biguint64": [], "buffer":[], "generic":[] } ;(function() { for(var id in CACHED_CONSTRUCTORS) { CACHED_CONSTRUCTORS[id].push(compileConstructor(id, -1)) } }); function wrappedNDArrayCtor(data, shape, stride, offset) { if(data === undefined) { var ctor = CACHED_CONSTRUCTORS.array[0] return ctor([]) } else if(typeof data === "number") { data = [data] } if(shape === undefined) { shape = [ data.length ] } var d = shape.length if(stride === undefined) { stride = new Array(d) for(var i=d-1, sz=1; i>=0; --i) { stride[i] = sz sz *= shape[i] } } if(offset === undefined) { offset = 0 for(var i=0; i * @license MIT */ // The _isBuffer check is for Safari 5-7 support, because it's missing // Object.prototype.constructor. Remove this eventually module.exports = function (obj) { return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) } function isBuffer (obj) { return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) } // For Node v0.10 support. Remove this eventually. function isSlowBuffer (obj) { return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) } /***/ }), /* 180 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function interp1d(arr, x) { var ix = Math.floor(x) , fx = x - ix , s0 = 0 <= ix && ix < arr.shape[0] , s1 = 0 <= ix+1 && ix+1 < arr.shape[0] , w0 = s0 ? +arr.get(ix) : 0.0 , w1 = s1 ? +arr.get(ix+1) : 0.0 return (1.0-fx)*w0 + fx*w1 } function interp2d(arr, x, y) { var ix = Math.floor(x) , fx = x - ix , s0 = 0 <= ix && ix < arr.shape[0] , s1 = 0 <= ix+1 && ix+1 < arr.shape[0] , iy = Math.floor(y) , fy = y - iy , t0 = 0 <= iy && iy < arr.shape[1] , t1 = 0 <= iy+1 && iy+1 < arr.shape[1] , w00 = s0&&t0 ? arr.get(ix ,iy ) : 0.0 , w01 = s0&&t1 ? arr.get(ix ,iy+1) : 0.0 , w10 = s1&&t0 ? arr.get(ix+1,iy ) : 0.0 , w11 = s1&&t1 ? arr.get(ix+1,iy+1) : 0.0 return (1.0-fy) * ((1.0-fx)*w00 + fx*w10) + fy * ((1.0-fx)*w01 + fx*w11) } function interp3d(arr, x, y, z) { var ix = Math.floor(x) , fx = x - ix , s0 = 0 <= ix && ix < arr.shape[0] , s1 = 0 <= ix+1 && ix+1 < arr.shape[0] , iy = Math.floor(y) , fy = y - iy , t0 = 0 <= iy && iy < arr.shape[1] , t1 = 0 <= iy+1 && iy+1 < arr.shape[1] , iz = Math.floor(z) , fz = z - iz , u0 = 0 <= iz && iz < arr.shape[2] , u1 = 0 <= iz+1 && iz+1 < arr.shape[2] , w000 = s0&&t0&&u0 ? arr.get(ix,iy,iz) : 0.0 , w010 = s0&&t1&&u0 ? arr.get(ix,iy+1,iz) : 0.0 , w100 = s1&&t0&&u0 ? arr.get(ix+1,iy,iz) : 0.0 , w110 = s1&&t1&&u0 ? arr.get(ix+1,iy+1,iz) : 0.0 , w001 = s0&&t0&&u1 ? arr.get(ix,iy,iz+1) : 0.0 , w011 = s0&&t1&&u1 ? arr.get(ix,iy+1,iz+1) : 0.0 , w101 = s1&&t0&&u1 ? arr.get(ix+1,iy,iz+1) : 0.0 , w111 = s1&&t1&&u1 ? arr.get(ix+1,iy+1,iz+1) : 0.0 return (1.0-fz) * ((1.0-fy) * ((1.0-fx)*w000 + fx*w100) + fy * ((1.0-fx)*w010 + fx*w110)) + fz * ((1.0-fy) * ((1.0-fx)*w001 + fx*w101) + fy * ((1.0-fx)*w011 + fx*w111)) } function interpNd(arr) { var d = arr.shape.length|0 , ix = new Array(d) , fx = new Array(d) , s0 = new Array(d) , s1 = new Array(d) , i, t for(i=0; i * @license MIT */ /* eslint-disable no-proto */ var base64 = __webpack_require__(182) var ieee754 = __webpack_require__(183) var isArray = __webpack_require__(184) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Use Object implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * Due to various browser bugs, sometimes the Object implementation will be used even * when the browser supports typed arrays. * * Note: * * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. * * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. * * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of * incorrect length in some situations. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they * get the Object implementation, which is slower but behaves correctly. */ Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport() /* * Export kMaxLength after typed array support is determined. */ exports.kMaxLength = kMaxLength() function typedArraySupport () { try { var arr = new Uint8Array(1) arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} return arr.foo() === 42 && // typed array instances can be augmented typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` } catch (e) { return false } } function kMaxLength () { return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff } function createBuffer (that, length) { if (kMaxLength() < length) { throw new RangeError('Invalid typed array length') } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = new Uint8Array(length) that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class if (that === null) { that = new Buffer(length) } that.length = length } return that } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { return new Buffer(arg, encodingOrOffset, length) } // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new Error( 'If encoding is specified then the first argument must be a string' ) } return allocUnsafe(this, arg) } return from(this, arg, encodingOrOffset, length) } Buffer.poolSize = 8192 // not used by this implementation // TODO: Legacy, not needed anymore. Remove in next major version. Buffer._augment = function (arr) { arr.__proto__ = Buffer.prototype return arr } function from (that, value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { return fromArrayBuffer(that, value, encodingOrOffset, length) } if (typeof value === 'string') { return fromString(that, value, encodingOrOffset) } return fromObject(that, value) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(null, value, encodingOrOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { Buffer.prototype.__proto__ = Uint8Array.prototype Buffer.__proto__ = Uint8Array if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true }) } } function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be a number') } else if (size < 0) { throw new RangeError('"size" argument must not be negative') } } function alloc (that, size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(that, size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill) } return createBuffer(that, size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(null, size, fill, encoding) } function allocUnsafe (that, size) { assertSize(size) that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) if (!Buffer.TYPED_ARRAY_SUPPORT) { for (var i = 0; i < size; ++i) { that[i] = 0 } } return that } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(null, size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(null, size) } function fromString (that, string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding') } var length = byteLength(string, encoding) | 0 that = createBuffer(that, length) var actual = that.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') that = that.slice(0, actual) } return that } function fromArrayLike (that, array) { var length = array.length < 0 ? 0 : checked(array.length) | 0 that = createBuffer(that, length) for (var i = 0; i < length; i += 1) { that[i] = array[i] & 255 } return that } function fromArrayBuffer (that, array, byteOffset, length) { array.byteLength // this throws if `array` is not a valid ArrayBuffer if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('\'offset\' is out of bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('\'length\' is out of bounds') } if (byteOffset === undefined && length === undefined) { array = new Uint8Array(array) } else if (length === undefined) { array = new Uint8Array(array, byteOffset) } else { array = new Uint8Array(array, byteOffset, length) } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = array that.__proto__ = Buffer.prototype } else { // Fallback: Return an object instance of the Buffer class that = fromArrayLike(that, array) } return that } function fromObject (that, obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0 that = createBuffer(that, len) if (that.length === 0) { return that } obj.copy(that, 0, 0, len) return that } if (obj) { if ((typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer) || 'length' in obj) { if (typeof obj.length !== 'number' || isnan(obj.length)) { return createBuffer(that, 0) } return fromArrayLike(that, obj) } if (obj.type === 'Buffer' && isArray(obj.data)) { return fromArrayLike(that, obj.data) } } throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') } function checked (length) { // Note: cannot use `length < kMaxLength()` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= kMaxLength()) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return !!(b != null && b._isBuffer) } Buffer.compare = function compare (a, b) { if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError('Arguments must be Buffers') } if (a === b) return 0 var x = a.length var y = b.length for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } var i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } var buffer = Buffer.allocUnsafe(length) var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } buf.copy(buffer, pos) pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { string = '' + string } var len = string.length if (len === 0) return 0 // Use a for loop to avoid recursion var loweredCase = false for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len case 'utf8': case 'utf-8': case undefined: return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2 case 'hex': return len >>> 1 case 'base64': return base64ToBytes(string).length default: if (loweredCase) return utf8ToBytes(string).length // assume utf8 encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.byteLength = byteLength function slowToString (encoding, start, end) { var loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = (encoding + '').toLowerCase() loweredCase = true } } } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect // Buffer instances. Buffer.prototype._isBuffer = true function swap (b, n, m) { var i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { var len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { var len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { var len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { var length = this.length | 0 if (length === 0) return '' if (arguments.length === 0) return utf8Slice(this, 0, length) return slowToString.apply(this, arguments) } Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true return Buffer.compare(this, b) === 0 } Buffer.prototype.inspect = function inspect () { var str = '' var max = exports.INSPECT_MAX_BYTES if (this.length > 0) { str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') if (this.length > max) str += ' ... ' } return '' } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (!Buffer.isBuffer(target)) { throw new TypeError('Argument must be a Buffer') } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 var x = thisEnd - thisStart var y = end - start var len = Math.min(x, y) var thisCopy = this.slice(thisStart, thisEnd) var targetCopy = target.slice(start, end) for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (isNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { var indexSize = 1 var arrLength = arr.length var valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } var i if (dir) { var foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { var found = true for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } function hexWrite (buf, string, offset, length) { offset = Number(offset) || 0 var remaining = buf.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } // must be an even number of digits var strLen = string.length if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') if (length > strLen / 2) { length = strLen / 2 } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16) if (isNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function latin1Write (buf, string, offset, length) { return asciiWrite(buf, string, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8' length = this.length offset = 0 // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset length = this.length offset = 0 // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset | 0 if (isFinite(length)) { length = length | 0 if (encoding === undefined) encoding = 'utf8' } else { encoding = length length = undefined } // legacy write(string, encoding, offset, length) - remove in v0.13 } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } var remaining = this.length - offset if (length === undefined || length > remaining) length = remaining if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds') } if (!encoding) encoding = 'utf8' var loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': return asciiWrite(this, string, offset, length) case 'latin1': case 'binary': return latin1Write(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) var res = [] var i = start while (i < end) { var firstByte = buf[i] var codePoint = null var bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 : (firstByte > 0xBF) ? 2 : 1 if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte } break case 2: secondByte = buf[i + 1] if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) if (tempCodePoint > 0x7F) { codePoint = tempCodePoint } } break case 3: secondByte = buf[i + 1] thirdByte = buf[i + 2] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint } } break case 4: secondByte = buf[i + 1] thirdByte = buf[i + 2] fourthByte = buf[i + 3] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD bytesPerSequence = 1 } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000 res.push(codePoint >>> 10 & 0x3FF | 0xD800) codePoint = 0xDC00 | codePoint & 0x3FF } res.push(codePoint) i += bytesPerSequence } return decodeCodePointsArray(res) } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety var MAX_ARGUMENTS_LENGTH = 0x1000 function decodeCodePointsArray (codePoints) { var len = codePoints.length if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". var res = '' var i = 0 while (i < len) { res += String.fromCharCode.apply( String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) ) } return res } function asciiSlice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } function hexSlice (buf, start, end) { var len = buf.length if (!start || start < 0) start = 0 if (!end || end < 0 || end > len) end = len var out = '' for (var i = start; i < end; ++i) { out += toHex(buf[i]) } return out } function utf16leSlice (buf, start, end) { var bytes = buf.slice(start, end) var res = '' for (var i = 0; i < bytes.length; i += 2) { res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) } return res } Buffer.prototype.slice = function slice (start, end) { var len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start var newBuf if (Buffer.TYPED_ARRAY_SUPPORT) { newBuf = this.subarray(start, end) newBuf.__proto__ = Buffer.prototype } else { var sliceLen = end - start newBuf = new Buffer(sliceLen, undefined) for (var i = 0; i < sliceLen; ++i) { newBuf[i] = this[i + start] } } return newBuf } /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset (offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } var val = this[offset + --byteLength] var mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var i = byteLength var mul = 1 var val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var mul = 1 var i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 byteLength = byteLength | 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var i = byteLength - 1 var mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) this[offset] = (value & 0xff) return offset + 1 } function objectWriteUInt16 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> (littleEndian ? i : 1 - i) * 8 } } Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } function objectWriteUInt32 (buf, value, offset, littleEndian) { if (value < 0) value = 0xffffffff + value + 1 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff } } Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = 0 var mul = 1 var sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset | 0 if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = byteLength - 1 var mul = 1 var sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) } else { objectWriteUInt16(this, value, offset, true) } return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) } else { objectWriteUInt16(this, value, offset, false) } return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) } else { objectWriteUInt32(this, value, offset, true) } return offset + 4 } Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value offset = offset | 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (value < 0) value = 0xffffffff + value + 1 if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) } else { objectWriteUInt32(this, value, offset, false) } return offset + 4 } function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length if (!targetStart) targetStart = 0 if (end > 0 && end < start) end = start // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } var len = end - start var i if (this === target && start < targetStart && targetStart < end) { // descending copy from end for (i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start] } } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { // ascending copy from start for (i = 0; i < len; ++i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, this.subarray(start, start + len), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (val.length === 1) { var code = val.charCodeAt(0) if (code < 256) { val = code } } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } } else if (typeof val === 'number') { val = val & 255 } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 var i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()) var len = bytes.length for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g function base64clean (str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = stringtrim(str).replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' } return str } function stringtrim (str) { if (str.trim) return str.trim() return str.replace(/^\s+|\s+$/g, '') } function toHex (n) { if (n < 16) return '0' + n.toString(16) return n.toString(16) } function utf8ToBytes (string, units) { units = units || Infinity var codePoint var length = string.length var leadSurrogate = null var bytes = [] for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } // valid lead leadSurrogate = codePoint continue } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) leadSurrogate = codePoint continue } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } leadSurrogate = null // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break bytes.push(codePoint) } else if (codePoint < 0x800) { if ((units -= 2) < 0) break bytes.push( codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break bytes.push( codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break bytes.push( codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else { throw new Error('Invalid code point') } } return bytes } function asciiToBytes (str) { var byteArray = [] for (var i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF) } return byteArray } function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } function blitBuffer (src, dst, offset, length) { for (var i = 0; i < length; ++i) { if ((i + offset >= dst.length) || (i >= src.length)) break dst[i + offset] = src[i] } return i } function isnan (val) { return val !== val // eslint-disable-line no-self-compare } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(41))) /***/ }), /* 182 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } // Support decoding URL-safe base64 strings, as Node.js does. // See: https://en.wikipedia.org/wiki/Base64#URL_applications revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function getLens (b64) { var len = b64.length if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } // Trim off extra bytes after placeholder bytes are found // See: https://github.com/beatgammit/base64-js/issues/42 var validLen = b64.indexOf('=') if (validLen === -1) validLen = len var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4) return [validLen, placeHoldersLen] } // base64 is 4/3 + up to two characters of the original data function byteLength (b64) { var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function _byteLength (b64, validLen, placeHoldersLen) { return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function toByteArray (b64) { var tmp var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) var curByte = 0 // if there are placeholders, only get up to the last complete 4 chars var len = placeHoldersLen > 0 ? validLen - 4 : validLen var i for (i = 0; i < len; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[curByte++] = (tmp >> 16) & 0xFF arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk( uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) )) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] parts.push( lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3F] + '==' ) } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + uint8[len - 1] parts.push( lookup[tmp >> 10] + lookup[(tmp >> 4) & 0x3F] + lookup[(tmp << 2) & 0x3F] + '=' ) } return parts.join('') } /***/ }), /* 183 */ /***/ (function(module, exports) { exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var nBits = -7 var i = isLE ? (nBytes - 1) : 0 var d = isLE ? -1 : 1 var s = buffer[offset + i] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} if (e === 0) { e = 1 - eBias } else if (e === eMax) { return m ? NaN : ((s ? -1 : 1) * Infinity) } else { m = m + Math.pow(2, mLen) e = e - eBias } return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { var e, m, c var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) var i = isLE ? 0 : (nBytes - 1) var d = isLE ? 1 : -1 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 value = Math.abs(value) if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0 e = eMax } else { e = Math.floor(Math.log(value) / Math.LN2) if (value * (c = Math.pow(2, -e)) < 1) { e-- c *= 2 } if (e + eBias >= 1) { value += rt / c } else { value += rt * Math.pow(2, 1 - eBias) } if (value * c >= 2) { e++ c /= 2 } if (e + eBias >= eMax) { m = 0 e = eMax } else if (e + eBias >= 1) { m = ((value * c) - 1) * Math.pow(2, mLen) e = e + eBias } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) e = 0 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } /***/ }), /* 184 */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; /***/ }), /* 185 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, "BarcodeDecoder", function() { return /* reexport */ barcode_decoder; }); __webpack_require__.d(__webpack_exports__, "Readers", function() { return /* reexport */ reader_namespaceObject; }); __webpack_require__.d(__webpack_exports__, "CameraAccess", function() { return /* reexport */ camera_access; }); __webpack_require__.d(__webpack_exports__, "ImageDebug", function() { return /* reexport */ image_debug; }); __webpack_require__.d(__webpack_exports__, "ImageWrapper", function() { return /* reexport */ image_wrapper; }); __webpack_require__.d(__webpack_exports__, "ResultCollector", function() { return /* reexport */ result_collector; }); // NAMESPACE OBJECT: ./src/reader/index.ts var reader_namespaceObject = {}; __webpack_require__.r(reader_namespaceObject); __webpack_require__.d(reader_namespaceObject, "BarcodeReader", function() { return barcode_reader; }); __webpack_require__.d(reader_namespaceObject, "TwoOfFiveReader", function() { return _2of5_reader; }); __webpack_require__.d(reader_namespaceObject, "NewCodabarReader", function() { return codabar_reader; }); __webpack_require__.d(reader_namespaceObject, "Code128Reader", function() { return code_128_reader; }); __webpack_require__.d(reader_namespaceObject, "Code32Reader", function() { return code_32_reader; }); __webpack_require__.d(reader_namespaceObject, "Code39Reader", function() { return code_39_reader; }); __webpack_require__.d(reader_namespaceObject, "Code39VINReader", function() { return code_39_vin_reader; }); __webpack_require__.d(reader_namespaceObject, "Code93Reader", function() { return code_93_reader; }); __webpack_require__.d(reader_namespaceObject, "EAN2Reader", function() { return ean_2_reader; }); __webpack_require__.d(reader_namespaceObject, "EAN5Reader", function() { return ean_5_reader; }); __webpack_require__.d(reader_namespaceObject, "EAN8Reader", function() { return ean_8_reader; }); __webpack_require__.d(reader_namespaceObject, "EANReader", function() { return ean_reader; }); __webpack_require__.d(reader_namespaceObject, "I2of5Reader", function() { return i2of5_reader; }); __webpack_require__.d(reader_namespaceObject, "UPCEReader", function() { return upc_e_reader; }); __webpack_require__.d(reader_namespaceObject, "UPCReader", function() { return upc_reader; }); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js var helpers_typeof = __webpack_require__(11); var typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof); // EXTERNAL MODULE: ./node_modules/lodash/merge.js var merge = __webpack_require__(15); var merge_default = /*#__PURE__*/__webpack_require__.n(merge); // EXTERNAL MODULE: ./src/common/typedefs.js var typedefs = __webpack_require__(141); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/slicedToArray.js var slicedToArray = __webpack_require__(28); var slicedToArray_default = /*#__PURE__*/__webpack_require__.n(slicedToArray); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/classCallCheck.js var classCallCheck = __webpack_require__(2); var classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/createClass.js var createClass = __webpack_require__(3); var createClass_default = /*#__PURE__*/__webpack_require__.n(createClass); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/defineProperty.js var defineProperty = __webpack_require__(0); var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty); // EXTERNAL MODULE: ./node_modules/gl-matrix/esm/index.js + 4 modules var esm = __webpack_require__(4); // EXTERNAL MODULE: ./src/common/array_helper.ts var array_helper = __webpack_require__(8); // EXTERNAL MODULE: ./src/common/cv_utils.js + 1 modules var cv_utils = __webpack_require__(10); // CONCATENATED MODULE: ./src/common/image_wrapper.ts function assertNumberPositive(val) { if (val < 0) { throw new Error("expected positive number, received ".concat(val)); } } var image_wrapper_ImageWrapper = /*#__PURE__*/function () { // Represents a basic image combining the data and size. In addition, some methods for // manipulation are contained within. function ImageWrapper(size, data) { var ArrayType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Uint8Array; var initialize = arguments.length > 3 ? arguments[3] : undefined; classCallCheck_default()(this, ImageWrapper); defineProperty_default()(this, "data", void 0); defineProperty_default()(this, "size", void 0); defineProperty_default()(this, "indexMapping", void 0); if (!data) { this.data = new ArrayType(size.x * size.y); if (initialize) { array_helper["a" /* default */].init(this.data, 0); } } else { this.data = data; } this.size = size; } // tests if a position is within the image, extended out by a border on each side return createClass_default()(ImageWrapper, [{ key: "inImageWithBorder", value: function inImageWithBorder(imgRef) { var border = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; assertNumberPositive(border); return imgRef.x >= 0 && imgRef.y >= 0 && imgRef.x < this.size.x + border * 2 && imgRef.y < this.size.y + border * 2; } // Copy from THIS ImageWrapper to the new imageWrapper parameter, starting at from, stopping at // end of new imageWrapper size. }, { key: "subImageAsCopy", value: function subImageAsCopy(imageWrapper, from) { assertNumberPositive(from.x); assertNumberPositive(from.y); var _imageWrapper$size = imageWrapper.size, sizeX = _imageWrapper$size.x, sizeY = _imageWrapper$size.y; for (var x = 0; x < sizeX; x++) { for (var y = 0; y < sizeY; y++) { // eslint-disable-next-line no-param-reassign imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x]; } } return imageWrapper; // TODO: this function really probably should call into ImageWrapper somewhere to make // sure that all of it's parameters are set properly, something like // ImageWrapper.UpdateFrom() // that might take a provided data and size, and make sure there's no invalid indexMapping // hanging around, and such. } // Retrieve a grayscale value at the given pixel position of the image }, { key: "get", value: function get(x, y) { return this.data[y * this.size.x + x]; } // Retrieve a grayscale value at the given pixel position of the image (safe, whatever that // means) }, { key: "getSafe", value: function getSafe(x, y) { // cache indexMapping because if we're using it once, we'll probably need it a bunch more // too if (!this.indexMapping) { this.indexMapping = { x: [], y: [] }; for (var i = 0; i < this.size.x; i++) { this.indexMapping.x[i] = i; this.indexMapping.x[i + this.size.x] = i; } for (var _i = 0; _i < this.size.y; _i++) { this.indexMapping.y[_i] = _i; this.indexMapping.y[_i + this.size.y] = _i; } } return this.data[this.indexMapping.y[y + this.size.y] * this.size.x + this.indexMapping.x[x + this.size.x]]; } // Sets a given pixel position in the image to the given grayscale value }, { key: "set", value: function set(x, y, value) { this.data[y * this.size.x + x] = value; delete this.indexMapping; return this; } // Sets the border of the image (1 pixel) to zero }, { key: "zeroBorder", value: function zeroBorder() { var _this$size = this.size, width = _this$size.x, height = _this$size.y; for (var i = 0; i < width; i++) { // eslint-disable-next-line no-multi-assign this.data[i] = this.data[(height - 1) * width + i] = 0; } for (var _i2 = 1; _i2 < height - 1; _i2++) { // eslint-disable-next-line no-multi-assign this.data[_i2 * width] = this.data[_i2 * width + (width - 1)] = 0; } delete this.indexMapping; return this; } // TODO: this function is entirely too large for me to reason out right at this moment that i'm handling // all the rest of it, so this is a verbatim copy of the javascript source, with only tweaks // necessary to get it to run, no thought put into it yet. }, { key: "moments", value: function moments(labelCount) { var data = this.data; var x; var y; var height = this.size.y; var width = this.size.x; var val; var ysq; var labelSum = []; var i; var label; var mu11; var mu02; var mu20; var x_; var y_; var tmp; var result = []; var PI = Math.PI; var PI_4 = PI / 4; if (labelCount <= 0) { return result; } for (i = 0; i < labelCount; i++) { labelSum[i] = { m00: 0, m01: 0, m10: 0, m11: 0, m02: 0, m20: 0, theta: 0, rad: 0 }; } for (y = 0; y < height; y++) { ysq = y * y; for (x = 0; x < width; x++) { val = data[y * width + x]; if (val > 0) { label = labelSum[val - 1]; label.m00 += 1; label.m01 += y; label.m10 += x; label.m11 += x * y; label.m02 += ysq; label.m20 += x * x; } } } for (i = 0; i < labelCount; i++) { label = labelSum[i]; // eslint-disable-next-line no-restricted-globals if (!isNaN(label.m00) && label.m00 !== 0) { x_ = label.m10 / label.m00; y_ = label.m01 / label.m00; mu11 = label.m11 / label.m00 - x_ * y_; mu02 = label.m02 / label.m00 - y_ * y_; mu20 = label.m20 / label.m00 - x_ * x_; tmp = (mu02 - mu20) / (2 * mu11); tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4) + PI; // eslint-disable-next-line no-mixed-operators label.theta = (tmp * 180 / PI + 90) % 180 - 90; if (label.theta < 0) { label.theta += 180; } label.rad = tmp > PI ? tmp - PI : tmp; label.vec = esm["b" /* vec2 */].clone([Math.cos(tmp), Math.sin(tmp)]); result.push(label); } } return result; } // return a Uint8ClampedArray containing this grayscale image converted to RGBA form }, { key: "getAsRGBA", value: function getAsRGBA() { var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1.0; var ret = new Uint8ClampedArray(4 * this.size.x * this.size.y); for (var y = 0; y < this.size.y; y++) { for (var x = 0; x < this.size.x; x++) { var pixel = y * this.size.x + x; var current = this.get(x, y) * scale; ret[pixel * 4 + 0] = current; ret[pixel * 4 + 1] = current; ret[pixel * 4 + 2] = current; ret[pixel * 4 + 3] = 255; } } return ret; } // Display this ImageWrapper in a given Canvas element at the specified scale }, { key: "show", value: function show(canvas) { var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.0; console.warn('* imagewrapper show getcontext 2d'); var ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('Unable to get canvas context'); } var frame = ctx.getImageData(0, 0, canvas.width, canvas.height); var data = this.getAsRGBA(scale); // eslint-disable-next-line no-param-reassign canvas.width = this.size.x; // eslint-disable-next-line no-param-reassign canvas.height = this.size.y; var newFrame = new ImageData(data, frame.width, frame.height); ctx.putImageData(newFrame, 0, 0); } // Displays a specified SubImage area in a given canvas. This differs drastically from // creating a new SubImage and using it's show() method. Why? I don't have the answer to that // yet. I suspect the HSV/RGB operations involved here are making it significantly different, // but until I can visualize these functions side by side, I'm just going to copy the existing // implementation. }, { key: "overlay", value: function overlay(canvas, inScale, from) { var adjustedScale = inScale < 0 || inScale > 360 ? 360 : inScale; var hsv = [0, 1, 1]; var rgb = [0, 0, 0]; var whiteRgb = [255, 255, 255]; var blackRgb = [0, 0, 0]; var result = []; console.warn('* imagewrapper overlay getcontext 2d'); var ctx = canvas.getContext('2d'); if (!ctx) { throw new Error('Unable to get canvas context'); } var frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y); var data = frame.data; var length = this.data.length; while (length--) { hsv[0] = this.data[length] * adjustedScale; // eslint-disable-next-line no-nested-ternary result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : Object(cv_utils["hsv2rgb"])(hsv, rgb); var pos = length * 4; var _result = result; var _result2 = slicedToArray_default()(_result, 3); data[pos] = _result2[0]; data[pos + 1] = _result2[1]; data[pos + 2] = _result2[2]; data[pos + 3] = 255; } ctx.putImageData(frame, from.x, from.y); } }]); }(); /* harmony default export */ var image_wrapper = (image_wrapper_ImageWrapper); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/asyncToGenerator.js var asyncToGenerator = __webpack_require__(9); var asyncToGenerator_default = /*#__PURE__*/__webpack_require__.n(asyncToGenerator); // EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js var regenerator = __webpack_require__(7); var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator); // CONCATENATED MODULE: ./src/common/image_debug.ts // TODO: XYPosition should be an XYObject, but that breaks XYDefinition, which breaks drawPath() below. // XYDefinition tells us which component of a given array or object is the "X" and which is the "Y". // Usually this is 0 for X and 1 for Y, but might be used as 'x' for x and 'y' for Y. /* harmony default export */ var image_debug = ({ drawRect: function drawRect(pos, size, ctx, style) { ctx.strokeStyle = style.color; ctx.fillStyle = style.color; ctx.lineWidth = style.lineWidth || 1; ctx.beginPath(); ctx.strokeRect(pos.x, pos.y, size.x, size.y); }, drawPath: function drawPath(path, def, ctx, style) { ctx.strokeStyle = style.color; ctx.fillStyle = style.color; ctx.lineWidth = style.lineWidth; ctx.beginPath(); ctx.moveTo(path[0][def.x], path[0][def.y]); for (var j = 1; j < path.length; j++) { ctx.lineTo(path[j][def.x], path[j][def.y]); } ctx.closePath(); ctx.stroke(); }, drawImage: function drawImage(imageData, size, ctx) { var canvasData = ctx.getImageData(0, 0, size.x, size.y); var data = canvasData.data; var canvasDataPos = data.length; var imageDataPos = imageData.length; if (canvasDataPos / imageDataPos !== 4) { return false; } while (imageDataPos--) { var value = imageData[imageDataPos]; data[--canvasDataPos] = 255; data[--canvasDataPos] = value; data[--canvasDataPos] = value; data[--canvasDataPos] = value; } ctx.putImageData(canvasData, 0, 0); return true; } }); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js var possibleConstructorReturn = __webpack_require__(5); var possibleConstructorReturn_default = /*#__PURE__*/__webpack_require__.n(possibleConstructorReturn); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/getPrototypeOf.js var getPrototypeOf = __webpack_require__(1); var getPrototypeOf_default = /*#__PURE__*/__webpack_require__.n(getPrototypeOf); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/inherits.js var inherits = __webpack_require__(6); var inherits_default = /*#__PURE__*/__webpack_require__.n(inherits); // CONCATENATED MODULE: ./src/reader/barcode_reader.ts /* eslint-disable no-unused-vars */ /* eslint-disable class-methods-use-this */ // eslint-disable-next-line import/no-cycle // for some reason this throws a shadow error on itself?! // eslint-disable-next-line no-shadow var BarcodeDirection = /*#__PURE__*/function (BarcodeDirection) { BarcodeDirection[BarcodeDirection["Forward"] = 1] = "Forward"; BarcodeDirection[BarcodeDirection["Reverse"] = -1] = "Reverse"; return BarcodeDirection; }({}); var barcode_reader_BarcodeReader = /*#__PURE__*/function () { function BarcodeReader(config, supplements) { classCallCheck_default()(this, BarcodeReader); defineProperty_default()(this, "_row", []); defineProperty_default()(this, "config", {}); defineProperty_default()(this, "supplements", []); defineProperty_default()(this, "SINGLE_CODE_ERROR", 0); defineProperty_default()(this, "FORMAT", 'unknown'); defineProperty_default()(this, "CONFIG_KEYS", {}); this._row = []; this.config = config || {}; if (supplements) { this.supplements = supplements; } } return createClass_default()(BarcodeReader, [{ key: "_nextUnset", value: function _nextUnset(line) { var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; for (var i = start; i < line.length; i++) { if (!line[i]) return i; } return line.length; } }, { key: "_matchPattern", value: function _matchPattern(counter, code) { var maxSingleError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.SINGLE_CODE_ERROR || 1; var error = 0; var singleError = 0; var sum = 0; var modulo = 0; var barWidth = 0; var count = 0; var scaled = 0; for (var i = 0; i < counter.length; i++) { sum += counter[i]; modulo += code[i]; } if (sum < modulo) { return Number.MAX_VALUE; } barWidth = sum / modulo; // eslint-disable-next-line no-param-reassign maxSingleError *= barWidth; for (var _i = 0; _i < counter.length; _i++) { count = counter[_i]; scaled = code[_i] * barWidth; singleError = Math.abs(count - scaled) / scaled; if (singleError > maxSingleError) { return Number.MAX_VALUE; } error += singleError; } return error / modulo; } }, { key: "_nextSet", value: function _nextSet(line) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; for (var i = offset; i < line.length; i++) { if (line[i]) return i; } return line.length; } }, { key: "_correctBars", value: function _correctBars(counter, correction, indices) { var length = indices.length; var tmp = 0; while (length--) { tmp = counter[indices[length]] * (1 - (1 - correction) / 2); if (tmp > 1) { // eslint-disable-next-line no-param-reassign counter[indices[length]] = tmp; } } } }, { key: "decodePattern", value: function decodePattern(pattern) { // console.warn('* decodePattern', pattern); this._row = pattern; // console.warn('* decodePattern calling decode', typeof this, this.constructor, this.FORMAT, JSON.stringify(this)); var result = this.decode(); // console.warn('* first result=', result); if (result === null) { this._row.reverse(); result = this.decode(); // console.warn('* reversed result=', result); if (result) { result.direction = BarcodeDirection.Reverse; result.start = this._row.length - result.start; result.end = this._row.length - result.end; } } else { result.direction = BarcodeDirection.Forward; } if (result) { result.format = this.FORMAT; } // console.warn('* returning', result); return result; } }, { key: "_matchRange", value: function _matchRange(start, end, value) { // eslint-disable-next-line no-param-reassign start = start < 0 ? 0 : start; var i; for (i = start; i < end; i++) { if (this._row[i] !== value) { return false; } } return true; } }, { key: "_fillCounters", value: function _fillCounters() { var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._nextUnset(this._row); var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._row.length; var isWhite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var counters = []; var counterPos = 0; counters[counterPos] = 0; for (var i = offset; i < end; i++) { // eslint-disable-next-line no-bitwise if (this._row[i] ^ (isWhite ? 1 : 0)) { counters[counterPos]++; } else { counterPos++; counters[counterPos] = 1; // eslint-disable-next-line no-param-reassign isWhite = !isWhite; } } return counters; } }, { key: "_toCounters", value: function _toCounters(start, counters) { var numCounters = counters.length; var end = this._row.length; var isWhite = !this._row[start]; var counterPos = 0; array_helper["a" /* default */].init(counters, 0); for (var i = start; i < end; i++) { // eslint-disable-next-line no-bitwise if (this._row[i] ^ (isWhite ? 1 : 0)) { // eslint-disable-next-line no-param-reassign counters[counterPos]++; } else { counterPos++; if (counterPos === numCounters) { break; } else { // eslint-disable-next-line no-param-reassign counters[counterPos] = 1; isWhite = !isWhite; } } } return counters; } // override/implement this in your custom readers. }, { key: "decodeImage", value: function decodeImage(imageWrapper) { // eslint-disable-next-line no-void void imageWrapper; return null; } }], [{ key: "Exception", get: function get() { return { StartNotFoundException: 'Start-Info was not found!', CodeNotFoundException: 'Code could not be found!', PatternNotFoundException: 'Pattern could not be found!' }; } }]); }(); /* harmony default export */ var barcode_reader = (barcode_reader_BarcodeReader); // CONCATENATED MODULE: ./src/reader/2of5_reader.ts function _callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var N = 1; var W = 3; var START_PATTERN = [W, N, W, N, N, N]; var STOP_PATTERN = [W, N, N, N, W]; var CODE_PATTERN = [[N, N, W, W, N], [W, N, N, N, W], [N, W, N, N, W], [W, W, N, N, N], [N, N, W, N, W], [W, N, W, N, N], [N, W, W, N, N], [N, N, N, W, W], [W, N, N, W, N], [N, W, N, W, N]]; var START_PATTERN_LENGTH = START_PATTERN.reduce(function (sum, val) { return sum + val; }, 0); var _2of5_reader_TwoOfFiveReader = /*#__PURE__*/function (_BarcodeReader) { function TwoOfFiveReader() { var _this; classCallCheck_default()(this, TwoOfFiveReader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, TwoOfFiveReader, [].concat(args)); defineProperty_default()(_this, "barSpaceRatio", [1, 1]); defineProperty_default()(_this, "FORMAT", '2of5'); defineProperty_default()(_this, "SINGLE_CODE_ERROR", 0.78); defineProperty_default()(_this, "AVG_CODE_ERROR", 0.30); return _this; } inherits_default()(TwoOfFiveReader, _BarcodeReader); return createClass_default()(TwoOfFiveReader, [{ key: "_findPattern", value: function _findPattern(pattern, offset) { var isWhite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var tryHarder = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var counter = []; var counterPos = 0; var bestMatch = { error: Number.MAX_VALUE, code: -1, start: 0, end: 0 }; var sum = 0; var error = 0; var epsilon = this.AVG_CODE_ERROR; if (!offset) { offset = this._nextSet(this._row); } for (var i = 0; i < pattern.length; i++) { counter[i] = 0; } for (var _i = offset; _i < this._row.length; _i++) { if (this._row[_i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { sum = 0; for (var j = 0; j < counter.length; j++) { sum += counter[j]; } error = this._matchPattern(counter, pattern); if (error < epsilon) { bestMatch.error = error; bestMatch.start = _i - sum; bestMatch.end = _i; return bestMatch; } if (tryHarder) { for (var _j = 0; _j < counter.length - 2; _j++) { counter[_j] = counter[_j + 2]; } counter[counter.length - 2] = 0; counter[counter.length - 1] = 0; counterPos--; } else { return null; } } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "_findStart", value: function _findStart() { var startInfo = null; var offset = this._nextSet(this._row); var narrowBarWidth = 1; var leadingWhitespaceStart = 0; while (!startInfo) { startInfo = this._findPattern(START_PATTERN, offset, false, true); if (!startInfo) { return null; } narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / START_PATTERN_LENGTH); leadingWhitespaceStart = startInfo.start - narrowBarWidth * 5; if (leadingWhitespaceStart >= 0) { if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { return startInfo; } } offset = startInfo.end; startInfo = null; } return startInfo; } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(endInfo) { var trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; if (trailingWhitespaceEnd < this._row.length) { if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { return endInfo; } } return null; } }, { key: "_findEnd", value: function _findEnd() { // TODO: reverse, followed by some calcs, followed by another reverse? really? this._row.reverse(); var offset = this._nextSet(this._row); var endInfo = this._findPattern(STOP_PATTERN, offset, false, true); this._row.reverse(); if (endInfo === null) { return null; } // reverse numbers var tmp = endInfo.start; endInfo.start = this._row.length - endInfo.end; endInfo.end = this._row.length - tmp; return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null; } }, { key: "_verifyCounterLength", value: function _verifyCounterLength(counters) { return counters.length % 10 === 0; } }, { key: "_decodeCode", value: function _decodeCode(counter) { var epsilon = this.AVG_CODE_ERROR; var bestMatch = { error: Number.MAX_VALUE, code: -1, start: 0, end: 0 }; for (var code = 0; code < CODE_PATTERN.length; code++) { var error = this._matchPattern(counter, CODE_PATTERN[code]); if (error < bestMatch.error) { bestMatch.code = code; bestMatch.error = error; } } if (bestMatch.error < epsilon) { return bestMatch; } return null; } }, { key: "_decodePayload", value: function _decodePayload(counters, result, decodedCodes) { var pos = 0; var counterLength = counters.length; var counter = [0, 0, 0, 0, 0]; var code = null; while (pos < counterLength) { for (var i = 0; i < 5; i++) { counter[i] = counters[pos] * this.barSpaceRatio[0]; pos += 2; } code = this._decodeCode(counter); if (!code) { return null; } result.push("".concat(code.code)); decodedCodes.push(code); } return code; } }, { key: "decode", value: function decode(row, start) { var startInfo = this._findStart(); if (!startInfo) { return null; } var endInfo = this._findEnd(); if (!endInfo) { return null; } var counters = this._fillCounters(startInfo.end, endInfo.start, false); if (!this._verifyCounterLength(counters)) { return null; } var decodedCodes = []; decodedCodes.push(startInfo); var result = []; var code = this._decodePayload(counters, result, decodedCodes); if (!code) { return null; } if (result.length < 5) { return null; } decodedCodes.push(endInfo); return { code: result.join(''), start: startInfo.start, end: endInfo.end, startInfo: startInfo, decodedCodes: decodedCodes, format: this.FORMAT }; } }]); }(barcode_reader); /* harmony default export */ var _2of5_reader = (_2of5_reader_TwoOfFiveReader); // CONCATENATED MODULE: ./src/reader/codabar_reader.ts function codabar_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, codabar_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function codabar_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (codabar_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // const ALPHABETH_STRING = '0123456789-$:/.+ABCD'; var ALPHABET = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68]; var CHARACTER_ENCODINGS = [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E]; var START_END = [0x01A, 0x029, 0x00B, 0x00E]; var MIN_ENCODED_CHARS = 4; var MAX_ACCEPTABLE = 2.0; var PADDING = 1.5; ; ; var codabar_reader_NewCodabarReader = /*#__PURE__*/function (_BarcodeReader) { function NewCodabarReader() { var _this; classCallCheck_default()(this, NewCodabarReader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = codabar_reader_callSuper(this, NewCodabarReader, [].concat(args)); defineProperty_default()(_this, "_counters", []); defineProperty_default()(_this, "FORMAT", 'codabar'); return _this; } inherits_default()(NewCodabarReader, _BarcodeReader); return createClass_default()(NewCodabarReader, [{ key: "_computeAlternatingThreshold", value: function _computeAlternatingThreshold(offset, end) { var min = Number.MAX_VALUE; var max = 0; var counter = 0; for (var i = offset; i < end; i += 2) { counter = this._counters[i]; if (counter > max) { max = counter; } if (counter < min) { min = counter; } } return (min + max) / 2.0 | 0; } }, { key: "_toPattern", value: function _toPattern(offset) { var numCounters = 7; var end = offset + numCounters; if (end > this._counters.length) { return -1; } var barThreshold = this._computeAlternatingThreshold(offset, end); var spaceThreshold = this._computeAlternatingThreshold(offset + 1, end); var bitmask = 1 << numCounters - 1; var threshold = 0; var pattern = 0; for (var i = 0; i < numCounters; i++) { threshold = (i & 1) === 0 ? barThreshold : spaceThreshold; if (this._counters[offset + i] > threshold) { pattern |= bitmask; } bitmask >>= 1; } return pattern; } }, { key: "_isStartEnd", value: function _isStartEnd(pattern) { for (var i = 0; i < START_END.length; i++) { if (START_END[i] === pattern) { return true; } } return false; } }, { key: "_sumCounters", value: function _sumCounters(start, end) { var sum = 0; for (var i = start; i < end; i++) { sum += this._counters[i]; } return sum; } }, { key: "_findStart", value: function _findStart() { var start = this._nextUnset(this._row); var end = start; for (var i = 1; i < this._counters.length; i++) { var pattern = this._toPattern(i); if (pattern !== -1 && this._isStartEnd(pattern)) { // TODO: Look for whitespace ahead start += this._sumCounters(0, i); end = start + this._sumCounters(i, i + 8); return { start: start, end: end, startCounter: i, endCounter: i + 8 }; } } return null; } }, { key: "_patternToChar", value: function _patternToChar(pattern) { for (var i = 0; i < CHARACTER_ENCODINGS.length; i++) { if (CHARACTER_ENCODINGS[i] === pattern) { return String.fromCharCode(ALPHABET[i]); } } return null; } }, { key: "_calculatePatternLength", value: function _calculatePatternLength(offset) { var sum = 0; for (var i = offset; i < offset + 7; i++) { sum += this._counters[i]; } return sum; } }, { key: "_verifyWhitespace", value: function _verifyWhitespace(startCounter, endCounter) { if (startCounter - 1 <= 0 || this._counters[startCounter - 1] >= this._calculatePatternLength(startCounter) / 2.0) { if (endCounter + 8 >= this._counters.length || this._counters[endCounter + 7] >= this._calculatePatternLength(endCounter) / 2.0) { return true; } } return false; } }, { key: "_charToPattern", value: function _charToPattern(_char) { var charCode = _char.charCodeAt(0); for (var i = 0; i < ALPHABET.length; i++) { if (ALPHABET[i] === charCode) { return CHARACTER_ENCODINGS[i]; } } return 0x0; } }, { key: "_thresholdResultPattern", value: function _thresholdResultPattern(result, startCounter) { var categorization = { space: { narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } }, bar: { narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } } }; var pos = startCounter; var pattern; for (var i = 0; i < result.length; i++) { pattern = this._charToPattern(result[i]); for (var j = 6; j >= 0; j--) { var kind = (j & 1) === 2 ? categorization.bar : categorization.space; var cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; cat.size += this._counters[pos + j]; cat.counts++; pattern >>= 1; } pos += 8; } ['space', 'bar'].forEach(function (key) { var newkind = categorization[key]; newkind.wide.min = Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2); newkind.narrow.max = Math.ceil(newkind.wide.min); newkind.wide.max = Math.ceil((newkind.wide.size * MAX_ACCEPTABLE + PADDING) / newkind.wide.counts); }); return categorization; } }, { key: "_validateResult", value: function _validateResult(result, startCounter) { var thresholds = this._thresholdResultPattern(result, startCounter); var pos = startCounter; var pattern; for (var i = 0; i < result.length; i++) { pattern = this._charToPattern(result[i]); for (var j = 6; j >= 0; j--) { var kind = (j & 1) === 0 ? thresholds.bar : thresholds.space; var cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; var size = this._counters[pos + j]; if (size < cat.min || size > cat.max) { return false; } pattern >>= 1; } pos += 8; } return true; } }, { key: "decode", value: function decode(row, start) { this._counters = this._fillCounters(); start = this._findStart(); if (!start) { return null; } var nextStart = start.startCounter; var result = []; var pattern; do { pattern = this._toPattern(nextStart); if (pattern < 0) { return null; } var decodedChar = this._patternToChar(pattern); if (decodedChar === null) { return null; } result.push(decodedChar); nextStart += 8; if (result.length > 1 && this._isStartEnd(pattern)) { break; } } while (nextStart < this._counters.length); // verify end if (result.length - 2 < MIN_ENCODED_CHARS || !this._isStartEnd(pattern)) { return null; } // verify end white space if (!this._verifyWhitespace(start.startCounter, nextStart - 8)) { return null; } if (!this._validateResult(result, start.startCounter)) { return null; } nextStart = nextStart > this._counters.length ? this._counters.length : nextStart; var end = start.start + this._sumCounters(start.startCounter, nextStart - 8); return { code: result.join(''), start: start.start, end: end, startInfo: start, decodedCodes: result, format: this.FORMAT // TODO: i think it should not be required to return format from this, as barcode_reader force sets the format anyway }; } }]); }(barcode_reader); /* harmony default export */ var codabar_reader = (codabar_reader_NewCodabarReader); // CONCATENATED MODULE: ./src/reader/code_128_reader.ts function code_128_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, code_128_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function code_128_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (code_128_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var code_128_reader_Code128Reader = /*#__PURE__*/function (_BarcodeReader) { function Code128Reader() { var _this; classCallCheck_default()(this, Code128Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = code_128_reader_callSuper(this, Code128Reader, [].concat(args)); defineProperty_default()(_this, "CODE_SHIFT", 98); defineProperty_default()(_this, "CODE_C", 99); defineProperty_default()(_this, "CODE_B", 100); defineProperty_default()(_this, "CODE_A", 101); defineProperty_default()(_this, "START_CODE_A", 103); defineProperty_default()(_this, "START_CODE_B", 104); defineProperty_default()(_this, "START_CODE_C", 105); defineProperty_default()(_this, "STOP_CODE", 106); defineProperty_default()(_this, "CODE_PATTERN", [[2, 1, 2, 2, 2, 2], [2, 2, 2, 1, 2, 2], [2, 2, 2, 2, 2, 1], [1, 2, 1, 2, 2, 3], [1, 2, 1, 3, 2, 2], [1, 3, 1, 2, 2, 2], [1, 2, 2, 2, 1, 3], [1, 2, 2, 3, 1, 2], [1, 3, 2, 2, 1, 2], [2, 2, 1, 2, 1, 3], [2, 2, 1, 3, 1, 2], [2, 3, 1, 2, 1, 2], [1, 1, 2, 2, 3, 2], [1, 2, 2, 1, 3, 2], [1, 2, 2, 2, 3, 1], [1, 1, 3, 2, 2, 2], [1, 2, 3, 1, 2, 2], [1, 2, 3, 2, 2, 1], [2, 2, 3, 2, 1, 1], [2, 2, 1, 1, 3, 2], [2, 2, 1, 2, 3, 1], [2, 1, 3, 2, 1, 2], [2, 2, 3, 1, 1, 2], [3, 1, 2, 1, 3, 1], [3, 1, 1, 2, 2, 2], [3, 2, 1, 1, 2, 2], [3, 2, 1, 2, 2, 1], [3, 1, 2, 2, 1, 2], [3, 2, 2, 1, 1, 2], [3, 2, 2, 2, 1, 1], [2, 1, 2, 1, 2, 3], [2, 1, 2, 3, 2, 1], [2, 3, 2, 1, 2, 1], [1, 1, 1, 3, 2, 3], [1, 3, 1, 1, 2, 3], [1, 3, 1, 3, 2, 1], [1, 1, 2, 3, 1, 3], [1, 3, 2, 1, 1, 3], [1, 3, 2, 3, 1, 1], [2, 1, 1, 3, 1, 3], [2, 3, 1, 1, 1, 3], [2, 3, 1, 3, 1, 1], [1, 1, 2, 1, 3, 3], [1, 1, 2, 3, 3, 1], [1, 3, 2, 1, 3, 1], [1, 1, 3, 1, 2, 3], [1, 1, 3, 3, 2, 1], [1, 3, 3, 1, 2, 1], [3, 1, 3, 1, 2, 1], [2, 1, 1, 3, 3, 1], [2, 3, 1, 1, 3, 1], [2, 1, 3, 1, 1, 3], [2, 1, 3, 3, 1, 1], [2, 1, 3, 1, 3, 1], [3, 1, 1, 1, 2, 3], [3, 1, 1, 3, 2, 1], [3, 3, 1, 1, 2, 1], [3, 1, 2, 1, 1, 3], [3, 1, 2, 3, 1, 1], [3, 3, 2, 1, 1, 1], [3, 1, 4, 1, 1, 1], [2, 2, 1, 4, 1, 1], [4, 3, 1, 1, 1, 1], [1, 1, 1, 2, 2, 4], [1, 1, 1, 4, 2, 2], [1, 2, 1, 1, 2, 4], [1, 2, 1, 4, 2, 1], [1, 4, 1, 1, 2, 2], [1, 4, 1, 2, 2, 1], [1, 1, 2, 2, 1, 4], [1, 1, 2, 4, 1, 2], [1, 2, 2, 1, 1, 4], [1, 2, 2, 4, 1, 1], [1, 4, 2, 1, 1, 2], [1, 4, 2, 2, 1, 1], [2, 4, 1, 2, 1, 1], [2, 2, 1, 1, 1, 4], [4, 1, 3, 1, 1, 1], [2, 4, 1, 1, 1, 2], [1, 3, 4, 1, 1, 1], [1, 1, 1, 2, 4, 2], [1, 2, 1, 1, 4, 2], [1, 2, 1, 2, 4, 1], [1, 1, 4, 2, 1, 2], [1, 2, 4, 1, 1, 2], [1, 2, 4, 2, 1, 1], [4, 1, 1, 2, 1, 2], [4, 2, 1, 1, 1, 2], [4, 2, 1, 2, 1, 1], [2, 1, 2, 1, 4, 1], [2, 1, 4, 1, 2, 1], [4, 1, 2, 1, 2, 1], [1, 1, 1, 1, 4, 3], [1, 1, 1, 3, 4, 1], [1, 3, 1, 1, 4, 1], [1, 1, 4, 1, 1, 3], [1, 1, 4, 3, 1, 1], [4, 1, 1, 1, 1, 3], [4, 1, 1, 3, 1, 1], [1, 1, 3, 1, 4, 1], [1, 1, 4, 1, 3, 1], [3, 1, 1, 1, 4, 1], [4, 1, 1, 1, 3, 1], [2, 1, 1, 4, 1, 2], [2, 1, 1, 2, 1, 4], [2, 1, 1, 2, 3, 2], [2, 3, 3, 1, 1, 1, 2]]); defineProperty_default()(_this, "SINGLE_CODE_ERROR", 0.64); defineProperty_default()(_this, "AVG_CODE_ERROR", 0.30); defineProperty_default()(_this, "FORMAT", 'code_128'); defineProperty_default()(_this, "MODULE_INDICES", { bar: [0, 2, 4], space: [1, 3, 5] }); return _this; } inherits_default()(Code128Reader, _BarcodeReader); return createClass_default()(Code128Reader, [{ key: "_decodeCode", value: function _decodeCode(start, correction) { var bestMatch = { error: Number.MAX_VALUE, code: -1, start: start, end: start, correction: { bar: 1, space: 1 } }; var counter = [0, 0, 0, 0, 0, 0]; var offset = start; var isWhite = !this._row[offset]; var counterPos = 0; for (var i = offset; i < this._row.length; i++) { if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { if (correction) { this._correct(counter, correction); } for (var code = 0; code < this.CODE_PATTERN.length; code++) { var error = this._matchPattern(counter, this.CODE_PATTERN[code]); if (error < bestMatch.error) { bestMatch.code = code; bestMatch.error = error; } } bestMatch.end = i; if (bestMatch.code === -1 || bestMatch.error > this.AVG_CODE_ERROR) { return null; } if (this.CODE_PATTERN[bestMatch.code]) { bestMatch.correction.bar = this.calculateCorrection(this.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); bestMatch.correction.space = this.calculateCorrection(this.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); } return bestMatch; } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "_correct", value: function _correct(counter, correction) { this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar); this._correctBars(counter, correction.space, this.MODULE_INDICES.space); } }, { key: "_findStart", value: // TODO: _findStart and decodeCode share similar code, can we re-use some? function _findStart() { var counter = [0, 0, 0, 0, 0, 0]; var offset = this._nextSet(this._row); var bestMatch = { error: Number.MAX_VALUE, code: -1, start: 0, end: 0, correction: { bar: 1, space: 1 } }; var isWhite = false; var counterPos = 0; for (var i = offset; i < this._row.length; i++) { if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { var sum = counter.reduce(function (prev, next) { return prev + next; }, 0); for (var code = this.START_CODE_A; code <= this.START_CODE_C; code++) { var error = this._matchPattern(counter, this.CODE_PATTERN[code]); if (error < bestMatch.error) { bestMatch.code = code; bestMatch.error = error; } } if (bestMatch.error < this.AVG_CODE_ERROR) { bestMatch.start = i - sum; bestMatch.end = i; bestMatch.correction.bar = this.calculateCorrection(this.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); bestMatch.correction.space = this.calculateCorrection(this.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); return bestMatch; } for (var j = 0; j < 4; j++) { counter[j] = counter[j + 2]; } counter[4] = 0; counter[5] = 0; counterPos--; } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "decode", value: function decode(row, start) { var _this2 = this; var startInfo = this._findStart(); if (startInfo === null) { return null; } // var self = this, // done = false, // result = [], // multiplier = 0, // checksum = 0, // codeset, // rawResult = [], // decodedCodes = [], // shiftNext = false, // unshift, // removeLastCharacter = true; var code = { code: startInfo.code, start: startInfo.start, end: startInfo.end, correction: { bar: startInfo.correction.bar, space: startInfo.correction.space } }; var decodedCodes = []; decodedCodes.push(code); var checksum = code.code; var codeset = function (c) { switch (c) { case _this2.START_CODE_A: return _this2.CODE_A; case _this2.START_CODE_B: return _this2.CODE_B; case _this2.START_CODE_C: return _this2.CODE_C; default: return null; } }(code.code); var done = false; var shiftNext = false; var unshift = shiftNext; var removeLastCharacter = true; var multiplier = 0; var rawResult = []; var result = []; // TODO: i think this should be string only, but it creates problems if it is while (!done) { unshift = shiftNext; shiftNext = false; code = this._decodeCode(code.end, code.correction); if (code !== null) { if (code.code !== this.STOP_CODE) { removeLastCharacter = true; } if (code.code !== this.STOP_CODE) { rawResult.push(code.code); multiplier++; checksum += multiplier * code.code; } decodedCodes.push(code); switch (codeset) { case this.CODE_A: if (code.code < 64) { result.push(String.fromCharCode(32 + code.code)); } else if (code.code < 96) { result.push(String.fromCharCode(code.code - 64)); } else { if (code.code !== this.STOP_CODE) { removeLastCharacter = false; } switch (code.code) { case this.CODE_SHIFT: shiftNext = true; codeset = this.CODE_B; break; case this.CODE_B: codeset = this.CODE_B; break; case this.CODE_C: codeset = this.CODE_C; break; case this.STOP_CODE: done = true; break; } } break; case this.CODE_B: if (code.code < 96) { result.push(String.fromCharCode(32 + code.code)); } else { if (code.code !== this.STOP_CODE) { removeLastCharacter = false; } switch (code.code) { case this.CODE_SHIFT: shiftNext = true; codeset = this.CODE_A; break; case this.CODE_A: codeset = this.CODE_A; break; case this.CODE_C: codeset = this.CODE_C; break; case this.STOP_CODE: done = true; break; } } break; case this.CODE_C: if (code.code < 100) { result.push(code.code < 10 ? '0' + code.code : code.code); } else { if (code.code !== this.STOP_CODE) { removeLastCharacter = false; } switch (code.code) { case this.CODE_A: codeset = this.CODE_A; break; case this.CODE_B: codeset = this.CODE_B; break; case this.STOP_CODE: done = true; break; } } break; } } else { done = true; } if (unshift) { codeset = codeset === this.CODE_A ? this.CODE_B : this.CODE_A; } } if (code === null) { return null; } code.end = this._nextUnset(this._row, code.end); if (!this._verifyTrailingWhitespace(code)) { return null; } checksum -= multiplier * rawResult[rawResult.length - 1]; if (checksum % 103 !== rawResult[rawResult.length - 1]) { return null; } if (!result.length) { return null; } // remove last code from result (checksum) if (removeLastCharacter) { result.splice(result.length - 1, 1); } return { code: result.join(''), start: startInfo.start, end: code.end, codeset: codeset, startInfo: startInfo, decodedCodes: decodedCodes, endInfo: code, format: this.FORMAT }; } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(endInfo) { var self = this, trailingWhitespaceEnd; trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; if (trailingWhitespaceEnd < self._row.length) { if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { return endInfo; } } return null; } }, { key: "calculateCorrection", value: function calculateCorrection(expected, normalized, indices) { var length = indices.length, sumNormalized = 0, sumExpected = 0; while (length--) { sumExpected += expected[indices[length]]; sumNormalized += normalized[indices[length]]; } return sumExpected / sumNormalized; } }]); }(barcode_reader); /* harmony default export */ var code_128_reader = (code_128_reader_Code128Reader); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/get.js var get = __webpack_require__(13); var get_default = /*#__PURE__*/__webpack_require__.n(get); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/toConsumableArray.js var toConsumableArray = __webpack_require__(29); var toConsumableArray_default = /*#__PURE__*/__webpack_require__.n(toConsumableArray); // CONCATENATED MODULE: ./src/reader/code_39_reader.ts function code_39_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, code_39_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function code_39_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (code_39_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable class-methods-use-this */ var ALPHABETH_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%'; var code_39_reader_ALPHABET = new Uint16Array(toConsumableArray_default()(ALPHABETH_STRING).map(function (_char) { return _char.charCodeAt(0); })); var code_39_reader_CHARACTER_ENCODINGS = new Uint16Array([0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A]); var ASTERISK = 0x094; var code_39_reader_Code39Reader = /*#__PURE__*/function (_BarcodeReader) { function Code39Reader() { var _this; classCallCheck_default()(this, Code39Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = code_39_reader_callSuper(this, Code39Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'code_39'); return _this; } inherits_default()(Code39Reader, _BarcodeReader); return createClass_default()(Code39Reader, [{ key: "_findStart", value: function _findStart() { var offset = this._nextSet(this._row); var patternStart = offset; var counter = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 0]); var counterPos = 0; var isWhite = false; for (var i = offset; i < this._row.length; i++) { // eslint-disable-next-line no-bitwise if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { // find start pattern if (this._toPattern(counter) === ASTERISK) { var whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - (i - patternStart) / 4)); if (this._matchRange(whiteSpaceMustStart, patternStart, 0)) { return { start: patternStart, end: i }; } } patternStart += counter[0] + counter[1]; for (var j = 0; j < 7; j++) { counter[j] = counter[j + 2]; } counter[7] = 0; counter[8] = 0; counterPos--; } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "_toPattern", value: function _toPattern(counters) { var numCounters = counters.length; var maxNarrowWidth = 0; var numWideBars = numCounters; var wideBarWidth = 0; while (numWideBars > 3) { maxNarrowWidth = this._findNextWidth(counters, maxNarrowWidth); numWideBars = 0; var pattern = 0; for (var i = 0; i < numCounters; i++) { if (counters[i] > maxNarrowWidth) { // eslint-disable-next-line no-bitwise pattern |= 1 << numCounters - 1 - i; numWideBars++; wideBarWidth += counters[i]; } } if (numWideBars === 3) { for (var _i = 0; _i < numCounters && numWideBars > 0; _i++) { if (counters[_i] > maxNarrowWidth) { numWideBars--; if (counters[_i] * 2 >= wideBarWidth) { return -1; } } } return pattern; } } return -1; } }, { key: "_findNextWidth", value: function _findNextWidth(counters, current) { var minWidth = Number.MAX_VALUE; for (var i = 0; i < counters.length; i++) { if (counters[i] < minWidth && counters[i] > current) { minWidth = counters[i]; } } return minWidth; } }, { key: "_patternToChar", value: function _patternToChar(pattern) { for (var i = 0; i < code_39_reader_CHARACTER_ENCODINGS.length; i++) { if (code_39_reader_CHARACTER_ENCODINGS[i] === pattern) { return String.fromCharCode(code_39_reader_ALPHABET[i]); } } return null; } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(lastStart, nextStart, counters) { var patternSize = array_helper["a" /* default */].sum(counters); var trailingWhitespaceEnd = nextStart - lastStart - patternSize; if (trailingWhitespaceEnd * 3 >= patternSize) { return true; } return false; } }, { key: "decode", value: function decode() { var counters = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 0]); var result = []; var start = this._findStart(); if (!start) { return null; } var nextStart = this._nextSet(this._row, start.end); var decodedChar; var lastStart; do { counters = this._toCounters(nextStart, counters); var pattern = this._toPattern(counters); if (pattern < 0) { return null; } decodedChar = this._patternToChar(pattern); if (decodedChar === null) { return null; } result.push(decodedChar); lastStart = nextStart; nextStart += array_helper["a" /* default */].sum(counters); nextStart = this._nextSet(this._row, nextStart); } while (decodedChar !== '*'); result.pop(); if (!result.length) { return null; } if (!this._verifyTrailingWhitespace(lastStart, nextStart, counters)) { return null; } return { code: result.join(''), start: start.start, end: nextStart, startInfo: start, decodedCodes: result, format: this.FORMAT }; } }]); }(barcode_reader); /* harmony default export */ var code_39_reader = (code_39_reader_Code39Reader); // CONCATENATED MODULE: ./src/reader/code_32_reader.ts function code_32_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, code_32_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function code_32_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (code_32_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _superPropGet(t, o, e, r) { var p = get_default()(getPrototypeOf_default()(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } var patterns = { AEIO: /[AEIO]/g, AZ09: /[A-Z0-9]/ }; var code32set = '0123456789BCDFGHJKLMNPQRSTUVWXYZ'; var code_32_reader_Code32Reader = /*#__PURE__*/function (_Code39Reader) { function Code32Reader() { var _this; classCallCheck_default()(this, Code32Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = code_32_reader_callSuper(this, Code32Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'code_32_reader'); return _this; } inherits_default()(Code32Reader, _Code39Reader); return createClass_default()(Code32Reader, [{ key: "_decodeCode32", value: function _decodeCode32(code) { if (/[^0-9BCDFGHJKLMNPQRSTUVWXYZ]/.test(code)) { return null; } var res = 0; for (var i = 0; i < code.length; i++) { res = res * 32 + code32set.indexOf(code[i]); } var code32 = "".concat(res); if (code32.length < 9) { code32 = ('000000000' + code32).slice(-9); } return 'A' + code32; } // TODO (this was todo in original repo, no text was there. sorry.) }, { key: "_checkChecksum", value: function _checkChecksum(code) { return !!code; } }, { key: "decode", value: function decode() { var result = _superPropGet(Code32Reader, "decode", this, 3)([]); if (!result) { return null; } var code = result.code; if (!code) { return null; } code = code.replace(patterns.AEIO, ''); if (!this._checkChecksum(code)) { return null; } var code32 = this._decodeCode32(code); if (!code32) { return null; } result.code = code32; return result; } }]); }(code_39_reader); /* harmony default export */ var code_32_reader = (code_32_reader_Code32Reader); // CONCATENATED MODULE: ./src/reader/code_39_vin_reader.ts function code_39_vin_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, code_39_vin_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function code_39_vin_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (code_39_vin_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function code_39_vin_reader_superPropGet(t, o, e, r) { var p = get_default()(getPrototypeOf_default()(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } /* eslint-disable class-methods-use-this */ var code_39_vin_reader_patterns = { IOQ: /[IOQ]/g, AZ09: /[A-Z0-9]{17}/ }; var code_39_vin_reader_Code39VINReader = /*#__PURE__*/function (_Code39Reader) { function Code39VINReader() { var _this; classCallCheck_default()(this, Code39VINReader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = code_39_vin_reader_callSuper(this, Code39VINReader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'code_39_vin'); return _this; } inherits_default()(Code39VINReader, _Code39Reader); return createClass_default()(Code39VINReader, [{ key: "_checkChecksum", value: // TODO (this was todo in original repo, no text was there. sorry.) function _checkChecksum(code) { return !!code; } // Cribbed from: // https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java }, { key: "decode", value: function decode() { var result = code_39_vin_reader_superPropGet(Code39VINReader, "decode", this, 3)([]); if (!result) { return null; } var code = result.code; if (!code) { return null; } code = code.replace(code_39_vin_reader_patterns.IOQ, ''); if (!code.match(code_39_vin_reader_patterns.AZ09)) { if (false) {} return null; } if (!this._checkChecksum(code)) { return null; } result.code = code; return result; } }]); }(code_39_reader); /* harmony default export */ var code_39_vin_reader = (code_39_vin_reader_Code39VINReader); // CONCATENATED MODULE: ./src/reader/code_93_reader.ts function code_93_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, code_93_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function code_93_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (code_93_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var code_93_reader_ALPHABETH_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*'; var code_93_reader_ALPHABET = new Uint16Array(toConsumableArray_default()(code_93_reader_ALPHABETH_STRING).map(function (_char) { return _char.charCodeAt(0); })); var code_93_reader_CHARACTER_ENCODINGS = new Uint16Array([0x114, 0x148, 0x144, 0x142, 0x128, 0x124, 0x122, 0x150, 0x112, 0x10A, 0x1A8, 0x1A4, 0x1A2, 0x194, 0x192, 0x18A, 0x168, 0x164, 0x162, 0x134, 0x11A, 0x158, 0x14C, 0x146, 0x12C, 0x116, 0x1B4, 0x1B2, 0x1AC, 0x1A6, 0x196, 0x19A, 0x16C, 0x166, 0x136, 0x13A, 0x12E, 0x1D4, 0x1D2, 0x1CA, 0x16E, 0x176, 0x1AE, 0x126, 0x1DA, 0x1D6, 0x132, 0x15E]); var code_93_reader_ASTERISK = 0x15E; var code_93_reader_Code93Reader = /*#__PURE__*/function (_BarcodeReader) { function Code93Reader() { var _this; classCallCheck_default()(this, Code93Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = code_93_reader_callSuper(this, Code93Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'code_93'); return _this; } inherits_default()(Code93Reader, _BarcodeReader); return createClass_default()(Code93Reader, [{ key: "_patternToChar", value: function _patternToChar(pattern) { for (var i = 0; i < code_93_reader_CHARACTER_ENCODINGS.length; i++) { if (code_93_reader_CHARACTER_ENCODINGS[i] === pattern) { return String.fromCharCode(code_93_reader_ALPHABET[i]); } } return null; } }, { key: "_toPattern", value: function _toPattern(counters) { var numCounters = counters.length; var sum = counters.reduce(function (prev, next) { return prev + next; }, 0); var pattern = 0; for (var i = 0; i < numCounters; i++) { var normalized = Math.round(counters[i] * 9 / sum); if (normalized < 1 || normalized > 4) { return -1; } if ((i & 1) === 0) { for (var j = 0; j < normalized; j++) { pattern = pattern << 1 | 1; } } else { pattern <<= normalized; } } return pattern; } }, { key: "_findStart", value: function _findStart() { var offset = this._nextSet(this._row); var patternStart = offset; var counter = new Uint16Array([0, 0, 0, 0, 0, 0]); var counterPos = 0; var isWhite = false; for (var i = offset; i < this._row.length; i++) { if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { // find start pattern if (this._toPattern(counter) === code_93_reader_ASTERISK) { var whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - (i - patternStart) / 4)); if (this._matchRange(whiteSpaceMustStart, patternStart, 0)) { return { start: patternStart, end: i }; } } patternStart += counter[0] + counter[1]; for (var j = 0; j < 4; j++) { counter[j] = counter[j + 2]; } counter[4] = 0; counter[5] = 0; counterPos--; } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "_verifyEnd", value: function _verifyEnd(lastStart, nextStart) { if (lastStart === nextStart || !this._row[nextStart]) { return false; } return true; } }, { key: "_decodeExtended", value: function _decodeExtended(charArray) { var length = charArray.length; var result = []; for (var i = 0; i < length; i++) { var _char2 = charArray[i]; if (_char2 >= 'a' && _char2 <= 'd') { if (i > length - 2) { return null; } var nextChar = charArray[++i]; var nextCharCode = nextChar.charCodeAt(0); var decodedChar = void 0; switch (_char2) { case 'a': if (nextChar >= 'A' && nextChar <= 'Z') { decodedChar = String.fromCharCode(nextCharCode - 64); } else { return null; } break; case 'b': if (nextChar >= 'A' && nextChar <= 'E') { decodedChar = String.fromCharCode(nextCharCode - 38); } else if (nextChar >= 'F' && nextChar <= 'J') { decodedChar = String.fromCharCode(nextCharCode - 11); } else if (nextChar >= 'K' && nextChar <= 'O') { decodedChar = String.fromCharCode(nextCharCode + 16); } else if (nextChar >= 'P' && nextChar <= 'S') { decodedChar = String.fromCharCode(nextCharCode + 43); } else if (nextChar >= 'T' && nextChar <= 'Z') { decodedChar = String.fromCharCode(127); } else { return null; } break; case 'c': if (nextChar >= 'A' && nextChar <= 'O') { decodedChar = String.fromCharCode(nextCharCode - 32); } else if (nextChar === 'Z') { decodedChar = ':'; } else { return null; } break; case 'd': if (nextChar >= 'A' && nextChar <= 'Z') { decodedChar = String.fromCharCode(nextCharCode + 32); } else { return null; } break; default: console.warn('* code_93_reader _decodeExtended hit default case, this may be an error', decodedChar); return null; } result.push(decodedChar); } else { result.push(_char2); } } return result; } }, { key: "_matchCheckChar", value: function _matchCheckChar(charArray, index, maxWeight) { var arrayToCheck = charArray.slice(0, index); var length = arrayToCheck.length; var weightedSums = arrayToCheck.reduce(function (sum, _char3, i) { var weight = (i * -1 + (length - 1)) % maxWeight + 1; var value = code_93_reader_ALPHABET.indexOf(_char3.charCodeAt(0)); return sum + weight * value; }, 0); var checkChar = code_93_reader_ALPHABET[weightedSums % 47]; return checkChar === charArray[index].charCodeAt(0); } }, { key: "_verifyChecksums", value: function _verifyChecksums(charArray) { return this._matchCheckChar(charArray, charArray.length - 2, 20) && this._matchCheckChar(charArray, charArray.length - 1, 15); } }, { key: "decode", value: function decode(row, start) { start = this._findStart(); if (!start) { return null; } var counters = new Uint16Array([0, 0, 0, 0, 0, 0]); var result = []; var nextStart = this._nextSet(this._row, start.end); var lastStart; var decodedChar; do { counters = this._toCounters(nextStart, counters); var pattern = this._toPattern(counters); if (pattern < 0) { return null; } decodedChar = this._patternToChar(pattern); if (decodedChar === null) { return null; } result.push(decodedChar); lastStart = nextStart; nextStart += array_helper["a" /* default */].sum(counters); nextStart = this._nextSet(this._row, nextStart); } while (decodedChar !== '*'); result.pop(); if (!result.length) { return null; } if (!this._verifyEnd(lastStart, nextStart)) { return null; } if (!this._verifyChecksums(result)) { return null; } result = result.slice(0, result.length - 2); // yes, this is an assign inside an if. if ((result = this._decodeExtended(result)) === null) { return null; } return { code: result.join(''), start: start.start, end: nextStart, startInfo: start, decodedCodes: result, format: this.FORMAT }; } }]); }(barcode_reader); /* harmony default export */ var code_93_reader = (code_93_reader_Code93Reader); // CONCATENATED MODULE: ./src/reader/ean_reader.ts function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty_default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function ean_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, ean_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function ean_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (ean_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // const CODE_L_START = 0; var CODE_G_START = 10; var ean_reader_START_PATTERN = [1, 1, 1]; var MIDDLE_PATTERN = [1, 1, 1, 1, 1]; var EXTENSION_START_PATTERN = [1, 1, 2]; var ean_reader_CODE_PATTERN = [[3, 2, 1, 1], [2, 2, 2, 1], [2, 1, 2, 2], [1, 4, 1, 1], [1, 1, 3, 2], [1, 2, 3, 1], [1, 1, 1, 4], [1, 3, 1, 2], [1, 2, 1, 3], [3, 1, 1, 2], [1, 1, 2, 3], [1, 2, 2, 2], [2, 2, 1, 2], [1, 1, 4, 1], [2, 3, 1, 1], [1, 3, 2, 1], [4, 1, 1, 1], [2, 1, 3, 1], [3, 1, 2, 1], [2, 1, 1, 3]]; var CODE_FREQUENCY = [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]; // const SINGLE_CODE_ERROR = 0.70; var AVG_CODE_ERROR = 0.48; var ean_reader_EANReader = /*#__PURE__*/function (_BarcodeReader) { // TODO: does this need to be in the class? function EANReader(config, supplements) { var _this; classCallCheck_default()(this, EANReader); _this = ean_reader_callSuper(this, EANReader, [merge_default()({ supplements: [] }, config), supplements]); defineProperty_default()(_this, "FORMAT", 'ean_13'); defineProperty_default()(_this, "SINGLE_CODE_ERROR", 0.70); defineProperty_default()(_this, "STOP_PATTERN", [1, 1, 1]); return _this; } inherits_default()(EANReader, _BarcodeReader); return createClass_default()(EANReader, [{ key: "_findPattern", value: function _findPattern(pattern, offset, isWhite, tryHarder) { var counter = new Array(pattern.length).fill(0); var bestMatch = { error: Number.MAX_VALUE, start: 0, end: 0 }; var epsilon = AVG_CODE_ERROR; // console.warn('* findPattern', pattern, offset, isWhite, tryHarder, epsilon); var counterPos = 0; if (!offset) { offset = this._nextSet(this._row); } var found = false; for (var i = offset; i < this._row.length; i++) { // console.warn(`* loop i=${offset} len=${this._row.length} isWhite=${isWhite} counterPos=${counterPos}`); if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos] += 1; } else { if (counterPos === counter.length - 1) { var error = this._matchPattern(counter, pattern); // console.warn('* matchPattern', error, counter, pattern); if (error < epsilon && bestMatch.error && error < bestMatch.error) { found = true; bestMatch.error = error; bestMatch.start = i - counter.reduce(function (sum, value) { return sum + value; }, 0); bestMatch.end = i; // console.warn('* return bestMatch', JSON.stringify(bestMatch)); return bestMatch; } if (tryHarder) { for (var j = 0; j < counter.length - 2; j++) { counter[j] = counter[j + 2]; } counter[counter.length - 2] = 0; counter[counter.length - 1] = 0; counterPos--; } } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } if (found) { // console.warn('* return bestMatch', JSON.stringify(bestMatch)); } else { // console.warn('* return null'); } return found ? bestMatch : null; } // TODO: findPattern and decodeCode appear to share quite similar code, can it be reduced? }, { key: "_decodeCode", value: function _decodeCode(start, coderange) { // console.warn('* decodeCode', start, coderange); var counter = [0, 0, 0, 0]; var offset = start; var bestMatch = { error: Number.MAX_VALUE, code: -1, start: start, end: start }; var epsilon = AVG_CODE_ERROR; var isWhite = !this._row[offset]; var counterPos = 0; if (!coderange) { // console.warn('* decodeCode before length'); coderange = ean_reader_CODE_PATTERN.length; // console.warn('* decodeCode after length'); } var found = false; for (var i = offset; i < this._row.length; i++) { if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { for (var code = 0; code < coderange; code++) { var error = this._matchPattern(counter, ean_reader_CODE_PATTERN[code]); bestMatch.end = i; if (error < bestMatch.error) { bestMatch.code = code; bestMatch.error = error; } } if (bestMatch.error > epsilon) { // console.warn('* return null'); return null; } // console.warn('* return bestMatch', JSON.stringify(bestMatch)); return bestMatch; } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return found ? bestMatch : null; } }, { key: "_findStart", value: function _findStart() { // console.warn('* findStart'); var offset = this._nextSet(this._row); var startInfo = null; while (!startInfo) { startInfo = this._findPattern(ean_reader_START_PATTERN, offset, false, true); // console.warn('* startInfo=', JSON.stringify(startInfo)); if (!startInfo) { return null; } var leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start); if (leadingWhitespaceStart >= 0) { if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { // console.warn('* returning startInfo'); return startInfo; } } offset = startInfo.end; startInfo = null; } // console.warn('* returning null'); return null; } }, { key: "_calculateFirstDigit", value: function _calculateFirstDigit(codeFrequency) { // console.warn('* calculateFirstDigit', codeFrequency); for (var i = 0; i < CODE_FREQUENCY.length; i++) { if (codeFrequency === CODE_FREQUENCY[i]) { // console.warn('* returning', i); return i; } } // console.warn('* return null'); return null; } }, { key: "_decodePayload", value: function _decodePayload(inCode, result, decodedCodes) { // console.warn('* decodePayload', inCode, result, decodedCodes); var outCode = _objectSpread({}, inCode); var codeFrequency = 0x0; for (var i = 0; i < 6; i++) { outCode = this._decodeCode(outCode.end); // console.warn('* decodeCode=', outCode); if (!outCode) { // console.warn('* return null'); return null; } if (outCode.code >= CODE_G_START) { outCode.code -= CODE_G_START; codeFrequency |= 1 << 5 - i; } else { codeFrequency |= 0 << 5 - i; } result.push(outCode.code); decodedCodes.push(outCode); } var firstDigit = this._calculateFirstDigit(codeFrequency); // console.warn('* firstDigit=', firstDigit); if (firstDigit === null) { // console.warn('* return null'); return null; } result.unshift(firstDigit); var middlePattern = this._findPattern(MIDDLE_PATTERN, outCode.end, true, false); // console.warn('* findPattern=', JSON.stringify(middlePattern)); if (middlePattern === null || !middlePattern.end) { // console.warn('* return null'); return null; } decodedCodes.push(middlePattern); for (var _i = 0; _i < 6; _i++) { middlePattern = this._decodeCode(middlePattern.end, CODE_G_START); // console.warn('* decodeCode=', JSON.stringify(middlePattern)); if (!middlePattern) { // console.warn('* return null'); return null; } decodedCodes.push(middlePattern); result.push(middlePattern.code); } // console.warn('* end code=', JSON.stringify(middlePattern)); // console.warn('* end result=', JSON.stringify(result)); // console.warn('* end decodedCodes=', decodedCodes); return middlePattern; } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(endInfo) { // console.warn('* verifyTrailingWhitespace', JSON.stringify(endInfo)); var trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start); if (trailingWhitespaceEnd < this._row.length) { if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { // console.warn('* returning', JSON.stringify(endInfo)); return endInfo; } } // console.warn('* return null'); return null; } }, { key: "_findEnd", value: function _findEnd(offset, isWhite) { // console.warn('* findEnd', offset, isWhite); var endInfo = this._findPattern(this.STOP_PATTERN, offset, isWhite, false); return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null; } }, { key: "_checksum", value: function _checksum(result) { // console.warn('* _checksum', result); var sum = 0; for (var i = result.length - 2; i >= 0; i -= 2) { sum += result[i]; } sum *= 3; for (var _i2 = result.length - 1; _i2 >= 0; _i2 -= 2) { sum += result[_i2]; } // console.warn('* end checksum', sum % 10 === 0); return sum % 10 === 0; } }, { key: "_decodeExtensions", value: function _decodeExtensions(offset) { var start = this._nextSet(this._row, offset); var startInfo = this._findPattern(EXTENSION_START_PATTERN, start, false, false); if (startInfo === null) { return null; } // console.warn('* decodeExtensions', this.supplements); // console.warn('* there are ', this.supplements.length, ' supplements'); for (var i = 0; i < this.supplements.length; i++) { // console.warn('* extensions loop', i, this.supplements[i], this.supplements[i]._decode); try { var result = this.supplements[i].decode(this._row, startInfo.end); // console.warn('* decode result=', result); if (result !== null) { return { code: result.code, start: start, startInfo: startInfo, end: result.end, decodedCodes: result.decodedCodes, format: this.supplements[i].FORMAT }; } } catch (err) { console.error('* decodeExtensions error in ', this.supplements[i], ': ', err); } } // console.warn('* end decodeExtensions'); return null; } }, { key: "decode", value: function decode(row, start) { // console.warn('* decode', row); // console.warn('* decode', start); var result = new Array(); var decodedCodes = new Array(); var resultInfo = {}; var startInfo = this._findStart(); if (!startInfo) { return null; } var code = { start: startInfo.start, end: startInfo.end }; decodedCodes.push(code); code = this._decodePayload(code, result, decodedCodes); if (!code) { return null; } code = this._findEnd(code.end, false); if (!code) { return null; } decodedCodes.push(code); // Checksum if (!this._checksum(result)) { return null; } // console.warn('* this.supplements=', this.supplements); if (this.supplements.length > 0) { var supplement = this._decodeExtensions(code.end); // console.warn('* decodeExtensions returns', supplement); if (!supplement) { return null; } if (!supplement.decodedCodes) { return null; } var lastCode = supplement.decodedCodes[supplement.decodedCodes.length - 1]; var endInfo = { start: lastCode.start + ((lastCode.end - lastCode.start) / 2 | 0), end: lastCode.end }; if (!this._verifyTrailingWhitespace(endInfo)) { return null; } resultInfo = { supplement: supplement, code: result.join('') + supplement.code }; } return _objectSpread(_objectSpread({ code: result.join(''), start: startInfo.start, end: code.end, startInfo: startInfo, decodedCodes: decodedCodes }, resultInfo), {}, { format: this.FORMAT }); } }]); }(barcode_reader); /* harmony default export */ var ean_reader = (ean_reader_EANReader); // CONCATENATED MODULE: ./src/reader/ean_2_reader.ts function ean_2_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, ean_2_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function ean_2_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (ean_2_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var ean_2_reader_EAN2Reader = /*#__PURE__*/function (_EANReader) { function EAN2Reader() { var _this; classCallCheck_default()(this, EAN2Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = ean_2_reader_callSuper(this, EAN2Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'ean_2'); return _this; } inherits_default()(EAN2Reader, _EANReader); return createClass_default()(EAN2Reader, [{ key: "decode", value: function decode(row, start) { if (row) { this._row = row; } var codeFrequency = 0; var offset = start; var end = this._row.length; var result = []; var decodedCodes = []; var code = null; if (offset === undefined) { return null; } for (var i = 0; i < 2 && offset < end; i++) { code = this._decodeCode(offset); if (!code) { return null; } decodedCodes.push(code); result.push(code.code % 10); if (code.code >= CODE_G_START) { codeFrequency |= 1 << 1 - i; } if (i !== 1) { offset = this._nextSet(this._row, code.end); offset = this._nextUnset(this._row, offset); } } if (result.length !== 2 || parseInt(result.join('')) % 4 !== codeFrequency) { return null; } var startInfo = this._findStart(); return { code: result.join(''), decodedCodes: decodedCodes, end: code.end, format: this.FORMAT, startInfo: startInfo, start: startInfo.start }; } }]); }(ean_reader); ; /* harmony default export */ var ean_2_reader = (ean_2_reader_EAN2Reader); // CONCATENATED MODULE: ./src/reader/ean_5_reader.ts function ean_5_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, ean_5_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function ean_5_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (ean_5_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5]; function determineCheckDigit(codeFrequency) { for (var i = 0; i < 10; i++) { if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) { return i; } } return null; } function extensionChecksum(result) { var length = result.length; var sum = 0; for (var i = length - 2; i >= 0; i -= 2) { sum += result[i]; } sum *= 3; for (var _i = length - 1; _i >= 0; _i -= 2) { sum += result[_i]; } sum *= 3; return sum % 10; } var ean_5_reader_EAN5Reader = /*#__PURE__*/function (_EANReader) { function EAN5Reader() { var _this; classCallCheck_default()(this, EAN5Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = ean_5_reader_callSuper(this, EAN5Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'ean_5'); return _this; } inherits_default()(EAN5Reader, _EANReader); return createClass_default()(EAN5Reader, [{ key: "decode", value: function decode(row, start) { if (start === undefined) { return null; } if (row) { this._row = row; } var codeFrequency = 0; var offset = start; var end = this._row.length; var code = null; var result = []; var decodedCodes = []; for (var i = 0; i < 5 && offset < end; i++) { code = this._decodeCode(offset); if (!code) { return null; } decodedCodes.push(code); result.push(code.code % 10); if (code.code >= CODE_G_START) { codeFrequency |= 1 << 4 - i; } if (i !== 4) { offset = this._nextSet(this._row, code.end); offset = this._nextUnset(this._row, offset); } } if (result.length !== 5) { return null; } if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) { return null; } var startInfo = this._findStart(); return { code: result.join(''), decodedCodes: decodedCodes, end: code.end, format: this.FORMAT, startInfo: startInfo, start: startInfo.start }; } }]); }(ean_reader); ; /* harmony default export */ var ean_5_reader = (ean_5_reader_EAN5Reader); // CONCATENATED MODULE: ./src/reader/ean_8_reader.ts function ean_8_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, ean_8_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function ean_8_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (ean_8_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var ean_8_reader_EAN8Reader = /*#__PURE__*/function (_EANReader) { function EAN8Reader() { var _this; classCallCheck_default()(this, EAN8Reader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = ean_8_reader_callSuper(this, EAN8Reader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'ean_8'); return _this; } inherits_default()(EAN8Reader, _EANReader); return createClass_default()(EAN8Reader, [{ key: "_decodePayload", value: function _decodePayload(inCode, result, decodedCodes) { var code = inCode; for (var i = 0; i < 4; i++) { code = this._decodeCode(code.end, CODE_G_START); if (!code) { return null; } result.push(code.code); decodedCodes.push(code); } code = this._findPattern(MIDDLE_PATTERN, code.end, true, false); if (code === null) { return null; } decodedCodes.push(code); for (var _i = 0; _i < 4; _i++) { code = this._decodeCode(code.end, CODE_G_START); if (!code) { return null; } decodedCodes.push(code); result.push(code.code); } return code; } }]); }(ean_reader); /* harmony default export */ var ean_8_reader = (ean_8_reader_EAN8Reader); // CONCATENATED MODULE: ./src/reader/i2of5_reader.ts function i2of5_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, i2of5_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function i2of5_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (i2of5_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function i2of5_reader_superPropGet(t, o, e, r) { var p = get_default()(getPrototypeOf_default()(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // TODO: i2of5_reader and 2of5_reader share very similar code, make use of that var i2of5_reader_N = 1; var i2of5_reader_W = 3; var i2of5_reader_I2of5Reader = /*#__PURE__*/function (_BarcodeReader) { function I2of5Reader(opts) { var _this; classCallCheck_default()(this, I2of5Reader); _this = i2of5_reader_callSuper(this, I2of5Reader, [merge_default()({ normalizeBarSpaceWidth: false }, opts)]); defineProperty_default()(_this, "barSpaceRatio", [1, 1]); defineProperty_default()(_this, "SINGLE_CODE_ERROR", 0.78); defineProperty_default()(_this, "AVG_CODE_ERROR", 0.38); defineProperty_default()(_this, "START_PATTERN", [i2of5_reader_N, i2of5_reader_N, i2of5_reader_N, i2of5_reader_N]); defineProperty_default()(_this, "STOP_PATTERN", [i2of5_reader_N, i2of5_reader_N, i2of5_reader_W]); defineProperty_default()(_this, "CODE_PATTERN", [[i2of5_reader_N, i2of5_reader_N, i2of5_reader_W, i2of5_reader_W, i2of5_reader_N], [i2of5_reader_W, i2of5_reader_N, i2of5_reader_N, i2of5_reader_N, i2of5_reader_W], [i2of5_reader_N, i2of5_reader_W, i2of5_reader_N, i2of5_reader_N, i2of5_reader_W], [i2of5_reader_W, i2of5_reader_W, i2of5_reader_N, i2of5_reader_N, i2of5_reader_N], [i2of5_reader_N, i2of5_reader_N, i2of5_reader_W, i2of5_reader_N, i2of5_reader_W], [i2of5_reader_W, i2of5_reader_N, i2of5_reader_W, i2of5_reader_N, i2of5_reader_N], [i2of5_reader_N, i2of5_reader_W, i2of5_reader_W, i2of5_reader_N, i2of5_reader_N], [i2of5_reader_N, i2of5_reader_N, i2of5_reader_N, i2of5_reader_W, i2of5_reader_W], [i2of5_reader_W, i2of5_reader_N, i2of5_reader_N, i2of5_reader_W, i2of5_reader_N], [i2of5_reader_N, i2of5_reader_W, i2of5_reader_N, i2of5_reader_W, i2of5_reader_N]]); defineProperty_default()(_this, "MAX_CORRECTION_FACTOR", 5); defineProperty_default()(_this, "FORMAT", 'i2of5'); if (opts.normalizeBarSpaceWidth) { _this.SINGLE_CODE_ERROR = 0.38; _this.AVG_CODE_ERROR = 0.09; } _this.config = opts; return possibleConstructorReturn_default()(_this, _this); } inherits_default()(I2of5Reader, _BarcodeReader); return createClass_default()(I2of5Reader, [{ key: "_matchPattern", value: function _matchPattern(counter, code) { if (this.config.normalizeBarSpaceWidth) { var counterSum = [0, 0]; var codeSum = [0, 0]; var correction = [0, 0]; var correctionRatio = this.MAX_CORRECTION_FACTOR; var correctionRatioInverse = 1 / correctionRatio; for (var i = 0; i < counter.length; i++) { counterSum[i % 2] += counter[i]; codeSum[i % 2] += code[i]; } correction[0] = codeSum[0] / counterSum[0]; correction[1] = codeSum[1] / counterSum[1]; correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse); correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse); this.barSpaceRatio = correction; for (var _i = 0; _i < counter.length; _i++) { counter[_i] *= this.barSpaceRatio[_i % 2]; } } return i2of5_reader_superPropGet(I2of5Reader, "_matchPattern", this, 3)([counter, code]); } }, { key: "_findPattern", value: function _findPattern(pattern, offset) { var isWhite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var tryHarder = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var counter = new Array(pattern.length).fill(0); var counterPos = 0; var bestMatch = { error: Number.MAX_VALUE, start: 0, end: 0 }; var epsilon = this.AVG_CODE_ERROR; isWhite = isWhite || false; tryHarder = tryHarder || false; if (!offset) { offset = this._nextSet(this._row); } for (var i = offset; i < this._row.length; i++) { if (this._row[i] ^ (isWhite ? 1 : 0)) { counter[counterPos]++; } else { if (counterPos === counter.length - 1) { var sum = counter.reduce(function (prev, next) { return prev + next; }, 0); var error = this._matchPattern(counter, pattern); if (error < epsilon) { bestMatch.error = error; bestMatch.start = i - sum; bestMatch.end = i; return bestMatch; } if (tryHarder) { for (var j = 0; j < counter.length - 2; j++) { counter[j] = counter[j + 2]; } counter[counter.length - 2] = 0; counter[counter.length - 1] = 0; counterPos--; } else { return null; } } else { counterPos++; } counter[counterPos] = 1; isWhite = !isWhite; } } return null; } }, { key: "_findStart", value: function _findStart() { var leadingWhitespaceStart = 0; var offset = this._nextSet(this._row); var startInfo = null; var narrowBarWidth = 1; while (!startInfo) { startInfo = this._findPattern(this.START_PATTERN, offset, false, true); if (!startInfo) { return null; } narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4); leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10; if (leadingWhitespaceStart >= 0) { if (this._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { return startInfo; } } offset = startInfo.end; startInfo = null; } return null; } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(endInfo) { var trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; if (trailingWhitespaceEnd < this._row.length) { if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { return endInfo; } } return null; } }, { key: "_findEnd", value: function _findEnd() { this._row.reverse(); var endInfo = this._findPattern(this.STOP_PATTERN); this._row.reverse(); if (endInfo === null) { return null; } // reverse numbers var tmp = endInfo.start; endInfo.start = this._row.length - endInfo.end; endInfo.end = this._row.length - tmp; return endInfo !== null ? this._verifyTrailingWhitespace(endInfo) : null; } }, { key: "_decodePair", value: function _decodePair(counterPair) { var codes = []; for (var i = 0; i < counterPair.length; i++) { var code = this._decodeCode(counterPair[i]); if (!code) { return null; } codes.push(code); } return codes; } }, { key: "_decodeCode", value: function _decodeCode(counter) { var epsilon = this.AVG_CODE_ERROR; var bestMatch = { error: Number.MAX_VALUE, code: -1, start: 0, end: 0 }; for (var code = 0; code < this.CODE_PATTERN.length; code++) { var error = this._matchPattern(counter, this.CODE_PATTERN[code]); if (error < bestMatch.error) { bestMatch.code = code; bestMatch.error = error; } } if (bestMatch.error < epsilon) { return bestMatch; } return null; } }, { key: "_decodePayload", value: function _decodePayload(counters, result, decodedCodes) { var pos = 0; var counterLength = counters.length; var counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]; var codes = null; while (pos < counterLength) { for (var i = 0; i < 5; i++) { counterPair[0][i] = counters[pos] * this.barSpaceRatio[0]; counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1]; pos += 2; } codes = this._decodePair(counterPair); if (!codes) { return null; } for (var _i2 = 0; _i2 < codes.length; _i2++) { result.push(codes[_i2].code + ''); decodedCodes.push(codes[_i2]); } } return codes; } }, { key: "_verifyCounterLength", value: function _verifyCounterLength(counters) { return counters.length % 10 === 0; } }, { key: "decode", value: function decode(row, start) { var result = new Array(); var decodedCodes = new Array(); var startInfo = this._findStart(); if (!startInfo) { return null; } decodedCodes.push(startInfo); var endInfo = this._findEnd(); if (!endInfo) { return null; } var counters = this._fillCounters(startInfo.end, endInfo.start, false); if (!this._verifyCounterLength(counters)) { return null; } var code = this._decodePayload(counters, result, decodedCodes); if (!code) { return null; } if (result.length % 2 !== 0 || result.length < 6) { return null; } decodedCodes.push(endInfo); return { code: result.join(''), start: startInfo.start, end: endInfo.end, startInfo: startInfo, decodedCodes: decodedCodes, format: this.FORMAT }; } }]); }(barcode_reader); /* harmony default export */ var i2of5_reader = (i2of5_reader_I2of5Reader); // CONCATENATED MODULE: ./src/reader/upc_e_reader.ts function upc_e_reader_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function upc_e_reader_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? upc_e_reader_ownKeys(Object(t), !0).forEach(function (r) { defineProperty_default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : upc_e_reader_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function upc_e_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, upc_e_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function upc_e_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (upc_e_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function upc_e_reader_superPropGet(t, o, e, r) { var p = get_default()(getPrototypeOf_default()(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } var upc_e_reader_UPCEReader = /*#__PURE__*/function (_EANReader) { function UPCEReader() { var _this; classCallCheck_default()(this, UPCEReader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = upc_e_reader_callSuper(this, UPCEReader, [].concat(args)); defineProperty_default()(_this, "CODE_FREQUENCY", [[56, 52, 50, 49, 44, 38, 35, 42, 41, 37], [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]]); defineProperty_default()(_this, "STOP_PATTERN", [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7]); defineProperty_default()(_this, "FORMAT", 'upc_e'); return _this; } inherits_default()(UPCEReader, _EANReader); return createClass_default()(UPCEReader, [{ key: "_decodePayload", value: function _decodePayload(inCode, result, decodedCodes) { var outCode = upc_e_reader_objectSpread({}, inCode); var codeFrequency = 0x0; for (var i = 0; i < 6; i++) { outCode = this._decodeCode(outCode.end); if (!outCode) { return null; } if (outCode.code >= CODE_G_START) { outCode.code = outCode.code - CODE_G_START; codeFrequency |= 1 << 5 - i; } result.push(outCode.code); decodedCodes.push(outCode); } if (!this._determineParity(codeFrequency, result)) { return null; } return outCode; } }, { key: "_determineParity", value: function _determineParity(codeFrequency, result) { for (var nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++) { for (var i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) { if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) { result.unshift(nrSystem); result.push(i); return true; } } } return false; } }, { key: "_convertToUPCA", value: function _convertToUPCA(result) { var upca = [result[0]]; var lastDigit = result[result.length - 2]; if (lastDigit <= 2) { upca = upca.concat(result.slice(1, 3)).concat([lastDigit, 0, 0, 0, 0]).concat(result.slice(3, 6)); } else if (lastDigit === 3) { upca = upca.concat(result.slice(1, 4)).concat([0, 0, 0, 0, 0]).concat(result.slice(4, 6)); } else if (lastDigit === 4) { upca = upca.concat(result.slice(1, 5)).concat([0, 0, 0, 0, 0, result[5]]); } else { upca = upca.concat(result.slice(1, 6)).concat([0, 0, 0, 0, lastDigit]); } upca.push(result[result.length - 1]); return upca; } }, { key: "_checksum", value: function _checksum(result) { return upc_e_reader_superPropGet(UPCEReader, "_checksum", this, 3)([this._convertToUPCA(result)]); } }, { key: "_findEnd", value: function _findEnd(offset, isWhite) { return upc_e_reader_superPropGet(UPCEReader, "_findEnd", this, 3)([offset, true]); } }, { key: "_verifyTrailingWhitespace", value: function _verifyTrailingWhitespace(endInfo) { var trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; if (trailingWhitespaceEnd < this._row.length) { if (this._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { return endInfo; } } return null; } }]); }(ean_reader); /* harmony default export */ var upc_e_reader = (upc_e_reader_UPCEReader); // CONCATENATED MODULE: ./src/reader/upc_reader.ts function upc_reader_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, upc_reader_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function upc_reader_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (upc_reader_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var upc_reader_UPCReader = /*#__PURE__*/function (_EANReader) { function UPCReader() { var _this; classCallCheck_default()(this, UPCReader); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = upc_reader_callSuper(this, UPCReader, [].concat(args)); defineProperty_default()(_this, "FORMAT", 'upc_a'); return _this; } inherits_default()(UPCReader, _EANReader); return createClass_default()(UPCReader, [{ key: "decode", value: function decode(row, start) { var result = ean_reader.prototype.decode.call(this); if (result && result.code && result.code.length === 13 && result.code.charAt(0) === '0') { result.code = result.code.substring(1); return result; } return null; } }]); }(ean_reader); /* harmony default export */ var upc_reader = (upc_reader_UPCReader); // CONCATENATED MODULE: ./src/decoder/bresenham.js var Bresenham = {}; var Slope = { DIR: { UP: 1, DOWN: -1 } }; /** * Scans a line of the given image from point p1 to p2 and returns a result object containing * gray-scale values (0-255) of the underlying pixels in addition to the min * and max values. * @param {Object} imageWrapper * @param {Object} p1 The start point {x,y} * @param {Object} p2 The end point {x,y} * @returns {line, min, max} */ Bresenham.getBarcodeLine = function (imageWrapper, p1, p2) { /* eslint-disable no-bitwise */ var x0 = p1.x | 0; var y0 = p1.y | 0; var x1 = p2.x | 0; var y1 = p2.y | 0; /* eslint-disable no-bitwise */ var steep = Math.abs(y1 - y0) > Math.abs(x1 - x0); var error; var y; var tmp; var x; var line = []; var imageData = imageWrapper.data; var width = imageWrapper.size.x; var val; var min = 255; var max = 0; function read(a, b) { val = imageData[b * width + a]; min = val < min ? val : min; max = val > max ? val : max; line.push(val); } if (steep) { tmp = x0; x0 = y0; y0 = tmp; tmp = x1; x1 = y1; y1 = tmp; } if (x0 > x1) { tmp = x0; x0 = x1; x1 = tmp; tmp = y0; y0 = y1; y1 = tmp; } var deltaX = x1 - x0; var deltaY = Math.abs(y1 - y0); error = deltaX / 2 | 0; y = y0; var yStep = y0 < y1 ? 1 : -1; for (x = x0; x < x1; x++) { if (steep) { read(y, x); } else { read(x, y); } error -= deltaY; if (error < 0) { y += yStep; error += deltaX; } } return { line: line, min: min, max: max }; }; /** * Converts the result from getBarcodeLine into a binary representation * also considering the frequency and slope of the signal for more robust results * @param {Object} result {line, min, max} */ Bresenham.toBinaryLine = function (result) { var min = result.min; var max = result.max; var line = result.line; var slope; var slope2; var center = min + (max - min) / 2; var extrema = []; var currentDir; var dir; var threshold = (max - min) / 12; var rThreshold = -threshold; var i; var j; // 1. find extrema currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN; extrema.push({ pos: 0, val: line[0] }); for (i = 0; i < line.length - 2; i++) { slope = line[i + 1] - line[i]; slope2 = line[i + 2] - line[i + 1]; if (slope + slope2 < rThreshold && line[i + 1] < center * 1.5) { dir = Slope.DIR.DOWN; } else if (slope + slope2 > threshold && line[i + 1] > center * 0.5) { dir = Slope.DIR.UP; } else { dir = currentDir; } if (currentDir !== dir) { extrema.push({ pos: i, val: line[i] }); currentDir = dir; } } extrema.push({ pos: line.length, val: line[line.length - 1] }); for (j = extrema[0].pos; j < extrema[1].pos; j++) { line[j] = line[j] > center ? 0 : 1; } // iterate over extrema and convert to binary based on avg between minmax for (i = 1; i < extrema.length - 1; i++) { if (extrema[i + 1].val > extrema[i].val) { threshold = extrema[i].val + (extrema[i + 1].val - extrema[i].val) / 3 * 2 | 0; } else { threshold = extrema[i + 1].val + (extrema[i].val - extrema[i + 1].val) / 3 | 0; } for (j = extrema[i].pos; j < extrema[i + 1].pos; j++) { line[j] = line[j] > threshold ? 0 : 1; } } return { line: line, threshold: threshold }; }; /** * Used for development only */ Bresenham.debug = { printFrequency: function printFrequency(line, canvas) { var i; var ctx = canvas.getContext('2d'); // eslint-disable-next-line no-param-reassign canvas.width = line.length; // eslint-disable-next-line no-param-reassign canvas.height = 256; ctx.beginPath(); ctx.strokeStyle = 'blue'; for (i = 0; i < line.length; i++) { ctx.moveTo(i, 255); ctx.lineTo(i, 255 - line[i]); } ctx.stroke(); ctx.closePath(); }, printPattern: function printPattern(line, canvas) { var ctx = canvas.getContext('2d'); var i; // eslint-disable-next-line no-param-reassign canvas.width = line.length; ctx.fillColor = 'black'; for (i = 0; i < line.length; i++) { if (line[i] === 1) { ctx.fillRect(i, 0, 1, 100); } } } }; /* harmony default export */ var bresenham = (Bresenham); // CONCATENATED MODULE: ./src/decoder/barcode_decoder.js function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } /* eslint-disable import/no-cycle */ var READERS = { code_128_reader: code_128_reader, ean_reader: ean_reader, ean_5_reader: ean_5_reader, ean_2_reader: ean_2_reader, ean_8_reader: ean_8_reader, code_39_reader: code_39_reader, code_39_vin_reader: code_39_vin_reader, codabar_reader: codabar_reader, upc_reader: upc_reader, upc_e_reader: upc_e_reader, i2of5_reader: i2of5_reader, '2of5_reader': _2of5_reader, code_93_reader: code_93_reader, code_32_reader: code_32_reader }; /* harmony default export */ var barcode_decoder = ({ registerReader: function registerReader(name, reader) { READERS[name] = reader; }, create: function create(config, inputImageWrapper) { var _canvas = { ctx: { frequency: null, pattern: null, overlay: null }, dom: { frequency: null, pattern: null, overlay: null } }; var _barcodeReaders = []; initCanvas(); initReaders(); initConfig(); function initCanvas() { if (false) { var $debug, _config$debug; } } function initReaders() { var _config$debug3; config.readers.forEach(function (readerConfig) { var _config$debug2; var reader; var configuration = {}; var supplements = []; if (typeof_default()(readerConfig) === 'object') { reader = readerConfig.format; configuration = readerConfig.config; } else if (typeof readerConfig === 'string') { reader = readerConfig; } if (false) {} if (configuration.supplements) { supplements = configuration.supplements.map(function (supplement) { return new READERS[supplement](); }); } try { var readerObj = new READERS[reader](configuration, supplements); _barcodeReaders.push(readerObj); } catch (err) { console.error('* Error constructing reader ', reader, err); throw err; } }); if (false) {} } function initConfig() { if (false) { var vis, i; } } /** * extend the line on both ends * @param {Array} line * @param {Number} angle */ function getExtendedLine(line, angle, ext) { function extendLine(amount) { var extension = { y: amount * Math.sin(angle), x: amount * Math.cos(angle) }; /* eslint-disable no-param-reassign */ line[0].y -= extension.y; line[0].x -= extension.x; line[1].y += extension.y; line[1].x += extension.x; /* eslint-enable no-param-reassign */ } // check if inside image extendLine(ext); while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0]) || !inputImageWrapper.inImageWithBorder(line[1]))) { // eslint-disable-next-line no-param-reassign ext -= Math.ceil(ext / 2); extendLine(-ext); } return line; } function getLine(box) { return [{ x: (box[1][0] - box[0][0]) / 2 + box[0][0], y: (box[1][1] - box[0][1]) / 2 + box[0][1] }, { x: (box[3][0] - box[2][0]) / 2 + box[2][0], y: (box[3][1] - box[2][1]) / 2 + box[2][1] }]; } function tryDecode(line) { var result = null; var i; var barcodeLine = bresenham.getBarcodeLine(inputImageWrapper, line[0], line[1]); if (false) {} bresenham.toBinaryLine(barcodeLine); if (false) {} for (i = 0; i < _barcodeReaders.length && result === null; i++) { result = _barcodeReaders[i].decodePattern(barcodeLine.line); } if (result === null) { return null; } return { codeResult: result, barcodeLine: barcodeLine }; } /** * This method slices the given area apart and tries to detect a barcode-pattern * for each slice. It returns the decoded barcode, or null if nothing was found * @param {Array} box * @param {Array} line * @param {Number} lineAngle */ function tryDecodeBruteForce(box, line, lineAngle) { var sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow(box[1][1] - box[0][1], 2)); var i; var slices = 16; var result = null; var dir; var extension; var xdir = Math.sin(lineAngle); var ydir = Math.cos(lineAngle); for (i = 1; i < slices && result === null; i++) { // move line perpendicular to angle // eslint-disable-next-line no-mixed-operators dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1); extension = { y: dir * xdir, x: dir * ydir }; /* eslint-disable no-param-reassign */ line[0].y += extension.x; line[0].x -= extension.y; line[1].y += extension.x; line[1].x -= extension.y; /* eslint-enable no-param-reassign */ result = tryDecode(line); } return result; } function getLineLength(line) { return Math.sqrt(Math.pow(Math.abs(line[1].y - line[0].y), 2) + Math.pow(Math.abs(line[1].x - line[0].x), 2)); } function _decodeFromImage2(_x) { return _decodeFromImage.apply(this, arguments); } /** * With the help of the configured readers (Code128 or EAN) this function tries to detect a * valid barcode pattern within the given area. * @param {Object} box The area to search in * @returns {Object} the result {codeResult, line, angle, pattern, threshold} */ function _decodeFromImage() { _decodeFromImage = asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee2(imageWrapper) { var result, _iterator, _step, reader, _t; return regenerator_default.a.wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: result = null; _iterator = _createForOfIteratorHelper(_barcodeReaders); _context2.prev = 1; _iterator.s(); case 2: if ((_step = _iterator.n()).done) { _context2.next = 5; break; } reader = _step.value; if (!reader.decodeImage) { _context2.next = 4; break; } _context2.next = 3; return reader.decodeImage(imageWrapper); case 3: result = _context2.sent; if (!result) { _context2.next = 4; break; } return _context2.abrupt("continue", 5); case 4: _context2.next = 2; break; case 5: _context2.next = 7; break; case 6: _context2.prev = 6; _t = _context2["catch"](1); _iterator.e(_t); case 7: _context2.prev = 7; _iterator.f(); return _context2.finish(7); case 8: return _context2.abrupt("return", result); case 9: case "end": return _context2.stop(); } }, _callee2, null, [[1, 6, 7, 8]]); })); return _decodeFromImage.apply(this, arguments); } function _decodeFromBoundingBox(box) { var line; var ctx = _canvas.ctx.overlay; var result; if (false) {} line = getLine(box); var lineLength = getLineLength(line); var lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x); line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1)); if (line === null) { return null; } result = tryDecode(line); if (result === null) { result = tryDecodeBruteForce(box, line, lineAngle); } if (result === null) { return null; } if (false) {} return { codeResult: result.codeResult, line: line, angle: lineAngle, pattern: result.barcodeLine.line, threshold: result.barcodeLine.threshold }; } return { decodeFromBoundingBox: function decodeFromBoundingBox(box) { return _decodeFromBoundingBox(box); }, decodeFromBoundingBoxes: function decodeFromBoundingBoxes(boxes) { var i; var result; var barcodes = []; var multiple = config.multiple; for (i = 0; i < boxes.length; i++) { var box = boxes[i]; result = _decodeFromBoundingBox(box) || {}; result.box = box; if (multiple) { barcodes.push(result); } else if (result.codeResult) { return result; } } return { barcodes: barcodes }; }, decodeFromImage: function decodeFromImage(imageWrapperIn) { return asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee() { var result; return regenerator_default.a.wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.next = 1; return _decodeFromImage2(imageWrapperIn); case 1: result = _context.sent; return _context.abrupt("return", result); case 2: case "end": return _context.stop(); } }, _callee); }))(); }, registerReader: function registerReader(name, reader) { if (READERS[name]) { throw new Error('cannot register existing reader', name); } READERS[name] = reader; }, setReaders: function setReaders(readers) { // eslint-disable-next-line no-param-reassign config.readers = readers; _barcodeReaders.length = 0; initReaders(); } }; } }); // CONCATENATED MODULE: ./src/reader/index.ts // CONCATENATED MODULE: ./src/common/events.ts /* harmony default export */ var events = ((function EventInterface() { var events = {}; function getEvent(eventName) { if (!events[eventName]) { events[eventName] = { subscribers: [] }; } return events[eventName]; } function clearEvents() { events = {}; } function publishSubscription(subscription, data) { if (subscription.async) { setTimeout(function () { subscription.callback(data); }, 4); } else { subscription.callback(data); } } function _subscribe(event, callback, async) { var subscription; if (typeof callback === 'function') { subscription = { callback: callback, async: async }; } else { subscription = callback; if (!subscription.callback) { throw new Error('Callback was not specified on options'); } } getEvent(event).subscribers.push(subscription); } return { subscribe: function subscribe(event, callback, async) { return _subscribe(event, callback, async); }, publish: function publish(eventName, data) { var event = getEvent(eventName); var subscribers = event.subscribers; // Publish one-time subscriptions subscribers.filter(function (subscriber) { return !!subscriber.once; }).forEach(function (subscriber) { publishSubscription(subscriber, data); }); // remove them from the subscriber event.subscribers = subscribers.filter(function (subscriber) { return !subscriber.once; }); // publish the rest event.subscribers.forEach(function (subscriber) { publishSubscription(subscriber, data); }); }, once: function once(event, callback) { var async = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _subscribe(event, { callback: callback, async: async, once: true }); }, unsubscribe: function unsubscribe(eventName, callback) { if (eventName) { var _event = getEvent(eventName); if (_event && callback) { _event.subscribers = _event.subscribers.filter(function (subscriber) { return subscriber.callback !== callback; }); } else { _event.subscribers = []; } } else { clearEvents(); } } }; })()); // EXTERNAL MODULE: ./node_modules/lodash/pick.js var pick = __webpack_require__(63); var pick_default = /*#__PURE__*/__webpack_require__.n(pick); // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/wrapNativeSuper.js var wrapNativeSuper = __webpack_require__(64); var wrapNativeSuper_default = /*#__PURE__*/__webpack_require__.n(wrapNativeSuper); // CONCATENATED MODULE: ./src/quagga/Exception.ts function Exception_callSuper(t, o, e) { return o = getPrototypeOf_default()(o), possibleConstructorReturn_default()(t, Exception_isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf_default()(t).constructor) : o.apply(t, e)); } function Exception_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (Exception_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var Exception_Exception = /*#__PURE__*/function (_Error) { function Exception(m, code) { var _this; classCallCheck_default()(this, Exception); _this = Exception_callSuper(this, Exception, [m]); defineProperty_default()(_this, "code", void 0); _this.code = code; Object.setPrototypeOf(_this, Exception.prototype); return _this; } inherits_default()(Exception, _Error); return createClass_default()(Exception); }(/*#__PURE__*/wrapNativeSuper_default()(Error)); // CONCATENATED MODULE: ./src/common/mediaDevices.ts var ERROR_DESC = 'This may mean that the user has declined camera access, or the browser does not support media APIs. If you are running in iOS, you must use Safari.'; function enumerateDevices() { try { return navigator.mediaDevices.enumerateDevices(); } catch (err) { var error = new Exception_Exception("enumerateDevices is not defined. ".concat(ERROR_DESC), -1); return Promise.reject(error); } } function getUserMedia(constraints) { try { return navigator.mediaDevices.getUserMedia(constraints); } catch (err) { var error = new Exception_Exception("getUserMedia is not defined. ".concat(ERROR_DESC), -1); return Promise.reject(error); } } // CONCATENATED MODULE: ./src/input/camera_access.ts // TODO: when this file was written years ago, HTMLMediaElement.play() did not return a useful value // to let us know when the video started playing. Now, it does. So, we shouldn't need to run this // odd waitForVideo() function that polls to see if the video has started. var streamRef; function waitForVideo(video) { return new Promise(function (resolve, reject) { var attempts = 10; function checkVideo() { if (attempts > 0) { if (video.videoWidth > 10 && video.videoHeight > 10) { if (false) {} resolve(); } else { window.setTimeout(checkVideo, 500); } } else { reject(new Exception_Exception('Unable to play video stream. Is webcam working?', -1)); // TODO: add error code } attempts--; } checkVideo(); }); } /** * Tries to attach the camera-stream to a given video-element * and calls the callback function when the content is ready * @param {Object} constraints * @param {Object} video */ function initCamera(_x, _x2) { return _initCamera.apply(this, arguments); } function _initCamera() { _initCamera = asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee4(video, constraints) { var stream; return regenerator_default.a.wrap(function (_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: _context4.next = 1; return getUserMedia(constraints); case 1: stream = _context4.sent; streamRef = stream; if (!video) { _context4.next = 2; break; } video.setAttribute('autoplay', 'true'); video.setAttribute('muted', 'true'); video.setAttribute('playsinline', 'true'); // not listed on MDN... // eslint-disable-next-line no-param-reassign video.srcObject = stream; video.addEventListener('loadedmetadata', function () { video.play()["catch"](function (err) { console.warn('* Error while trying to play video stream:', err); }); }); return _context4.abrupt("return", waitForVideo(video)); case 2: return _context4.abrupt("return", Promise.resolve()); case 3: case "end": return _context4.stop(); } }, _callee4); })); return _initCamera.apply(this, arguments); } function deprecatedConstraints(videoConstraints) { var normalized = pick_default()(videoConstraints, ['width', 'height', 'facingMode', 'aspectRatio', 'deviceId']); if (typeof videoConstraints.minAspectRatio !== 'undefined' && videoConstraints.minAspectRatio > 0) { normalized.aspectRatio = videoConstraints.minAspectRatio; console.log('WARNING: Constraint \'minAspectRatio\' is deprecated; Use \'aspectRatio\' instead'); } if (typeof videoConstraints.facing !== 'undefined') { normalized.facingMode = videoConstraints.facing; console.log('WARNING: Constraint \'facing\' is deprecated. Use \'facingMode\' instead\''); } return normalized; } // TODO: #192 I don't think there's any good reason pickConstraints should return a Promise, // I think it was just that way so it could be chained to other functions that did return a Promise. // That's not necessary with async functions being a thing, so that should be fixed. function pickConstraints() { var videoConstraints = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var video = deprecatedConstraints(videoConstraints); if (video && video.deviceId && video.facingMode) { delete video.facingMode; } return Promise.resolve({ audio: false, video: video }); } function enumerateVideoDevices() { return _enumerateVideoDevices.apply(this, arguments); } function _enumerateVideoDevices() { _enumerateVideoDevices = asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee5() { var devices; return regenerator_default.a.wrap(function (_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _context5.next = 1; return enumerateDevices(); case 1: devices = _context5.sent; return _context5.abrupt("return", devices.filter(function (device) { return device.kind === 'videoinput'; })); case 2: case "end": return _context5.stop(); } }, _callee5); })); return _enumerateVideoDevices.apply(this, arguments); } function getActiveTrack() { if (!streamRef) { return null; } var tracks = streamRef.getVideoTracks(); return tracks && tracks !== null && tracks !== void 0 && tracks.length ? tracks[0] : null; } /** * Used for accessing information about the active stream track and available video devices. */ var QuaggaJSCameraAccess = { requestedVideoElement: null, request: function request(video, videoConstraints) { return asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee() { var newConstraints; return regenerator_default.a.wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: QuaggaJSCameraAccess.requestedVideoElement = video; _context.next = 1; return pickConstraints(videoConstraints); case 1: newConstraints = _context.sent; return _context.abrupt("return", initCamera(video, newConstraints)); case 2: case "end": return _context.stop(); } }, _callee); }))(); }, release: function release() { var tracks = streamRef && streamRef.getVideoTracks(); if (QuaggaJSCameraAccess.requestedVideoElement !== null) { QuaggaJSCameraAccess.requestedVideoElement.pause(); } return new Promise(function (resolve) { setTimeout(function () { if (tracks && tracks.length) { tracks.forEach(function (track) { return track.stop(); }); } streamRef = null; QuaggaJSCameraAccess.requestedVideoElement = null; resolve(); }, 0); }); }, enumerateVideoDevices: enumerateVideoDevices, getActiveStreamLabel: function getActiveStreamLabel() { var track = getActiveTrack(); return track ? track.label : ''; }, getActiveTrack: getActiveTrack, disableTorch: function disableTorch() { return asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee2() { var track, _t; return regenerator_default.a.wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: track = getActiveTrack(); // TODO: should we acquire camera access even if there's no current camera open? // TODO: what happens on iOS or another device where torch isn't supported at all? Should we throw an error? if (!track) { _context2.next = 4; break; } _context2.prev = 1; _context2.next = 2; return track.applyConstraints({ advanced: [{ torch: false }] }); case 2: _context2.next = 4; break; case 3: _context2.prev = 3; _t = _context2["catch"](1); if (_t instanceof OverconstrainedError) { console.warn('quagga2/CameraAccess: Torch not supported on this device'); } throw _t; case 4: case "end": return _context2.stop(); } }, _callee2, null, [[1, 3]]); }))(); }, enableTorch: function enableTorch() { return asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee3() { var track, _t2; return regenerator_default.a.wrap(function (_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: track = getActiveTrack(); // TODO: should we acquire camera access even if there's no current camera open? // TODO: what happens on iOS or another device where torch isn't supported at all? Should we throw an error? if (!track) { _context3.next = 4; break; } _context3.prev = 1; _context3.next = 2; return track.applyConstraints({ advanced: [{ torch: true }] }); case 2: _context3.next = 4; break; case 3: _context3.prev = 3; _t2 = _context3["catch"](1); if (_t2 instanceof OverconstrainedError) { console.warn('quagga2/CameraAccess: Torch not supported on this device'); } throw _t2; case 4: case "end": return _context3.stop(); } }, _callee3, null, [[1, 3]]); }))(); } }; /* harmony default export */ var camera_access = (QuaggaJSCameraAccess); // CONCATENATED MODULE: ./src/analytics/result_collector.ts function contains(codeResult, list) { return list && list.some(function (item) { var keys = Object.keys(item); return keys.every(function (key) { return item[key] === codeResult[key]; }); }); } function passesFilter(codeResult, filter) { return typeof filter === 'function' ? filter(codeResult) : true; } /* harmony default export */ var result_collector = ({ create: function create(config) { var _config$capacity; var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d', { willReadFrequently: !!config.willReadFrequently }); var results = []; var capacity = (_config$capacity = config.capacity) !== null && _config$capacity !== void 0 ? _config$capacity : 20; var capture = config.capture === true; function matchesConstraints(codeResult) { return !!capacity && codeResult && !contains(codeResult, config.blacklist) && passesFilter(codeResult, config.filter); } return { addResult: function addResult(data, imageSize, codeResult) { var result = {}; // this is 'any' to avoid having to construct a whole QuaggaJSCodeResult :| if (matchesConstraints(codeResult)) { capacity--; result.codeResult = codeResult; if (capture) { canvas.width = imageSize.x; canvas.height = imageSize.y; image_debug.drawImage(data, imageSize, ctx); result.frame = canvas.toDataURL(); } results.push(result); } }, getResults: function getResults() { return results; } }; } }); // CONCATENATED MODULE: ./src/config/config.dev.ts var DevConfig = { inputStream: { name: 'Live', type: 'LiveStream', constraints: { width: 640, height: 480, // aspectRatio: 640/480, // optional facingMode: 'environment' // or user // deviceId: "38745983457387598375983759834" }, area: { top: '0%', right: '0%', left: '0%', bottom: '0%' }, singleChannel: false, // true: only the red color-channel is read debug: { showImageDetails: false // logs frame grabber info, canvas size adjustments } }, locate: true, numOfWorkers: 0, decoder: { readers: ['code_128_reader'], debug: { drawBoundingBox: false, showFrequency: false, drawScanline: false, showPattern: false, printReaderInfo: false // logs reader registration and initialization } }, locator: { halfSample: true, patchSize: 'medium', // x-small, small, medium, large, x-large debug: { showCanvas: false, showPatches: false, showFoundPatches: false, showSkeleton: false, showLabels: false, showPatchLabels: false, showRemainingPatchLabels: false, showPatchSize: false, // logs calculated patch size showImageDetails: false, // logs image wrapper size, canvas details boxFromPatches: { showTransformed: false, showTransformedBox: false, showBB: false } } } }; /* harmony default export */ var config_dev = (DevConfig); // CONCATENATED MODULE: ./src/config/config.node.ts var NodeConfig = { inputStream: { type: 'ImageStream', sequence: false, size: 800, area: { top: '0%', right: '0%', left: '0%', bottom: '0%' }, singleChannel: false // true: only the red color-channel is read }, locate: true, numOfWorkers: 0, decoder: { readers: ['code_128_reader'] }, locator: { halfSample: true, patchSize: 'medium' // x-small, small, medium, large, x-large } }; /* harmony default export */ var config_node = (NodeConfig); // CONCATENATED MODULE: ./src/config/config.prod.ts var ProdConfig = { inputStream: { name: 'Live', type: 'LiveStream', constraints: { width: 640, height: 480, // aspectRatio: 640/480, // optional facingMode: 'environment' // or user // deviceId: "38745983457387598375983759834" }, area: { top: '0%', right: '0%', left: '0%', bottom: '0%' }, singleChannel: false // true: only the red color-channel is read }, locate: true, numOfWorkers: 4, decoder: { readers: ['code_128_reader'] }, locator: { halfSample: true, patchSize: 'medium' // x-small, small, medium, large, x-large } }; /* harmony default export */ var config_prod = (ProdConfig); // CONCATENATED MODULE: ./src/config/config.ts var ExportConfig = function () { var QuaggaConfig; if (false) {} else if (true) { QuaggaConfig = config_node; } else {} return QuaggaConfig; }(); /* harmony default export */ var config_config = (ExportConfig); // EXTERNAL MODULE: ./src/input/frame_grabber.js var frame_grabber = __webpack_require__(65); var frame_grabber_default = /*#__PURE__*/__webpack_require__.n(frame_grabber); // EXTERNAL MODULE: ./src/input/input_stream/input_stream.ts var input_stream = __webpack_require__(66); // CONCATENATED MODULE: ./src/locator/tracer.js /** * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization */ var Tracer = { searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]], create: function create(imageWrapper, labelWrapper) { var imageData = imageWrapper.data; var labelData = labelWrapper.data; var searchDirections = this.searchDirections; var width = imageWrapper.size.x; var pos; function _trace(current, color, label, edgelabel) { var i; var y; var x; for (i = 0; i < searchDirections.length; i++) { y = current.cy + searchDirections[current.dir][0]; x = current.cx + searchDirections[current.dir][1]; pos = y * width + x; if (imageData[pos] === color && (labelData[pos] === 0 || labelData[pos] === label)) { labelData[pos] = label; current.cy = y; current.cx = x; return true; } if (labelData[pos] === 0) { labelData[pos] = edgelabel; } current.dir = (current.dir + 1) % 8; } return false; } function vertex2D(x, y, dir) { return { dir: dir, x: x, y: y, next: null, prev: null }; } function _contourTracing(sy, sx, label, color, edgelabel) { var Fv = null; var Cv; var P; var ldir; var current = { cx: sx, cy: sy, dir: 0 }; if (_trace(current, color, label, edgelabel)) { Fv = vertex2D(sx, sy, current.dir); Cv = Fv; ldir = current.dir; P = vertex2D(current.cx, current.cy, 0); P.prev = Cv; Cv.next = P; P.next = null; Cv = P; var totalPixelCount = imageWrapper.size.x * imageWrapper.size.y; var pixelCounter = 0; do { current.dir = (current.dir + 6) % 8; _trace(current, color, label, edgelabel); if (ldir !== current.dir) { Cv.dir = current.dir; P = vertex2D(current.cx, current.cy, 0); P.prev = Cv; Cv.next = P; P.next = null; Cv = P; } else { Cv.dir = ldir; Cv.x = current.cx; Cv.y = current.cy; } ldir = current.dir; } while ((current.cx !== sx || current.cy !== sy) && ++pixelCounter < totalPixelCount); Fv.prev = Cv.prev; Cv.prev.next = Fv; } return Fv; } return { trace: function trace(current, color, label, edgelabel) { return _trace(current, color, label, edgelabel); }, contourTracing: function contourTracing(sy, sx, label, color, edgelabel) { return _contourTracing(sy, sx, label, color, edgelabel); } }; } }; /* harmony default export */ var locator_tracer = (Tracer); // CONCATENATED MODULE: ./src/locator/rasterizer.js /** * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization */ var Rasterizer = { createContour2D: function createContour2D() { return { dir: null, index: null, firstVertex: null, insideContours: null, nextpeer: null, prevpeer: null }; }, CONTOUR_DIR: { CW_DIR: 0, CCW_DIR: 1, UNKNOWN_DIR: 2 }, DIR: { OUTSIDE_EDGE: -32767, INSIDE_EDGE: -32766 }, create: function create(imageWrapper, labelWrapper) { var imageData = imageWrapper.data; var labelData = labelWrapper.data; var width = imageWrapper.size.x; var height = imageWrapper.size.y; var tracer = locator_tracer.create(imageWrapper, labelWrapper); return { rasterize: function rasterize(depthlabel) { var color; var bc; var lc; var labelindex; var cx; var cy; var colorMap = []; var vertex; var p; var cc; var sc; var pos; var connectedCount = 0; var i; for (i = 0; i < 400; i++) { colorMap[i] = 0; } colorMap[0] = imageData[0]; cc = null; for (cy = 1; cy < height - 1; cy++) { labelindex = 0; bc = colorMap[0]; for (cx = 1; cx < width - 1; cx++) { pos = cy * width + cx; if (labelData[pos] === 0) { color = imageData[pos]; if (color !== bc) { if (labelindex === 0) { lc = connectedCount + 1; colorMap[lc] = color; bc = color; vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE); if (vertex !== null) { connectedCount++; labelindex = lc; p = Rasterizer.createContour2D(); p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; p.index = labelindex; p.firstVertex = vertex; p.nextpeer = cc; p.insideContours = null; if (cc !== null) { cc.prevpeer = p; } cc = p; } } else { vertex = tracer.contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex); if (vertex !== null) { p = Rasterizer.createContour2D(); p.firstVertex = vertex; p.insideContours = null; if (depthlabel === 0) { p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR; } else { p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; } p.index = depthlabel; sc = cc; while (sc !== null && sc.index !== labelindex) { sc = sc.nextpeer; } if (sc !== null) { p.nextpeer = sc.insideContours; if (sc.insideContours !== null) { sc.insideContours.prevpeer = p; } sc.insideContours = p; } } } } else { labelData[pos] = labelindex; } } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { labelindex = 0; if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { bc = imageData[pos]; } else { bc = colorMap[0]; } } else { labelindex = labelData[pos]; bc = colorMap[labelindex]; } } } sc = cc; while (sc !== null) { sc.index = depthlabel; sc = sc.nextpeer; } return { cc: cc, count: connectedCount }; }, debug: { drawContour: function drawContour(canvas, firstContour) { var ctx = canvas.getContext('2d'); var pq = firstContour; var iq; var q; var p; ctx.strokeStyle = 'red'; ctx.fillStyle = 'red'; ctx.lineWidth = 1; if (pq !== null) { iq = pq.insideContours; } else { iq = null; } while (pq !== null) { if (iq !== null) { q = iq; iq = iq.nextpeer; } else { q = pq; pq = pq.nextpeer; if (pq !== null) { iq = pq.insideContours; } else { iq = null; } } switch (q.dir) { case Rasterizer.CONTOUR_DIR.CW_DIR: ctx.strokeStyle = 'red'; break; case Rasterizer.CONTOUR_DIR.CCW_DIR: ctx.strokeStyle = 'blue'; break; case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR: ctx.strokeStyle = 'green'; break; } p = q.firstVertex; ctx.beginPath(); ctx.moveTo(p.x, p.y); do { p = p.next; ctx.lineTo(p.x, p.y); } while (p !== q.firstVertex); ctx.stroke(); } } } }; } }; /* harmony default export */ var locator_rasterizer = (Rasterizer); // CONCATENATED MODULE: ./src/locator/skeletonizer.js /* eslint-disable no-param-reassign */ /* eslint-disable no-bitwise */ /* eslint-disable eqeqeq */ /* @preserve ASM BEGIN */ /** * Morphological skeletonization using iterative thinning algorithm. * Reduces binary images to single-pixel-wide skeletons while preserving topology. * * Memory layout in shared ArrayBuffer (4 regions of size²): * - Region 0: Working image (subImagePtr = 0) * - Region 1: Eroded result (erodedImagePtr = size²) * - Region 2: Temp/scratch space (tempImagePtr = 2*size²) * - Region 3: Final skeleton output (skelImagePtr = 3*size²) */ function Skeletonizer(stdlib, foreign, buffer) { 'use asm'; var images = new stdlib.Uint8Array(buffer); var size = foreign.size | 0; var imul = stdlib.Math.imul; /** * Morphological erosion with 5-pixel cross structuring element. * A pixel survives only if all 5 pixels in the cross pattern are set: * top-left, top-right, center, bottom-left, bottom-right. */ function erode(inImagePtr, outImagePtr) { inImagePtr = inImagePtr | 0; outImagePtr = outImagePtr | 0; var v = 0; var u = 0; var sum = 0; var yStart1 = 0; var yStart2 = 0; var xStart1 = 0; var xStart2 = 0; var offset = 0; for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { offset = offset + size | 0; for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { yStart1 = offset - size | 0; yStart2 = offset + size | 0; xStart1 = u - 1 | 0; xStart2 = u + 1 | 0; sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; // Pixel survives erosion only if all 5 cross neighbors are set if ((sum | 0) == (5 | 0)) { images[outImagePtr + offset + u | 0] = 1; } else { images[outImagePtr + offset + u | 0] = 0; } } } } // Pixel-wise subtraction: out = a - b (captures the "peeled" layer) function subtract(aImagePtr, bImagePtr, outImagePtr) { aImagePtr = aImagePtr | 0; bImagePtr = bImagePtr | 0; outImagePtr = outImagePtr | 0; var length = 0; length = imul(size, size) | 0; while ((length | 0) > 0) { length = length - 1 | 0; images[outImagePtr + length | 0] = (images[aImagePtr + length | 0] | 0) - (images[bImagePtr + length | 0] | 0) | 0; } } // Pixel-wise OR: out = a | b (accumulates skeleton layers) function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) { aImagePtr = aImagePtr | 0; bImagePtr = bImagePtr | 0; outImagePtr = outImagePtr | 0; var length = 0; length = imul(size, size) | 0; while ((length | 0) > 0) { length = length - 1 | 0; images[outImagePtr + length | 0] = images[aImagePtr + length | 0] | 0 | (images[bImagePtr + length | 0] | 0) | 0; } } // Counts non-zero pixels to detect when erosion is complete function countNonZero(imagePtr) { imagePtr = imagePtr | 0; var sum = 0; var length = 0; length = imul(size, size) | 0; while ((length | 0) > 0) { length = length - 1 | 0; sum = (sum | 0) + (images[imagePtr + length | 0] | 0) | 0; } return sum | 0; } // Fills image region with a constant value function init(imagePtr, value) { imagePtr = imagePtr | 0; value = value | 0; var length = 0; length = imul(size, size) | 0; while ((length | 0) > 0) { length = length - 1 | 0; images[imagePtr + length | 0] = value; } } // Morphological dilation with 5-pixel cross - pixel is set if any neighbor is set function dilate(inImagePtr, outImagePtr) { inImagePtr = inImagePtr | 0; outImagePtr = outImagePtr | 0; var v = 0; var u = 0; var sum = 0; var yStart1 = 0; var yStart2 = 0; var xStart1 = 0; var xStart2 = 0; var offset = 0; for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { offset = offset + size | 0; for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { yStart1 = offset - size | 0; yStart2 = offset + size | 0; xStart1 = u - 1 | 0; xStart2 = u + 1 | 0; sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; if ((sum | 0) > (0 | 0)) { images[outImagePtr + offset + u | 0] = 1; } else { images[outImagePtr + offset + u | 0] = 0; } } } } // Copies image data from src to dst region function memcpy(srcImagePtr, dstImagePtr) { srcImagePtr = srcImagePtr | 0; dstImagePtr = dstImagePtr | 0; var length = 0; length = imul(size, size) | 0; while ((length | 0) > 0) { length = length - 1 | 0; images[dstImagePtr + length | 0] = images[srcImagePtr + length | 0] | 0; } } /** * Zeros out the border pixels of the image. * First loop: handles top, left, and right edges simultaneously * Second loop: handles bottom edge */ function zeroBorder(imagePtr) { imagePtr = imagePtr | 0; var x = 0; var y = 0; for (x = 0; (x | 0) < (size - 1 | 0); x = x + 1 | 0) { images[imagePtr + x | 0] = 0; images[imagePtr + y | 0] = 0; y = y + size - 1 | 0; images[imagePtr + y | 0] = 0; y = y + 1 | 0; } for (x = 0; (x | 0) < (size | 0); x = x + 1 | 0) { images[imagePtr + y | 0] = 0; y = y + 1 | 0; } } /** * Main skeletonization algorithm using iterative thinning: * 1. Erode the working image * 2. Dilate the eroded version * 3. Subtract dilated from original (extracts "peeled" layer) * 4. OR the peeled layer into skeleton accumulator * 5. Copy eroded image back to working image * 6. Repeat until working image is empty * * @returns {void} No return value - operates directly on shared buffer. * Input image is read from buffer offset 0 (subImagePtr). * Output skeleton is written to buffer offset 3*size² (skelImagePtr). */ function skeletonize() { var subImagePtr = 0; // Region 0: Working image (input, offset = 0) var erodedImagePtr = 0; // Region 1: Eroded result (offset = size²) var tempImagePtr = 0; // Region 2: Scratch space (offset = 2*size²) var skelImagePtr = 0; // Region 3: Final skeleton (output, offset = 3*size²) var sum = 0; var done = 0; // Calculate byte offsets for each region in the shared buffer erodedImagePtr = imul(size, size) | 0; // Region 1: size² bytes in tempImagePtr = erodedImagePtr + erodedImagePtr | 0; // Region 2: 2*size² bytes in skelImagePtr = tempImagePtr + erodedImagePtr | 0; // Region 3: 3*size² bytes in // Initialize skeleton accumulator to zero init(skelImagePtr, 0); zeroBorder(subImagePtr); do { erode(subImagePtr, erodedImagePtr); dilate(erodedImagePtr, tempImagePtr); subtract(subImagePtr, tempImagePtr, tempImagePtr); bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr); memcpy(erodedImagePtr, subImagePtr); sum = countNonZero(subImagePtr) | 0; done = (sum | 0) == 0 | 0; } while (!done); } return { skeletonize: skeletonize }; } /* @preserve ASM END */ /* harmony default export */ var skeletonizer = (Skeletonizer); /* eslint-enable eqeqeq */ // CONCATENATED MODULE: ./src/locator/barcode_locator.js var barcode_locator_config; var _currentImageWrapper; var _skelImageWrapper; var _subImageWrapper; var _labelImageWrapper; var _patchGrid; var _patchLabelGrid; var _imageToPatchGrid; var _binaryImageWrapper; var _patchSize; var _canvasContainer = { ctx: { binary: null }, dom: { binary: null } }; var _numPatches = { x: 0, y: 0 }; var _inputImageWrapper; var _skeletonizer; function barcode_locator_initBuffers() { if (barcode_locator_config.halfSample) { _currentImageWrapper = new image_wrapper({ // eslint-disable-next-line no-bitwise x: _inputImageWrapper.size.x / 2 | 0, // eslint-disable-next-line no-bitwise y: _inputImageWrapper.size.y / 2 | 0 }); } else { _currentImageWrapper = _inputImageWrapper; } _patchSize = Object(cv_utils["calculatePatchSize"])(barcode_locator_config.patchSize, _currentImageWrapper.size); // eslint-disable-next-line no-bitwise _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0; // eslint-disable-next-line no-bitwise _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0; _binaryImageWrapper = new image_wrapper(_currentImageWrapper.size, undefined, Uint8Array, false); _labelImageWrapper = new image_wrapper(_patchSize, undefined, Array, true); var skeletonImageData = new ArrayBuffer(64 * 1024); _subImageWrapper = new image_wrapper(_patchSize, new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y)); _skelImageWrapper = new image_wrapper(_patchSize, new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y), undefined, true); _skeletonizer = skeletonizer({ Math: Math, Uint8Array: Uint8Array }, { size: _patchSize.x }, skeletonImageData); _imageToPatchGrid = new image_wrapper({ // eslint-disable-next-line no-bitwise x: _currentImageWrapper.size.x / _subImageWrapper.size.x | 0, // eslint-disable-next-line no-bitwise y: _currentImageWrapper.size.y / _subImageWrapper.size.y | 0 }, undefined, Array, true); _patchGrid = new image_wrapper(_imageToPatchGrid.size, undefined, undefined, true); _patchLabelGrid = new image_wrapper(_imageToPatchGrid.size, undefined, Int32Array, true); } function barcode_locator_initCanvas() { var _config$debug; if (barcode_locator_config.useWorker || typeof document === 'undefined') { return; } _canvasContainer.dom.binary = document.createElement('canvas'); _canvasContainer.dom.binary.className = 'binaryBuffer'; if (false) {} var willReadFrequently = !!barcode_locator_config.willReadFrequently; if (false) {} _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext('2d', { willReadFrequently: willReadFrequently }); _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x; _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y; } /** * Creates a bounding box which encloses all the given patches * @returns {Array} The minimal bounding box */ function boxFromPatches(patches) { var overAvg; var i; var j; var patch; var transMat; var minx = _binaryImageWrapper.size.x; var miny = _binaryImageWrapper.size.y; var maxx = -_binaryImageWrapper.size.x; var maxy = -_binaryImageWrapper.size.y; var box; var scale; // draw all patches which are to be taken into consideration overAvg = 0; for (i = 0; i < patches.length; i++) { patch = patches[i]; overAvg += patch.rad; if (false) {} } overAvg /= patches.length; overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90; if (overAvg < 0) { overAvg += 180; } overAvg = (180 - overAvg) * Math.PI / 180; transMat = esm["a" /* mat2 */].copy(esm["a" /* mat2 */].create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]); // iterate over patches and rotate by angle for (i = 0; i < patches.length; i++) { patch = patches[i]; for (j = 0; j < 4; j++) { esm["b" /* vec2 */].transformMat2(patch.box[j], patch.box[j], transMat); } if (false) {} } // find bounding box for (i = 0; i < patches.length; i++) { patch = patches[i]; for (j = 0; j < 4; j++) { if (patch.box[j][0] < minx) { minx = patch.box[j][0]; } if (patch.box[j][0] > maxx) { maxx = patch.box[j][0]; } if (patch.box[j][1] < miny) { miny = patch.box[j][1]; } if (patch.box[j][1] > maxy) { maxy = patch.box[j][1]; } } } box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]]; if (false) {} scale = barcode_locator_config.halfSample ? 2 : 1; // reverse rotation; transMat = esm["a" /* mat2 */].invert(transMat, transMat); for (j = 0; j < 4; j++) { esm["b" /* vec2 */].transformMat2(box[j], box[j], transMat); } if (false) {} for (j = 0; j < 4; j++) { esm["b" /* vec2 */].scale(box[j], box[j], scale); } return box; } /** * Creates a binary image of the current image */ function binarizeImage() { Object(cv_utils["otsuThreshold"])(_currentImageWrapper, _binaryImageWrapper); _binaryImageWrapper.zeroBorder(); if (false) {} } /** * Iterate over the entire image * extract patches */ function findPatches() { var i; var j; var x; var y; var moments; var patchesFound = []; var rasterizer; var rasterResult; var patch; for (i = 0; i < _numPatches.x; i++) { for (j = 0; j < _numPatches.y; j++) { x = _subImageWrapper.size.x * i; y = _subImageWrapper.size.y * j; // seperate parts skeletonize(x, y); // Rasterize, find individual bars _skelImageWrapper.zeroBorder(); array_helper["a" /* default */].init(_labelImageWrapper.data, 0); rasterizer = locator_rasterizer.create(_skelImageWrapper, _labelImageWrapper); rasterResult = rasterizer.rasterize(0); if (false) {} // calculate moments from the skeletonized patch moments = _labelImageWrapper.moments(rasterResult.count); // extract eligible patches patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y)); } } if (false) {} return patchesFound; } /** * Finds those connected areas which contain at least 6 patches * and returns them ordered DESC by the number of contained patches * @param {Number} maxLabel */ function findBiggestConnectedAreas(maxLabel) { var i; var sum; var labelHist = []; var topLabels = []; for (i = 0; i < maxLabel; i++) { labelHist.push(0); } sum = _patchLabelGrid.data.length; while (sum--) { if (_patchLabelGrid.data[sum] > 0) { labelHist[_patchLabelGrid.data[sum] - 1]++; } } labelHist = labelHist.map(function (val, idx) { return { val: val, label: idx + 1 }; }); labelHist.sort(function (a, b) { return b.val - a.val; }); // extract top areas with at least 6 patches present topLabels = labelHist.filter(function (el) { return el.val >= 5; }); return topLabels; } /** * */ function findBoxes(topLabels, maxLabel) { var i; var j; var sum; var patches = []; var patch; var box; var boxes = []; var hsv = [0, 1, 1]; var rgb = [0, 0, 0]; for (i = 0; i < topLabels.length; i++) { sum = _patchLabelGrid.data.length; patches.length = 0; while (sum--) { if (_patchLabelGrid.data[sum] === topLabels[i].label) { patch = _imageToPatchGrid.data[sum]; patches.push(patch); } } box = boxFromPatches(patches); if (box) { boxes.push(box); // draw patch-labels if requested if (false) {} } } return boxes; } /** * Find similar moments (via cluster) * @param {Object} moments */ function similarMoments(moments) { var clusters = Object(cv_utils["cluster"])(moments, 0.90); var topCluster = Object(cv_utils["topGeneric"])(clusters, 1, function (e) { return e.getPoints().length; }); var points = []; var result = []; if (topCluster.length === 1) { points = topCluster[0].item.getPoints(); for (var i = 0; i < points.length; i++) { result.push(points[i].point); } } return result; } function skeletonize(x, y) { _binaryImageWrapper.subImageAsCopy(_subImageWrapper, Object(cv_utils["imageRef"])(x, y)); _skeletonizer.skeletonize(); // Show skeleton if requested if (false) {} } /** * Extracts and describes those patches which seem to contain a barcode pattern * @param {Array} moments * @param {Object} patchPos, * @param {Number} x * @param {Number} y * @returns {Array} list of patches */ function describePatch(moments, patchPos, x, y) { var k; var avg; var eligibleMoments = []; var matchingMoments; var patch; var patchesFound = []; var minComponentWeight = Math.ceil(_patchSize.x / 3); if (moments.length >= 2) { // only collect moments which's area covers at least minComponentWeight pixels. for (k = 0; k < moments.length; k++) { if (moments[k].m00 > minComponentWeight) { eligibleMoments.push(moments[k]); } } // if at least 2 moments are found which have at least minComponentWeights covered if (eligibleMoments.length >= 2) { matchingMoments = similarMoments(eligibleMoments); avg = 0; // determine the similarity of the moments for (k = 0; k < matchingMoments.length; k++) { var _matchingMoments$k$ra, _matchingMoments$k; avg += (_matchingMoments$k$ra = (_matchingMoments$k = matchingMoments[k]) === null || _matchingMoments$k === void 0 ? void 0 : _matchingMoments$k.rad) !== null && _matchingMoments$k$ra !== void 0 ? _matchingMoments$k$ra : 0; } // Only two of the moments are allowed not to fit into the equation // add the patch to the set if (matchingMoments.length > 1 && matchingMoments.length >= eligibleMoments.length / 4 * 3 && matchingMoments.length > moments.length / 4) { avg /= matchingMoments.length; patch = { index: patchPos[1] * _numPatches.x + patchPos[0], pos: { x: x, y: y }, box: [esm["b" /* vec2 */].clone([x, y]), esm["b" /* vec2 */].clone([x + _subImageWrapper.size.x, y]), esm["b" /* vec2 */].clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]), esm["b" /* vec2 */].clone([x, y + _subImageWrapper.size.y])], moments: matchingMoments, rad: avg, vec: esm["b" /* vec2 */].clone([Math.cos(avg), Math.sin(avg)]) }; patchesFound.push(patch); } } } return patchesFound; } /** * finds patches which are connected and share the same orientation * @param {Object} patchesFound */ function rasterizeAngularSimilarity(patchesFound) { var label = 0; var threshold = 0.95; var currIdx = 0; var j; var patch; var hsv = [0, 1, 1]; var rgb = [0, 0, 0]; function notYetProcessed() { var i; for (i = 0; i < _patchLabelGrid.data.length; i++) { if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) { return i; } } return _patchLabelGrid.data.length; } function trace(currentIdx) { var x; var y; var currentPatch; var idx; var dir; var current = { x: currentIdx % _patchLabelGrid.size.x, y: currentIdx / _patchLabelGrid.size.x | 0 }; var similarity; if (currentIdx < _patchLabelGrid.data.length) { currentPatch = _imageToPatchGrid.data[currentIdx]; // assign label _patchLabelGrid.data[currentIdx] = label; for (dir = 0; dir < locator_tracer.searchDirections.length; dir++) { y = current.y + locator_tracer.searchDirections[dir][0]; x = current.x + locator_tracer.searchDirections[dir][1]; idx = y * _patchLabelGrid.size.x + x; // continue if patch empty if (_patchGrid.data[idx] === 0) { _patchLabelGrid.data[idx] = Number.MAX_VALUE; // eslint-disable-next-line no-continue continue; } if (_patchLabelGrid.data[idx] === 0) { similarity = Math.abs(esm["b" /* vec2 */].dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec)); if (similarity > threshold) { trace(idx); } } } } } // prepare for finding the right patches array_helper["a" /* default */].init(_patchGrid.data, 0); array_helper["a" /* default */].init(_patchLabelGrid.data, 0); array_helper["a" /* default */].init(_imageToPatchGrid.data, null); for (j = 0; j < patchesFound.length; j++) { patch = patchesFound[j]; _imageToPatchGrid.data[patch.index] = patch; _patchGrid.data[patch.index] = 1; } // rasterize the patches found to determine area _patchGrid.zeroBorder(); // eslint-disable-next-line no-cond-assign while ((currIdx = notYetProcessed()) < _patchLabelGrid.data.length) { label++; trace(currIdx); } // draw patch-labels if requested if (false) {} return label; } /* harmony default export */ var barcode_locator = ({ init: function init(inputImageWrapper, config) { barcode_locator_config = config; _inputImageWrapper = inputImageWrapper; barcode_locator_initBuffers(); barcode_locator_initCanvas(); }, locate: function locate() { if (barcode_locator_config.halfSample) { Object(cv_utils["halfSample"])(_inputImageWrapper, _currentImageWrapper); } binarizeImage(); var patchesFound = findPatches(); // return unless 5% or more patches are found if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) { return null; } // rasterrize area by comparing angular similarity; var maxLabel = rasterizeAngularSimilarity(patchesFound); if (maxLabel < 1) { return null; } // search for area with the most patches (biggest connected area) var topLabels = findBiggestConnectedAreas(maxLabel); if (topLabels.length === 0) { return null; } var boxes = findBoxes(topLabels, maxLabel); return boxes; }, checkImageConstraints: function checkImageConstraints(inputStream, config) { var _config$debug2; var patchSize; var width = inputStream.getWidth(); var height = inputStream.getHeight(); var thisHalfSample = config.halfSample ? 0.5 : 1; var area; // calculate width and height based on area if (inputStream.getConfig().area) { area = Object(cv_utils["computeImageArea"])(width, height, inputStream.getConfig().area); inputStream.setTopRight({ x: area.sx, y: area.sy }); inputStream.setCanvasSize({ x: width, y: height }); width = area.sw; height = area.sh; } var size = { x: Math.floor(width * thisHalfSample), y: Math.floor(height * thisHalfSample) }; patchSize = Object(cv_utils["calculatePatchSize"])(config.patchSize, size); if (false) {} inputStream.setWidth(Math.max(Math.floor(Math.floor(size.x / patchSize.x) * (1 / thisHalfSample) * patchSize.x), patchSize.x)); inputStream.setHeight(Math.max(Math.floor(Math.floor(size.y / patchSize.y) * (1 / thisHalfSample) * patchSize.y), patchSize.y)); if (inputStream.getWidth() % patchSize.x === 0 && inputStream.getHeight() % patchSize.y === 0) { return true; } throw new Error("Image dimensions do not comply with the current settings: Width (".concat(width, " )and height (").concat(height, ") must a multiple of ").concat(patchSize.x)); } }); // CONCATENATED MODULE: ./src/QuaggaContext.ts var QuaggaContext_QuaggaContext = /*#__PURE__*/createClass_default()(function QuaggaContext() { classCallCheck_default()(this, QuaggaContext); defineProperty_default()(this, "config", void 0); defineProperty_default()(this, "inputStream", void 0); defineProperty_default()(this, "framegrabber", void 0); defineProperty_default()(this, "inputImageWrapper", void 0); defineProperty_default()(this, "stopped", false); defineProperty_default()(this, "boxSize", void 0); defineProperty_default()(this, "resultCollector", void 0); defineProperty_default()(this, "decoder", void 0); defineProperty_default()(this, "workerPool", []); defineProperty_default()(this, "onUIThread", true); defineProperty_default()(this, "canvasContainer", new QuaggaContext_CanvasContainer()); }); var QuaggaContext_CanvasInfo = /*#__PURE__*/createClass_default()(function CanvasInfo() { classCallCheck_default()(this, CanvasInfo); defineProperty_default()(this, "image", void 0); defineProperty_default()(this, "overlay", void 0); }); var QuaggaContext_CanvasContainer = /*#__PURE__*/createClass_default()(function CanvasContainer() { classCallCheck_default()(this, CanvasContainer); defineProperty_default()(this, "ctx", void 0); defineProperty_default()(this, "dom", void 0); this.ctx = new QuaggaContext_CanvasInfo(); this.dom = new QuaggaContext_CanvasInfo(); }); // CONCATENATED MODULE: ./src/quagga/getViewPort.ts function getViewPort_getViewPort(target) { if (typeof document === 'undefined') { return null; } // Check if target is already a DOM element if (target instanceof HTMLElement && target.nodeName && target.nodeType === 1) { return target; } // Use '#interactive.viewport' as a fallback selector (backwards compatibility) var selector = typeof target === 'string' ? target : '#interactive.viewport'; return document.querySelector(selector); } // CONCATENATED MODULE: ./src/quagga/initBuffers.ts // TODO: need typescript def for BarcodeLocator function initBuffers_initBuffers(inputStream, imageWrapper, locator) { var _config, _config$debug; var inputImageWrapper = imageWrapper || new image_wrapper({ x: inputStream.getWidth(), y: inputStream.getHeight(), type: 'XYSize' }); if (false) {} var boxSize = [esm["b" /* vec2 */].clone([0, 0]), esm["b" /* vec2 */].clone([0, inputImageWrapper.size.y]), esm["b" /* vec2 */].clone([inputImageWrapper.size.x, inputImageWrapper.size.y]), esm["b" /* vec2 */].clone([inputImageWrapper.size.x, 0])]; barcode_locator.init(inputImageWrapper, locator); return { inputImageWrapper: inputImageWrapper, boxSize: boxSize }; } // CONCATENATED MODULE: ./src/quagga/initCanvas.ts function findOrCreateCanvas(selector, className) { var canvas = document.querySelector(selector); if (!canvas) { canvas = document.createElement('canvas'); canvas.className = className; } return canvas; } function getCanvasAndContext(selector, className, options) { var _options$debug; var canvas = findOrCreateCanvas(selector, className); if (false) {} var context = canvas.getContext('2d', { willReadFrequently: options.willReadFrequently }); return { canvas: canvas, context: context }; } function initCanvases(canvasSize, _ref) { var willReadFrequently = _ref.willReadFrequently, debug = _ref.debug; if (typeof document !== 'undefined') { var image = getCanvasAndContext('canvas.imgBuffer', 'imgBuffer', { willReadFrequently: willReadFrequently, debug: debug }); var overlay = getCanvasAndContext('canvas.drawingBuffer', 'drawingBuffer', { willReadFrequently: willReadFrequently, debug: debug }); // eslint-disable-next-line no-multi-assign image.canvas.width = overlay.canvas.width = canvasSize.x; // eslint-disable-next-line no-multi-assign image.canvas.height = overlay.canvas.height = canvasSize.y; return { dom: { image: image.canvas, overlay: overlay.canvas }, ctx: { image: image.context, overlay: overlay.context } }; } return null; } function initCanvas_initCanvas(context) { var _context$config, _context$config$input, _context$config2, _context$config2$inpu, _context$config3, _context$config3$inpu, _context$config4, _context$config4$loca; var viewport = getViewPort_getViewPort(context === null || context === void 0 ? void 0 : (_context$config = context.config) === null || _context$config === void 0 ? void 0 : (_context$config$input = _context$config.inputStream) === null || _context$config$input === void 0 ? void 0 : _context$config$input.target); var type = context === null || context === void 0 ? void 0 : (_context$config2 = context.config) === null || _context$config2 === void 0 ? void 0 : (_context$config2$inpu = _context$config2.inputStream) === null || _context$config2$inpu === void 0 ? void 0 : _context$config2$inpu.type; if (!type) return null; var container = initCanvases(context.inputStream.getCanvasSize(), { willReadFrequently: !!(context !== null && context !== void 0 && (_context$config3 = context.config) !== null && _context$config3 !== void 0 && (_context$config3$inpu = _context$config3.inputStream) !== null && _context$config3$inpu !== void 0 && _context$config3$inpu.willReadFrequently), debug: context === null || context === void 0 ? void 0 : (_context$config4 = context.config) === null || _context$config4 === void 0 ? void 0 : (_context$config4$loca = _context$config4.locator) === null || _context$config4$loca === void 0 ? void 0 : _context$config4$loca.debug }); if (!container) return { dom: { image: null, overlay: null }, ctx: { image: null, overlay: null } }; var dom = container.dom; if (typeof document !== 'undefined') { if (viewport) { if (type === 'ImageStream' && !viewport.contains(dom.image)) { viewport.appendChild(dom.image); } if (!viewport.contains(dom.overlay)) { viewport.appendChild(dom.overlay); } } } return container; } // CONCATENATED MODULE: ./src/quagga/qworker.ts function qworker_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function qworker_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? qworker_ownKeys(Object(t), !0).forEach(function (r) { defineProperty_default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : qworker_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Worker functions. These are straight from the original quagga.js file. * Not presently used, as worker support is non-functional. Keeping them around temporarily * to refer to until it is re-implemented. We may be able to fix/use some of this. */ // TODO: need a typescript interface for FrameGrabber var workerPool = []; function updateWorkers(frameGrabber) { var availableWorker; if (workerPool.length) { availableWorker = workerPool.filter(function (workerThread) { return !workerThread.busy; })[0]; if (availableWorker) { frameGrabber.attachData(availableWorker.imageData); if (frameGrabber.grab()) { availableWorker.busy = true; availableWorker.worker.postMessage({ cmd: 'process', imageData: availableWorker.imageData }, [availableWorker.imageData.buffer]); } return true; } else { return false; } } return null; } function configForWorker(config) { return qworker_objectSpread(qworker_objectSpread({}, config), {}, { inputStream: qworker_objectSpread(qworker_objectSpread({}, config.inputStream), {}, { target: null }) }); } // @ts-ignore function workerInterface(factory) { if (factory) { var Quagga = factory()["default"]; if (!Quagga) { // @ts-ignore self.postMessage({ 'event': 'error', message: 'Quagga could not be created' }); return; } } // @ts-ignore var imageWrapper; // @ts-ignore function onProcessed(result) { self.postMessage({ 'event': 'processed', // @ts-ignore imageData: imageWrapper.data, result: result // @ts-ignore }, [imageWrapper.data.buffer]); } function workerInterfaceReady() { self.postMessage({ 'event': 'initialized', // @ts-ignore imageData: imageWrapper.data // @ts-ignore }, [imageWrapper.data.buffer]); } // @ts-ignore self.onmessage = function (e) { if (e.data.cmd === 'init') { var config = e.data.config; config.numOfWorkers = 0; imageWrapper = new Quagga.ImageWrapper({ x: e.data.size.x, y: e.data.size.y }, new Uint8Array(e.data.imageData)); Quagga.init(config, workerInterfaceReady, imageWrapper); Quagga.onProcessed(onProcessed); } else if (e.data.cmd === 'process') { // @ts-ignore imageWrapper.data = new Uint8Array(e.data.imageData); Quagga.start(); } else if (e.data.cmd === 'setReaders') { Quagga.setReaders(e.data.readers); } else if (e.data.cmd === 'registerReader') { Quagga.registerReader(e.data.name, e.data.reader); } }; } function generateWorkerBlob() { var blob, factorySource; /* jshint ignore:start */ // @ts-ignore if (typeof __factorySource__ !== 'undefined') { // @ts-ignore factorySource = __factorySource__; // eslint-disable-line no-undef } /* jshint ignore:end */ blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'], { type: 'text/javascript' }); return window.URL.createObjectURL(blob); } function initWorker(config, inputStream, cb) { var blobURL = generateWorkerBlob(); var worker = new Worker(blobURL); var workerThread = { worker: worker, imageData: new Uint8Array(inputStream.getWidth() * inputStream.getHeight()), busy: true }; workerThread.worker.onmessage = function (e) { if (e.data.event === 'initialized') { URL.revokeObjectURL(blobURL); workerThread.busy = false; workerThread.imageData = new Uint8Array(e.data.imageData); if (false) {} cb(workerThread); } else if (e.data.event === 'processed') { workerThread.imageData = new Uint8Array(e.data.imageData); workerThread.busy = false; // TODO: how to thread publishResult into here? TypeScript says it's not here. https://github.com/ericblade/quagga2/issues/466#issuecomment-1724248080 says it's necessary? // @ts-ignore if (typeof publishResult !== 'undefined') { // @ts-ignore publishResult(e.data.result, workerThread.imageData); } } else if (e.data.event === 'error') { if (false) {} } }; workerThread.worker.postMessage({ cmd: 'init', size: { x: inputStream.getWidth(), y: inputStream.getHeight() }, imageData: workerThread.imageData, config: configForWorker(config) }, [workerThread.imageData.buffer]); } function adjustWorkerPool(capacity, config, inputStream, cb) { var increaseBy = capacity - workerPool.length; if (increaseBy === 0 && cb) { cb(); } else if (increaseBy < 0) { var workersToTerminate = workerPool.slice(increaseBy); workersToTerminate.forEach(function (workerThread) { workerThread.worker.terminate(); if (false) {} }); workerPool = workerPool.slice(0, increaseBy); if (cb) { cb(); } } else { var workerInitialized = function workerInitialized(workerThread) { workerPool.push(workerThread); if (workerPool.length >= capacity && cb) { cb(); } }; if (config) { for (var i = 0; i < increaseBy; i++) { initWorker(config, inputStream, workerInitialized); } } } } function qworker_setReaders(readers) { workerPool.forEach(function (workerThread) { return workerThread.worker.postMessage({ cmd: 'setReaders', readers: readers }); }); } function qworker_registerReader(name, reader) { workerPool.forEach(function (workerThread) { return workerThread.worker.postMessage({ cmd: 'registerReader', name: name, reader: reader }); }); } // CONCATENATED MODULE: ./src/quagga/setupInputStream.ts // TODO: need to create an InputStream typescript interface, so we don't have an "any" in the next line function setupInputStream() { var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'LiveStream'; var viewport = arguments.length > 1 ? arguments[1] : undefined; var inputStreamFactory = arguments.length > 2 ? arguments[2] : undefined; switch (type) { case 'VideoStream': { var video = document.createElement('video'); return { video: video, inputStream: inputStreamFactory.createVideoStream(video) }; } case 'ImageStream': return { inputStream: inputStreamFactory.createImageStream() }; case 'LiveStream': { var _video = null; if (viewport) { _video = viewport.querySelector('video'); if (!_video) { _video = document.createElement('video'); viewport.appendChild(_video); } } return { video: _video, inputStream: inputStreamFactory.createLiveStream(_video) }; } default: console.error("* setupInputStream invalid type ".concat(type)); return { video: null, inputStream: null }; } } // CONCATENATED MODULE: ./src/quagga/transform.ts /* eslint-disable no-param-reassign */ function moveBox(box, xOffset, yOffset) { var corner = box.length; while (corner--) { box[corner][0] += xOffset; box[corner][1] += yOffset; } } function moveLine(line, xOffset, yOffset) { line[0].x += xOffset; line[0].y += yOffset; line[1].x += xOffset; line[1].y += yOffset; } // CONCATENATED MODULE: ./src/quagga/quagga.ts var quagga_Quagga = /*#__PURE__*/function () { function Quagga() { var _this = this; classCallCheck_default()(this, Quagga); defineProperty_default()(this, "context", new QuaggaContext_QuaggaContext()); defineProperty_default()(this, "canRecord", function (callback) { var _this$context$config; if (!_this.context.config) { return; } barcode_locator.checkImageConstraints(_this.context.inputStream, (_this$context$config = _this.context.config) === null || _this$context$config === void 0 ? void 0 : _this$context$config.locator); _this.initCanvas(); _this.context.framegrabber = frame_grabber_default.a.create(_this.context.inputStream, _this.context.canvasContainer.dom.image); if (_this.context.config.numOfWorkers === undefined) { _this.context.config.numOfWorkers = 0; } adjustWorkerPool(_this.context.config.numOfWorkers, _this.context.config, _this.context.inputStream, function () { var _this$context$config2; if (((_this$context$config2 = _this.context.config) === null || _this$context$config2 === void 0 ? void 0 : _this$context$config2.numOfWorkers) === 0) { _this.initializeData(); } _this.ready(callback); }); }); defineProperty_default()(this, "update", function () { if (_this.context.onUIThread) { var workersUpdated = updateWorkers(_this.context.framegrabber); if (!workersUpdated) { var _this$context$inputIm; _this.context.framegrabber.attachData((_this$context$inputIm = _this.context.inputImageWrapper) === null || _this$context$inputIm === void 0 ? void 0 : _this$context$inputIm.data); if (_this.context.framegrabber.grab()) { if (!workersUpdated) { _this.locateAndDecode(); } } } } else { var _this$context$inputIm2; _this.context.framegrabber.attachData((_this$context$inputIm2 = _this.context.inputImageWrapper) === null || _this$context$inputIm2 === void 0 ? void 0 : _this$context$inputIm2.data); _this.context.framegrabber.grab(); _this.locateAndDecode(); } }); } return createClass_default()(Quagga, [{ key: "initBuffers", value: function initBuffers(imageWrapper) { if (!this.context.config) { return; } var _initBuffers2 = initBuffers_initBuffers(this.context.inputStream, imageWrapper, this.context.config.locator), inputImageWrapper = _initBuffers2.inputImageWrapper, boxSize = _initBuffers2.boxSize; this.context.inputImageWrapper = inputImageWrapper; this.context.boxSize = boxSize; } }, { key: "initializeData", value: function initializeData(imageWrapper) { if (!this.context.config) { return; } this.initBuffers(imageWrapper); this.context.decoder = barcode_decoder.create(this.context.config.decoder, this.context.inputImageWrapper); } }, { key: "getViewPort", value: function getViewPort() { if (!this.context.config || !this.context.config.inputStream) { return null; } var target = this.context.config.inputStream.target; return getViewPort_getViewPort(target); } }, { key: "ready", value: function ready(callback) { this.context.inputStream.play(); callback(); } }, { key: "initCanvas", value: function initCanvas() { var container = initCanvas_initCanvas(this.context); if (!container) { return; } var ctx = container.ctx, dom = container.dom; this.context.canvasContainer.dom.image = dom.image; this.context.canvasContainer.dom.overlay = dom.overlay; this.context.canvasContainer.ctx.image = ctx.image; this.context.canvasContainer.ctx.overlay = ctx.overlay; } }, { key: "initInputStream", value: function initInputStream(callback) { if (!this.context.config || !this.context.config.inputStream) { return; } var _this$context$config$ = this.context.config.inputStream, inputType = _this$context$config$.type, constraints = _this$context$config$.constraints; var _setupInputStream = setupInputStream(inputType, this.getViewPort(), input_stream["a" /* default */]), video = _setupInputStream.video, inputStream = _setupInputStream.inputStream; if (inputType === 'LiveStream' && video) { camera_access.request(video, constraints).then(function () { return inputStream.trigger('canrecord'); })["catch"](function (err) { return callback(err); }); } if (inputStream) { inputStream.setAttribute('preload', 'auto'); inputStream.setInputStream(this.context.config.inputStream); inputStream.addEventListener('canrecord', this.canRecord.bind(undefined, callback)); } this.context.inputStream = inputStream; } }, { key: "getBoundingBoxes", value: function getBoundingBoxes() { var _this$context$config3; return (_this$context$config3 = this.context.config) !== null && _this$context$config3 !== void 0 && _this$context$config3.locate ? barcode_locator.locate() : [[esm["b" /* vec2 */].clone(this.context.boxSize[0]), esm["b" /* vec2 */].clone(this.context.boxSize[1]), esm["b" /* vec2 */].clone(this.context.boxSize[2]), esm["b" /* vec2 */].clone(this.context.boxSize[3])]]; } // TODO: need a typescript type for result here. // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types }, { key: "transformResult", value: function transformResult(result) { var _this2 = this; var topRight = this.context.inputStream.getTopRight(); var xOffset = topRight.x; var yOffset = topRight.y; if (xOffset === 0 && yOffset === 0) { return; } if (result.barcodes) { // TODO: BarcodeInfo may not be the right type here. result.barcodes.forEach(function (barcode) { return _this2.transformResult(barcode); }); } if (result.line && result.line.length === 2) { moveLine(result.line, xOffset, yOffset); } if (result.box) { moveBox(result.box, xOffset, yOffset); } if (result.boxes && result.boxes.length > 0) { for (var i = 0; i < result.boxes.length; i++) { moveBox(result.boxes[i], xOffset, yOffset); } } } }, { key: "addResult", value: function addResult(result, imageData) { var _this3 = this; if (!imageData || !this.context.resultCollector) { return; } // TODO: Figure out what data structure holds a "barcodes" result, if any... if (result.barcodes) { result.barcodes.filter(function (barcode) { return barcode.codeResult; }).forEach(function (barcode) { return _this3.addResult(barcode, imageData); }); } else if (result.codeResult) { this.context.resultCollector.addResult(imageData, this.context.inputStream.getCanvasSize(), result.codeResult); } } // eslint-disable-next-line class-methods-use-this }, { key: "hasCodeResult", value: function hasCodeResult(result) { return !!(result && (result.barcodes ? result.barcodes.some(function (barcode) { return barcode.codeResult; }) : result.codeResult)); } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types }, { key: "publishResult", value: function publishResult() { var result = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var imageData = arguments.length > 1 ? arguments[1] : undefined; var resultToPublish = result; if (result && this.context.onUIThread) { var _result$barcodes; this.transformResult(result); this.addResult(result, imageData); // @ts-ignore resultToPublish = (result === null || result === void 0 ? void 0 : (_result$barcodes = result.barcodes) === null || _result$barcodes === void 0 ? void 0 : _result$barcodes.length) > 0 ? result.barcodes : result; } events.publish('processed', resultToPublish); if (this.hasCodeResult(result)) { events.publish('detected', resultToPublish); } } }, { key: "locateAndDecode", value: function () { var _locateAndDecode = asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee() { var boxes, _this$context$inputIm3, decodeResult, imageResult, _this$context$inputIm4, _t; return regenerator_default.a.wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: boxes = this.getBoundingBoxes(); if (!boxes) { _context.next = 3; break; } _context.next = 1; return this.context.decoder.decodeFromBoundingBoxes(boxes); case 1: _t = _context.sent; if (_t) { _context.next = 2; break; } _t = {}; case 2: decodeResult = _t; decodeResult.boxes = boxes; this.publishResult(decodeResult, (_this$context$inputIm3 = this.context.inputImageWrapper) === null || _this$context$inputIm3 === void 0 ? void 0 : _this$context$inputIm3.data); _context.next = 5; break; case 3: _context.next = 4; return this.context.decoder.decodeFromImage(this.context.inputImageWrapper); case 4: imageResult = _context.sent; if (imageResult) { this.publishResult(imageResult, (_this$context$inputIm4 = this.context.inputImageWrapper) === null || _this$context$inputIm4 === void 0 ? void 0 : _this$context$inputIm4.data); } else { this.publishResult(); } case 5: case "end": return _context.stop(); } }, _callee, this); })); function locateAndDecode() { return _locateAndDecode.apply(this, arguments); } return locateAndDecode; }() }, { key: "startContinuousUpdate", value: function startContinuousUpdate() { var _this$context$config4, _this4 = this; var next = null; var delay = 1000 / (((_this$context$config4 = this.context.config) === null || _this$context$config4 === void 0 ? void 0 : _this$context$config4.frequency) || 60); this.context.stopped = false; var context = this.context; var _newFrame = function newFrame(timestamp) { next = next || timestamp; if (!context.stopped) { if (timestamp >= next) { next += delay; _this4.update(); } window.requestAnimationFrame(_newFrame); } }; _newFrame(performance.now()); } }, { key: "start", value: function start() { var _this$context$config5, _this$context$config6; if (this.context.onUIThread && ((_this$context$config5 = this.context.config) === null || _this$context$config5 === void 0 ? void 0 : (_this$context$config6 = _this$context$config5.inputStream) === null || _this$context$config6 === void 0 ? void 0 : _this$context$config6.type) === 'LiveStream') { this.startContinuousUpdate(); } else { this.update(); } } }, { key: "stop", value: function () { var _stop = asyncToGenerator_default()(/*#__PURE__*/regenerator_default.a.mark(function _callee2() { var _this$context$config7; return regenerator_default.a.wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: this.context.stopped = true; adjustWorkerPool(0); if (!((_this$context$config7 = this.context.config) !== null && _this$context$config7 !== void 0 && _this$context$config7.inputStream && this.context.config.inputStream.type === 'LiveStream')) { _context2.next = 2; break; } _context2.next = 1; return camera_access.release(); case 1: this.context.inputStream.clearEventHandlers(); case 2: case "end": return _context2.stop(); } }, _callee2, this); })); function stop() { return _stop.apply(this, arguments); } return stop; }() }, { key: "setReaders", value: function setReaders(readers) { if (this.context.decoder) { this.context.decoder.setReaders(readers); } qworker_setReaders(readers); } }, { key: "registerReader", value: function registerReader(name, reader) { barcode_decoder.registerReader(name, reader); if (this.context.decoder) { this.context.decoder.registerReader(name, reader); } qworker_registerReader(name, reader); } }]); }(); // CONCATENATED MODULE: ./src/quagga.js // eslint-disable-line no-unused-vars var instance = new quagga_Quagga(); var _context = instance.context; var QuaggaJSStaticInterface = { init: function init(config, cb, imageWrapper) { var quaggaInstance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : instance; var promise; if (!cb) { promise = new Promise(function (resolve, reject) { cb = function cb(err) { err ? reject(err) : resolve(); }; }); } quaggaInstance.context.config = merge_default()({}, config_config, config); // TODO #179: pending restructure in Issue #179, we are temp disabling workers if (quaggaInstance.context.config.numOfWorkers > 0) { quaggaInstance.context.config.numOfWorkers = 0; } if (imageWrapper) { quaggaInstance.context.onUIThread = false; quaggaInstance.initializeData(imageWrapper); if (cb) { cb(); } } else { quaggaInstance.initInputStream(cb); } return promise; }, start: function start() { return instance.start(); }, stop: function stop() { return instance.stop(); }, pause: function pause() { _context.stopped = true; }, onDetected: function onDetected(callback) { if (!callback || typeof callback !== 'function' && (typeof_default()(callback) !== 'object' || !callback.callback)) { console.trace('* warning: Quagga.onDetected called with invalid callback, ignoring'); return; } events.subscribe('detected', callback); }, offDetected: function offDetected(callback) { events.unsubscribe('detected', callback); }, onProcessed: function onProcessed(callback) { if (!callback || typeof callback !== 'function' && (typeof_default()(callback) !== 'object' || !callback.callback)) { console.trace('* warning: Quagga.onProcessed called with invalid callback, ignoring'); return; } events.subscribe('processed', callback); }, offProcessed: function offProcessed(callback) { events.unsubscribe('processed', callback); }, setReaders: function setReaders(readers) { if (!readers) { console.trace('* warning: Quagga.setReaders called with no readers, ignoring'); return; } instance.setReaders(readers); }, registerReader: function registerReader(name, reader) { if (!name) { console.trace('* warning: Quagga.registerReader called with no name, ignoring'); return; } if (!reader) { console.trace('* warning: Quagga.registerReader called with no reader, ignoring'); return; } instance.registerReader(name, reader); }, registerResultCollector: function registerResultCollector(resultCollector) { if (resultCollector && typeof resultCollector.addResult === 'function') { _context.resultCollector = resultCollector; } }, get canvas() { return _context.canvasContainer; }, decodeSingle: function decodeSingle(config, resultCallback) { var _this = this; var quaggaInstance = new quagga_Quagga(); config = merge_default()({ inputStream: { type: 'ImageStream', sequence: false, size: 800, src: config.src }, numOfWorkers: false ? undefined : 1, locator: { halfSample: false } }, config); // TODO #175: restructure worker support so that it will work with typescript using worker-loader // https://webpack.js.org/loaders/worker-loader/ if (config.numOfWorkers > 0) { config.numOfWorkers = 0; } // workers require Worker and Blob support presently, so if no Blob or Worker then set // workers to 0. if (config.numOfWorkers > 0 && (typeof Blob === 'undefined' || typeof Worker === 'undefined')) { console.warn('* no Worker and/or Blob support - forcing numOfWorkers to 0'); config.numOfWorkers = 0; } return new Promise(function (resolve, reject) { try { _this.init(config, function () { events.once('processed', function (result) { quaggaInstance.stop(); if (resultCallback) { resultCallback.call(null, result); } resolve(result); }, true); quaggaInstance.start(); }, null, quaggaInstance); } catch (err) { reject(err); } }); }, // add the usually expected "default" for use with require, build step won't allow us to // write to module.exports so do it here. get default() { return QuaggaJSStaticInterface; }, Readers: reader_namespaceObject, CameraAccess: camera_access, ImageDebug: image_debug, ImageWrapper: image_wrapper, ResultCollector: result_collector }; /* harmony default export */ var quagga = __webpack_exports__["default"] = (QuaggaJSStaticInterface); // export BarcodeReader and other utilities for external plugins /***/ }) /******/ ])["default"]));