diff --git a/.github/workflows/mt-data-api-sdk-js.yml b/.github/workflows/mt-data-api-sdk-js.yml index 67b3480..7e7eaef 100644 --- a/.github/workflows/mt-data-api-sdk-js.yml +++ b/.github/workflows/mt-data-api-sdk-js.yml @@ -26,9 +26,6 @@ jobs: cache: npm node-version: 18 # # 'sudo' was not transformed because there is no suitable equivalent in GitHub Actions - - run: curl -sL https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2 | tar -xj - - run: sudo mv phantomjs-1.9.8-linux-x86_64 /usr/local/share/phantomjs - - run: sudo ln -sf /usr/local/share/phantomjs/bin/phantomjs /usr/local/bin/phantomjs - run: npm install -g grunt-cli - run: npm install -g bower - run: bower install diff --git a/Dockerfile b/Dockerfile index 480b81c..2a6967e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,8 +14,5 @@ RUN set -ex \ && npm install -g grunt-cli \ && npm install -g bower -RUN curl -sL https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2 | tar -xj && \ - mv phantomjs-1.9.8-linux-x86_64 /usr/local/share/phantomjs && \ - ln -sf /usr/local/share/phantomjs/bin/phantomjs /usr/local/bin/phantomjs ENV OPENSSL_CONF=/etc/ssl/ diff --git a/Gruntfile.js b/Gruntfile.js index c87bd23..e0798a1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -61,12 +61,12 @@ module.exports = function( grunt ) { }, preprocess: { "data-api-browser": { - dest: "mt-static/data-api/v6/js/mt-data-api.js", - src: "src/data-api/v6/mt-data-api.js" + dest: "mt-static/data-api/v7/js/mt-data-api.js", + src: "src/data-api/v7/mt-data-api.js" }, "data-api-node": { - dest: "node-lib/data-api/v6/node-mt-data-api.js", - src: "src/data-api/v6/node-mt-data-api.js" + dest: "node-lib/data-api/v7/node-mt-data-api.js", + src: "src/data-api/v7/node-mt-data-api.js" }, "node-bootstrap": { dest: "node-lib/bootstrap.js", @@ -74,7 +74,7 @@ module.exports = function( grunt ) { }, "data-api-coverage-endpoints": { dest: ".src/data-api/coverage/endpoints.js", - src: "src/data-api/v6/endpoints.js" + src: "src/data-api/v7/endpoints.js" } }, watch: { @@ -96,13 +96,13 @@ module.exports = function( grunt ) { uglify: { "data-api-browser": { files: { - "mt-static/data-api/v6/js/mt-data-api.min.js": [ - "mt-static/data-api/v6/js/mt-data-api.js" + "mt-static/data-api/v7/js/mt-data-api.min.js": [ + "mt-static/data-api/v7/js/mt-data-api.js" ] }, options: { banner: "/* Copyright (c) Six Apart Ltd.\n * This file is generated by Movable Type DataAPI SDK for JavaScript.\n * Consult the source files for their respective licenses and copyrights.\n * <%= pkg.homepage %>\n */\n", - sourceMap: "mt-static/data-api/v6/js/mt-data-api.min.map", + sourceMap: "mt-static/data-api/v7/js/mt-data-api.min.map", sourceMapPrefix: 4, sourceMappingURL: "mt-data-api.min.map", report: "min", @@ -183,7 +183,7 @@ module.exports = function( grunt ) { }, jasmine: { "data-api": { - src: ["mt-static/data-api/v6/js/mt-data-api.js"], + src: ["mt-static/data-api/v7/js/mt-data-api.js"], options: { specs: "spec/data-api/**/*.js", host: "http://localhost:<%= connect.jasmine.options.port %>/", diff --git a/Makefile b/Makefile index d39fa77..4b51468 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,8 @@ build: test: -grunt test -JSON_VERSION := v4 -JSON_BASE_URL := http://mt-app.movabletype.test/cgi-bin/MT7-R4601/mt-data-api.cgi +JSON_VERSION := v7 +JSON_BASE_URL := http://localhost/cgi-bin/mt/mt-data-api.cgi json: perl tools/make-json.pl --version=$(JSON_VERSION) --base-url=$(JSON_BASE_URL) > src/data-api/$(JSON_VERSION)/endpoints.json diff --git a/mt-static/data-api/v7/js/mt-data-api.js b/mt-static/data-api/v7/js/mt-data-api.js new file mode 100644 index 0000000..f4251b7 --- /dev/null +++ b/mt-static/data-api/v7/js/mt-data-api.js @@ -0,0 +1,5716 @@ +/* + * Movable Type DataAPI SDK for JavaScript v6 + * https://github.com/movabletype/mt-data-api-sdk-js + * Copyright (c) Six Apart Ltd. + * This program is distributed under the terms of the MIT license. + * + * Includes jQuery JavaScript Library in some parts. + * http://jquery.com/ + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + */ + +;(function(window, factory) { + var DataAPI = factory(window); + + if ( typeof module === "object" && typeof module.exports === "object" ) { + module.exports = DataAPI; + } else { + if ( typeof define === "function" && define.amd ) { + define("mt-data-api", [], function() { + return DataAPI; + }); + } + } +}(typeof window === "undefined" ? undefined : window, function(window, undefined) { + +"use strict"; + +/** + * @namespace MT + */ + +/** + * The MT.DataAPI is a client class for accessing to the Movable Type DataAPI. + * @class DataAPI + * @constructor + * @param {Object} options Options. + * @param {String} options.clientId Client ID + * This value allows alphanumeric, (_)underscore, (-)dash. + * @param {String} options.baseUrl The absolute CGI URL of the DataAPI. + * (e.g. http://example.com/mt/mt-data-api.cgi) + * @param {String} [options.format] The format to serialize. + * @param {String} [options.sessionStore] The session store. + * In browser, the cookie is used by default. + * @param {String} [options.sessionDomain] The session domain. + * When using the cookie, this value is used as cookie domain. + * @param {String} [options.sessionPath] The session path + * When using the cookie, this value is used as cookie path. + * @param {Boolean} [options.async] If true, use asynchronous + * XMLHttpRequest. The default value is the true. + * @param {Number} [options.timeout] The number of milliseconds a + * request can take before automatically being terminated. + * The default value is not set up, browser's default is used. + * @param {Boolean} [options.cache] If false, add an additional + * parameter "_" to request to avoid cache. The default value + * is the true. + * @param {Boolean} [options.withoutAuthorization] If true, + * the "X-MT-Authorization" request header is not sent even if + * already got accessToken. The default value is the false. + * @param {Boolean} [options.loadPluginEndpoints] If true, load + * endpoint data extended by plugin and generate methods to + * access that endpoint automatically. The default value is + * the true. + * (However even if this option's value is false, you are able + * to use all the methods to access to core endpoint.) + * @param {Boolean} [options.suppressResponseCodes] If true, add + * suppressResponseCodes parameter to each request. As a result, + * the Data API always returns 200 as HTTP response code. + * The default value is not set up. + * The default value is the false when requested via XMLHttpRequest + * or IFRAME. The default value is the true when requested via + * XDomainRequest. + * @param {Boolean} [options.crossOrigin] If true, requests are sent as + * a cross-domain request. The default value is assigned + * automatically by document's URL and baseUrl. + * @param {Boolean(} [options.disableFormData] If false,use FormData + * class when available that. The default value is the false. + */ +var DataAPI = function(options) { + var i, k, + requireds = ['clientId', 'baseUrl']; + + this.o = { + clientId: undefined, + baseUrl: undefined, + format: undefined, + sessionStore: undefined, + sessionDomain: undefined, + sessionPath: undefined, + async: true, + timeout: undefined, + cache: true, + withoutAuthorization: false, + processOneTimeTokenOnInitialize: true, + loadPluginEndpoints: true, + suppressResponseCodes: undefined, + crossOrigin: undefined, + disableFormData: false + }; + for (k in options) { + if (k in this.o) { + this.o[k] = options[k]; + } + else { + throw 'Unkown option: ' + k; + } + } + + for (i = 0; i < requireds.length; i++) { + if (! this.o[requireds[i]]) { + throw 'The "' + requireds[i] + '" is required.'; + } + } + + this.callbacks = {}; + this.tokenData = null; + this.iframeId = 0; + + this._initOptions(); + + if (this.o.loadPluginEndpoints) { + this.loadEndpoints({ + excludeComponents: 'core' + }); + } + + if (this.o.processOneTimeTokenOnInitialize) { + this._storeOneTimeToken(); + } + + this.trigger('initialize'); +}; + + +/** + * The API version. + * @property version + * @static + * @private + * @type Number + */ +DataAPI.version = 6; + +/** + * The key of access token of this api object. + * This value is used for the session store. + * @property accessTokenKey + * @static + * @private + * @type String + */ +DataAPI.accessTokenKey = 'mt_data_api_access_token'; + +/** + * The name prefix for iframe that created to upload asset. + * @property iframePrefix + * @static + * @private + * @type String + */ +DataAPI.iframePrefix = 'mt_data_api_iframe_'; + +/** + * The default format that serializes data. + * @property defaultFormat + * @static + * @private + * @type String + */ +DataAPI.defaultFormat = 'json'; + +/** + * The default session store. + * @property defaultSessionStore + * @static + * @private + * @type String + */ +DataAPI.defaultSessionStore = window.document ? 'cookie-encrypted' : 'fs'; + +/** + * Class level callbacks function data. + * @property callbacks + * @static + * @private + * @type Object + */ +DataAPI.callbacks = {}; + +/** + * Available formats that serialize data. + * @property formats + * @static + * @private + * @type Object + */ +DataAPI.formats = { + json: { + fileExtension: 'json', + mimeType: 'application/json', + serialize: function() { + return JSON.stringify.apply(JSON, arguments); + }, + unserialize: function() { + return JSON.parse.apply(JSON, arguments); + } + } +}; + +/** + * Available session stores. + * @property sessionStores + * @static + * @private + * @type Object + */ +DataAPI.sessionStores = {}; +;(function() { + +function fetchCookieValues(name) { + var cookie = Cookie.fetch(name); + + if (! cookie) { + return {}; + } + + try { + return JSON.parse(cookie.value); + } + catch (e) { + return { + data: cookie.value + }; + } +} + +function fillinDefaultCookieValues(values, o) { + var path = values.path, + currentPath = extractPath(documentUrl()); + if (! path || path.length > currentPath.length) { + path = currentPath; + } + + return { + data: values.data, + domain: ( typeof o === 'undefined' ? undefined : o.sessionDomain ) || values.domain || undefined, + path: ( typeof o === 'undefined' ? undefined : o.sessionPath ) || path + }; +} + +function documentUrl() { + if (! window.location) { + return ''; + } + + var loc; + + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + + return loc; +} + +function extractPath(url) { + var urlRegexp = /^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/, + match = urlRegexp.exec(url.toLowerCase()); + + return match ? match[1] : null; +} + +DataAPI.sessionStores['cookie'] = { + save: function(name, data, remember) { + var expires = remember ? new Date(new Date().getTime() + 315360000000) : undefined, // after 10 years + values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + Cookie.bake(name, JSON.stringify(values), values.domain, values.path, expires); + }, + fetch: function(name) { + fetchCookieValues(name).data; + }, + remove: function(name) { + var values = fillinDefaultCookieValues(fetchCookieValues(name)); + Cookie.bake(name, '', values.domain, values.path, new Date(0)); + } +}; + +})(); + +;(function() { + +/** @fileOverview Javascript cryptography implementation. + * + * Crush to remove comments, shorten variable names and + * generally reduce transmission size. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +"use strict"; +/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */ +/*global document, window, escape, unescape */ + +/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */ +var sjcl = { + /** @namespace Symmetric ciphers. */ + cipher: {}, + + /** @namespace Hash functions. Right now only SHA256 is implemented. */ + hash: {}, + + /** @namespace Block cipher modes of operation. */ + mode: {}, + + /** @namespace Miscellaneous. HMAC and PBKDF2. */ + misc: {}, + + /** + * @namespace Bit array encoders and decoders. + * + * @description + * The members of this namespace are functions which translate between + * SJCL's bitArrays and other objects (usually strings). Because it + * isn't always clear which direction is encoding and which is decoding, + * the method names are "fromBits" and "toBits". + */ + codec: {}, + + /** @namespace Exceptions. */ + exception: { + /** @class Ciphertext is corrupt. */ + corrupt: function(message) { + this.toString = function() { return "CORRUPT: "+this.message; }; + this.message = message; + }, + + /** @class Invalid parameter. */ + invalid: function(message) { + this.toString = function() { return "INVALID: "+this.message; }; + this.message = message; + }, + + /** @class Bug or missing feature in SJCL. */ + bug: function(message) { + this.toString = function() { return "BUG: "+this.message; }; + this.message = message; + }, + + /** @class Something isn't ready. */ + notReady: function(message) { + this.toString = function() { return "NOT READY: "+this.message; }; + this.message = message; + } + } +}; +/** @fileOverview Low-level AES implementation. + * + * This file contains a low-level implementation of AES, optimized for + * size and for efficiency on several browsers. It is based on + * OpenSSL's aes_core.c, a public-domain implementation by Vincent + * Rijmen, Antoon Bosselaers and Paulo Barreto. + * + * An older version of this implementation is available in the public + * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, + * Stanford University 2008-2010 and BSD-licensed for liability + * reasons. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** + * Schedule out an AES key for both encryption and decryption. This + * is a low-level class. Use a cipher mode to do bulk encryption. + * + * @constructor + * @param {Array} key The key as an array of 4, 6 or 8 words. + * + * @class Advanced Encryption Standard (low-level interface) + */ +sjcl.cipher.aes = function (key) { + if (!this._tables[0][0][0]) { + this._precompute(); + } + + var i, j, tmp, + encKey, decKey, + sbox = this._tables[0][4], decTable = this._tables[1], + keyLen = key.length, rcon = 1; + + if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { + throw new sjcl.exception.invalid("invalid aes key size"); + } + + this._key = [encKey = key.slice(0), decKey = []]; + + // schedule encryption keys + for (i = keyLen; i < 4 * keyLen + 28; i++) { + tmp = encKey[i-1]; + + // apply sbox + if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) { + tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255]; + + // shift rows and add rcon + if (i%keyLen === 0) { + tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24; + rcon = rcon<<1 ^ (rcon>>7)*283; + } + } + + encKey[i] = encKey[i-keyLen] ^ tmp; + } + + // schedule decryption keys + for (j = 0; i; j++, i--) { + tmp = encKey[j&3 ? i : i - 4]; + if (i<=4 || j<4) { + decKey[j] = tmp; + } else { + decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^ + decTable[1][sbox[tmp>>16 & 255]] ^ + decTable[2][sbox[tmp>>8 & 255]] ^ + decTable[3][sbox[tmp & 255]]; + } + } +}; + +sjcl.cipher.aes.prototype = { + // public + /* Something like this might appear here eventually + name: "AES", + blockSize: 4, + keySizes: [4,6,8], + */ + + /** + * Encrypt an array of 4 big-endian words. + * @param {Array} data The plaintext. + * @return {Array} The ciphertext. + */ + encrypt:function (data) { return this._crypt(data,0); }, + + /** + * Decrypt an array of 4 big-endian words. + * @param {Array} data The ciphertext. + * @return {Array} The plaintext. + */ + decrypt:function (data) { return this._crypt(data,1); }, + + /** + * The expanded S-box and inverse S-box tables. These will be computed + * on the client so that we don't have to send them down the wire. + * + * There are two tables, _tables[0] is for encryption and + * _tables[1] is for decryption. + * + * The first 4 sub-tables are the expanded S-box with MixColumns. The + * last (_tables[01][4]) is the S-box itself. + * + * @private + */ + _tables: [[[],[],[],[],[]],[[],[],[],[],[]]], + + /** + * Expand the S-box tables. + * + * @private + */ + _precompute: function () { + var encTable = this._tables[0], decTable = this._tables[1], + sbox = encTable[4], sboxInv = decTable[4], + i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec; + + // Compute double and third tables + for (i = 0; i < 256; i++) { + th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i; + } + + for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { + // Compute sbox + s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4; + s = s>>8 ^ s&255 ^ 99; + sbox[x] = s; + sboxInv[s] = x; + + // Compute MixColumns + x8 = d[x4 = d[x2 = d[x]]]; + tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100; + tEnc = d[s]*0x101 ^ s*0x1010100; + + for (i = 0; i < 4; i++) { + encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8; + decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8; + } + } + + // Compactify. Considerable speedup on Firefox. + for (i = 0; i < 5; i++) { + encTable[i] = encTable[i].slice(0); + decTable[i] = decTable[i].slice(0); + } + }, + + /** + * Encryption and decryption core. + * @param {Array} input Four words to be encrypted or decrypted. + * @param dir The direction, 0 for encrypt and 1 for decrypt. + * @return {Array} The four encrypted or decrypted words. + * @private + */ + _crypt:function (input, dir) { + if (input.length !== 4) { + throw new sjcl.exception.invalid("invalid aes block size"); + } + + var key = this._key[dir], + // state variables a,b,c,d are loaded with pre-whitened data + a = input[0] ^ key[0], + b = input[dir ? 3 : 1] ^ key[1], + c = input[2] ^ key[2], + d = input[dir ? 1 : 3] ^ key[3], + a2, b2, c2, + + nInnerRounds = key.length/4 - 2, + i, + kIndex = 4, + out = [0,0,0,0], + table = this._tables[dir], + + // load up the tables + t0 = table[0], + t1 = table[1], + t2 = table[2], + t3 = table[3], + sbox = table[4]; + + // Inner rounds. Cribbed from OpenSSL. + for (i = 0; i < nInnerRounds; i++) { + a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex]; + b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1]; + c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2]; + d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3]; + kIndex += 4; + a=a2; b=b2; c=c2; + } + + // Last round. + for (i = 0; i < 4; i++) { + out[dir ? 3&-i : i] = + sbox[a>>>24 ]<<24 ^ + sbox[b>>16 & 255]<<16 ^ + sbox[c>>8 & 255]<<8 ^ + sbox[d & 255] ^ + key[kIndex++]; + a2=a; a=b; b=c; c=d; d=a2; + } + + return out; + } +}; + +/** @fileOverview Arrays of bits, encoded as arrays of Numbers. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace Arrays of bits, encoded as arrays of Numbers. + * + * @description + *

+ * These objects are the currency accepted by SJCL's crypto functions. + *

+ * + *

+ * Most of our crypto primitives operate on arrays of 4-byte words internally, + * but many of them can take arguments that are not a multiple of 4 bytes. + * This library encodes arrays of bits (whose size need not be a multiple of 8 + * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an + * array of words, 32 bits at a time. Since the words are double-precision + * floating point numbers, they fit some extra data. We use this (in a private, + * possibly-changing manner) to encode the number of bits actually present + * in the last word of the array. + *

+ * + *

+ * Because bitwise ops clear this out-of-band data, these arrays can be passed + * to ciphers like AES which want arrays of words. + *

+ */ +sjcl.bitArray = { + /** + * Array slices in units of bits. + * @param {bitArray a} The array to slice. + * @param {Number} bstart The offset to the start of the slice, in bits. + * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined, + * slice until the end of the array. + * @return {bitArray} The requested slice. + */ + bitSlice: function (a, bstart, bend) { + a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1); + return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart); + }, + + /** + * Concatenate two bit arrays. + * @param {bitArray} a1 The first array. + * @param {bitArray} a2 The second array. + * @return {bitArray} The concatenation of a1 and a2. + */ + concat: function (a1, a2) { + if (a1.length === 0 || a2.length === 0) { + return a1.concat(a2); + } + + var out, i, last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last); + if (shift === 32) { + return a1.concat(a2); + } else { + return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1)); + } + }, + + /** + * Find the length of an array of bits. + * @param {bitArray} a The array. + * @return {Number} The length of a, in bits. + */ + bitLength: function (a) { + var l = a.length, x; + if (l === 0) { return 0; } + x = a[l - 1]; + return (l-1) * 32 + sjcl.bitArray.getPartial(x); + }, + + /** + * Truncate an array. + * @param {bitArray} a The array. + * @param {Number} len The length to truncate to, in bits. + * @return {bitArray} A new array, truncated to len bits. + */ + clamp: function (a, len) { + if (a.length * 32 < len) { return a; } + a = a.slice(0, Math.ceil(len / 32)); + var l = a.length; + len = len & 31; + if (l > 0 && len) { + a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1); + } + return a; + }, + + /** + * Make a partial word for a bit array. + * @param {Number} len The number of bits in the word. + * @param {Number} x The bits. + * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side. + * @return {Number} The partial word. + */ + partial: function (len, x, _end) { + if (len === 32) { return x; } + return (_end ? x|0 : x << (32-len)) + len * 0x10000000000; + }, + + /** + * Get the number of bits used by a partial word. + * @param {Number} x The partial word. + * @return {Number} The number of bits used by the partial word. + */ + getPartial: function (x) { + return Math.round(x/0x10000000000) || 32; + }, + + /** + * Compare two arrays for equality in a predictable amount of time. + * @param {bitArray} a The first array. + * @param {bitArray} b The second array. + * @return {boolean} true if a == b; false otherwise. + */ + equal: function (a, b) { + if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) { + return false; + } + var x = 0, i; + for (i=0; i= 32; shift -= 32) { + out.push(carry); + carry = 0; + } + if (shift === 0) { + return out.concat(a); + } + + for (i=0; i>>shift); + carry = a[i] << (32-shift); + } + last2 = a.length ? a[a.length-1] : 0; + shift2 = sjcl.bitArray.getPartial(last2); + out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1)); + return out; + }, + + /** xor a block of 4 words together. + * @private + */ + _xor4: function(x,y) { + return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]]; + } +}; +/** @fileOverview Bit array codec implementations. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace UTF-8 strings */ +sjcl.codec.utf8String = { + /** Convert from a bitArray to a UTF-8 string. */ + fromBits: function (arr) { + var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp; + for (i=0; i>> 24); + tmp <<= 8; + } + return decodeURIComponent(escape(out)); + }, + + /** Convert from a UTF-8 string to a bitArray. */ + toBits: function (str) { + str = unescape(encodeURIComponent(str)); + var out = [], i, tmp=0; + for (i=0; i>>bits) >>> 26); + if (bits < 6) { + ta = arr[i] << (6-bits); + bits += 26; + i++; + } else { + ta <<= 6; + bits -= 6; + } + } + while ((out.length & 3) && !_noEquals) { out += "="; } + return out; + }, + + /** Convert from a base64 string to a bitArray */ + toBits: function(str) { + str = str.replace(/\s|=/g,''); + var out = [], i, bits=0, c = sjcl.codec.base64._chars, ta=0, x; + for (i=0; i 26) { + bits -= 26; + out.push(ta ^ x>>>bits); + ta = x << (32-bits); + } else { + bits += 6; + ta ^= x << (32-bits); + } + } + if (bits&56) { + out.push(sjcl.bitArray.partial(bits&56, ta, 1)); + } + return out; + } +}; +/** @fileOverview Javascript SHA-256 implementation. + * + * An older version of this implementation is available in the public + * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, + * Stanford University 2008-2010 and BSD-licensed for liability + * reasons. + * + * Special thanks to Aldo Cortesi for pointing out several bugs in + * this code. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** + * Context for a SHA-256 operation in progress. + * @constructor + * @class Secure Hash Algorithm, 256 bits. + */ +sjcl.hash.sha256 = function (hash) { + if (!this._key[0]) { this._precompute(); } + if (hash) { + this._h = hash._h.slice(0); + this._buffer = hash._buffer.slice(0); + this._length = hash._length; + } else { + this.reset(); + } +}; + +/** + * Hash a string or an array of words. + * @static + * @param {bitArray|String} data the data to hash. + * @return {bitArray} The hash value, an array of 16 big-endian words. + */ +sjcl.hash.sha256.hash = function (data) { + return (new sjcl.hash.sha256()).update(data).finalize(); +}; + +sjcl.hash.sha256.prototype = { + /** + * The hash's block size, in bits. + * @constant + */ + blockSize: 512, + + /** + * Reset the hash state. + * @return this + */ + reset:function () { + this._h = this._init.slice(0); + this._buffer = []; + this._length = 0; + return this; + }, + + /** + * Input several words to the hash. + * @param {bitArray|String} data the data to hash. + * @return this + */ + update: function (data) { + if (typeof data === "string") { + data = sjcl.codec.utf8String.toBits(data); + } + var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data), + ol = this._length, + nl = this._length = ol + sjcl.bitArray.bitLength(data); + for (i = 512+ol & -512; i <= nl; i+= 512) { + this._block(b.splice(0,16)); + } + return this; + }, + + /** + * Complete hashing and output the hash value. + * @return {bitArray} The hash value, an array of 16 big-endian words. + */ + finalize:function () { + var i, b = this._buffer, h = this._h; + + // Round out and push the buffer + b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]); + + // Round out the buffer to a multiple of 16 words, less the 2 length words. + for (i = b.length + 2; i & 15; i++) { + b.push(0); + } + + // append the length + b.push(Math.floor(this._length / 0x100000000)); + b.push(this._length | 0); + + while (b.length) { + this._block(b.splice(0,16)); + } + + this.reset(); + return h; + }, + + /** + * The SHA-256 initialization vector, to be precomputed. + * @private + */ + _init:[], + /* + _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19], + */ + + /** + * The SHA-256 hash key, to be precomputed. + * @private + */ + _key:[], + /* + _key: + [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2], + */ + + + /** + * Function to precompute _init and _key. + * @private + */ + _precompute: function () { + var i = 0, prime = 2, factor; + + function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; } + + outer: for (; i<64; prime++) { + for (factor=2; factor*factor <= prime; factor++) { + if (prime % factor === 0) { + // not a prime + continue outer; + } + } + + if (i<8) { + this._init[i] = frac(Math.pow(prime, 1/2)); + } + this._key[i] = frac(Math.pow(prime, 1/3)); + i++; + } + }, + + /** + * Perform one cycle of SHA-256. + * @param {bitArray} words one block of words. + * @private + */ + _block:function (words) { + var i, tmp, a, b, + w = words.slice(0), + h = this._h, + k = this._key, + h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3], + h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7]; + + /* Rationale for placement of |0 : + * If a value can overflow is original 32 bits by a factor of more than a few + * million (2^23 ish), there is a possibility that it might overflow the + * 53-bit mantissa and lose precision. + * + * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that + * propagates around the loop, and on the hash state h[]. I don't believe + * that the clamps on h4 and on h0 are strictly necessary, but it's close + * (for h4 anyway), and better safe than sorry. + * + * The clamps on h[] are necessary for the output to be correct even in the + * common case and for short inputs. + */ + for (i=0; i<64; i++) { + // load up the input word for this round + if (i<16) { + tmp = w[i]; + } else { + a = w[(i+1 ) & 15]; + b = w[(i+14) & 15]; + tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) + + (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) + + w[i&15] + w[(i+9) & 15]) | 0; + } + + tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0; + + // shift register + h7 = h6; h6 = h5; h5 = h4; + h4 = h3 + tmp | 0; + h3 = h2; h2 = h1; h1 = h0; + + h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0; + } + + h[0] = h[0]+h0 | 0; + h[1] = h[1]+h1 | 0; + h[2] = h[2]+h2 | 0; + h[3] = h[3]+h3 | 0; + h[4] = h[4]+h4 | 0; + h[5] = h[5]+h5 | 0; + h[6] = h[6]+h6 | 0; + h[7] = h[7]+h7 | 0; + } +}; + + +/** @fileOverview CCM mode implementation. + * + * Special thanks to Roy Nicholson for pointing out a bug in our + * implementation. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace CTR mode with CBC MAC. */ +sjcl.mode.ccm = { + /** The name of the mode. + * @constant + */ + name: "ccm", + + /** Encrypt in CCM mode. + * @static + * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes. + * @param {bitArray} plaintext The plaintext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [adata=[]] The authenticated data. + * @param {Number} [tlen=64] the desired tag length, in bits. + * @return {bitArray} The encrypted data, an array of bytes. + */ + encrypt: function(prf, plaintext, iv, adata, tlen) { + var L, i, out = plaintext.slice(0), tag, w=sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(out) / 8; + tlen = tlen || 64; + adata = adata || []; + + if (ivl < 7) { + throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"); + } + + // compute the length of the length + for (L=2; L<4 && ol >>> 8*L; L++) {} + if (L < 15 - ivl) { L = 15-ivl; } + iv = w.clamp(iv,8*(15-L)); + + // compute the tag + tag = sjcl.mode.ccm._computeTag(prf, plaintext, iv, adata, tlen, L); + + // encrypt + out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L); + + return w.concat(out.data, out.tag); + }, + + /** Decrypt in CCM mode. + * @static + * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes. + * @param {bitArray} ciphertext The ciphertext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [[]] adata The authenticated data. + * @param {Number} [64] tlen the desired tag length, in bits. + * @return {bitArray} The decrypted data. + */ + decrypt: function(prf, ciphertext, iv, adata, tlen) { + tlen = tlen || 64; + adata = adata || []; + var L, i, + w=sjcl.bitArray, + ivl = w.bitLength(iv) / 8, + ol = w.bitLength(ciphertext), + out = w.clamp(ciphertext, ol - tlen), + tag = w.bitSlice(ciphertext, ol - tlen), tag2; + + + ol = (ol - tlen) / 8; + + if (ivl < 7) { + throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"); + } + + // compute the length of the length + for (L=2; L<4 && ol >>> 8*L; L++) {} + if (L < 15 - ivl) { L = 15-ivl; } + iv = w.clamp(iv,8*(15-L)); + + // decrypt + out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L); + + // check the tag + tag2 = sjcl.mode.ccm._computeTag(prf, out.data, iv, adata, tlen, L); + if (!w.equal(out.tag, tag2)) { + throw new sjcl.exception.corrupt("ccm: tag doesn't match"); + } + + return out.data; + }, + + /* Compute the (unencrypted) authentication tag, according to the CCM specification + * @param {Object} prf The pseudorandom function. + * @param {bitArray} plaintext The plaintext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} adata The authenticated data. + * @param {Number} tlen the desired tag length, in bits. + * @return {bitArray} The tag, but not yet encrypted. + * @private + */ + _computeTag: function(prf, plaintext, iv, adata, tlen, L) { + // compute B[0] + var q, mac, field = 0, offset = 24, tmp, i, macData = [], w=sjcl.bitArray, xor = w._xor4; + + tlen /= 8; + + // check tag length and message length + if (tlen % 2 || tlen < 4 || tlen > 16) { + throw new sjcl.exception.invalid("ccm: invalid tag length"); + } + + if (adata.length > 0xFFFFFFFF || plaintext.length > 0xFFFFFFFF) { + // I don't want to deal with extracting high words from doubles. + throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data"); + } + + // mac the flags + mac = [w.partial(8, (adata.length ? 1<<6 : 0) | (tlen-2) << 2 | L-1)]; + + // mac the iv and length + mac = w.concat(mac, iv); + mac[3] |= w.bitLength(plaintext)/8; + mac = prf.encrypt(mac); + + + if (adata.length) { + // mac the associated data. start with its length... + tmp = w.bitLength(adata)/8; + if (tmp <= 0xFEFF) { + macData = [w.partial(16, tmp)]; + } else if (tmp <= 0xFFFFFFFF) { + macData = w.concat([w.partial(16,0xFFFE)], [tmp]); + } // else ... + + // mac the data itself + macData = w.concat(macData, adata); + for (i=0; i bs) { + key = Hash.hash(key); + } + + for (i=0; i + * This random number generator is a derivative of Ferguson and Schneier's + * generator Fortuna. It collects entropy from various events into several + * pools, implemented by streaming SHA-256 instances. It differs from + * ordinary Fortuna in a few ways, though. + *

+ * + *

+ * Most importantly, it has an entropy estimator. This is present because + * there is a strong conflict here between making the generator available + * as soon as possible, and making sure that it doesn't "run on empty". + * In Fortuna, there is a saved state file, and the system is likely to have + * time to warm up. + *

+ * + *

+ * Second, because users are unlikely to stay on the page for very long, + * and to speed startup time, the number of pools increases logarithmically: + * a new pool is created when the previous one is actually used for a reseed. + * This gives the same asymptotic guarantees as Fortuna, but gives more + * entropy to early reseeds. + *

+ * + *

+ * The entire mechanism here feels pretty klunky. Furthermore, there are + * several improvements that should be made, including support for + * dedicated cryptographic functions that may be present in some browsers; + * state files in local storage; cookies containing randomness; etc. So + * look for improvements in future versions. + *

+ */ +sjcl.random = { + /** Generate several random words, and return them in an array + * @param {Number} nwords The number of words to generate. + */ + randomWords: function (nwords, paranoia) { + var out = [], i, readiness = this.isReady(paranoia), g; + + if (readiness === this._NOT_READY) { + throw new sjcl.exception.notReady("generator isn't seeded"); + } else if (readiness & this._REQUIRES_RESEED) { + this._reseedFromPools(!(readiness & this._READY)); + } + + for (i=0; i0) { + estimatedEntropy++; + tmp = tmp >>> 1; + } + } + } + this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data)); + } + break; + + case "string": + if (estimatedEntropy === undefined) { + /* English text has just over 1 bit per character of entropy. + * But this might be HTML or something, and have far less + * entropy than English... Oh well, let's just say one bit. + */ + estimatedEntropy = data.length; + } + this._pools[robin].update([id,this._eventId++,3,estimatedEntropy,t,data.length]); + this._pools[robin].update(data); + break; + + default: + err=1; + } + if (err) { + throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string"); + } + + /* record the new strength */ + this._poolEntropy[robin] += estimatedEntropy; + this._poolStrength += estimatedEntropy; + + /* fire off events */ + if (oldReady === this._NOT_READY) { + if (this.isReady() !== this._NOT_READY) { + this._fireEvent("seeded", Math.max(this._strength, this._poolStrength)); + } + this._fireEvent("progress", this.getProgress()); + } + }, + + /** Is the generator ready? */ + isReady: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ (paranoia !== undefined) ? paranoia : this._defaultParanoia ]; + + if (this._strength && this._strength >= entropyRequired) { + return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ? + this._REQUIRES_RESEED | this._READY : + this._READY; + } else { + return (this._poolStrength >= entropyRequired) ? + this._REQUIRES_RESEED | this._NOT_READY : + this._NOT_READY; + } + }, + + /** Get the generator's progress toward readiness, as a fraction */ + getProgress: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ paranoia ? paranoia : this._defaultParanoia ]; + + if (this._strength >= entropyRequired) { + return 1.0; + } else { + return (this._poolStrength > entropyRequired) ? + 1.0 : + this._poolStrength / entropyRequired; + } + }, + + /** start the built-in entropy collectors */ + startCollectors: function () { + if (this._collectorsStarted) { return; } + + if (window.addEventListener) { + window.addEventListener("load", this._loadTimeCollector, false); + window.addEventListener("mousemove", this._mouseCollector, false); + } else if (document.attachEvent) { + document.attachEvent("onload", this._loadTimeCollector); + document.attachEvent("onmousemove", this._mouseCollector); + } + else { + throw new sjcl.exception.bug("can't attach event"); + } + + this._collectorsStarted = true; + }, + + /** stop the built-in entropy collectors */ + stopCollectors: function () { + if (!this._collectorsStarted) { return; } + + if (window.removeEventListener) { + window.removeEventListener("load", this._loadTimeCollector, false); + window.removeEventListener("mousemove", this._mouseCollector, false); + } else if (window.detachEvent) { + window.detachEvent("onload", this._loadTimeCollector); + window.detachEvent("onmousemove", this._mouseCollector); + } + this._collectorsStarted = false; + }, + + /* use a cookie to store entropy. + useCookie: function (all_cookies) { + throw new sjcl.exception.bug("random: useCookie is unimplemented"); + },*/ + + /** add an event listener for progress or seeded-ness. */ + addEventListener: function (name, callback) { + this._callbacks[name][this._callbackI++] = callback; + }, + + /** remove an event listener for progress or seeded-ness */ + removeEventListener: function (name, cb) { + var i, j, cbs=this._callbacks[name], jsTemp=[]; + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j) && cbs[j] === cb) { + jsTemp.push(j); + } + } + + for (i=0; i= 1 << this._pools.length) { + this._pools.push(new sjcl.hash.sha256()); + this._poolEntropy.push(0); + } + + /* how strong was this reseed? */ + this._poolStrength -= strength; + if (strength > this._strength) { + this._strength = strength; + } + + this._reseedCount ++; + this._reseed(reseedData); + }, + + _mouseCollector: function (ev) { + var x = ev.x || ev.clientX || ev.offsetX || 0, y = ev.y || ev.clientY || ev.offsetY || 0; + sjcl.random.addEntropy([x,y], 2, "mouse"); + }, + + _loadTimeCollector: function (ev) { + sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime"); + }, + + _fireEvent: function (name, arg) { + var j, cbs=sjcl.random._callbacks[name], cbsTemp=[]; + /* TODO: there is a race condition between removing collectors and firing them */ + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j)) { + cbsTemp.push(cbs[j]); + } + } + + for (j=0; j 4)) { + throw new sjcl.exception.invalid("json encrypt: invalid parameters"); + } + + if (typeof password === "string") { + tmp = sjcl.misc.cachedPbkdf2(password, p); + password = tmp.key.slice(0,p.ks/32); + p.salt = tmp.salt; + } + if (typeof plaintext === "string") { + plaintext = sjcl.codec.utf8String.toBits(plaintext); + } + if (typeof adata === "string") { + adata = sjcl.codec.utf8String.toBits(adata); + } + prp = new sjcl.cipher[p.cipher](password); + + /* return the json data */ + j._add(rp, p); + rp.key = password; + + /* do the encryption */ + p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, adata, p.ts); + + //return j.encode(j._subtract(p, j.defaults)); + return j.encode(p); + }, + + /** Simple decryption function. + * @param {String|bitArray} password The password or key. + * @param {String} ciphertext The ciphertext to decrypt. + * @param {Object} [params] Additional non-default parameters. + * @param {Object} [rp] A returned object with filled parameters. + * @return {String} The plaintext. + * @throws {sjcl.exception.invalid} if a parameter is invalid. + * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt. + */ + decrypt: function (password, ciphertext, params, rp) { + params = params || {}; + rp = rp || {}; + + var j = sjcl.json, p = j._add(j._add(j._add({},j.defaults),j.decode(ciphertext)), params, true), ct, tmp, prp, adata=p.adata; + if (typeof p.salt === "string") { + p.salt = sjcl.codec.base64.toBits(p.salt); + } + if (typeof p.iv === "string") { + p.iv = sjcl.codec.base64.toBits(p.iv); + } + + if (!sjcl.mode[p.mode] || + !sjcl.cipher[p.cipher] || + (typeof password === "string" && p.iter <= 100) || + (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) || + (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) || + (!p.iv) || + (p.iv.length < 2 || p.iv.length > 4)) { + throw new sjcl.exception.invalid("json decrypt: invalid parameters"); + } + + if (typeof password === "string") { + tmp = sjcl.misc.cachedPbkdf2(password, p); + password = tmp.key.slice(0,p.ks/32); + p.salt = tmp.salt; + } + if (typeof adata === "string") { + adata = sjcl.codec.utf8String.toBits(adata); + } + prp = new sjcl.cipher[p.cipher](password); + + /* do the decryption */ + ct = sjcl.mode[p.mode].decrypt(prp, p.ct, p.iv, adata, p.ts); + + /* return the json data */ + j._add(rp, p); + rp.key = password; + + return sjcl.codec.utf8String.fromBits(ct); + }, + + /** Encode a flat structure into a JSON string. + * @param {Object} obj The structure to encode. + * @return {String} A JSON string. + * @throws {sjcl.exception.invalid} if obj has a non-alphanumeric property. + * @throws {sjcl.exception.bug} if a parameter has an unsupported type. + */ + encode: function (obj) { + var i, out='{', comma=''; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + if (!i.match(/^[a-z0-9]+$/i)) { + throw new sjcl.exception.invalid("json encode: invalid property name"); + } + out += comma + '"' + i + '":'; + comma = ','; + + switch (typeof obj[i]) { + case 'number': + case 'boolean': + out += obj[i]; + break; + + case 'string': + out += '"' + escape(obj[i]) + '"'; + break; + + case 'object': + out += '"' + sjcl.codec.base64.fromBits(obj[i],1) + '"'; + break; + + default: + throw new sjcl.exception.bug("json encode: unsupported type"); + } + } + } + return out+'}'; + }, + + /** Decode a simple (flat) JSON string into a structure. The ciphertext, + * adata, salt and iv will be base64-decoded. + * @param {String} str The string. + * @return {Object} The decoded structure. + * @throws {sjcl.exception.invalid} if str isn't (simple) JSON. + */ + decode: function (str) { + str = str.replace(/\s/g,''); + if (!str.match(/^\{.*\}$/)) { + throw new sjcl.exception.invalid("json decode: this isn't json!"); + } + var a = str.replace(/^\{|\}$/g, '').split(/,/), out={}, i, m; + for (i=0; i currentPath.length) { + path = currentPath; + } + + return { + encryptKey: values.encryptKey || generateKey(), + storageKey: values.storageKey || generateKey(), + domain: o.sessionDomain || values.domain || undefined, + path: o.sessionPath || path + }; +} + +function documentUrl() { + if (! window.location) { + return ''; + } + + var loc; + + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + + return loc; +} + +function extractPath(url) { + var urlRegexp = /^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/, + match = urlRegexp.exec(url.toLowerCase()); + + return match ? match[1] : null; +} + +// DEPRECATED +// This method will be removed in future version. +function buildLocalStorageNames(name, path) { + function buildName(path) { + return name + ':' + path; + } + + var names = []; + + if (! path) { + return [name]; + } + + while (true) { + names.push(buildName(path)); + if (path === '/') { + break; + } + path = path.replace(/[^\/]+\/$/, ''); + } + return names; +} + +// DEPRECATED +// This method will be removed in future version. +function localStorageNames(name, o) { + return buildLocalStorageNames(name, o.sessionPath || extractPath(documentUrl())+"/"); +} + +if (! localStorage) { + DataAPI.sessionStores['cookie-encrypted'] = { + save: function(){}, + fetch: function(){}, + remove: function(){} + }; +} +else { + DataAPI.sessionStores['cookie-encrypted'] = { + save: function(name, data, remember) { + var expires = remember ? new Date(new Date().getTime() + 315360000000) : undefined, // after 10 years + values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + + Cookie.bake(cookieName(name), JSON.stringify(values), values.domain, values.path, expires); + localStorage.setItem(values.storageKey, sjcl.encrypt(values.encryptKey, data)); + }, + fetch: function(name) { + var values = fetchCookieValues(name), + i, names, data; + + // Backward compatibility + if (! values.storageKey) { + names = localStorageNames(name, this.o); + for (i = 0; i < names.length; i++) { + if (localStorage.getItem(names[i])) { + values.storageKey = names[i]; + break; + } + } + } + + data = localStorage.getItem(values.storageKey); + + try { + return sjcl.decrypt(values.encryptKey, data); + } + catch (e) { + } + + return null; + }, + remove: function(name) { + var values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + + Cookie.bake(cookieName(name), '', values.domain, values.path, new Date(0)); + + if (values.storageKey) { + localStorage.removeItem(values.storageKey); + } + } + }; +} + +})(); + + +/** + * Register callback to class. + * @method on + * @static + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * var callback = function() { + * // Do stuff + * }; + * DataAPI.on(eventName, callback); + */ +DataAPI.on = function(key, callback) { + if (! this.callbacks[key]) { + this.callbacks[key] = []; + } + + this.callbacks[key].push(callback); +}; + +/** + * Deregister callback from class. + * @method off + * @static + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * DataAPI.off(eventName, callback); + */ +DataAPI.off = function(key, callback) { + var i, callbacks; + + if (callback) { + callbacks = this.callbacks[key] || []; + + for (i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + callbacks.splice(i, 1); + break; + } + } + } + else { + delete this.callbacks[key]; + } +}; + +/** + * Register formats that serialize data. + * @method registerFormat + * @static + * @param {String} key Format name + * @param {Object} spec + * @param {String} spec.fileExtension Extension + * @param {String} spec.mimeType MIME type + * @param {String} spec.serialize Serializing method + * @param {String} spec.unserialize Unserializing method + * @category core + */ +DataAPI.registerFormat = function(key, spec) { + this.formats[key] = spec; +}; + +/** + * Register session store. + * @method registerSessionStore + * @static + * @param {String} key Session store name + * @param {Object} spec + * @param {String} spec.save Saving method + * @param {String} spec.fetch Fetching method + * @param {String} spec.remove Removing method + * @category core + */ +DataAPI.registerSessionStore = function(key, spec) { + this.sessionStores[key] = spec; +}; + +/** + * Get default format of this class. + * @method getDefaultFormat + * @static + * @return {Object} Format + * @category core + */ +DataAPI.getDefaultFormat = function() { + return this.formats[this.defaultFormat]; +}; + +/** + * Get default session store of this class. + * @method getDefaultSessionStore + * @static + * @return {Object} Format + * @category core + */ +DataAPI.getDefaultSessionStore = function() { + return this.sessionStores[this.defaultSessionStore]; +}; + +DataAPI.prototype = { + constructor: DataAPI.prototype.constructor, + + _initOptions: function() { + this._initCrossDomainOption(); + }, + + _initCrossDomainOption: function() { + var loc, locParts, baseUrl, baseParts, + urlRegexp = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + + if ( window.document && typeof this.o.crossOrigin === 'undefined') { + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + locParts = urlRegexp.exec( loc.toLowerCase() ) || []; + + baseUrl = this.o.baseUrl.replace(/^\/\//, locParts[1]).toLowerCase(); + baseParts = urlRegexp.exec( baseUrl ); + + this.o.crossOrigin = !!( baseParts && + ( baseParts[ 1 ] !== locParts[ 1 ] || baseParts[ 2 ] !== locParts[ 2 ] || + ( baseParts[ 3 ] || ( baseParts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( locParts[ 3 ] || ( locParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + }, + + /** + * Get authorization URL. + * @method getAuthorizationUrl + * @param {String} redirectUrl The user is redirected to this URL with "#_login" if authorization succeeded. + * @return {String} Authorization URL + * @category core + */ + getAuthorizationUrl: function(redirectUrl) { + return this.o.baseUrl.replace(/\/*$/, '/') + + 'v' + this.getVersion() + + '/authorization' + + '?clientId=' + this.o.clientId + + '&redirectUrl=' + redirectUrl; + }, + + _getCurrentEpoch: function() { + return Math.round(new Date().getTime() / 1000); + }, + + _getNextIframeName: function() { + return this.constructor.iframePrefix + (++this.iframeId); + }, + + /** + * Get API version. + * @method getVersion + * @return {String} API version + * @category core + */ + getVersion: function() { + return this.constructor.version; + }, + + /** + * Get application key of this object. + * @method getAppKey + * @return {String} Application key + * This value is used for the session store. + * @category core + */ + getAppKey: function() { + return this.constructor.accessTokenKey + '_' + this.o.clientId; + }, + + _findFormatInternal: function(mimeType) { + if (! mimeType) { + return null; + } + + for (var k in this.constructor.formats) { + if (this.constructor.formats[k].mimeType === mimeType) { + return this.constructor.formats[k]; + } + } + + return null; + }, + + /** + * Get format by MIME Type. + * @method findFormat + * @param {String} mimeType MIME Type + * @return {Object|null} Format. Return null if any format is not found. + * @category core + */ + findFormat: function(mimeType) { + var format = this._findFormatInternal(mimeType); + if (! format && mimeType.indexOf(';')) { + format = this._findFormatInternal(mimeType.replace(/\s*;.*/, '')); + } + + return format; + }, + + /** + * Get current format of this object. + * @method getCurrentFormat + * @return {Object} Format + * @category core + */ + getCurrentFormat: function() { + return this.constructor.formats[this.o.format] || + this.constructor.getDefaultFormat(); + }, + + /** + * Serialize data. + * @method serializeData + * @param {Object} data The data to serialize + * @return {String} Serialized data + * @category core + */ + serializeData: function() { + return this.getCurrentFormat().serialize.apply(this, arguments); + }, + + /** + * Unserialize data. + * @method unserializeData + * @param {String} data The data to unserialize + * @return {Object} Unserialized data + * @category core + */ + unserializeData: function() { + return this.getCurrentFormat().unserialize.apply(this, arguments); + }, + + /** + * Get current session store of this object. + * @method getCurrentSessionStore + * @return {Object} Session store + * @category core + */ + getCurrentSessionStore: function() { + return this.constructor.sessionStores[this.o.sessionStore] || + this.constructor.getDefaultSessionStore(); + }, + + /** + * Save session data. + * @method saveSessionData + * @param {String} name The name of session + * @param {Object} data The data to save + * @category core + */ + saveSessionData: function() { + return this.getCurrentSessionStore().save.apply(this, arguments); + }, + + /** + * Fetch session data. + * @method fetchSessionData + * @param {String} name The name of session + * @return {String} The data fetched + * @category core + */ + fetchSessionData: function() { + return this.getCurrentSessionStore().fetch.apply(this, arguments); + }, + + /** + * Remove session data. + * @method removeSessionData + * @param {String} name The name of session + * @category core + */ + removeSessionData: function() { + return this.getCurrentSessionStore().remove.apply(this, arguments); + }, + + /** + * Store token data via current session store. + * @method storeTokenData + * @param {Object} tokenData The token data + * @param {String} tokenData.accessToken access token + * @param {String} tokenData.expiresIn The number of seconds + * until access token becomes invalid + * @param {String} [tokenData.sessionId] session ID + * @category core + */ + storeTokenData: function(tokenData) { + var oldData = this.getTokenData(); + if (! tokenData.sessionId && oldData && oldData.sessionId) { + tokenData.sessionId = oldData.sessionId; + } + + tokenData.startTime = this._getCurrentEpoch(); + this.saveSessionData( + this.getAppKey(), + this.serializeData(tokenData), + tokenData.sessionId && tokenData.remember + ); + this.tokenData = tokenData; + }, + + /** + * Clear token data from object and session store. + * @method clearTokenData + * @category core + */ + clearTokenData: function() { + this.removeSessionData(this.getAppKey()); + this.tokenData = null; + }, + + _updateTokenFromDefaultCookie: function() { + var defaultKey = this.constructor.accessTokenKey, + defaultCookie = Cookie.fetch(defaultKey), + defaultToken; + + if (! defaultCookie) { + return null; + } + + Cookie.bake(defaultKey, '', undefined, '/', new Date(0)); + + try { + defaultToken = this.unserializeData(defaultCookie.value); + } + catch (e) { + return null; + } + + this.storeTokenData(defaultToken); + return defaultToken; + }, + + _hasOneTimeToken: function() { + return window.location && window.location.hash.indexOf('#_ott_') === 0; + }, + + _storeOneTimeToken: function() { + var token, m; + + if (! window.location) { + return undefined; + } + + m = window.location.hash.match(/^#_ott_(.*)/); + if (! m) { + return undefined; + } + + token = { + oneTimeToken: m[1] + }; + window.location.hash = '#_login'; + + this.storeTokenData(token); + return token; + }, + + /** + * Get token data via current session store. + * @method getTokenData + * @return {Object} Token data + * @category core + */ + getTokenData: function() { + var token = this.tokenData; + + if (! token) { + if (window.location) { + if (window.location.hash === '#_login') { + try { + token = this._updateTokenFromDefaultCookie(); + } + catch (e) { + } + } + else if (this._hasOneTimeToken()) { + token = this._storeOneTimeToken(); + } + } + + if (! token) { + try { + token = this.unserializeData(this.fetchSessionData(this.getAppKey())); + } + catch (e) { + } + } + } + + if (token && + 'startTime' in token && + 'expiresIn' in token && + (token.startTime + token.expiresIn < this._getCurrentEpoch())) { + delete token.accessToken; + delete token.startTime; + delete token.expiresIn; + } + + return this.tokenData = token || null; + }, + + /** + * Get authorization request header. + * @method getAuthorizationHeader + * @return {String|null} Header string. Return null if api object has no token. + * @category core + */ + getAuthorizationHeader: function(key) { + var tokenData = this.getTokenData(); + if (tokenData) { + return 'MTAuth ' + key + '=' + (tokenData[key] || ''); + } + + return ''; + }, + + /** + * Bind parameters to route spec. + * @method bindEndpointParams + * @param {String} route Specification of route + * @param {Object} params parameters + * @param {Number|Object|Function} params.{key} Value to bind + * @return {String} Endpoint to witch parameters was bound + * @example + * api.bindEndpointParams('/sites/:site_id/entries/:entry_id/comments/:comment_id', { + * blog_id: 1, + * entry_id: {id: 1}, + * comment_id: functioin(){ return 1; } + * }); + * @category core + */ + bindEndpointParams: function(route, params) { + var k, v; + + for (k in params) { + v = params[k]; + if (typeof v === 'object') { + if (typeof v.id === 'function') { + v = v.id(); + } + else { + v = v.id; + } + } + if (typeof v === 'function') { + v = v(); + } + route = route.replace(new RegExp(':' + k), v); + } + return route; + }, + + _isElement: function(e, name) { + if (! e || typeof e !== 'object') { + return false; + } + var n = e.nodeName; + return n && n.toLowerCase() === name; + }, + + _isFormElement: function(e) { + return this._isElement(e, 'form'); + }, + + _isInputElement: function(e) { + return this._isElement(e, 'input'); + }, + + _isFileInputElement: function(e) { + return this._isInputElement(e) && e.type.toLowerCase() === 'file'; + }, + + _serializeObject: function(v) { + function f(n) { + return n < 10 ? '0' + n : n; + } + + function iso8601Date(v) { + if (! isFinite(v.valueOf())) { + return ''; + } + + var off, + tz = v.getTimezoneOffset(); + if(tz === 0) { + off = 'Z'; + } + else { + off = (tz > 0 ? '-': '+'); + tz = Math.abs(tz); + off += f(Math.floor(tz / 60)) + ':' + f(tz % 60); + } + + return v.getFullYear() + '-' + + f(v.getMonth() + 1) + '-' + + f(v.getDate()) + 'T' + + f(v.getHours()) + ':' + + f(v.getMinutes()) + ':' + + f(v.getSeconds()) + off; + } + + if (this._isFormElement(v)) { + v = this._serializeFormElementToObject(v); + } + + var type = typeof v; + if (type === 'undefined' || v === null || (type === 'number' && ! isFinite(v))) { + return ''; + } + else if (type === 'boolean') { + return v ? '1' : ''; + } + else if (v instanceof Date) { + return iso8601Date(v); + } + else if (window.File && v instanceof window.File) { + return v; + } + else if (this._isFileInputElement(v)) { + return v.files[0]; + } + else if (type === 'object') { + return this.serializeData(v, function(key, value) { + if (this[key] instanceof Date) { + return iso8601Date(this[key]); + } + return value; + }); + } + else { + return v; + } + }, + + _serializeParams: function(params) { + if (! params) { + return params; + } + if (typeof params === 'string') { + return params; + } + if (this._isFormElement(params)) { + params = this._serializeFormElementToObject(params); + } + + var k, + str = ''; + for (k in params) { + if (! params.hasOwnProperty(k)) { + continue; + } + if (str) { + str += '&'; + } + + str += + encodeURIComponent(k) + '=' + + encodeURIComponent(this._serializeObject(params[k])); + } + return str; + }, + + _unserializeParams: function(params) { + if (typeof params !== 'string') { + return params; + } + + var i, pair, + data = {}, + values = params.split('&'); + + for(i = 0; i < values.length; i++) { + pair = values[i].split('='); + data[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + + return data; + }, + + _newXMLHttpRequestStandard: function() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} + }, + + _newXMLHttpRequestActiveX: function() { + try { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } catch( e ) {} + }, + + /** + * Create XMLHttpRequest by higher browser compatibility way. + * @method newXMLHttpRequest + * @return {XMLHttpRequest} Created XMLHttpRequest + * @category core + */ + newXMLHttpRequest: function() { + return this._newXMLHttpRequestStandard() || + this._newXMLHttpRequestActiveX() || + false; + }, + + _findFileInput: function(params) { + if (typeof params !== 'object') { + return null; + } + + for (var k in params) { + if (this._isFileInputElement(params[k])) { + return params[k]; + } + } + + return null; + }, + + _isEmptyObject: function(o) { + if (! o) { + return true; + } + + for (var k in o) { + if (o.hasOwnProperty(k)) { + return false; + } + } + return true; + }, + + /** + * Send request to specified URL with params via XMLHttpRequest. + * @method sendXMLHttpRequest + * @param {XMLHttpRequest} xhr XMLHttpRequest object to send request + * @param {String} method Request method + * @param {String} url Request URL + * @param {String|FormData} params Parameters to send with request + * @return {XMLHttpRequest} + * @category core + */ + sendXMLHttpRequest: function(xhr, method, url, params, defaultHeaders) { + var k, headers, uk; + + xhr.open(method, url, this.o.async); + for (k in defaultHeaders) { + xhr.setRequestHeader(k, defaultHeaders[k]); + } + if (typeof params === 'string') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + } + if (! this.o.crossOrigin) { + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + + function normalizeHeaderKey(all, prefix, letter) { + return prefix + letter.toUpperCase(); + } + if (params && params.getHeaders) { + headers = params.getHeaders(); + for (k in headers) { + uk = k.replace(/(^|-)([a-z])/g, normalizeHeaderKey); + xhr.setRequestHeader(uk, headers[k]); + } + } + + xhr.send(params); + + return xhr; + }, + + _sendFetchApiRequest: function(method, url, params, defaultHeaders) { + var controller, signal, timeoutId, headers, k, uk, options; + controller = new AbortController(); + signal = controller.signal; + + if (typeof this.o.timeout !== 'undefined') { + timeoutId = setTimeout(function (){ + controller.abort(); + }, this.o.timeout); + } + + headers = new Headers(defaultHeaders); + if (typeof params === 'string') { + headers.set('Content-Type', 'application/x-www-form-urlencoded'); + } + if (! this.o.crossOrigin) { + headers.set('X-Requested-With', 'XMLHttpRequest'); + } + function normalizeHeaderKey(all, prefix, letter) { + return prefix + letter.toUpperCase(); + } + if (params && params.getHeaders) { + headers = params.getHeaders(); + for (k in headers) { + uk = k.replace(/(^|-)([a-z])/g, normalizeHeaderKey); + headers.set(uk, headers[k]); + } + } + + options = { + method: method, + headers: headers, + credentials: 'include', + mode: 'cors', + signal: signal + }; + if (method.toLowerCase() !== 'get') { + options.body = params; + } + + return fetch(url, options).then(function (response){ + clearTimeout(timeoutId); + return response; + }); + }, + + _serializeFormElementToObject: function(form) { + var i, e, type, + data = {}, + submitterTypes = /^(?:submit|button|image|reset)$/i, + submittable = /^(?:input|select|textarea|keygen)/i, + checkableTypes = /^(?:checkbox|radio)$/i; + + for (i = 0; i < form.elements.length; i++) { + e = form.elements[i]; + type = e.type; + + if ( + ! e.name || + e.disabled || + ! submittable.test(e.nodeName) || + submitterTypes.test(type) || + (checkableTypes.test(type) && ! e.checked) + ) { + continue; + } + + if (this._isFileInputElement(e)) { + data[e.name] = e; + } + else { + data[e.name] = this._elementValue(e); + } + } + + return data; + }, + + _elementValue: function(e) { + if (e.nodeName.toLowerCase() === 'select') { + var value, option, + options = e.options, + index = e.selectedIndex, + one = e.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( !option.parentNode.disabled || option.parentNode.nodeName.toLowerCase() !== "optgroup" ) ) { + + // Get the specific value for the option + value = option.attributes.value; + if (!value || value.specified) { + value = option.value; + } + else { + value = e.text; + } + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + else { + return e.value; + } + }, + + /** + * Execute function with specified options. + * @method withOptions + * @param {option} option Option to overwrite + * @param {Function} func Function to execute + * @return Return value of specified func + * @example + * // The DataAPI object is created with {async: true} + * api.withOptions({async: false}, function() { + * api.listEntries(1, function() { + * // This is executed synchronously + * }); + * }); + * api.listEntries(1, function() { + * // This is executed asynchronously + * }); + * @category core + */ + withOptions: function(option, func) { + var k, result, + originalOption = this.o, + o = {}; + + for (k in originalOption) { + o[k] = originalOption[k]; + } + for (k in option) { + o[k] = option[k]; + } + + this.o = o; + this._initOptions(); + + result = func.apply(this); + + this.o = originalOption; + this._initOptions(); + + return result; + }, + + _requestVia: function() { + return (window.XDomainRequest && + this.o.crossOrigin && + /msie (8|9)\./i.test(window.navigator.appVersion)) ? 'xdr' : + (window.XMLHttpRequest ? 'xhr' : 'fetch'); + }, + + /** + * Send a request to the endpoint with specified parameters. + * @method request + * @param {String} method Request method + * @param {String} endpoint Endpoint to request + * @param {String|Object} [queryParameter] + * @param {String|Object|HTMLFormElement|FormData} [requestData] + * @param {String|Object|HTMLFormElement} [requestData.{the-key-requires-json-text}] Can specify json-text value by string or object or HTMLFormElement. Serialize automatically if object or HTMLFormElement is passed. + * @param {HTMLInputElement|File} [requestData.{the-key-requires-file}] Can specify file value by HTMLInputElement or File object. + * @param {Function} [callback] + * @return {XMLHttpRequest|null} Return XMLHttpRequest if request is sent + * via XMLHttpRequest. Return null if request is not sent + * via XMLHttpRequest (e.g. sent via iframe). + * @category core + */ + request: function(method, endpoint) { + var i, k, v, base, + api = this, + paramsList = [], + params = null, + callback = function(){}, + xhr = null, + xdr = null, + via = this._requestVia(), + tokenData = this.getTokenData(), + authHeader = this.getAuthorizationHeader('accessToken'), + currentFormat = this.getCurrentFormat(), + originalMethod = method, + originalArguments = Array.prototype.slice.call(arguments), + defaultParams = {}, + defaultHeaders = {}; + + function serializeParams(params) { + var k, data; + + if (! api.o.disableFormData && window.FormData) { + if (params instanceof window.FormData) { + return params; + } + else if (api._isFormElement(params)) { + return new window.FormData(params); + } + else if (window.FormData && typeof params === 'object') { + data = new window.FormData(); + for (k in params) { + data.append(k, api._serializeObject(params[k])); + } + return data; + } + } + + + if (api._isFormElement(params)) { + params = api._serializeFormElementToObject(params); + for (k in params) { + if (params[k] instanceof Array) { + params[k] = params[k].join(','); + } + } + } + + if (api._findFileInput(params)) { + via = 'iframe'; + + data = {}; + for (k in params) { + if (api._isFileInputElement(params[k])) { + data[k] = params[k]; + } + else { + data[k] = api._serializeObject(params[k]); + } + } + params = data; + } + else if (typeof params !== 'string') { + params = api._serializeParams(params); + } + + return params; + } + + function runCallback(response) { + var status = callback(response); + if (status !== false) { + if (response.error) { + api.trigger('error', response); + } + } + return status; + } + + function needToRetry(response) { + return response.error && + response.error.code === 401 && + endpoint !== '/token' && + endpoint !== '/authentication'; + } + + function retryWithAuthentication() { + api.request('POST', '/token', function(response) { + if (response.error) { + parseArguments(originalArguments); + return runCallback(response); + } + else { + api.storeTokenData(response); + api.request.apply(api, originalArguments); + return false; + } + }); + } + + function appendParamsToURL(base, params) { + if (base.indexOf('?') === -1) { + base += '?'; + } + else { + base += '&'; + } + return base + api._serializeParams(params); + } + + function parseArguments(args) { + for (i = 2; i < args.length; i++) { + v = args[i]; + switch (typeof v) { + case 'function': + callback = v; + break; + case 'object': + if ( + v && + ! v.nodeName && + ((window.ActiveXObject && v instanceof window.ActiveXObject) || + (window.XMLHttpRequest && v instanceof window.XMLHttpRequest) || + (window.XDomainRequest && v instanceof window.XDomainRequest)) + ) { + if (window.XDomainRequest && v instanceof window.XDomainRequest) { + xdr = v; + } + else { + xhr = v; + } + } + else { + paramsList.push(v); + } + break; + case 'string': + paramsList.push(api._unserializeParams(v)); + break; + } + } + } + + if (! this.o.withoutAuthorization && + tokenData && + ! tokenData.accessToken && + endpoint !== '/token' && + endpoint !== '/authentication' + ) { + return retryWithAuthentication(); + } + + if (authHeader) { + defaultHeaders['X-MT-Authorization'] = authHeader; + } + + if (endpoint === '/token' || endpoint === '/authentication') { + if (tokenData && tokenData.oneTimeToken) { + defaultHeaders['X-MT-Authorization'] = + api.getAuthorizationHeader('oneTimeToken'); + delete tokenData.oneTimeToken; + } + else if (tokenData && tokenData.sessionId) { + defaultHeaders['X-MT-Authorization'] = + api.getAuthorizationHeader('sessionId'); + } + else if (endpoint === '/token' && originalMethod.toLowerCase() === 'post') { + delete defaultHeaders['X-MT-Authorization']; + } + defaultParams.clientId = api.o.clientId; + } + + if (this.o.withoutAuthorization) { + delete defaultHeaders['X-MT-Authorization']; + } + + if (this.o.suppressResponseCodes || + (typeof this.o.suppressResponseCodes === 'undefined' && via === 'xdr') + ) { + defaultParams.suppressResponseCodes = true; + } + + if (! this.o.cache) { + defaultParams._ = new Date().getTime(); + } + + if (currentFormat !== this.constructor.getDefaultFormat()) { + defaultParams.format = currentFormat.fileExtension; + } + + if (method.match(/^(put|delete)$/i)) { + defaultParams.__method = method; + method = 'POST'; + } + + parseArguments(arguments); + + if (paramsList.length && (method.toLowerCase() === 'get' || paramsList.length >= 2)) { + endpoint = appendParamsToURL(endpoint, paramsList.shift()); + } + + if (paramsList.length) { + params = paramsList.shift(); + } + + if (! this._isEmptyObject(defaultParams)) { + if (method.toLowerCase() === 'get') { + endpoint = appendParamsToURL(endpoint, defaultParams); + } + else if (window.FormData && params && params instanceof window.FormData) { + for (k in defaultParams) { + params.append(k, defaultParams[k]); + } + } + else { + params = params || {}; + for (k in defaultParams) { + params[k] = defaultParams[k]; + } + } + } + + params = serializeParams(params); + + + base = this.o.baseUrl.replace(/\/*$/, '/') + 'v' + this.getVersion(); + endpoint = endpoint.replace(/^\/*/, '/'); + + + function responseCallback(contentType, responseText, status, statusText, cleanup) { + var response, mimeType, format, callbackResult; + + try { + mimeType = contentType; + format = api.findFormat(mimeType) || api.getCurrentFormat(); + response = format.unserialize(responseText); + } + catch (e) { + response = { + error: { + code: +status, + message: statusText || 'Communication Error' + } + }; + } + + if (needToRetry(response)) { + retryWithAuthentication(); + if (cleanup) { + cleanup(); + } + return false; + } + + if ((! response.error && + endpoint === '/authentication' && + originalMethod.toLowerCase() === 'delete') || + (response.error && response.error.code === 401 && ( + (endpoint === '/authentication' && + originalMethod.toLowerCase() === 'post') || + (endpoint === '/token' && + originalMethod.toLowerCase() === 'post')))) { + api.clearTokenData(); + } + else if (! response.error && ( + (endpoint === '/authentication' && + originalMethod.toLowerCase() === 'post') || + (endpoint === '/token' && + originalMethod.toLowerCase() === 'post'))) { + api.storeTokenData(response); + } + + callbackResult = runCallback(response); + + if (callbackResult !== false && + response.error && response.error.code === 401 && + endpoint !== '/authentication') { + api.trigger('authorizationRequired', response); + } + } + + if (via === 'xdr') { + if (! this._isEmptyObject(defaultHeaders)) { + throw 'Cannot set request header when sending via XDomainRequest'; + } + + xdr = xdr || new window.XDomainRequest(); + xdr.onload = function() { + responseCallback(xdr.contentType, xdr.responseText, 200); + }; + xdr.onerror = function() { + responseCallback(xdr.contentType, xdr.responseText, 404); + }; + xdr.onprogress = function(){}; + xdr.ontimeout = function() { + responseCallback(xdr.contentType, xdr.responseText, 0); + }; + if (typeof this.o.timeout !== 'undefined') { + xdr.timeout = this.o.timeout || Number.MAX_VALUE; + } + xdr.open( method, base + endpoint); + xdr.send( api._serializeParams(params) || null ); + } + else if (via === 'xhr') { + xhr = xhr || this.newXMLHttpRequest(); + if (typeof this.o.timeout !== 'undefined') { + xhr.timeout = this.o.timeout; + } + xhr.onreadystatechange = function() { + var responseResult, url; + + if (xhr.readyState !== 4) { + return; + } + + function cleanup() { + xhr.onreadystatechange = function(){}; + } + + responseResult = responseCallback( + xhr.getResponseHeader('Content-Type'), + xhr.responseText, + xhr.status, + xhr.statusText, + cleanup + ); + + if (responseResult === false) { + return; + } + + url = xhr.getResponseHeader('X-MT-Next-Phase-URL'); + if (url) { + xhr.abort(); + api.sendXMLHttpRequest(xhr, method, base + url, params, defaultHeaders); + } + else { + cleanup(); + } + }; + return this.sendXMLHttpRequest(xhr, method, base + endpoint, params, defaultHeaders); + } + else if (via === 'fetch') { + this._sendFetchApiRequest(method, base + endpoint, params, defaultHeaders).then(function (response){ + var responseResult, url; + responseResult = response.text().then(function (text){ + responseCallback(response.headers.get('Content-Type'), text, response.status, response.statusText); + }); + + if (responseResult === false) { + return; + } + + url = response.headers.get('X-MT-Next-Phase-URL'); + if (!url) { + return; + } + + this._sendFetchApiRequest(method, base + url, params, defaultHeaders); + }); + } + else { + (function() { + var k, file, originalName, input, + target = api._getNextIframeName(), + doc = window.document, + form = doc.createElement('form'), + iframe = doc.createElement('iframe'); + + + // Set up a form element + form.action = base + endpoint; + form.target = target; + form.method = method; + form.style.display = 'inline'; + form.encoding = 'multipart/form-data'; + form.enctype = 'multipart/form-data'; + + // Set up a iframe element + iframe.name = target; + iframe.style.position = 'absolute'; + iframe.style.top = '-9999px'; + doc.body.appendChild(iframe); + iframe.contentWindow.name = target; + + + params = params || {}; + for (k in defaultHeaders) { + params[k] = defaultHeaders[k]; + } + params['X-MT-Requested-Via'] = 'IFRAME'; + + for (k in params) { + if (api._isFileInputElement(params[k])) { + file = params[k]; + originalName = file.name; + file.name = k; + if (file.parentNode) { + file.parentNode.insertBefore(form, file); + } + else { + doc.body.appendChild(form); + } + form.appendChild(file); + continue; + } + + input = doc.createElement('input'); + input.type = 'hidden'; + input.name = k; + input.value = params[k]; + form.appendChild(input); + } + + form.submit(); + + + function handler() { + var body = iframe.contentWindow.document.body, + contents = body.textContent || body.innerText, + response; + + function cleanup() { + setTimeout(function() { + file.name = originalName; + if (form.parentNode) { + form.parentNode.insertBefore(file, form); + form.parentNode.removeChild(form); + } + if (iframe.parentNode) { + iframe.parentNode.removeChild(iframe); + } + }); + } + + try { + response = api.unserializeData(contents); + } + catch (e) { + response = { + error: { + code: 500, + message: 'Internal Server Error' + } + }; + } + + if (needToRetry(response)) { + retryWithAuthentication(); + cleanup(); + return; + } + + cleanup(); + runCallback(response); + } + if ( iframe.addEventListener ) { + iframe.addEventListener('load', handler, false); + } else if ( iframe.attachEvent ) { + iframe.attachEvent('onload', handler); + } + })(); + + return; + } + }, + + /** + * Register callback to instance. + * @method on + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * var callback = function() { + * // Do stuff + * }; + * api.on(eventName, callback); + */ + on: function() { + this.constructor.on.apply(this, arguments); + }, + + /** + * Deregister callback from instance. + * @method off + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * api.off(eventName, callback); + */ + off: function() { + this.constructor.off.apply(this, arguments); + }, + + /** + * Trigger event. + * First, run class level callbacks. Then, run instance level callbacks. + * @method trigger + * @param {String} key Event name + * @category core + */ + trigger: function(key) { + var i, + args = Array.prototype.slice.call(arguments, 1), + callbacks = (this.constructor.callbacks[key] || []) // Class level + .concat(this.callbacks[key] || []); // Instance level + + for (i = 0; i < callbacks.length; i++) { + callbacks[i].apply(this, args); + } + }, + + _generateEndpointMethod: function(e) { + var api = this, + varRegexp = new RegExp(':([a-zA-Z_-]+)', 'g'), + vars = null, + name = e.id.replace(/_(\w)/g, function(all, letter) { + return letter.toUpperCase(); + }); + + function extractVars() { + var m, vars = []; + while ((m = varRegexp.exec(e.route)) !== null) { + vars.push(m[1]); + } + return vars; + } + + api[name] = function() { + if (! vars) { + vars = extractVars(); + } + + var args = Array.prototype.slice.call(arguments), + endpointParams = {}, + resources = {}, + route, i; + + for (i = 0; i < vars.length; i++) { + endpointParams[vars[i]] = args.shift(); + } + route = api.bindEndpointParams(e.route, endpointParams); + + if (e.resources) { + for (i = 0; i < e.resources.length; i++) { + resources[e.resources[i]] = args.shift(); + } + args.push(resources); + } + + return api.request.apply(api, [e.verb, route].concat(args)); + }; + }, + + /** + * Generate methods to access endpoint. + * @method generateEndpointMethods + * @param {Array.Object} endpoints Endpoints to register + * @param {Object} endpoints.{i} + * @param {String} endpoints.{i}.id Normally, the ID is snake case, + * but generated method is camel case. + * @param {String} endpoints.{i}.route The template of route + * @param {String} endpoints.{i}.verb The HTTP verb + * @param {Array.String} [endpoints.{i}.resources] The required resource data + * @example + * api.generateEndpointMethods([ + * { + * "id": "list_entries", + * "route": "/sites/:site_id/entries", + * "verb": "GET", + * }, + * { + * "id": "create_entry", + * "route": "/sites/:site_id/entries", + * "verb": "POST", + * "resources": [ + * "entry" + * ] + * } + * ]); + * @category core + */ + generateEndpointMethods: function(endpoints) { + for (var i = 0; i < endpoints.length; i++) { + this._generateEndpointMethod(endpoints[i]); + } + }, + + /** + * Load endpoint from DataAPI dynamically. + * @method loadEndpoints + * @param {Object} [params] + * @param {String} [params.includeComponents] Comma separated component IDs to load + * @param {String} [params.excludeComponents] Comma separated component IDs to exclude + * @example + * Load endpoints only from specified module. + * + * api.loadEndpoints({ + * includeComponents: 'your-extension-module' + * }); + * api.getDataViaYourExtensionModule(function(response) { + * // Do stuff + * }); + * + * Load all endpoints except for core. + * Since all the endpoints of core is already loaded. + * + * api.loadEndpoints({ + * excludeComponents: 'core' + * }); + * api.getDataViaYourExtensionModule(function(response) { + * // Do stuff + * }); + * @category core + */ + loadEndpoints: function(params) { + var api = this; + + api.withOptions({withoutAuthorization: true, async: false}, function() { + api.request('GET', '/endpoints', params, function(response) { + if (response.error) { + return; + } + + api.generateEndpointMethods(response.items); + }); + }); + } +}; + +/** + * Triggered on initializing an instance + * + * @event initialize + * @example + * DataAPI.on("initialize", function() { + * console.log("initializing..."); + * }); + **/ + +/** + * Triggered on getting an error of a HTTP request + * + * @event error + * @param {Object} response A response object + * @param {Number} response.code The HTTP response code + * @param {String} response.message The error message + * @param {Object} response.data The data exists only if a current error has optional data + * @example + * api.on("error", function(response) { + * console.log(response.error.message); + * }); + **/ + +/** + * Triggered on receiving the HTTP response code 401 (Authorization required). + * + * @event authorizationRequired + * @param {Object} response A response object + * @param {Number} response.code The HTTP response code + * @param {Number} response.message The error message + * @example + * api.on("authorizationRequired", function(response) { + * // You will return to current URL after authorization succeeded. + * location.href = api.getAuthorizationUrl(location.href); + * }); + **/ + +var Cookie = function( name, value, domain, path, expires, secure ) { + this.name = name; + this.value = value; + this.domain = domain; + this.path = path; + this.expires = expires; + this.secure = secure; +}; + +Cookie.prototype = { + /** + * Get this cookie from the web browser's store of cookies. Note that if the document.cookie + * property has been written to repeatedly by the same client code in excess of 4K (regardless of the size + * of the actual cookies), IE 6 will report an empty document.cookie collection of cookies. + * @return Cookie The fetched cookie. + */ + fetch: function() { + if (! window.document) { + return undefined; + } + + var prefix = escape( this.name ) + "=", + cookies = ("" + window.document.cookie).split( /;\s*/ ), + i; + + for( i = 0; i < cookies.length; i++ ) { + if( cookies[ i ].indexOf( prefix ) === 0 ) { + this.value = unescape( cookies[ i ].substring( prefix.length ) ); + return this; + } + } + + return undefined; + }, + + + /** + * Set and store a cookie in the the web browser's native collection of cookies. + * @return Cookie The set and stored ("baked") cookie. + */ + bake: function( value ) { + if (! window.document) { + return undefined; + } + + function exists(x) { + return (x === undefined || x === null) ? false : true; + } + + if( !exists( this.name ) ) { + return undefined; + } + + if( exists( value ) ) { + this.value = value; + } + else { + value = this.value; + } + + var name = escape( this.name ), + attributes = ( this.domain ? "; domain=" + escape( this.domain ) : "") + + (this.path ? "; path=" + escape( this.path ) : "") + + (this.expires ? "; expires=" + this.expires.toGMTString() : "") + + (this.secure ? "; secure=1" : ""), + batter = name + "=" + escape( value ) + attributes; + + window.document.cookie = batter; + + return this; + }, + + + remove: function() { + this.expires = new Date( 0 ); // "Thu, 01 Jan 1970 00:00:00 GMT" + this.value = ""; + this.bake(); + } +}; + +Cookie.fetch = function( name ) { + var cookie = new this( name ); + return cookie.fetch(); +}; + + +Cookie.bake = function( name, value, domain, path, expires, secure ) { + var cookie = new this( name, value, domain, path, expires, secure ); + return cookie.bake(); +}; + +Cookie.remove = function( name ) { + var cookie = this.fetch( name ); + if ( cookie ) { + return cookie.remove(); + } +}; + +var JSON = window.JSON; +/* + json2.js + 2012-10-08 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the value + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + JSON = {}; +} + +(function () { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 + ? '[]' + : gap + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 + ? '{}' + : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + +// If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + JSON.parse = function (text, reviver) { + +// The parse method takes a text and an optional reviver function, and returns +// a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + +// The walk method is used to recursively walk the resulting structure so +// that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + +// Parsing happens in four stages. In the first stage, we replace certain +// Unicode characters with escape sequences. JavaScript handles many characters +// incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + +// In the second stage, we run the text against regular expressions that look +// for non-JSON patterns. We are especially concerned with '()' and 'new' +// because they can cause invocation, and '=' because it can cause mutation. +// But just to be safe, we want to reject all unexpected forms. + +// We split the second stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the third stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional fourth stage, we recursively walk the new structure, passing +// each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' + ? walk({'': j}, '') + : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); + +DataAPI.on('initialize', function() { + this.generateEndpointMethods( + [ + { + "id": "openapi", + "route": "/", + "verb": "GET", + "resources": null + }, + { + "id": "version", + "route": "/version", + "verb": "GET", + "resources": null + }, + { + "id": "list_endpoints", + "route": "/endpoints", + "verb": "GET", + "resources": null + }, + { + "id": "authorize", + "route": "/authorization", + "verb": "GET", + "resources": null + }, + { + "id": "get_token", + "route": "/token", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_authentication", + "route": "/authentication", + "verb": "DELETE", + "resources": null + }, + { + "id": "revoke_token", + "route": "/token", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_user", + "route": "/users/:user_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_user", + "route": "/users/:user_id", + "verb": "PUT", + "resources": [ + "user" + ] + }, + { + "id": "get_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_entries", + "route": "/publish/entries", + "verb": "GET", + "resources": null + }, + { + "id": "get_stats_provider", + "route": "/sites/:site_id/stats/provider", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories", + "route": "/sites/:site_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories_for_entry", + "route": "/sites/:site_id/entries/:entry_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories", + "route": "/sites/:site_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories", + "route": "/sites/:site_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories", + "route": "/sites/:site_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category", + "route": "/sites/:site_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories", + "route": "/sites/:site_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_folders", + "route": "/sites/:site_id/folders", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_folders", + "route": "/sites/:site_id/folders/:folder_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_folders", + "route": "/sites/:site_id/folders/:folder_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_folders", + "route": "/sites/:site_id/folders/:folder_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_folder", + "route": "/sites/:site_id/folders", + "verb": "POST", + "resources": [ + "folder" + ] + }, + { + "id": "get_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "PUT", + "resources": [ + "folder" + ] + }, + { + "id": "delete_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_folders", + "route": "/sites/:site_id/folders/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_assets", + "route": "/sites/:site_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_entry", + "route": "/sites/:site_id/entries/:entry_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_page", + "route": "/sites/:site_id/pages/:page_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "get_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "PUT", + "resources": [ + "asset" + ] + }, + { + "id": "delete_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_thumbnail", + "route": "/sites/:site_id/assets/:asset_id/thumbnail", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_category", + "route": "/sites/:site_id/categories/:category_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_asset", + "route": "/sites/:site_id/assets/:asset_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "import_entries", + "route": "/sites/:site_id/entries/import", + "verb": "POST", + "resources": null + }, + { + "id": "export_entries", + "route": "/sites/:site_id/entries/export", + "verb": "GET", + "resources": null + }, + { + "id": "preview_entry_by_id", + "route": "/sites/:site_id/entries/:entry_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_entry", + "route": "/sites/:site_id/entries/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_pages", + "route": "/sites/:site_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_folder", + "route": "/sites/:site_id/folders/:folder_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_asset", + "route": "/sites/:site_id/assets/:asset_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "get_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_page_by_id", + "route": "/sites/:site_id/pages/:page_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_page", + "route": "/sites/:site_id/pages/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_sites", + "route": "/sites", + "verb": "GET", + "resources": null + }, + { + "id": "get_blog", + "route": "/sites/:site_id", + "verb": "GET", + "resources": null + }, + { + "id": "list_blogs_for_user", + "route": "/users/:user_id/sites", + "verb": "GET", + "resources": null + }, + { + "id": "list_sites_by_parent", + "route": "/sites/:site_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "insert_new_blog", + "route": "/sites/:site_id", + "verb": "POST", + "resources": [ + "blog" + ] + }, + { + "id": "insert_new_website", + "route": "/sites", + "verb": "POST", + "resources": [ + "website" + ] + }, + { + "id": "update_site", + "route": "/sites/:site_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_site", + "route": "/sites/:site_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_roles", + "route": "/roles", + "verb": "GET", + "resources": null + }, + { + "id": "create_role", + "route": "/roles", + "verb": "POST", + "resources": [ + "role" + ] + }, + { + "id": "get_role", + "route": "/roles/:role_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_role", + "route": "/roles/:role_id", + "verb": "PUT", + "resources": [ + "role" + ] + }, + { + "id": "delete_role", + "route": "/roles/:role_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions", + "route": "/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_user", + "route": "/users/:user_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_site", + "route": "/sites/:site_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_role", + "route": "/roles/:role_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_site", + "route": "/sites/:site_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "grant_permission_to_user", + "route": "/users/:user_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_site", + "route": "/sites/:site_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_user", + "route": "/users/:user_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_logs", + "route": "/sites/:site_id/logs", + "verb": "GET", + "resources": null + }, + { + "id": "get_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_log", + "route": "/sites/:site_id/logs", + "verb": "POST", + "resources": [ + "log" + ] + }, + { + "id": "update_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "PUT", + "resources": [ + "log" + ] + }, + { + "id": "delete_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "reset_logs", + "route": "/sites/:site_id/logs", + "verb": "DELETE", + "resources": null + }, + { + "id": "export_logs", + "route": "/sites/:site_id/logs/export", + "verb": "GET", + "resources": null + }, + { + "id": "list_tags_for_site", + "route": "/sites/:site_id/tags", + "verb": "GET", + "resources": null + }, + { + "id": "get_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "GET", + "resources": null + }, + { + "id": "rename_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_themes", + "route": "/themes", + "verb": "GET", + "resources": null + }, + { + "id": "list_themes_for_site", + "route": "/sites/:site_id/themes", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme", + "route": "/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme_for_site", + "route": "/sites/:site_id/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "apply_theme_to_site", + "route": "/sites/:site_id/themes/:theme_id/apply", + "verb": "POST", + "resources": null + }, + { + "id": "uninstall_theme", + "route": "/themes/:theme_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "create_template", + "route": "/sites/:site_id/templates", + "verb": "POST", + "resources": [ + "template" + ] + }, + { + "id": "refresh_templates_for_site", + "route": "/sites/:site_id/refresh_templates", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template_by_id", + "route": "/sites/:site_id/templates/:template_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template", + "route": "/sites/:site_id/templates/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_widgetsets", + "route": "/sites/:site_id/widgetsets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widgetset", + "route": "/sites/:site_id/widgetsets", + "verb": "POST", + "resources": [ + "widgetset" + ] + }, + { + "id": "update_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "PUT", + "resources": [ + "widgetset" + ] + }, + { + "id": "delete_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_widgets", + "route": "/sites/:site_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "list_widgets_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgets", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_widget_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widget", + "route": "/sites/:site_id/widgets", + "verb": "POST", + "resources": [ + "widget" + ] + }, + { + "id": "update_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "PUT", + "resources": [ + "widget" + ] + }, + { + "id": "delete_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "refresh_widget", + "route": "/sites/:site_id/widgets/:widget_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_widget", + "route": "/sites/:site_id/widgets/:widget_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_users", + "route": "/users", + "verb": "GET", + "resources": null + }, + { + "id": "create_user", + "route": "/users", + "verb": "POST", + "resources": [ + "user" + ] + }, + { + "id": "delete_user", + "route": "/users/:user_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "unlock_user", + "route": "/users/:user_id/unlock", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password_for_user", + "route": "/users/:user_id/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password", + "route": "/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "list_plugins", + "route": "/plugins", + "verb": "GET", + "resources": null + }, + { + "id": "get_plugin", + "route": "/plugins/:plugin_id", + "verb": "GET", + "resources": null + }, + { + "id": "enable_plugin", + "route": "/plugins/:plugin_id/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_plugin", + "route": "/plugins/:plugin_id/disable", + "verb": "POST", + "resources": null + }, + { + "id": "enable_all_plugins", + "route": "/plugins/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_all_plugins", + "route": "/plugins/disable", + "verb": "POST", + "resources": null + }, + { + "id": "backup_site", + "route": "/sites/:site_id/backup", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups", + "route": "/groups", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups_for_user", + "route": "/users/:user_id/groups", + "verb": "GET", + "resources": null + }, + { + "id": "get_group", + "route": "/groups/:group_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_group", + "route": "/groups", + "verb": "POST", + "resources": [ + "group" + ] + }, + { + "id": "update_group", + "route": "/groups/:group_id", + "verb": "PUT", + "resources": [ + "group" + ] + }, + { + "id": "delete_group", + "route": "/groups/:group_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions_for_group", + "route": "/groups/:group_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_group", + "route": "/groups/:group_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_group", + "route": "/groups/:group_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_members_for_group", + "route": "/groups/:group_id/members", + "verb": "GET", + "resources": null + }, + { + "id": "get_member_for_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "GET", + "resources": null + }, + { + "id": "add_member_to_group", + "route": "/groups/:group_id/members", + "verb": "POST", + "resources": null + }, + { + "id": "remove_member_from_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "authenticate", + "route": "/authentication", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset", + "route": "/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset_for_site", + "route": "/sites/:site_id/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "create_entry", + "route": "/sites/:site_id/entries", + "verb": "POST", + "resources": [ + "entry" + ] + }, + { + "id": "update_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "PUT", + "resources": [ + "entry" + ] + }, + { + "id": "create_page", + "route": "/sites/:site_id/pages", + "verb": "POST", + "resources": [ + "page" + ] + }, + { + "id": "update_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "PUT", + "resources": [ + "page" + ] + }, + { + "id": "create_category_set", + "route": "/sites/:site_id/categorySets", + "verb": "POST", + "resources": [ + "category_set" + ] + }, + { + "id": "get_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "PUT", + "resources": [ + "category_set" + ] + }, + { + "id": "delete_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_content_types", + "route": "/sites/:site_id/contentTypes", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_type", + "route": "/sites/:site_id/contentTypes", + "verb": "POST", + "resources": [ + "content_type" + ] + }, + { + "id": "get_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "PUT", + "resources": [ + "content_type" + ] + }, + { + "id": "delete_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "POST", + "resources": [ + "content_field" + ] + }, + { + "id": "get_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "PUT", + "resources": [ + "content_field" + ] + }, + { + "id": "delete_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "create_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "get_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "PUT", + "resources": [ + "content_data" + ] + }, + { + "id": "delete_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_content_data_by_id", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "preview_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "publish_content_data", + "route": "/publish/contentData", + "verb": "GET", + "resources": null + }, + { + "id": "search", + "route": "/search", + "verb": "GET", + "resources": null + }, + { + "id": "list_templates", + "route": "/sites/:site_id/templates", + "verb": "GET", + "resources": null + }, + { + "id": "get_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "PUT", + "resources": [ + "template" + ] + }, + { + "id": "delete_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_template", + "route": "/sites/:site_id/templates/:template_id/publish", + "verb": "POST", + "resources": null + }, + { + "id": "refresh_template", + "route": "/sites/:site_id/templates/:template_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_template", + "route": "/sites/:site_id/templates/:template_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_templatemaps", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "GET", + "resources": null + }, + { + "id": "get_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "POST", + "resources": [ + "templatemap" + ] + }, + { + "id": "update_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "PUT", + "resources": [ + "templatemap" + ] + }, + { + "id": "delete_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_category_sets", + "route": "/sites/:site_id/categorySets", + "verb": "GET", + "resources": null + }, + { + "id": "list_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "GET", + "resources": null + }, + { + "id": "list_text_filters", + "route": "/textFilters", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries", + "route": "/sites/:site_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_path", + "route": "/sites/:site_id/stats/path/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_path", + "route": "/sites/:site_id/stats/path/visits", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_date", + "route": "/sites/:site_id/stats/date/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_date", + "route": "/sites/:site_id/stats/date/visits", + "verb": "GET", + "resources": null + }, + { + "id": "export_site_theme", + "route": "/sites/:site_id/export_theme", + "verb": "POST", + "resources": null + }, + { + "id": "list_fields", + "route": "/sites/:site_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "get_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_field", + "route": "/sites/:site_id/fields", + "verb": "POST", + "resources": [ + "field" + ] + }, + { + "id": "update_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "PUT", + "resources": [ + "field" + ] + }, + { + "id": "delete_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "synchronize_groups", + "route": "/groups/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_import", + "route": "/users/import", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_export", + "route": "/users/export", + "verb": "GET", + "resources": null + }, + { + "id": "synchronize_users", + "route": "/users/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "list_formatted_texts", + "route": "/sites/:site_id/formatted_texts", + "verb": "GET", + "resources": null + }, + { + "id": "get_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_formatted_text", + "route": "/sites/:site_id/formatted_texts", + "verb": "POST", + "resources": [ + "formatted_text" + ] + }, + { + "id": "update_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "PUT", + "resources": [ + "formatted_text" + ] + }, + { + "id": "delete_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments", + "route": "/sites/:site_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "list_comments_for_entry", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "create_reply_comment", + "route": "/sites/:site_id/entries/:entry_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "get_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "PUT", + "resources": [ + "comment" + ] + }, + { + "id": "delete_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "POST", + "resources": [ + { + "comment": null + } + ] + }, + { + "id": "create_reply_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + } +] + + ); +}); + +window.MT = window.MT || {}; +window.MT.DataAPI = window.MT.DataAPI || DataAPI; +window.MT.DataAPI['v' + DataAPI.version] = DataAPI; + + +return DataAPI; + +})); diff --git a/mt-static/data-api/v7/js/mt-data-api.min.js b/mt-static/data-api/v7/js/mt-data-api.min.js new file mode 100644 index 0000000..277150b --- /dev/null +++ b/mt-static/data-api/v7/js/mt-data-api.min.js @@ -0,0 +1,9 @@ +/* Copyright (c) Six Apart Ltd. + * This file is generated by Movable Type DataAPI SDK for JavaScript. + * Consult the source files for their respective licenses and copyrights. + * https://github.com/movabletype/mt-data-api-sdk-js + */ + +!function(a,b){var c=b(a);"object"==typeof module&&"object"==typeof module.exports?module.exports=c:"function"==typeof define&&define.amd&&define("mt-data-api",[],function(){return c})}("undefined"==typeof window?void 0:window,function(window,undefined){"use strict";var DataAPI=function(a){var b,c,d=["clientId","baseUrl"];this.o={clientId:undefined,baseUrl:undefined,format:undefined,sessionStore:undefined,sessionDomain:undefined,sessionPath:undefined,async:!0,timeout:undefined,cache:!0,withoutAuthorization:!1,processOneTimeTokenOnInitialize:!0,loadPluginEndpoints:!0,suppressResponseCodes:undefined,crossOrigin:undefined,disableFormData:!1};for(c in a){if(!(c in this.o))throw"Unkown option: "+c;this.o[c]=a[c]}for(b=0;bf.length)&&(e=f),{data:a.data,domain:("undefined"==typeof b?undefined:b.sessionDomain)||a.domain||undefined,path:("undefined"==typeof b?undefined:b.sessionPath)||e}}function c(){if(!window.location)return"";var a;try{a=window.location.href}catch(b){a=window.document.createElement("a"),a.href="",a=a.href}return a}function d(a){var b=/^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/,c=b.exec(a.toLowerCase());return c?c[1]:null}DataAPI.sessionStores.cookie={save:function(c,d,e){var f=e?new Date((new Date).getTime()+31536e7):undefined,g=b(a(c),this.o);Cookie.bake(c,JSON.stringify(g),g.domain,g.path,f)},fetch:function(b){a(b).data},remove:function(c){var d=b(a(c));Cookie.bake(c,"",d.domain,d.path,new Date(0))}}}(),function(){var a={cipher:{},hash:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message},this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message},this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message},this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message},this.message=a}}};a.cipher.aes=function(b){this._tables[0][0][0]||this._precompute();var c,d,e,f,g,h=this._tables[0][4],i=this._tables[1],j=b.length,k=1;if(4!==j&&6!==j&&8!==j)throw new a.exception.invalid("invalid aes key size");for(this._key=[f=b.slice(0),g=[]],c=j;4*j+28>c;c++)e=f[c-1],(c%j===0||8===j&&c%j===4)&&(e=h[e>>>24]<<24^h[e>>16&255]<<16^h[e>>8&255]<<8^h[255&e],c%j===0&&(e=e<<8^e>>>24^k<<24,k=k<<1^283*(k>>7))),f[c]=f[c-j]^e;for(d=0;c;d++,c--)e=f[3&d?c:c-4],4>=c||4>d?g[d]=e:g[d]=i[0][h[e>>>24]]^i[1][h[e>>16&255]]^i[2][h[e>>8&255]]^i[3][h[255&e]]},a.cipher.aes.prototype={encrypt:function(a){return this._crypt(a,0)},decrypt:function(a){return this._crypt(a,1)},_tables:[[[],[],[],[],[]],[[],[],[],[],[]]],_precompute:function(){var a=this._tables[0],b=this._tables[1],c=a[4],d=b[4],e,f,g,h=[],i=[],j,k,l,m,n,o;for(e=0;256>e;e++)i[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=j||1,g=i[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^255&m^99,c[f]=m,d[m]=f,l=h[k=h[j=h[f]]],o=16843009*l^65537*k^257*j^16843008*f,n=257*h[m]^16843008*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=o=o<<24^o>>>8;for(e=0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)},_crypt:function(b,c){if(4!==b.length)throw new a.exception.invalid("invalid aes block size");var d=this._key[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2],h=b[c?1:3]^d[3],i,j,k,l=d.length/4-2,m,n=4,o=[0,0,0,0],p=this._tables[c],q=p[0],r=p[1],s=p[2],t=p[3],u=p[4];for(m=0;l>m;m++)i=q[e>>>24]^r[f>>16&255]^s[g>>8&255]^t[255&h]^d[n],j=q[f>>>24]^r[g>>16&255]^s[h>>8&255]^t[255&e]^d[n+1],k=q[g>>>24]^r[h>>16&255]^s[e>>8&255]^t[255&f]^d[n+2],h=q[h>>>24]^r[e>>16&255]^s[f>>8&255]^t[255&g]^d[n+3],n+=4,e=i,f=j,g=k;for(m=0;4>m;m++)o[c?3&-m:m]=u[e>>>24]<<24^u[f>>16&255]<<16^u[g>>8&255]<<8^u[255&h]^d[n++],i=e,e=f,f=g,g=h,h=i;return o}},a.bitArray={bitSlice:function(b,c,d){return b=a.bitArray._shiftRight(b.slice(c/32),32-(31&c)).slice(1),d===undefined?b:a.bitArray.clamp(b,d-c)},concat:function(b,c){if(0===b.length||0===c.length)return b.concat(c);var d,e,f=b[b.length-1],g=a.bitArray.getPartial(f);return 32===g?b.concat(c):a.bitArray._shiftRight(c,g,0|f,b.slice(0,b.length-1))},bitLength:function(b){var c=b.length,d;if(0===c)return 0;return d=b[c-1],32*(c-1)+a.bitArray.getPartial(d)},clamp:function(b,c){if(32*b.length0&&c&&(b[d-1]=a.bitArray.partial(c,b[d-1]&2147483648>>c-1,1)),b},partial:function(a,b,c){if(32===a)return b;return(c?0|b:b<<32-a)+1099511627776*a},getPartial:function(a){return Math.round(a/1099511627776)||32},equal:function(b,c){if(a.bitArray.bitLength(b)!==a.bitArray.bitLength(c))return!1;var d=0,e;for(e=0;e=32;c-=32)e.push(d),d=0;if(0===c)return e.concat(b);for(f=0;f>>c),d=b[f]<<32-c;return g=b.length?b[b.length-1]:0,h=a.bitArray.getPartial(g),e.push(a.bitArray.partial(c+h&31,c+h>32?d:e.pop(),1)),e},_xor4:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}},a.codec.utf8String={fromBits:function(b){var c="",d=a.bitArray.bitLength(b),e,f;for(e=0;d/8>e;e++)0===(3&e)&&(f=b[e/4]),c+=String.fromCharCode(f>>>24),f<<=8;return decodeURIComponent(escape(c))},toBits:function(b){b=unescape(encodeURIComponent(b));var c=[],d,e=0;for(d=0;d>>f)>>>26),6>f?(h=b[e]<<6-f,f+=26,e++):(h<<=6,f-=6);while(3&d.length&&!c)d+="=";return d},toBits:function(b){b=b.replace(/\s|=/g,"");var c=[],d,e=0,f=a.codec.base64._chars,g=0,h;for(d=0;dh)throw new a.exception.invalid("this isn't base64!");e>26?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}return 56&e&&c.push(a.bitArray.partial(56&e,g,1)),c}},a.hash.sha256=function(a){this._key[0]||this._precompute(),a?(this._h=a._h.slice(0),this._buffer=a._buffer.slice(0),this._length=a._length):this.reset()},a.hash.sha256.hash=function(b){return(new a.hash.sha256).update(b).finalize()},a.hash.sha256.prototype={blockSize:512,reset:function(){return this._h=this._init.slice(0),this._buffer=[],this._length=0,this},update:function(b){"string"==typeof b&&(b=a.codec.utf8String.toBits(b));var c,d=this._buffer=a.bitArray.concat(this._buffer,b),e=this._length,f=this._length=e+a.bitArray.bitLength(b);for(c=512+e&-512;f>=c;c+=512)this._block(d.splice(0,16));return this},finalize:function(){var b,c=this._buffer,d=this._h;for(c=a.bitArray.concat(c,[a.bitArray.partial(1,1)]),b=c.length+2;15&b;b++)c.push(0);c.push(Math.floor(this._length/4294967296)),c.push(0|this._length);while(c.length)this._block(c.splice(0,16));return this.reset(),d},_init:[],_key:[],_precompute:function(){var a=0,b=2,c;function d(a){return 4294967296*(a-Math.floor(a))|0}a:for(;64>a;b++){for(c=2;b>=c*c;c++)if(b%c===0)continue a;8>a&&(this._init[a]=d(Math.pow(b,.5))),this._key[a]=d(Math.pow(b,1/3)),a++}},_block:function(a){var b,c,d,e,f=a.slice(0),g=this._h,h=this._key,i=g[0],j=g[1],k=g[2],l=g[3],m=g[4],n=g[5],o=g[6],p=g[7];for(b=0;64>b;b++)16>b?c=f[b]:(d=f[b+1&15],e=f[b+14&15],c=f[15&b]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+f[15&b]+f[b+9&15]|0),c=c+p+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(o^m&(n^o))+h[b],p=o,o=n,n=m,m=l+c|0,l=k,k=j,j=i,i=c+(j&k^l&(j^k))+(j>>>2^j>>>13^j>>>22^j<<30^j<<19^j<<10)|0;g[0]=g[0]+i|0,g[1]=g[1]+j|0,g[2]=g[2]+k|0,g[3]=g[3]+l|0,g[4]=g[4]+m|0,g[5]=g[5]+n|0,g[6]=g[6]+o|0,g[7]=g[7]+p|0}},a.mode.ccm={name:"ccm",encrypt:function(b,c,d,e,f){var g,h,i=c.slice(0),j,k=a.bitArray,l=k.bitLength(d)/8,m=k.bitLength(i)/8;if(f=f||64,e=e||[],7>l)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(g=2;4>g&&m>>>8*g;g++);return 15-l>g&&(g=15-l),d=k.clamp(d,8*(15-g)),j=a.mode.ccm._computeTag(b,c,d,e,f,g),i=a.mode.ccm._ctrMode(b,i,d,j,f,g),k.concat(i.data,i.tag)},decrypt:function(b,c,d,e,f){f=f||64,e=e||[];var g,h,i=a.bitArray,j=i.bitLength(d)/8,k=i.bitLength(c),l=i.clamp(c,k-f),m=i.bitSlice(c,k-f),n;if(k=(k-f)/8,7>j)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(g=2;4>g&&k>>>8*g;g++);if(15-j>g&&(g=15-j),d=i.clamp(d,8*(15-g)),l=a.mode.ccm._ctrMode(b,l,d,m,f,g),n=a.mode.ccm._computeTag(b,l.data,d,e,f,g),!i.equal(l.tag,n))throw new a.exception.corrupt("ccm: tag doesn't match");return l.data},_computeTag:function(b,c,d,e,f,g){var h,i,j=0,k=24,l,m,n=[],o=a.bitArray,p=o._xor4;if(f/=8,f%2||4>f||f>16)throw new a.exception.invalid("ccm: invalid tag length");if(e.length>4294967295||c.length>4294967295)throw new a.exception.bug("ccm: can't deal with 4GiB or more data");if(i=[o.partial(8,(e.length?64:0)|f-2<<2|g-1)],i=o.concat(i,d),i[3]|=o.bitLength(c)/8,i=b.encrypt(i),e.length)for(l=o.bitLength(e)/8,65279>=l?n=[o.partial(16,l)]:4294967295>=l&&(n=o.concat([o.partial(16,65534)],[l])),n=o.concat(n,e),m=0;mi;i+=4)l[3]++,h=b.encrypt(l),c[i]^=h[0],c[i+1]^=h[1],c[i+2]^=h[2],c[i+3]^=h[3];return{tag:e,data:j.clamp(c,o)}}},a.misc.hmac=function(b,c){this._hash=c=c||a.hash.sha256;var d=[[],[]],e,f=c.prototype.blockSize/32;for(this._baseHash=[new c,new c],b.length>f&&(b=c.hash(b)),e=0;f>e;e++)d[0][e]=909522486^b[e],d[1][e]=1549556828^b[e];this._baseHash[0].update(d[0]),this._baseHash[1].update(d[1])},a.misc.hmac.prototype.encrypt=a.misc.hmac.prototype.mac=function(a){var b=new this._hash(this._baseHash[0]).update(a).finalize();return new this._hash(this._baseHash[1]).update(b).finalize()},a.misc.pbkdf2=function(b,c,d,e,f){if(d=d||1e3,0>e||0>d)throw a.exception.invalid("invalid params to pbkdf2");"string"==typeof b&&(b=a.codec.utf8String.toBits(b)),f=f||a.misc.hmac;var g=new f(b),h,i,j,k,l,m=[],n=a.bitArray;for(l=1;32*m.length<(e||1);l++){for(h=i=g.encrypt(n.concat(c,[l])),j=1;d>j;j++)for(i=g.encrypt(i),k=0;ke;e+=4)(e+1)%this._MAX_WORDS_PER_BURST===0&&this._gate(),g=this._gen4words(),d.push(g[0],g[1],g[2],g[3]);return this._gate(),d.slice(0,b)},setDefaultParanoia:function(a){this._defaultParanoia=a},addEntropy:function(b,c,d){d=d||"user";var e,f,g,h=(new Date).valueOf(),i=this._robins[d],j=this.isReady(),k=0;switch(e=this._collectorIds[d],e===undefined&&(e=this._collectorIds[d]=this._collectorIdNext++),i===undefined&&(i=this._robins[d]=0),this._robins[d]=(this._robins[d]+1)%this._pools.length,typeof b){case"number":c===undefined&&(c=1),this._pools[i].update([e,this._eventId++,1,c,h,1,0|b]);break;case"object":var l=Object.prototype.toString.call(b);if("[object Uint32Array]"===l){for(g=[],f=0;f0)c++,g>>>=1}this._pools[i].update([e,this._eventId++,2,c,h,b.length].concat(b))}break;case"string":c===undefined&&(c=b.length),this._pools[i].update([e,this._eventId++,3,c,h,b.length]),this._pools[i].update(b);break;default:k=1}if(k)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this._poolEntropy[i]+=c,this._poolStrength+=c,j===this._NOT_READY&&(this.isReady()!==this._NOT_READY&&this._fireEvent("seeded",Math.max(this._strength,this._poolStrength)),this._fireEvent("progress",this.getProgress()))},isReady:function(a){var b=this._PARANOIA_LEVELS[a!==undefined?a:this._defaultParanoia];return this._strength&&this._strength>=b?this._poolEntropy[0]>this._BITS_PER_RESEED&&(new Date).valueOf()>this._nextReseed?this._REQUIRES_RESEED|this._READY:this._READY:this._poolStrength>=b?this._REQUIRES_RESEED|this._NOT_READY:this._NOT_READY},getProgress:function(a){var b=this._PARANOIA_LEVELS[a?a:this._defaultParanoia];return this._strength>=b?1:this._poolStrength>b?1:this._poolStrength/b},startCollectors:function(){if(this._collectorsStarted)return;if(window.addEventListener)window.addEventListener("load",this._loadTimeCollector,!1),window.addEventListener("mousemove",this._mouseCollector,!1);else{if(!document.attachEvent)throw new a.exception.bug("can't attach event");document.attachEvent("onload",this._loadTimeCollector),document.attachEvent("onmousemove",this._mouseCollector)}this._collectorsStarted=!0},stopCollectors:function(){if(!this._collectorsStarted)return;window.removeEventListener?(window.removeEventListener("load",this._loadTimeCollector,!1),window.removeEventListener("mousemove",this._mouseCollector,!1)):window.detachEvent&&(window.detachEvent("onload",this._loadTimeCollector),window.detachEvent("onmousemove",this._mouseCollector)),this._collectorsStarted=!1},addEventListener:function(a,b){this._callbacks[a][this._callbackI++]=b},removeEventListener:function(a,b){var c,d,e=this._callbacks[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;ca;a++)if(this._counter[a]=this._counter[a]+1|0,this._counter[a])break;return this._cipher.encrypt(this._counter)},_gate:function(){this._key=this._gen4words().concat(this._gen4words()),this._cipher=new a.cipher.aes(this._key)},_reseed:function(b){this._key=a.hash.sha256.hash(this._key.concat(b)),this._cipher=new a.cipher.aes(this._key);for(var c=0;4>c;c++)if(this._counter[c]=this._counter[c]+1|0,this._counter[c])break},_reseedFromPools:function(b){var c=[],d=0,e;for(this._nextReseed=c[0]=(new Date).valueOf()+this._MILLISECONDS_PER_RESEED,e=0;16>e;e++)c.push(4294967296*Math.random()|0);for(e=0;e=1<this._strength&&(this._strength=d),this._reseedCount++,this._reseed(c)},_mouseCollector:function(b){var c=b.x||b.clientX||b.offsetX||0,d=b.y||b.clientY||b.offsetY||0;a.random.addEntropy([c,d],2,"mouse")},_loadTimeCollector:function(b){a.random.addEntropy((new Date).valueOf(),2,"loadtime")},_fireEvent:function(b,c){var d,e=a.random._callbacks[b],f=[];for(d in e)e.hasOwnProperty(d)&&f.push(e[d]);for(d=0;d4)throw new a.exception.invalid("json encrypt: invalid parameters");return"string"==typeof b&&(h=a.misc.cachedPbkdf2(b,g),b=h.key.slice(0,g.ks/32),g.salt=h.salt),"string"==typeof c&&(c=a.codec.utf8String.toBits(c)),"string"==typeof j&&(j=a.codec.utf8String.toBits(j)),i=new a.cipher[g.cipher](b),f._add(e,g),e.key=b,g.ct=a.mode[g.mode].encrypt(i,c,g.iv,j,g.ts),f.encode(g)},decrypt:function(b,c,d,e){d=d||{},e=e||{};var f=a.json,g=f._add(f._add(f._add({},f.defaults),f.decode(c)),d,!0),h,i,j,k=g.adata;if("string"==typeof g.salt&&(g.salt=a.codec.base64.toBits(g.salt)),"string"==typeof g.iv&&(g.iv=a.codec.base64.toBits(g.iv)),!a.mode[g.mode]||!a.cipher[g.cipher]||"string"==typeof b&&g.iter<=100||64!==g.ts&&96!==g.ts&&128!==g.ts||128!==g.ks&&192!==g.ks&&256!==g.ks||!g.iv||g.iv.length<2||g.iv.length>4)throw new a.exception.invalid("json decrypt: invalid parameters");return"string"==typeof b&&(i=a.misc.cachedPbkdf2(b,g),b=i.key.slice(0,g.ks/32),g.salt=i.salt),"string"==typeof k&&(k=a.codec.utf8String.toBits(k)),j=new a.cipher[g.cipher](b),h=a.mode[g.mode].decrypt(j,g.ct,g.iv,k,g.ts),f._add(e,g),e.key=b,a.codec.utf8String.fromBits(h)},encode:function(b){var c,d="{",e="";for(c in b)if(b.hasOwnProperty(c)){if(!c.match(/^[a-z0-9]+$/i))throw new a.exception.invalid("json encode: invalid property name");switch(d+=e+'"'+c+'":',e=",",typeof b[c]){case"number":case"boolean":d+=b[c];break;case"string":d+='"'+escape(b[c])+'"';break;case"object":d+='"'+a.codec.base64.fromBits(b[c],1)+'"';break;default:throw new a.exception.bug("json encode: unsupported type")}}return d+"}"},decode:function(b){if(b=b.replace(/\s/g,""),!b.match(/^\{.*\}$/))throw new a.exception.invalid("json decode: this isn't json!");var c=b.replace(/^\{|\}$/g,"").split(/,/),d={},e,f;for(e=0;eh.length)&&(e=h),{encryptKey:b.encryptKey||d(),storageKey:b.storageKey||d(),domain:c.sessionDomain||b.domain||undefined,path:c.sessionPath||e}}function f(){if(!window.location)return"";var a;try{a=window.location.href}catch(b){a=window.document.createElement("a"),a.href="",a=a.href}return a}function g(a){var b=/^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/,c=b.exec(a.toLowerCase());return c?c[1]:null}function h(a,b){function c(b){return a+":"+b}var d=[];if(!b)return[a];while(!0){if(d.push(c(b)),"/"===b)break;b=b.replace(/[^\/]+\/$/,"")}return d}function i(a,b){return h(a,b.sessionPath||g(f())+"/")}b?DataAPI.sessionStores["cookie-encrypted"]={save:function(f,g,h){var i=h?new Date((new Date).getTime()+31536e7):undefined,j=e(d(f),this.o);Cookie.bake(c(f),JSON.stringify(j),j.domain,j.path,i),b.setItem(j.storageKey,a.encrypt(j.encryptKey,g))},fetch:function(c){var e=d(c),f,g,h;if(!e.storageKey)for(g=i(c,this.o),f=0;fa?"0"+a:a}function c(a){if(!isFinite(a.valueOf()))return"";var c,d=a.getTimezoneOffset();return 0===d?c="Z":(c=d>0?"-":"+",d=Math.abs(d),c+=b(Math.floor(d/60))+":"+b(d%60)),a.getFullYear()+"-"+b(a.getMonth()+1)+"-"+b(a.getDate())+"T"+b(a.getHours())+":"+b(a.getMinutes())+":"+b(a.getSeconds())+c}this._isFormElement(a)&&(a=this._serializeFormElementToObject(a));var d=typeof a;return"undefined"===d||null===a||"number"===d&&!isFinite(a)?"":"boolean"===d?a?"1":"":a instanceof Date?c(a):window.File&&a instanceof window.File?a:this._isFileInputElement(a)?a.files[0]:"object"===d?this.serializeData(a,function(a,b){if(this[a]instanceof Date)return c(this[a]);return b}):a},_serializeParams:function(a){if(!a)return a;if("string"==typeof a)return a;this._isFormElement(a)&&(a=this._serializeFormElementToObject(a));var b,c="";for(b in a){if(!a.hasOwnProperty(b))continue;c&&(c+="&"),c+=encodeURIComponent(b)+"="+encodeURIComponent(this._serializeObject(a[b]))}return c},_unserializeParams:function(a){if("string"!=typeof a)return a;var b,c,d={},e=a.split("&");for(b=0;be,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;for(;h>i;i++)if(c=d[i],(c.selected||i===e)&&(!c.parentNode.disabled||"optgroup"!==c.parentNode.nodeName.toLowerCase())){if(b=c.attributes.value,b=!b||b.specified?c.value:a.text,f)return b;g.push(b)}return g}return a.value},withOptions:function(a,b){var c,d,e=this.o,f={};for(c in e)f[c]=e[c];for(c in a)f[c]=a[c];return this.o=f,this._initOptions(),d=b.apply(this),this.o=e,this._initOptions(),d},_requestVia:function(){return window.XDomainRequest&&this.o.crossOrigin&&/msie (8|9)\./i.test(window.navigator.appVersion)?"xdr":window.XMLHttpRequest?"xhr":"fetch"},request:function(a,b){var c,d,e,f,g=this,h=[],i=null,j=function(){},k=null,l=null,m=this._requestVia(),n=this.getTokenData(),o=this.getAuthorizationHeader("accessToken"),p=this.getCurrentFormat(),q=a,r=Array.prototype.slice.call(arguments),s={},t={};function u(a){var b,c;if(!g.o.disableFormData&&window.FormData){if(a instanceof window.FormData)return a;if(g._isFormElement(a))return new window.FormData(a);if(window.FormData&&"object"==typeof a){c=new window.FormData;for(b in a)c.append(b,g._serializeObject(a[b]));return c}}if(g._isFormElement(a)){a=g._serializeFormElementToObject(a);for(b in a)a[b]instanceof Array&&(a[b]=a[b].join(","))}if(g._findFileInput(a)){m="iframe",c={};for(b in a)g._isFileInputElement(a[b])?c[b]=a[b]:c[b]=g._serializeObject(a[b]);a=c}else"string"!=typeof a&&(a=g._serializeParams(a));return a}function v(a){var b=j(a);return b!==!1&&a.error&&g.trigger("error",a),b}function w(a){return a.error&&401===a.error.code&&"/token"!==b&&"/authentication"!==b}function x(){g.request("POST","/token",function(a){return a.error?(z(r),v(a)):(g.storeTokenData(a),g.request.apply(g,r),!1)})}function y(a,b){return a+=-1===a.indexOf("?")?"?":"&",a+g._serializeParams(b)}function z(a){for(c=2;c=2)&&(b=y(b,h.shift())),h.length&&(i=h.shift()),!this._isEmptyObject(s))if("get"===a.toLowerCase())b=y(b,s);else if(window.FormData&&i&&i instanceof window.FormData)for(d in s)i.append(d,s[d]);else{i=i||{};for(d in s)i[d]=s[d]}i=u(i),f=this.o.baseUrl.replace(/\/*$/,"/")+"v"+this.getVersion(),b=b.replace(/^\/*/,"/");function A(a,c,d,e,f){var h,i,j,k;try{i=a,j=g.findFormat(i)||g.getCurrentFormat(),h=j.unserialize(c)}catch(l){h={error:{code:+d,message:e||"Communication Error"}}}if(w(h))return x(),f&&f(),!1;!h.error&&"/authentication"===b&&"delete"===q.toLowerCase()||h.error&&401===h.error.code&&("/authentication"===b&&"post"===q.toLowerCase()||"/token"===b&&"post"===q.toLowerCase())?g.clearTokenData():!h.error&&("/authentication"===b&&"post"===q.toLowerCase()||"/token"===b&&"post"===q.toLowerCase())&&g.storeTokenData(h),k=v(h),k!==!1&&h.error&&401===h.error.code&&"/authentication"!==b&&g.trigger("authorizationRequired",h)}if("xdr"===m){if(!this._isEmptyObject(t))throw"Cannot set request header when sending via XDomainRequest";l=l||new window.XDomainRequest,l.onload=function(){A(l.contentType,l.responseText,200)},l.onerror=function(){A(l.contentType,l.responseText,404)},l.onprogress=function(){},l.ontimeout=function(){A(l.contentType,l.responseText,0)},"undefined"!=typeof this.o.timeout&&(l.timeout=this.o.timeout||Number.MAX_VALUE),l.open(a,f+b),l.send(g._serializeParams(i)||null)}else{if("xhr"===m)return k=k||this.newXMLHttpRequest(),"undefined"!=typeof this.o.timeout&&(k.timeout=this.o.timeout),k.onreadystatechange=function(){var b,c;if(4!==k.readyState)return;function d(){k.onreadystatechange=function(){}}if(b=A(k.getResponseHeader("Content-Type"),k.responseText,k.status,k.statusText,d),b===!1)return;c=k.getResponseHeader("X-MT-Next-Phase-URL"),c?(k.abort(),g.sendXMLHttpRequest(k,a,f+c,i,t)):d()},this.sendXMLHttpRequest(k,a,f+b,i,t);if("fetch"!==m)return void function(){var c,d,e,h,j=g._getNextIframeName(),k=window.document,l=k.createElement("form"),m=k.createElement("iframe");l.action=f+b,l.target=j,l.method=a,l.style.display="inline",l.encoding="multipart/form-data",l.enctype="multipart/form-data",m.name=j,m.style.position="absolute",m.style.top="-9999px",k.body.appendChild(m),m.contentWindow.name=j,i=i||{};for(c in t)i[c]=t[c];i["X-MT-Requested-Via"]="IFRAME";for(c in i){if(g._isFileInputElement(i[c])){d=i[c],e=d.name,d.name=c,d.parentNode?d.parentNode.insertBefore(l,d):k.body.appendChild(l),l.appendChild(d);continue}h=k.createElement("input"),h.type="hidden",h.name=c,h.value=i[c],l.appendChild(h)}l.submit();function n(){var a=m.contentWindow.document.body,b=a.textContent||a.innerText,c;function f(){setTimeout(function(){d.name=e,l.parentNode&&(l.parentNode.insertBefore(d,l),l.parentNode.removeChild(l)),m.parentNode&&m.parentNode.removeChild(m)})}try{c=g.unserializeData(b)}catch(h){c={error:{code:500,message:"Internal Server Error"}}}if(w(c))return x(),void f();f(),v(c)}m.addEventListener?m.addEventListener("load",n,!1):m.attachEvent&&m.attachEvent("onload",n)}();this._sendFetchApiRequest(a,f+b,i,t).then(function(b){var c,d;if(c=b.text().then(function(a){A(b.headers.get("Content-Type"),a,b.status,b.statusText)}),c===!1)return;if(d=b.headers.get("X-MT-Next-Phase-URL"),!d)return;this._sendFetchApiRequest(a,f+d,i,t)})}},on:function(){this.constructor.on.apply(this,arguments)},off:function(){this.constructor.off.apply(this,arguments)},trigger:function(a){var b,c=Array.prototype.slice.call(arguments,1),d=(this.constructor.callbacks[a]||[]).concat(this.callbacks[a]||[]);for(b=0;ba?"0"+a:a}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,g=gap,h,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,h=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)h[c]=str(c,i)||"null";return e=0===h.length?"[]":gap?"[\n"+gap+h.join(",\n"+gap)+"\n"+g+"]":"["+h.join(",")+"]",gap=g,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e));return e=0===h.length?"{}":gap?"{\n"+gap+h.join(",\n"+gap)+"\n"+g+"}":"{"+h.join(",")+"}",gap=g,e}}"function"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){var j;function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),d!==undefined?e[c]=d:delete e[c]);return reviver.call(a,b,e)}if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),DataAPI.on("initialize",function(){this.generateEndpointMethods([{id:"openapi",route:"/",verb:"GET",resources:null},{id:"version",route:"/version",verb:"GET",resources:null},{id:"list_endpoints",route:"/endpoints",verb:"GET",resources:null},{id:"authorize",route:"/authorization",verb:"GET",resources:null},{id:"get_token",route:"/token",verb:"POST",resources:null},{id:"revoke_authentication",route:"/authentication",verb:"DELETE",resources:null},{id:"revoke_token",route:"/token",verb:"DELETE",resources:null},{id:"get_user",route:"/users/:user_id",verb:"GET",resources:null},{id:"update_user",route:"/users/:user_id",verb:"PUT",resources:["user"]},{id:"get_entry",route:"/sites/:site_id/entries/:entry_id",verb:"GET",resources:null},{id:"delete_entry",route:"/sites/:site_id/entries/:entry_id",verb:"DELETE",resources:null},{id:"publish_entries",route:"/publish/entries",verb:"GET",resources:null},{id:"get_stats_provider",route:"/sites/:site_id/stats/provider",verb:"GET",resources:null},{id:"list_categories",route:"/sites/:site_id/categories",verb:"GET",resources:null},{id:"list_categories_for_entry",route:"/sites/:site_id/entries/:entry_id/categories",verb:"GET",resources:null},{id:"list_parent_categories",route:"/sites/:site_id/categories/:category_id/parents",verb:"GET",resources:null},{id:"list_sibling_categories",route:"/sites/:site_id/categories/:category_id/siblings",verb:"GET",resources:null},{id:"list_child_categories",route:"/sites/:site_id/categories/:category_id/children",verb:"GET",resources:null},{id:"create_category",route:"/sites/:site_id/categories",verb:"POST",resources:["category"]},{id:"get_category",route:"/sites/:site_id/categories/:category_id",verb:"GET",resources:null},{id:"update_category",route:"/sites/:site_id/categories/:category_id",verb:"PUT",resources:["category"]},{id:"delete_category",route:"/sites/:site_id/categories/:category_id",verb:"DELETE",resources:null},{id:"permutate_categories",route:"/sites/:site_id/categories/permutate",verb:"POST",resources:null},{id:"list_folders",route:"/sites/:site_id/folders",verb:"GET",resources:null},{id:"list_parent_folders",route:"/sites/:site_id/folders/:folder_id/parents",verb:"GET",resources:null},{id:"list_sibling_folders",route:"/sites/:site_id/folders/:folder_id/siblings",verb:"GET",resources:null},{id:"list_child_folders",route:"/sites/:site_id/folders/:folder_id/children",verb:"GET",resources:null},{id:"create_folder",route:"/sites/:site_id/folders",verb:"POST",resources:["folder"]},{id:"get_folder",route:"/sites/:site_id/folders/:folder_id",verb:"GET",resources:null},{id:"update_folder",route:"/sites/:site_id/folders/:folder_id",verb:"PUT",resources:["folder"]},{id:"delete_folder",route:"/sites/:site_id/folders/:folder_id",verb:"DELETE",resources:null},{id:"permutate_folders",route:"/sites/:site_id/folders/permutate",verb:"POST",resources:null},{id:"list_assets",route:"/sites/:site_id/assets",verb:"GET",resources:null},{id:"list_assets_for_entry",route:"/sites/:site_id/entries/:entry_id/assets",verb:"GET",resources:null},{id:"list_assets_for_page",route:"/sites/:site_id/pages/:page_id/assets",verb:"GET",resources:null},{id:"list_assets_for_site_and_tag",route:"/sites/:site_id/tags/:tag_id/assets",verb:"GET",resources:null},{id:"get_asset",route:"/sites/:site_id/assets/:asset_id",verb:"GET",resources:null},{id:"update_asset",route:"/sites/:site_id/assets/:asset_id",verb:"PUT",resources:["asset"]},{id:"delete_asset",route:"/sites/:site_id/assets/:asset_id",verb:"DELETE",resources:null},{id:"get_thumbnail",route:"/sites/:site_id/assets/:asset_id/thumbnail",verb:"GET",resources:null},{id:"list_entries_for_category",route:"/sites/:site_id/categories/:category_id/entries",verb:"GET",resources:null},{id:"list_entries_for_asset",route:"/sites/:site_id/assets/:asset_id/entries",verb:"GET",resources:null},{id:"list_entries_for_site_and_tag",route:"/sites/:site_id/tags/:tag_id/entries",verb:"GET",resources:null},{id:"import_entries",route:"/sites/:site_id/entries/import",verb:"POST",resources:null},{id:"export_entries",route:"/sites/:site_id/entries/export",verb:"GET",resources:null},{id:"preview_entry_by_id",route:"/sites/:site_id/entries/:entry_id/preview",verb:"POST",resources:null},{id:"preview_entry",route:"/sites/:site_id/entries/preview",verb:"POST",resources:null},{id:"list_pages",route:"/sites/:site_id/pages",verb:"GET",resources:null},{id:"list_pages_for_folder",route:"/sites/:site_id/folders/:folder_id/pages",verb:"GET",resources:null},{id:"list_pages_for_asset",route:"/sites/:site_id/assets/:asset_id/pages",verb:"GET",resources:null},{id:"list_pages_for_site_and_tag",route:"/sites/:site_id/tags/:tag_id/pages",verb:"GET",resources:null},{id:"get_page",route:"/sites/:site_id/pages/:page_id",verb:"GET",resources:null},{id:"delete_page",route:"/sites/:site_id/pages/:page_id",verb:"DELETE",resources:null},{id:"preview_page_by_id",route:"/sites/:site_id/pages/:page_id/preview",verb:"POST",resources:null},{id:"preview_page",route:"/sites/:site_id/pages/preview",verb:"POST",resources:null},{id:"list_sites",route:"/sites",verb:"GET",resources:null},{id:"get_blog",route:"/sites/:site_id",verb:"GET",resources:null},{id:"list_blogs_for_user",route:"/users/:user_id/sites",verb:"GET",resources:null},{id:"list_sites_by_parent",route:"/sites/:site_id/children",verb:"GET",resources:null},{id:"insert_new_blog",route:"/sites/:site_id",verb:"POST",resources:["blog"]},{id:"insert_new_website",route:"/sites",verb:"POST",resources:["website"]},{id:"update_site",route:"/sites/:site_id",verb:"PUT",resources:null},{id:"delete_site",route:"/sites/:site_id",verb:"DELETE",resources:null},{id:"list_roles",route:"/roles",verb:"GET",resources:null},{id:"create_role",route:"/roles",verb:"POST",resources:["role"]},{id:"get_role",route:"/roles/:role_id",verb:"GET",resources:null},{id:"update_role",route:"/roles/:role_id",verb:"PUT",resources:["role"]},{id:"delete_role",route:"/roles/:role_id",verb:"DELETE",resources:null},{id:"list_permissions",route:"/permissions",verb:"GET",resources:null},{id:"list_permissions_for_user",route:"/users/:user_id/permissions",verb:"GET",resources:null},{id:"list_permissions_for_site",route:"/sites/:site_id/permissions",verb:"GET",resources:null},{id:"list_permissions_for_role",route:"/roles/:role_id/permissions",verb:"GET",resources:null},{id:"grant_permission_to_site",route:"/sites/:site_id/permissions/grant",verb:"POST",resources:null},{id:"grant_permission_to_user",route:"/users/:user_id/permissions/grant",verb:"POST",resources:null},{id:"revoke_permission_from_site",route:"/sites/:site_id/permissions/revoke",verb:"POST",resources:null},{id:"revoke_permission_from_user",route:"/users/:user_id/permissions/revoke",verb:"POST",resources:null},{id:"list_logs",route:"/sites/:site_id/logs",verb:"GET",resources:null},{id:"get_log",route:"/sites/:site_id/logs/:log_id",verb:"GET",resources:null},{id:"create_log",route:"/sites/:site_id/logs",verb:"POST",resources:["log"]},{id:"update_log",route:"/sites/:site_id/logs/:log_id",verb:"PUT",resources:["log"]},{id:"delete_log",route:"/sites/:site_id/logs/:log_id",verb:"DELETE",resources:null},{id:"reset_logs",route:"/sites/:site_id/logs",verb:"DELETE",resources:null},{id:"export_logs",route:"/sites/:site_id/logs/export",verb:"GET",resources:null},{id:"list_tags_for_site",route:"/sites/:site_id/tags",verb:"GET",resources:null},{id:"get_tag_for_site",route:"/sites/:site_id/tags/:tag_id",verb:"GET",resources:null},{id:"rename_tag_for_site",route:"/sites/:site_id/tags/:tag_id",verb:"PUT",resources:null},{id:"delete_tag_for_site",route:"/sites/:site_id/tags/:tag_id",verb:"DELETE",resources:null},{id:"list_themes",route:"/themes",verb:"GET",resources:null},{id:"list_themes_for_site",route:"/sites/:site_id/themes",verb:"GET",resources:null},{id:"get_theme",route:"/themes/:theme_id",verb:"GET",resources:null},{id:"get_theme_for_site",route:"/sites/:site_id/themes/:theme_id",verb:"GET",resources:null},{id:"apply_theme_to_site",route:"/sites/:site_id/themes/:theme_id/apply",verb:"POST",resources:null},{id:"uninstall_theme",route:"/themes/:theme_id",verb:"DELETE",resources:null},{id:"create_template",route:"/sites/:site_id/templates",verb:"POST",resources:["template"]},{id:"refresh_templates_for_site",route:"/sites/:site_id/refresh_templates",verb:"POST",resources:null},{id:"preview_template_by_id",route:"/sites/:site_id/templates/:template_id/preview",verb:"POST",resources:null},{id:"preview_template",route:"/sites/:site_id/templates/preview",verb:"POST",resources:null},{id:"list_widgetsets",route:"/sites/:site_id/widgetsets",verb:"GET",resources:null},{id:"get_widgetset",route:"/sites/:site_id/widgetsets/:widgetset_id",verb:"GET",resources:null},{id:"create_widgetset",route:"/sites/:site_id/widgetsets",verb:"POST",resources:["widgetset"]},{id:"update_widgetset",route:"/sites/:site_id/widgetsets/:widgetset_id",verb:"PUT",resources:["widgetset"]},{id:"delete_widgetset",route:"/sites/:site_id/widgetsets/:widgetset_id",verb:"DELETE",resources:null},{id:"list_widgets",route:"/sites/:site_id/widgets",verb:"GET",resources:null},{id:"list_widgets_for_widgetset",route:"/sites/:site_id/widgetsets/:widgetset_id/widgets",verb:"GET",resources:null},{id:"get_widgets",route:"/sites/:site_id/widgets/:widget_id",verb:"GET",resources:null},{id:"get_widget_for_widgetset",route:"/sites/:site_id/widgetsets/:widgetset_id/widgets/:widget_id",verb:"GET",resources:null},{id:"create_widget",route:"/sites/:site_id/widgets",verb:"POST",resources:["widget"]},{id:"update_widget",route:"/sites/:site_id/widgets/:widget_id",verb:"PUT",resources:["widget"]},{id:"delete_widget",route:"/sites/:site_id/widgets/:widget_id",verb:"DELETE",resources:null},{id:"refresh_widget",route:"/sites/:site_id/widgets/:widget_id/refresh",verb:"POST",resources:null},{id:"clone_widget",route:"/sites/:site_id/widgets/:widget_id/clone",verb:"POST",resources:null},{id:"list_users",route:"/users",verb:"GET",resources:null},{id:"create_user",route:"/users",verb:"POST",resources:["user"]},{id:"delete_user",route:"/users/:user_id",verb:"DELETE",resources:null},{id:"unlock_user",route:"/users/:user_id/unlock",verb:"POST",resources:null},{id:"recover_password_for_user",route:"/users/:user_id/recover_password",verb:"POST",resources:null},{id:"recover_password",route:"/recover_password",verb:"POST",resources:null},{id:"list_plugins",route:"/plugins",verb:"GET",resources:null},{id:"get_plugin",route:"/plugins/:plugin_id",verb:"GET",resources:null},{id:"enable_plugin",route:"/plugins/:plugin_id/enable",verb:"POST",resources:null},{id:"disable_plugin",route:"/plugins/:plugin_id/disable",verb:"POST",resources:null},{id:"enable_all_plugins",route:"/plugins/enable",verb:"POST",resources:null},{id:"disable_all_plugins",route:"/plugins/disable",verb:"POST",resources:null},{id:"backup_site",route:"/sites/:site_id/backup",verb:"GET",resources:null},{id:"list_groups",route:"/groups",verb:"GET",resources:null},{id:"list_groups_for_user",route:"/users/:user_id/groups",verb:"GET",resources:null},{id:"get_group",route:"/groups/:group_id",verb:"GET",resources:null},{id:"create_group",route:"/groups",verb:"POST",resources:["group"]},{id:"update_group",route:"/groups/:group_id",verb:"PUT",resources:["group"]},{id:"delete_group",route:"/groups/:group_id",verb:"DELETE",resources:null},{id:"list_permissions_for_group",route:"/groups/:group_id/permissions",verb:"GET",resources:null},{id:"grant_permission_to_group",route:"/groups/:group_id/permissions/grant",verb:"POST",resources:null},{id:"revoke_permission_from_group",route:"/groups/:group_id/permissions/revoke",verb:"POST",resources:null},{id:"list_members_for_group",route:"/groups/:group_id/members",verb:"GET",resources:null},{id:"get_member_for_group",route:"/groups/:group_id/members/:member_id",verb:"GET",resources:null},{id:"add_member_to_group",route:"/groups/:group_id/members",verb:"POST",resources:null},{id:"remove_member_from_group",route:"/groups/:group_id/members/:member_id",verb:"DELETE",resources:null},{id:"authenticate",route:"/authentication",verb:"POST",resources:null},{id:"upload_asset",route:"/assets/upload",verb:"POST",resources:null},{id:"upload_asset_for_site",route:"/sites/:site_id/assets/upload",verb:"POST",resources:null},{id:"create_entry",route:"/sites/:site_id/entries",verb:"POST",resources:["entry"]},{id:"update_entry",route:"/sites/:site_id/entries/:entry_id",verb:"PUT",resources:["entry"]},{id:"create_page",route:"/sites/:site_id/pages",verb:"POST",resources:["page"]},{id:"update_page",route:"/sites/:site_id/pages/:page_id",verb:"PUT",resources:["page"]},{id:"create_category_set",route:"/sites/:site_id/categorySets",verb:"POST",resources:["category_set"]},{id:"get_category_set",route:"/sites/:site_id/categorySets/:category_set_id",verb:"GET",resources:null},{id:"update_category_set",route:"/sites/:site_id/categorySets/:category_set_id",verb:"PUT",resources:["category_set"]},{id:"delete_category_set",route:"/sites/:site_id/categorySets/:category_set_id",verb:"DELETE",resources:null},{id:"list_categories_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories",verb:"GET",resources:null},{id:"list_parent_categories_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id/parents",verb:"GET",resources:null},{id:"list_sibling_categories_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id/siblings",verb:"GET",resources:null},{id:"list_child_categories_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id/children",verb:"GET",resources:null},{id:"create_category_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories",verb:"POST",resources:["category"]},{id:"get_category_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id",verb:"GET",resources:null},{id:"update_category_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id",verb:"PUT",resources:["category"]},{id:"delete_category_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/:category_id",verb:"DELETE",resources:null},{id:"permutate_categories_for_category_set",route:"/sites/:site_id/categorySets/:category_set_id/categories/permutate",verb:"POST",resources:null},{id:"list_content_types",route:"/sites/:site_id/contentTypes",verb:"GET",resources:null},{id:"create_content_type",route:"/sites/:site_id/contentTypes",verb:"POST",resources:["content_type"]},{id:"get_content_type",route:"/sites/:site_id/contentTypes/:content_type_id",verb:"GET",resources:null},{id:"update_content_type",route:"/sites/:site_id/contentTypes/:content_type_id",verb:"PUT",resources:["content_type"]},{id:"delete_content_type",route:"/sites/:site_id/contentTypes/:content_type_id",verb:"DELETE",resources:null},{id:"list_content_fields",route:"/sites/:site_id/contentTypes/:content_type_id/fields",verb:"GET",resources:null},{id:"create_content_field",route:"/sites/:site_id/contentTypes/:content_type_id/fields",verb:"POST",resources:["content_field"]},{id:"get_content_field",route:"/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id",verb:"GET",resources:null},{id:"update_content_field",route:"/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id",verb:"PUT",resources:["content_field"]},{id:"delete_content_field",route:"/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id",verb:"DELETE",resources:null},{id:"permutate_content_fields",route:"/sites/:site_id/contentTypes/:content_type_id/fields/permutate",verb:"POST",resources:null},{id:"create_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data",verb:"POST",resources:["content_data"]},{id:"get_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id",verb:"GET",resources:null},{id:"update_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id",verb:"PUT",resources:["content_data"]},{id:"delete_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id",verb:"DELETE",resources:null},{id:"preview_content_data_by_id",route:"/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id/preview",verb:"POST",resources:["content_data"]},{id:"preview_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data/preview",verb:"POST",resources:["content_data"]},{id:"publish_content_data",route:"/publish/contentData",verb:"GET",resources:null},{id:"search",route:"/search",verb:"GET",resources:null},{id:"list_templates",route:"/sites/:site_id/templates",verb:"GET",resources:null},{id:"get_template",route:"/sites/:site_id/templates/:template_id",verb:"GET",resources:null},{id:"update_template",route:"/sites/:site_id/templates/:template_id",verb:"PUT",resources:["template"]},{id:"delete_template",route:"/sites/:site_id/templates/:template_id",verb:"DELETE",resources:null},{id:"publish_template",route:"/sites/:site_id/templates/:template_id/publish",verb:"POST",resources:null},{id:"refresh_template",route:"/sites/:site_id/templates/:template_id/refresh",verb:"POST",resources:null},{id:"clone_template",route:"/sites/:site_id/templates/:template_id/clone",verb:"POST",resources:null},{id:"list_templatemaps",route:"/sites/:site_id/templates/:template_id/templatemaps",verb:"GET",resources:null},{id:"get_templatemap",route:"/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id",verb:"GET",resources:null},{id:"create_templatemap",route:"/sites/:site_id/templates/:template_id/templatemaps",verb:"POST",resources:["templatemap"]},{id:"update_templatemap",route:"/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id",verb:"PUT",resources:["templatemap"]},{id:"delete_templatemap",route:"/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id",verb:"DELETE",resources:null},{id:"list_category_sets",route:"/sites/:site_id/categorySets",verb:"GET",resources:null},{id:"list_content_data",route:"/sites/:site_id/contentTypes/:content_type_id/data",verb:"GET",resources:null},{id:"list_text_filters",route:"/textFilters",verb:"GET",resources:null},{id:"list_entries",route:"/sites/:site_id/entries",verb:"GET",resources:null},{id:"list_stats_pageviews_for_path",route:"/sites/:site_id/stats/path/pageviews",verb:"GET",resources:null},{id:"list_stats_visits_for_path",route:"/sites/:site_id/stats/path/visits",verb:"GET",resources:null},{id:"list_stats_pageviews_for_date",route:"/sites/:site_id/stats/date/pageviews",verb:"GET",resources:null},{id:"list_stats_visits_for_date",route:"/sites/:site_id/stats/date/visits",verb:"GET",resources:null},{id:"export_site_theme",route:"/sites/:site_id/export_theme",verb:"POST",resources:null},{id:"list_fields",route:"/sites/:site_id/fields",verb:"GET",resources:null},{id:"get_field",route:"/sites/:site_id/fields/:field_id",verb:"GET",resources:null},{id:"create_field",route:"/sites/:site_id/fields",verb:"POST",resources:["field"]},{id:"update_field",route:"/sites/:site_id/fields/:field_id",verb:"PUT",resources:["field"]},{id:"delete_field",route:"/sites/:site_id/fields/:field_id",verb:"DELETE",resources:null},{id:"synchronize_groups",route:"/groups/synchronize",verb:"POST",resources:null},{id:"bulk_author_import",route:"/users/import",verb:"POST",resources:null},{id:"bulk_author_export",route:"/users/export",verb:"GET",resources:null},{id:"synchronize_users",route:"/users/synchronize",verb:"POST",resources:null},{id:"list_formatted_texts",route:"/sites/:site_id/formatted_texts",verb:"GET",resources:null},{id:"get_formatted_text",route:"/sites/:site_id/formatted_texts/:formatted_text_id",verb:"GET",resources:null},{id:"create_formatted_text",route:"/sites/:site_id/formatted_texts",verb:"POST",resources:["formatted_text"]},{id:"update_formatted_text",route:"/sites/:site_id/formatted_texts/:formatted_text_id",verb:"PUT",resources:["formatted_text"]},{id:"delete_formatted_text",route:"/sites/:site_id/formatted_texts/:formatted_text_id",verb:"DELETE",resources:null},{id:"list_comments",route:"/sites/:site_id/comments",verb:"GET",resources:null},{id:"list_comments_for_entry",route:"/sites/:site_id/entries/:entry_id/comments",verb:"GET",resources:null},{id:"create_comment",route:"/sites/:site_id/entries/:entry_id/comments",verb:"POST",resources:["comment"]},{id:"create_reply_comment",route:"/sites/:site_id/entries/:entry_id/comments/:comment_id/replies",verb:"POST",resources:["comment"]},{id:"get_comment",route:"/sites/:site_id/comments/:comment_id",verb:"GET",resources:null},{id:"update_comment",route:"/sites/:site_id/comments/:comment_id",verb:"PUT",resources:["comment"]},{id:"delete_comment",route:"/sites/:site_id/comments/:comment_id",verb:"DELETE",resources:null},{id:"list_comments_for_page",route:"/sites/:site_id/pages/:page_id/comments",verb:"GET",resources:null},{id:"create_comment_for_page",route:"/sites/:site_id/pages/:page_id/comments",verb:"POST",resources:[{comment:null}]},{id:"create_reply_comment_for_page",route:"/sites/:site_id/pages/:page_id/comments/:comment_id/replies",verb:"POST",resources:["comment"]}])}),window.MT=window.MT||{},window.MT.DataAPI=window.MT.DataAPI||DataAPI,window.MT.DataAPI["v"+DataAPI.version]=DataAPI,DataAPI}); +//# sourceMappingURL=mt-data-api.min.map \ No newline at end of file diff --git a/mt-static/data-api/v7/js/mt-data-api.min.map b/mt-static/data-api/v7/js/mt-data-api.min.map new file mode 100644 index 0000000..27ebb9d --- /dev/null +++ b/mt-static/data-api/v7/js/mt-data-api.min.map @@ -0,0 +1 @@ +{"version":3,"file":"mt-static/data-api/v7/js/mt-data-api.min.js","sources":["mt-data-api.js"],"names":["window","factory","DataAPI","module","exports","define","amd","undefined","options","i","k","requireds","this","o","clientId","baseUrl","format","sessionStore","sessionDomain","sessionPath","async","timeout","cache","withoutAuthorization","processOneTimeTokenOnInitialize","loadPluginEndpoints","suppressResponseCodes","crossOrigin","disableFormData","length","callbacks","tokenData","iframeId","_initOptions","loadEndpoints","excludeComponents","_storeOneTimeToken","trigger","version","accessTokenKey","iframePrefix","defaultFormat","defaultSessionStore","document","formats","json","fileExtension","mimeType","serialize","JSON","stringify","apply","arguments","unserialize","parse","sessionStores","fetchCookieValues","name","cookie","Cookie","fetch","value","e","data","fillinDefaultCookieValues","values","path","currentPath","extractPath","documentUrl","domain","location","loc","href","createElement","url","urlRegexp","match","exec","toLowerCase","save","remember","expires","Date","getTime","bake","remove","sjcl","cipher","hash","mode","misc","codec","exception","corrupt","message","toString","invalid","bug","notReady","aes","key","_tables","_precompute","j","tmp","encKey","decKey","sbox","decTable","keyLen","rcon","_key","slice","prototype","encrypt","_crypt","decrypt","encTable","sboxInv","x","xInv","d","th","x2","x4","x8","s","tEnc","tDec","input","dir","a","b","c","a2","b2","c2","nInnerRounds","kIndex","out","table","t0","t1","t2","t3","bitArray","bitSlice","bstart","bend","_shiftRight","clamp","concat","a1","last","shift","getPartial","bitLength","l","len","Math","ceil","partial","_end","round","equal","carry","last2","shift2","push","pop","_xor4","y","utf8String","fromBits","arr","bl","String","fromCharCode","decodeURIComponent","escape","toBits","str","unescape","encodeURIComponent","charCodeAt","base64","_chars","_noEquals","bits","ta","charAt","replace","indexOf","sha256","_h","_buffer","_length","reset","update","finalize","blockSize","_init","ol","nl","_block","splice","h","floor","prime","factor","frac","outer","pow","words","w","h0","h1","h2","h3","h4","h5","h6","h7","ccm","prf","plaintext","iv","adata","tlen","L","tag","ivl","_computeTag","_ctrMode","ciphertext","tag2","q","mac","field","offset","macData","xor","enc","ctr","hmac","Hash","_hash","exKey","bs","_baseHash","pbkdf2","password","salt","count","Prff","u","ui","random","randomWords","nwords","paranoia","readiness","isReady","g","_NOT_READY","_REQUIRES_RESEED","_reseedFromPools","_READY","_MAX_WORDS_PER_BURST","_gate","_gen4words","setDefaultParanoia","_defaultParanoia","addEntropy","estimatedEntropy","source","id","t","valueOf","robin","_robins","oldReady","err","_collectorIds","_collectorIdNext","_pools","_eventId","objName","Object","call","_poolEntropy","_poolStrength","_fireEvent","max","_strength","getProgress","entropyRequired","_PARANOIA_LEVELS","_BITS_PER_RESEED","_nextReseed","startCollectors","_collectorsStarted","addEventListener","_loadTimeCollector","_mouseCollector","attachEvent","stopCollectors","removeEventListener","detachEvent","callback","_callbacks","_callbackI","cb","cbs","jsTemp","hasOwnProperty","_reseedCount","_counter","_cipher","progress","seeded","_MILLISECONDS_PER_RESEED","_reseed","seedWords","full","reseedData","strength","ev","clientX","offsetX","clientY","offsetY","arg","cbsTemp","ab","Uint32Array","crypto","getRandomValues","defaults","v","iter","ks","ts","params","rp","p","_add","prp","cachedPbkdf2","ct","encode","decode","obj","comma","split","m","parseInt","target","src","requireSame","_filter","filter","_pbkdf2Cache","cp","firstSalt","localStorage","cookieName","port","protocol","encryptKey","generateKey","storageKey","buildLocalStorageNames","buildName","names","localStorageNames","setItem","getItem","removeItem","on","off","registerFormat","spec","registerSessionStore","getDefaultFormat","getDefaultSessionStore","constructor","_initCrossDomainOption","locParts","baseParts","getAuthorizationUrl","redirectUrl","getVersion","_getCurrentEpoch","_getNextIframeName","getAppKey","_findFormatInternal","findFormat","getCurrentFormat","serializeData","unserializeData","getCurrentSessionStore","saveSessionData","fetchSessionData","removeSessionData","storeTokenData","oldData","getTokenData","sessionId","startTime","clearTokenData","_updateTokenFromDefaultCookie","defaultKey","defaultCookie","defaultToken","_hasOneTimeToken","token","oneTimeToken","expiresIn","accessToken","getAuthorizationHeader","bindEndpointParams","route","RegExp","_isElement","n","nodeName","_isFormElement","_isInputElement","_isFileInputElement","type","_serializeObject","f","iso8601Date","isFinite","tz","getTimezoneOffset","abs","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","_serializeFormElementToObject","File","files","_serializeParams","_unserializeParams","pair","_newXMLHttpRequestStandard","XMLHttpRequest","_newXMLHttpRequestActiveX","ActiveXObject","newXMLHttpRequest","_findFileInput","_isEmptyObject","sendXMLHttpRequest","xhr","method","defaultHeaders","headers","uk","open","setRequestHeader","normalizeHeaderKey","all","prefix","letter","toUpperCase","getHeaders","send","_sendFetchApiRequest","controller","signal","timeoutId","AbortController","setTimeout","abort","Headers","set","credentials","body","then","response","clearTimeout","form","submitterTypes","submittable","checkableTypes","elements","disabled","test","checked","_elementValue","option","index","selectedIndex","one","selected","parentNode","attributes","specified","text","withOptions","func","result","originalOption","_requestVia","XDomainRequest","navigator","appVersion","request","endpoint","base","api","paramsList","xdr","via","authHeader","currentFormat","originalMethod","originalArguments","Array","defaultParams","serializeParams","FormData","append","join","runCallback","status","error","needToRetry","code","retryWithAuthentication","parseArguments","appendParamsToURL","args","_","__method","responseCallback","contentType","responseText","statusText","cleanup","callbackResult","onload","onerror","onprogress","ontimeout","Number","MAX_VALUE","onreadystatechange","responseResult","readyState","getResponseHeader","file","originalName","doc","iframe","action","style","display","encoding","enctype","position","top","appendChild","contentWindow","insertBefore","submit","handler","contents","textContent","innerText","removeChild","get","_generateEndpointMethod","varRegexp","vars","extractVars","endpointParams","resources","verb","generateEndpointMethods","endpoints","items","secure","cookies","substring","exists","toGMTString","batter","cx","escapable","gap","indent","meta","\b","\t","\n","\f","\r","\"","\\","rep","quote","string","lastIndex","holder","mind","toJSON","replacer","space","Error","reviver","walk","eval","SyntaxError","comment","MT"],"mappings":"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"} \ No newline at end of file diff --git a/node-lib/data-api/v7/node-mt-data-api.js b/node-lib/data-api/v7/node-mt-data-api.js new file mode 100644 index 0000000..2c2c97c --- /dev/null +++ b/node-lib/data-api/v7/node-mt-data-api.js @@ -0,0 +1,5785 @@ +/* + * Movable Type DataAPI SDK for JavaScript v6 + * https://github.com/movabletype/mt-data-api-sdk-js + * Copyright (c) Six Apart Ltd. + * This program is distributed under the terms of the MIT license. + * + * Includes jQuery JavaScript Library in some parts. + * http://jquery.com/ + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + */ + +;(function(window, factory) { + var DataAPI = factory(window); + + if ( typeof module === "object" && typeof module.exports === "object" ) { + module.exports = DataAPI; + } else { + if ( typeof define === "function" && define.amd ) { + define("mt-data-api", [], function() { + return DataAPI; + }); + } + } +}(typeof window === "undefined" ? undefined : window, function(window, undefined) { + +"use strict"; + +if (typeof window === 'undefined') { + window = { + fetch: globalThis.fetch, + FormData: globalThis.FormData, + File: require('stream').Stream + }; +} + +/** + * @namespace MT + */ + +/** + * The MT.DataAPI is a client class for accessing to the Movable Type DataAPI. + * @class DataAPI + * @constructor + * @param {Object} options Options. + * @param {String} options.clientId Client ID + * This value allows alphanumeric, (_)underscore, (-)dash. + * @param {String} options.baseUrl The absolute CGI URL of the DataAPI. + * (e.g. http://example.com/mt/mt-data-api.cgi) + * @param {String} [options.format] The format to serialize. + * @param {String} [options.sessionStore] The session store. + * In browser, the cookie is used by default. + * @param {String} [options.sessionDomain] The session domain. + * When using the cookie, this value is used as cookie domain. + * @param {String} [options.sessionPath] The session path + * When using the cookie, this value is used as cookie path. + * @param {Boolean} [options.async] If true, use asynchronous + * XMLHttpRequest. The default value is the true. + * @param {Number} [options.timeout] The number of milliseconds a + * request can take before automatically being terminated. + * The default value is not set up, browser's default is used. + * @param {Boolean} [options.cache] If false, add an additional + * parameter "_" to request to avoid cache. The default value + * is the true. + * @param {Boolean} [options.withoutAuthorization] If true, + * the "X-MT-Authorization" request header is not sent even if + * already got accessToken. The default value is the false. + * @param {Boolean} [options.loadPluginEndpoints] If true, load + * endpoint data extended by plugin and generate methods to + * access that endpoint automatically. The default value is + * the true. + * (However even if this option's value is false, you are able + * to use all the methods to access to core endpoint.) + * @param {Boolean} [options.suppressResponseCodes] If true, add + * suppressResponseCodes parameter to each request. As a result, + * the Data API always returns 200 as HTTP response code. + * The default value is not set up. + * The default value is the false when requested via XMLHttpRequest + * or IFRAME. The default value is the true when requested via + * XDomainRequest. + * @param {Boolean} [options.crossOrigin] If true, requests are sent as + * a cross-domain request. The default value is assigned + * automatically by document's URL and baseUrl. + * @param {Boolean(} [options.disableFormData] If false,use FormData + * class when available that. The default value is the false. + */ +var DataAPI = function(options) { + var i, k, + requireds = ['clientId', 'baseUrl']; + + this.o = { + clientId: undefined, + baseUrl: undefined, + format: undefined, + sessionStore: undefined, + sessionDomain: undefined, + sessionPath: undefined, + async: true, + timeout: undefined, + cache: true, + withoutAuthorization: false, + processOneTimeTokenOnInitialize: true, + loadPluginEndpoints: true, + suppressResponseCodes: undefined, + crossOrigin: undefined, + disableFormData: false + }; + for (k in options) { + if (k in this.o) { + this.o[k] = options[k]; + } + else { + throw 'Unkown option: ' + k; + } + } + + for (i = 0; i < requireds.length; i++) { + if (! this.o[requireds[i]]) { + throw 'The "' + requireds[i] + '" is required.'; + } + } + + this.callbacks = {}; + this.tokenData = null; + this.iframeId = 0; + + this._initOptions(); + + if (this.o.loadPluginEndpoints) { + this.loadEndpoints({ + excludeComponents: 'core' + }); + } + + if (this.o.processOneTimeTokenOnInitialize) { + this._storeOneTimeToken(); + } + + this.trigger('initialize'); +}; + + +/** + * The API version. + * @property version + * @static + * @private + * @type Number + */ +DataAPI.version = 6; + +/** + * The key of access token of this api object. + * This value is used for the session store. + * @property accessTokenKey + * @static + * @private + * @type String + */ +DataAPI.accessTokenKey = 'mt_data_api_access_token'; + +/** + * The name prefix for iframe that created to upload asset. + * @property iframePrefix + * @static + * @private + * @type String + */ +DataAPI.iframePrefix = 'mt_data_api_iframe_'; + +/** + * The default format that serializes data. + * @property defaultFormat + * @static + * @private + * @type String + */ +DataAPI.defaultFormat = 'json'; + +/** + * The default session store. + * @property defaultSessionStore + * @static + * @private + * @type String + */ +DataAPI.defaultSessionStore = window.document ? 'cookie-encrypted' : 'fs'; + +/** + * Class level callbacks function data. + * @property callbacks + * @static + * @private + * @type Object + */ +DataAPI.callbacks = {}; + +/** + * Available formats that serialize data. + * @property formats + * @static + * @private + * @type Object + */ +DataAPI.formats = { + json: { + fileExtension: 'json', + mimeType: 'application/json', + serialize: function() { + return JSON.stringify.apply(JSON, arguments); + }, + unserialize: function() { + return JSON.parse.apply(JSON, arguments); + } + } +}; + +/** + * Available session stores. + * @property sessionStores + * @static + * @private + * @type Object + */ +DataAPI.sessionStores = {}; +;(function() { + +function fetchCookieValues(name) { + var cookie = Cookie.fetch(name); + + if (! cookie) { + return {}; + } + + try { + return JSON.parse(cookie.value); + } + catch (e) { + return { + data: cookie.value + }; + } +} + +function fillinDefaultCookieValues(values, o) { + var path = values.path, + currentPath = extractPath(documentUrl()); + if (! path || path.length > currentPath.length) { + path = currentPath; + } + + return { + data: values.data, + domain: ( typeof o === 'undefined' ? undefined : o.sessionDomain ) || values.domain || undefined, + path: ( typeof o === 'undefined' ? undefined : o.sessionPath ) || path + }; +} + +function documentUrl() { + if (! window.location) { + return ''; + } + + var loc; + + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + + return loc; +} + +function extractPath(url) { + var urlRegexp = /^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/, + match = urlRegexp.exec(url.toLowerCase()); + + return match ? match[1] : null; +} + +DataAPI.sessionStores['cookie'] = { + save: function(name, data, remember) { + var expires = remember ? new Date(new Date().getTime() + 315360000000) : undefined, // after 10 years + values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + Cookie.bake(name, JSON.stringify(values), values.domain, values.path, expires); + }, + fetch: function(name) { + fetchCookieValues(name).data; + }, + remove: function(name) { + var values = fillinDefaultCookieValues(fetchCookieValues(name)); + Cookie.bake(name, '', values.domain, values.path, new Date(0)); + } +}; + +})(); + +;(function() { + +/** @fileOverview Javascript cryptography implementation. + * + * Crush to remove comments, shorten variable names and + * generally reduce transmission size. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +"use strict"; +/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */ +/*global document, window, escape, unescape */ + +/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */ +var sjcl = { + /** @namespace Symmetric ciphers. */ + cipher: {}, + + /** @namespace Hash functions. Right now only SHA256 is implemented. */ + hash: {}, + + /** @namespace Block cipher modes of operation. */ + mode: {}, + + /** @namespace Miscellaneous. HMAC and PBKDF2. */ + misc: {}, + + /** + * @namespace Bit array encoders and decoders. + * + * @description + * The members of this namespace are functions which translate between + * SJCL's bitArrays and other objects (usually strings). Because it + * isn't always clear which direction is encoding and which is decoding, + * the method names are "fromBits" and "toBits". + */ + codec: {}, + + /** @namespace Exceptions. */ + exception: { + /** @class Ciphertext is corrupt. */ + corrupt: function(message) { + this.toString = function() { return "CORRUPT: "+this.message; }; + this.message = message; + }, + + /** @class Invalid parameter. */ + invalid: function(message) { + this.toString = function() { return "INVALID: "+this.message; }; + this.message = message; + }, + + /** @class Bug or missing feature in SJCL. */ + bug: function(message) { + this.toString = function() { return "BUG: "+this.message; }; + this.message = message; + }, + + /** @class Something isn't ready. */ + notReady: function(message) { + this.toString = function() { return "NOT READY: "+this.message; }; + this.message = message; + } + } +}; +/** @fileOverview Low-level AES implementation. + * + * This file contains a low-level implementation of AES, optimized for + * size and for efficiency on several browsers. It is based on + * OpenSSL's aes_core.c, a public-domain implementation by Vincent + * Rijmen, Antoon Bosselaers and Paulo Barreto. + * + * An older version of this implementation is available in the public + * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, + * Stanford University 2008-2010 and BSD-licensed for liability + * reasons. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** + * Schedule out an AES key for both encryption and decryption. This + * is a low-level class. Use a cipher mode to do bulk encryption. + * + * @constructor + * @param {Array} key The key as an array of 4, 6 or 8 words. + * + * @class Advanced Encryption Standard (low-level interface) + */ +sjcl.cipher.aes = function (key) { + if (!this._tables[0][0][0]) { + this._precompute(); + } + + var i, j, tmp, + encKey, decKey, + sbox = this._tables[0][4], decTable = this._tables[1], + keyLen = key.length, rcon = 1; + + if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { + throw new sjcl.exception.invalid("invalid aes key size"); + } + + this._key = [encKey = key.slice(0), decKey = []]; + + // schedule encryption keys + for (i = keyLen; i < 4 * keyLen + 28; i++) { + tmp = encKey[i-1]; + + // apply sbox + if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) { + tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255]; + + // shift rows and add rcon + if (i%keyLen === 0) { + tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24; + rcon = rcon<<1 ^ (rcon>>7)*283; + } + } + + encKey[i] = encKey[i-keyLen] ^ tmp; + } + + // schedule decryption keys + for (j = 0; i; j++, i--) { + tmp = encKey[j&3 ? i : i - 4]; + if (i<=4 || j<4) { + decKey[j] = tmp; + } else { + decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^ + decTable[1][sbox[tmp>>16 & 255]] ^ + decTable[2][sbox[tmp>>8 & 255]] ^ + decTable[3][sbox[tmp & 255]]; + } + } +}; + +sjcl.cipher.aes.prototype = { + // public + /* Something like this might appear here eventually + name: "AES", + blockSize: 4, + keySizes: [4,6,8], + */ + + /** + * Encrypt an array of 4 big-endian words. + * @param {Array} data The plaintext. + * @return {Array} The ciphertext. + */ + encrypt:function (data) { return this._crypt(data,0); }, + + /** + * Decrypt an array of 4 big-endian words. + * @param {Array} data The ciphertext. + * @return {Array} The plaintext. + */ + decrypt:function (data) { return this._crypt(data,1); }, + + /** + * The expanded S-box and inverse S-box tables. These will be computed + * on the client so that we don't have to send them down the wire. + * + * There are two tables, _tables[0] is for encryption and + * _tables[1] is for decryption. + * + * The first 4 sub-tables are the expanded S-box with MixColumns. The + * last (_tables[01][4]) is the S-box itself. + * + * @private + */ + _tables: [[[],[],[],[],[]],[[],[],[],[],[]]], + + /** + * Expand the S-box tables. + * + * @private + */ + _precompute: function () { + var encTable = this._tables[0], decTable = this._tables[1], + sbox = encTable[4], sboxInv = decTable[4], + i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec; + + // Compute double and third tables + for (i = 0; i < 256; i++) { + th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i; + } + + for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { + // Compute sbox + s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4; + s = s>>8 ^ s&255 ^ 99; + sbox[x] = s; + sboxInv[s] = x; + + // Compute MixColumns + x8 = d[x4 = d[x2 = d[x]]]; + tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100; + tEnc = d[s]*0x101 ^ s*0x1010100; + + for (i = 0; i < 4; i++) { + encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8; + decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8; + } + } + + // Compactify. Considerable speedup on Firefox. + for (i = 0; i < 5; i++) { + encTable[i] = encTable[i].slice(0); + decTable[i] = decTable[i].slice(0); + } + }, + + /** + * Encryption and decryption core. + * @param {Array} input Four words to be encrypted or decrypted. + * @param dir The direction, 0 for encrypt and 1 for decrypt. + * @return {Array} The four encrypted or decrypted words. + * @private + */ + _crypt:function (input, dir) { + if (input.length !== 4) { + throw new sjcl.exception.invalid("invalid aes block size"); + } + + var key = this._key[dir], + // state variables a,b,c,d are loaded with pre-whitened data + a = input[0] ^ key[0], + b = input[dir ? 3 : 1] ^ key[1], + c = input[2] ^ key[2], + d = input[dir ? 1 : 3] ^ key[3], + a2, b2, c2, + + nInnerRounds = key.length/4 - 2, + i, + kIndex = 4, + out = [0,0,0,0], + table = this._tables[dir], + + // load up the tables + t0 = table[0], + t1 = table[1], + t2 = table[2], + t3 = table[3], + sbox = table[4]; + + // Inner rounds. Cribbed from OpenSSL. + for (i = 0; i < nInnerRounds; i++) { + a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex]; + b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1]; + c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2]; + d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3]; + kIndex += 4; + a=a2; b=b2; c=c2; + } + + // Last round. + for (i = 0; i < 4; i++) { + out[dir ? 3&-i : i] = + sbox[a>>>24 ]<<24 ^ + sbox[b>>16 & 255]<<16 ^ + sbox[c>>8 & 255]<<8 ^ + sbox[d & 255] ^ + key[kIndex++]; + a2=a; a=b; b=c; c=d; d=a2; + } + + return out; + } +}; + +/** @fileOverview Arrays of bits, encoded as arrays of Numbers. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace Arrays of bits, encoded as arrays of Numbers. + * + * @description + *

+ * These objects are the currency accepted by SJCL's crypto functions. + *

+ * + *

+ * Most of our crypto primitives operate on arrays of 4-byte words internally, + * but many of them can take arguments that are not a multiple of 4 bytes. + * This library encodes arrays of bits (whose size need not be a multiple of 8 + * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an + * array of words, 32 bits at a time. Since the words are double-precision + * floating point numbers, they fit some extra data. We use this (in a private, + * possibly-changing manner) to encode the number of bits actually present + * in the last word of the array. + *

+ * + *

+ * Because bitwise ops clear this out-of-band data, these arrays can be passed + * to ciphers like AES which want arrays of words. + *

+ */ +sjcl.bitArray = { + /** + * Array slices in units of bits. + * @param {bitArray a} The array to slice. + * @param {Number} bstart The offset to the start of the slice, in bits. + * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined, + * slice until the end of the array. + * @return {bitArray} The requested slice. + */ + bitSlice: function (a, bstart, bend) { + a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1); + return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart); + }, + + /** + * Concatenate two bit arrays. + * @param {bitArray} a1 The first array. + * @param {bitArray} a2 The second array. + * @return {bitArray} The concatenation of a1 and a2. + */ + concat: function (a1, a2) { + if (a1.length === 0 || a2.length === 0) { + return a1.concat(a2); + } + + var out, i, last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last); + if (shift === 32) { + return a1.concat(a2); + } else { + return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1)); + } + }, + + /** + * Find the length of an array of bits. + * @param {bitArray} a The array. + * @return {Number} The length of a, in bits. + */ + bitLength: function (a) { + var l = a.length, x; + if (l === 0) { return 0; } + x = a[l - 1]; + return (l-1) * 32 + sjcl.bitArray.getPartial(x); + }, + + /** + * Truncate an array. + * @param {bitArray} a The array. + * @param {Number} len The length to truncate to, in bits. + * @return {bitArray} A new array, truncated to len bits. + */ + clamp: function (a, len) { + if (a.length * 32 < len) { return a; } + a = a.slice(0, Math.ceil(len / 32)); + var l = a.length; + len = len & 31; + if (l > 0 && len) { + a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1); + } + return a; + }, + + /** + * Make a partial word for a bit array. + * @param {Number} len The number of bits in the word. + * @param {Number} x The bits. + * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side. + * @return {Number} The partial word. + */ + partial: function (len, x, _end) { + if (len === 32) { return x; } + return (_end ? x|0 : x << (32-len)) + len * 0x10000000000; + }, + + /** + * Get the number of bits used by a partial word. + * @param {Number} x The partial word. + * @return {Number} The number of bits used by the partial word. + */ + getPartial: function (x) { + return Math.round(x/0x10000000000) || 32; + }, + + /** + * Compare two arrays for equality in a predictable amount of time. + * @param {bitArray} a The first array. + * @param {bitArray} b The second array. + * @return {boolean} true if a == b; false otherwise. + */ + equal: function (a, b) { + if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) { + return false; + } + var x = 0, i; + for (i=0; i= 32; shift -= 32) { + out.push(carry); + carry = 0; + } + if (shift === 0) { + return out.concat(a); + } + + for (i=0; i>>shift); + carry = a[i] << (32-shift); + } + last2 = a.length ? a[a.length-1] : 0; + shift2 = sjcl.bitArray.getPartial(last2); + out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1)); + return out; + }, + + /** xor a block of 4 words together. + * @private + */ + _xor4: function(x,y) { + return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]]; + } +}; +/** @fileOverview Bit array codec implementations. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace UTF-8 strings */ +sjcl.codec.utf8String = { + /** Convert from a bitArray to a UTF-8 string. */ + fromBits: function (arr) { + var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp; + for (i=0; i>> 24); + tmp <<= 8; + } + return decodeURIComponent(escape(out)); + }, + + /** Convert from a UTF-8 string to a bitArray. */ + toBits: function (str) { + str = unescape(encodeURIComponent(str)); + var out = [], i, tmp=0; + for (i=0; i>>bits) >>> 26); + if (bits < 6) { + ta = arr[i] << (6-bits); + bits += 26; + i++; + } else { + ta <<= 6; + bits -= 6; + } + } + while ((out.length & 3) && !_noEquals) { out += "="; } + return out; + }, + + /** Convert from a base64 string to a bitArray */ + toBits: function(str) { + str = str.replace(/\s|=/g,''); + var out = [], i, bits=0, c = sjcl.codec.base64._chars, ta=0, x; + for (i=0; i 26) { + bits -= 26; + out.push(ta ^ x>>>bits); + ta = x << (32-bits); + } else { + bits += 6; + ta ^= x << (32-bits); + } + } + if (bits&56) { + out.push(sjcl.bitArray.partial(bits&56, ta, 1)); + } + return out; + } +}; +/** @fileOverview Javascript SHA-256 implementation. + * + * An older version of this implementation is available in the public + * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh, + * Stanford University 2008-2010 and BSD-licensed for liability + * reasons. + * + * Special thanks to Aldo Cortesi for pointing out several bugs in + * this code. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** + * Context for a SHA-256 operation in progress. + * @constructor + * @class Secure Hash Algorithm, 256 bits. + */ +sjcl.hash.sha256 = function (hash) { + if (!this._key[0]) { this._precompute(); } + if (hash) { + this._h = hash._h.slice(0); + this._buffer = hash._buffer.slice(0); + this._length = hash._length; + } else { + this.reset(); + } +}; + +/** + * Hash a string or an array of words. + * @static + * @param {bitArray|String} data the data to hash. + * @return {bitArray} The hash value, an array of 16 big-endian words. + */ +sjcl.hash.sha256.hash = function (data) { + return (new sjcl.hash.sha256()).update(data).finalize(); +}; + +sjcl.hash.sha256.prototype = { + /** + * The hash's block size, in bits. + * @constant + */ + blockSize: 512, + + /** + * Reset the hash state. + * @return this + */ + reset:function () { + this._h = this._init.slice(0); + this._buffer = []; + this._length = 0; + return this; + }, + + /** + * Input several words to the hash. + * @param {bitArray|String} data the data to hash. + * @return this + */ + update: function (data) { + if (typeof data === "string") { + data = sjcl.codec.utf8String.toBits(data); + } + var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data), + ol = this._length, + nl = this._length = ol + sjcl.bitArray.bitLength(data); + for (i = 512+ol & -512; i <= nl; i+= 512) { + this._block(b.splice(0,16)); + } + return this; + }, + + /** + * Complete hashing and output the hash value. + * @return {bitArray} The hash value, an array of 16 big-endian words. + */ + finalize:function () { + var i, b = this._buffer, h = this._h; + + // Round out and push the buffer + b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]); + + // Round out the buffer to a multiple of 16 words, less the 2 length words. + for (i = b.length + 2; i & 15; i++) { + b.push(0); + } + + // append the length + b.push(Math.floor(this._length / 0x100000000)); + b.push(this._length | 0); + + while (b.length) { + this._block(b.splice(0,16)); + } + + this.reset(); + return h; + }, + + /** + * The SHA-256 initialization vector, to be precomputed. + * @private + */ + _init:[], + /* + _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19], + */ + + /** + * The SHA-256 hash key, to be precomputed. + * @private + */ + _key:[], + /* + _key: + [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2], + */ + + + /** + * Function to precompute _init and _key. + * @private + */ + _precompute: function () { + var i = 0, prime = 2, factor; + + function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; } + + outer: for (; i<64; prime++) { + for (factor=2; factor*factor <= prime; factor++) { + if (prime % factor === 0) { + // not a prime + continue outer; + } + } + + if (i<8) { + this._init[i] = frac(Math.pow(prime, 1/2)); + } + this._key[i] = frac(Math.pow(prime, 1/3)); + i++; + } + }, + + /** + * Perform one cycle of SHA-256. + * @param {bitArray} words one block of words. + * @private + */ + _block:function (words) { + var i, tmp, a, b, + w = words.slice(0), + h = this._h, + k = this._key, + h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3], + h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7]; + + /* Rationale for placement of |0 : + * If a value can overflow is original 32 bits by a factor of more than a few + * million (2^23 ish), there is a possibility that it might overflow the + * 53-bit mantissa and lose precision. + * + * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that + * propagates around the loop, and on the hash state h[]. I don't believe + * that the clamps on h4 and on h0 are strictly necessary, but it's close + * (for h4 anyway), and better safe than sorry. + * + * The clamps on h[] are necessary for the output to be correct even in the + * common case and for short inputs. + */ + for (i=0; i<64; i++) { + // load up the input word for this round + if (i<16) { + tmp = w[i]; + } else { + a = w[(i+1 ) & 15]; + b = w[(i+14) & 15]; + tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) + + (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) + + w[i&15] + w[(i+9) & 15]) | 0; + } + + tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0; + + // shift register + h7 = h6; h6 = h5; h5 = h4; + h4 = h3 + tmp | 0; + h3 = h2; h2 = h1; h1 = h0; + + h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0; + } + + h[0] = h[0]+h0 | 0; + h[1] = h[1]+h1 | 0; + h[2] = h[2]+h2 | 0; + h[3] = h[3]+h3 | 0; + h[4] = h[4]+h4 | 0; + h[5] = h[5]+h5 | 0; + h[6] = h[6]+h6 | 0; + h[7] = h[7]+h7 | 0; + } +}; + + +/** @fileOverview CCM mode implementation. + * + * Special thanks to Roy Nicholson for pointing out a bug in our + * implementation. + * + * @author Emily Stark + * @author Mike Hamburg + * @author Dan Boneh + */ + +/** @namespace CTR mode with CBC MAC. */ +sjcl.mode.ccm = { + /** The name of the mode. + * @constant + */ + name: "ccm", + + /** Encrypt in CCM mode. + * @static + * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes. + * @param {bitArray} plaintext The plaintext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [adata=[]] The authenticated data. + * @param {Number} [tlen=64] the desired tag length, in bits. + * @return {bitArray} The encrypted data, an array of bytes. + */ + encrypt: function(prf, plaintext, iv, adata, tlen) { + var L, i, out = plaintext.slice(0), tag, w=sjcl.bitArray, ivl = w.bitLength(iv) / 8, ol = w.bitLength(out) / 8; + tlen = tlen || 64; + adata = adata || []; + + if (ivl < 7) { + throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"); + } + + // compute the length of the length + for (L=2; L<4 && ol >>> 8*L; L++) {} + if (L < 15 - ivl) { L = 15-ivl; } + iv = w.clamp(iv,8*(15-L)); + + // compute the tag + tag = sjcl.mode.ccm._computeTag(prf, plaintext, iv, adata, tlen, L); + + // encrypt + out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L); + + return w.concat(out.data, out.tag); + }, + + /** Decrypt in CCM mode. + * @static + * @param {Object} prf The pseudorandom function. It must have a block size of 16 bytes. + * @param {bitArray} ciphertext The ciphertext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} [[]] adata The authenticated data. + * @param {Number} [64] tlen the desired tag length, in bits. + * @return {bitArray} The decrypted data. + */ + decrypt: function(prf, ciphertext, iv, adata, tlen) { + tlen = tlen || 64; + adata = adata || []; + var L, i, + w=sjcl.bitArray, + ivl = w.bitLength(iv) / 8, + ol = w.bitLength(ciphertext), + out = w.clamp(ciphertext, ol - tlen), + tag = w.bitSlice(ciphertext, ol - tlen), tag2; + + + ol = (ol - tlen) / 8; + + if (ivl < 7) { + throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes"); + } + + // compute the length of the length + for (L=2; L<4 && ol >>> 8*L; L++) {} + if (L < 15 - ivl) { L = 15-ivl; } + iv = w.clamp(iv,8*(15-L)); + + // decrypt + out = sjcl.mode.ccm._ctrMode(prf, out, iv, tag, tlen, L); + + // check the tag + tag2 = sjcl.mode.ccm._computeTag(prf, out.data, iv, adata, tlen, L); + if (!w.equal(out.tag, tag2)) { + throw new sjcl.exception.corrupt("ccm: tag doesn't match"); + } + + return out.data; + }, + + /* Compute the (unencrypted) authentication tag, according to the CCM specification + * @param {Object} prf The pseudorandom function. + * @param {bitArray} plaintext The plaintext data. + * @param {bitArray} iv The initialization value. + * @param {bitArray} adata The authenticated data. + * @param {Number} tlen the desired tag length, in bits. + * @return {bitArray} The tag, but not yet encrypted. + * @private + */ + _computeTag: function(prf, plaintext, iv, adata, tlen, L) { + // compute B[0] + var q, mac, field = 0, offset = 24, tmp, i, macData = [], w=sjcl.bitArray, xor = w._xor4; + + tlen /= 8; + + // check tag length and message length + if (tlen % 2 || tlen < 4 || tlen > 16) { + throw new sjcl.exception.invalid("ccm: invalid tag length"); + } + + if (adata.length > 0xFFFFFFFF || plaintext.length > 0xFFFFFFFF) { + // I don't want to deal with extracting high words from doubles. + throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data"); + } + + // mac the flags + mac = [w.partial(8, (adata.length ? 1<<6 : 0) | (tlen-2) << 2 | L-1)]; + + // mac the iv and length + mac = w.concat(mac, iv); + mac[3] |= w.bitLength(plaintext)/8; + mac = prf.encrypt(mac); + + + if (adata.length) { + // mac the associated data. start with its length... + tmp = w.bitLength(adata)/8; + if (tmp <= 0xFEFF) { + macData = [w.partial(16, tmp)]; + } else if (tmp <= 0xFFFFFFFF) { + macData = w.concat([w.partial(16,0xFFFE)], [tmp]); + } // else ... + + // mac the data itself + macData = w.concat(macData, adata); + for (i=0; i bs) { + key = Hash.hash(key); + } + + for (i=0; i + * This random number generator is a derivative of Ferguson and Schneier's + * generator Fortuna. It collects entropy from various events into several + * pools, implemented by streaming SHA-256 instances. It differs from + * ordinary Fortuna in a few ways, though. + *

+ * + *

+ * Most importantly, it has an entropy estimator. This is present because + * there is a strong conflict here between making the generator available + * as soon as possible, and making sure that it doesn't "run on empty". + * In Fortuna, there is a saved state file, and the system is likely to have + * time to warm up. + *

+ * + *

+ * Second, because users are unlikely to stay on the page for very long, + * and to speed startup time, the number of pools increases logarithmically: + * a new pool is created when the previous one is actually used for a reseed. + * This gives the same asymptotic guarantees as Fortuna, but gives more + * entropy to early reseeds. + *

+ * + *

+ * The entire mechanism here feels pretty klunky. Furthermore, there are + * several improvements that should be made, including support for + * dedicated cryptographic functions that may be present in some browsers; + * state files in local storage; cookies containing randomness; etc. So + * look for improvements in future versions. + *

+ */ +sjcl.random = { + /** Generate several random words, and return them in an array + * @param {Number} nwords The number of words to generate. + */ + randomWords: function (nwords, paranoia) { + var out = [], i, readiness = this.isReady(paranoia), g; + + if (readiness === this._NOT_READY) { + throw new sjcl.exception.notReady("generator isn't seeded"); + } else if (readiness & this._REQUIRES_RESEED) { + this._reseedFromPools(!(readiness & this._READY)); + } + + for (i=0; i0) { + estimatedEntropy++; + tmp = tmp >>> 1; + } + } + } + this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data)); + } + break; + + case "string": + if (estimatedEntropy === undefined) { + /* English text has just over 1 bit per character of entropy. + * But this might be HTML or something, and have far less + * entropy than English... Oh well, let's just say one bit. + */ + estimatedEntropy = data.length; + } + this._pools[robin].update([id,this._eventId++,3,estimatedEntropy,t,data.length]); + this._pools[robin].update(data); + break; + + default: + err=1; + } + if (err) { + throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string"); + } + + /* record the new strength */ + this._poolEntropy[robin] += estimatedEntropy; + this._poolStrength += estimatedEntropy; + + /* fire off events */ + if (oldReady === this._NOT_READY) { + if (this.isReady() !== this._NOT_READY) { + this._fireEvent("seeded", Math.max(this._strength, this._poolStrength)); + } + this._fireEvent("progress", this.getProgress()); + } + }, + + /** Is the generator ready? */ + isReady: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ (paranoia !== undefined) ? paranoia : this._defaultParanoia ]; + + if (this._strength && this._strength >= entropyRequired) { + return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ? + this._REQUIRES_RESEED | this._READY : + this._READY; + } else { + return (this._poolStrength >= entropyRequired) ? + this._REQUIRES_RESEED | this._NOT_READY : + this._NOT_READY; + } + }, + + /** Get the generator's progress toward readiness, as a fraction */ + getProgress: function (paranoia) { + var entropyRequired = this._PARANOIA_LEVELS[ paranoia ? paranoia : this._defaultParanoia ]; + + if (this._strength >= entropyRequired) { + return 1.0; + } else { + return (this._poolStrength > entropyRequired) ? + 1.0 : + this._poolStrength / entropyRequired; + } + }, + + /** start the built-in entropy collectors */ + startCollectors: function () { + if (this._collectorsStarted) { return; } + + if (window.addEventListener) { + window.addEventListener("load", this._loadTimeCollector, false); + window.addEventListener("mousemove", this._mouseCollector, false); + } else if (document.attachEvent) { + document.attachEvent("onload", this._loadTimeCollector); + document.attachEvent("onmousemove", this._mouseCollector); + } + else { + throw new sjcl.exception.bug("can't attach event"); + } + + this._collectorsStarted = true; + }, + + /** stop the built-in entropy collectors */ + stopCollectors: function () { + if (!this._collectorsStarted) { return; } + + if (window.removeEventListener) { + window.removeEventListener("load", this._loadTimeCollector, false); + window.removeEventListener("mousemove", this._mouseCollector, false); + } else if (window.detachEvent) { + window.detachEvent("onload", this._loadTimeCollector); + window.detachEvent("onmousemove", this._mouseCollector); + } + this._collectorsStarted = false; + }, + + /* use a cookie to store entropy. + useCookie: function (all_cookies) { + throw new sjcl.exception.bug("random: useCookie is unimplemented"); + },*/ + + /** add an event listener for progress or seeded-ness. */ + addEventListener: function (name, callback) { + this._callbacks[name][this._callbackI++] = callback; + }, + + /** remove an event listener for progress or seeded-ness */ + removeEventListener: function (name, cb) { + var i, j, cbs=this._callbacks[name], jsTemp=[]; + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j) && cbs[j] === cb) { + jsTemp.push(j); + } + } + + for (i=0; i= 1 << this._pools.length) { + this._pools.push(new sjcl.hash.sha256()); + this._poolEntropy.push(0); + } + + /* how strong was this reseed? */ + this._poolStrength -= strength; + if (strength > this._strength) { + this._strength = strength; + } + + this._reseedCount ++; + this._reseed(reseedData); + }, + + _mouseCollector: function (ev) { + var x = ev.x || ev.clientX || ev.offsetX || 0, y = ev.y || ev.clientY || ev.offsetY || 0; + sjcl.random.addEntropy([x,y], 2, "mouse"); + }, + + _loadTimeCollector: function (ev) { + sjcl.random.addEntropy((new Date()).valueOf(), 2, "loadtime"); + }, + + _fireEvent: function (name, arg) { + var j, cbs=sjcl.random._callbacks[name], cbsTemp=[]; + /* TODO: there is a race condition between removing collectors and firing them */ + + /* I'm not sure if this is necessary; in C++, iterating over a + * collection and modifying it at the same time is a no-no. + */ + + for (j in cbs) { + if (cbs.hasOwnProperty(j)) { + cbsTemp.push(cbs[j]); + } + } + + for (j=0; j 4)) { + throw new sjcl.exception.invalid("json encrypt: invalid parameters"); + } + + if (typeof password === "string") { + tmp = sjcl.misc.cachedPbkdf2(password, p); + password = tmp.key.slice(0,p.ks/32); + p.salt = tmp.salt; + } + if (typeof plaintext === "string") { + plaintext = sjcl.codec.utf8String.toBits(plaintext); + } + if (typeof adata === "string") { + adata = sjcl.codec.utf8String.toBits(adata); + } + prp = new sjcl.cipher[p.cipher](password); + + /* return the json data */ + j._add(rp, p); + rp.key = password; + + /* do the encryption */ + p.ct = sjcl.mode[p.mode].encrypt(prp, plaintext, p.iv, adata, p.ts); + + //return j.encode(j._subtract(p, j.defaults)); + return j.encode(p); + }, + + /** Simple decryption function. + * @param {String|bitArray} password The password or key. + * @param {String} ciphertext The ciphertext to decrypt. + * @param {Object} [params] Additional non-default parameters. + * @param {Object} [rp] A returned object with filled parameters. + * @return {String} The plaintext. + * @throws {sjcl.exception.invalid} if a parameter is invalid. + * @throws {sjcl.exception.corrupt} if the ciphertext is corrupt. + */ + decrypt: function (password, ciphertext, params, rp) { + params = params || {}; + rp = rp || {}; + + var j = sjcl.json, p = j._add(j._add(j._add({},j.defaults),j.decode(ciphertext)), params, true), ct, tmp, prp, adata=p.adata; + if (typeof p.salt === "string") { + p.salt = sjcl.codec.base64.toBits(p.salt); + } + if (typeof p.iv === "string") { + p.iv = sjcl.codec.base64.toBits(p.iv); + } + + if (!sjcl.mode[p.mode] || + !sjcl.cipher[p.cipher] || + (typeof password === "string" && p.iter <= 100) || + (p.ts !== 64 && p.ts !== 96 && p.ts !== 128) || + (p.ks !== 128 && p.ks !== 192 && p.ks !== 256) || + (!p.iv) || + (p.iv.length < 2 || p.iv.length > 4)) { + throw new sjcl.exception.invalid("json decrypt: invalid parameters"); + } + + if (typeof password === "string") { + tmp = sjcl.misc.cachedPbkdf2(password, p); + password = tmp.key.slice(0,p.ks/32); + p.salt = tmp.salt; + } + if (typeof adata === "string") { + adata = sjcl.codec.utf8String.toBits(adata); + } + prp = new sjcl.cipher[p.cipher](password); + + /* do the decryption */ + ct = sjcl.mode[p.mode].decrypt(prp, p.ct, p.iv, adata, p.ts); + + /* return the json data */ + j._add(rp, p); + rp.key = password; + + return sjcl.codec.utf8String.fromBits(ct); + }, + + /** Encode a flat structure into a JSON string. + * @param {Object} obj The structure to encode. + * @return {String} A JSON string. + * @throws {sjcl.exception.invalid} if obj has a non-alphanumeric property. + * @throws {sjcl.exception.bug} if a parameter has an unsupported type. + */ + encode: function (obj) { + var i, out='{', comma=''; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + if (!i.match(/^[a-z0-9]+$/i)) { + throw new sjcl.exception.invalid("json encode: invalid property name"); + } + out += comma + '"' + i + '":'; + comma = ','; + + switch (typeof obj[i]) { + case 'number': + case 'boolean': + out += obj[i]; + break; + + case 'string': + out += '"' + escape(obj[i]) + '"'; + break; + + case 'object': + out += '"' + sjcl.codec.base64.fromBits(obj[i],1) + '"'; + break; + + default: + throw new sjcl.exception.bug("json encode: unsupported type"); + } + } + } + return out+'}'; + }, + + /** Decode a simple (flat) JSON string into a structure. The ciphertext, + * adata, salt and iv will be base64-decoded. + * @param {String} str The string. + * @return {Object} The decoded structure. + * @throws {sjcl.exception.invalid} if str isn't (simple) JSON. + */ + decode: function (str) { + str = str.replace(/\s/g,''); + if (!str.match(/^\{.*\}$/)) { + throw new sjcl.exception.invalid("json decode: this isn't json!"); + } + var a = str.replace(/^\{|\}$/g, '').split(/,/), out={}, i, m; + for (i=0; i currentPath.length) { + path = currentPath; + } + + return { + encryptKey: values.encryptKey || generateKey(), + storageKey: values.storageKey || generateKey(), + domain: o.sessionDomain || values.domain || undefined, + path: o.sessionPath || path + }; +} + +function documentUrl() { + if (! window.location) { + return ''; + } + + var loc; + + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + + return loc; +} + +function extractPath(url) { + var urlRegexp = /^[\w.+-]+:(?:\/\/[^\/?#:]*(?::\d+|)|)(.*)\/[^\/]*$/, + match = urlRegexp.exec(url.toLowerCase()); + + return match ? match[1] : null; +} + +// DEPRECATED +// This method will be removed in future version. +function buildLocalStorageNames(name, path) { + function buildName(path) { + return name + ':' + path; + } + + var names = []; + + if (! path) { + return [name]; + } + + while (true) { + names.push(buildName(path)); + if (path === '/') { + break; + } + path = path.replace(/[^\/]+\/$/, ''); + } + return names; +} + +// DEPRECATED +// This method will be removed in future version. +function localStorageNames(name, o) { + return buildLocalStorageNames(name, o.sessionPath || extractPath(documentUrl())+"/"); +} + +if (! localStorage) { + DataAPI.sessionStores['cookie-encrypted'] = { + save: function(){}, + fetch: function(){}, + remove: function(){} + }; +} +else { + DataAPI.sessionStores['cookie-encrypted'] = { + save: function(name, data, remember) { + var expires = remember ? new Date(new Date().getTime() + 315360000000) : undefined, // after 10 years + values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + + Cookie.bake(cookieName(name), JSON.stringify(values), values.domain, values.path, expires); + localStorage.setItem(values.storageKey, sjcl.encrypt(values.encryptKey, data)); + }, + fetch: function(name) { + var values = fetchCookieValues(name), + i, names, data; + + // Backward compatibility + if (! values.storageKey) { + names = localStorageNames(name, this.o); + for (i = 0; i < names.length; i++) { + if (localStorage.getItem(names[i])) { + values.storageKey = names[i]; + break; + } + } + } + + data = localStorage.getItem(values.storageKey); + + try { + return sjcl.decrypt(values.encryptKey, data); + } + catch (e) { + } + + return null; + }, + remove: function(name) { + var values = fillinDefaultCookieValues(fetchCookieValues(name), this.o); + + Cookie.bake(cookieName(name), '', values.domain, values.path, new Date(0)); + + if (values.storageKey) { + localStorage.removeItem(values.storageKey); + } + } + }; +} + +})(); + + +/** + * Register callback to class. + * @method on + * @static + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * var callback = function() { + * // Do stuff + * }; + * DataAPI.on(eventName, callback); + */ +DataAPI.on = function(key, callback) { + if (! this.callbacks[key]) { + this.callbacks[key] = []; + } + + this.callbacks[key].push(callback); +}; + +/** + * Deregister callback from class. + * @method off + * @static + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * DataAPI.off(eventName, callback); + */ +DataAPI.off = function(key, callback) { + var i, callbacks; + + if (callback) { + callbacks = this.callbacks[key] || []; + + for (i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + callbacks.splice(i, 1); + break; + } + } + } + else { + delete this.callbacks[key]; + } +}; + +/** + * Register formats that serialize data. + * @method registerFormat + * @static + * @param {String} key Format name + * @param {Object} spec + * @param {String} spec.fileExtension Extension + * @param {String} spec.mimeType MIME type + * @param {String} spec.serialize Serializing method + * @param {String} spec.unserialize Unserializing method + * @category core + */ +DataAPI.registerFormat = function(key, spec) { + this.formats[key] = spec; +}; + +/** + * Register session store. + * @method registerSessionStore + * @static + * @param {String} key Session store name + * @param {Object} spec + * @param {String} spec.save Saving method + * @param {String} spec.fetch Fetching method + * @param {String} spec.remove Removing method + * @category core + */ +DataAPI.registerSessionStore = function(key, spec) { + this.sessionStores[key] = spec; +}; + +/** + * Get default format of this class. + * @method getDefaultFormat + * @static + * @return {Object} Format + * @category core + */ +DataAPI.getDefaultFormat = function() { + return this.formats[this.defaultFormat]; +}; + +/** + * Get default session store of this class. + * @method getDefaultSessionStore + * @static + * @return {Object} Format + * @category core + */ +DataAPI.getDefaultSessionStore = function() { + return this.sessionStores[this.defaultSessionStore]; +}; + +DataAPI.prototype = { + constructor: DataAPI.prototype.constructor, + + _initOptions: function() { + this._initCrossDomainOption(); + }, + + _initCrossDomainOption: function() { + var loc, locParts, baseUrl, baseParts, + urlRegexp = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + + if ( window.document && typeof this.o.crossOrigin === 'undefined') { + // IE may throw an exception when accessing + // a field from window.location if document.domain has been set + try { + loc = window.location.href; + } catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + loc = window.document.createElement( "a" ); + loc.href = ""; + loc = loc.href; + } + locParts = urlRegexp.exec( loc.toLowerCase() ) || []; + + baseUrl = this.o.baseUrl.replace(/^\/\//, locParts[1]).toLowerCase(); + baseParts = urlRegexp.exec( baseUrl ); + + this.o.crossOrigin = !!( baseParts && + ( baseParts[ 1 ] !== locParts[ 1 ] || baseParts[ 2 ] !== locParts[ 2 ] || + ( baseParts[ 3 ] || ( baseParts[ 1 ] === "http:" ? "80" : "443" ) ) !== + ( locParts[ 3 ] || ( locParts[ 1 ] === "http:" ? "80" : "443" ) ) ) + ); + } + }, + + /** + * Get authorization URL. + * @method getAuthorizationUrl + * @param {String} redirectUrl The user is redirected to this URL with "#_login" if authorization succeeded. + * @return {String} Authorization URL + * @category core + */ + getAuthorizationUrl: function(redirectUrl) { + return this.o.baseUrl.replace(/\/*$/, '/') + + 'v' + this.getVersion() + + '/authorization' + + '?clientId=' + this.o.clientId + + '&redirectUrl=' + redirectUrl; + }, + + _getCurrentEpoch: function() { + return Math.round(new Date().getTime() / 1000); + }, + + _getNextIframeName: function() { + return this.constructor.iframePrefix + (++this.iframeId); + }, + + /** + * Get API version. + * @method getVersion + * @return {String} API version + * @category core + */ + getVersion: function() { + return this.constructor.version; + }, + + /** + * Get application key of this object. + * @method getAppKey + * @return {String} Application key + * This value is used for the session store. + * @category core + */ + getAppKey: function() { + return this.constructor.accessTokenKey + '_' + this.o.clientId; + }, + + _findFormatInternal: function(mimeType) { + if (! mimeType) { + return null; + } + + for (var k in this.constructor.formats) { + if (this.constructor.formats[k].mimeType === mimeType) { + return this.constructor.formats[k]; + } + } + + return null; + }, + + /** + * Get format by MIME Type. + * @method findFormat + * @param {String} mimeType MIME Type + * @return {Object|null} Format. Return null if any format is not found. + * @category core + */ + findFormat: function(mimeType) { + var format = this._findFormatInternal(mimeType); + if (! format && mimeType.indexOf(';')) { + format = this._findFormatInternal(mimeType.replace(/\s*;.*/, '')); + } + + return format; + }, + + /** + * Get current format of this object. + * @method getCurrentFormat + * @return {Object} Format + * @category core + */ + getCurrentFormat: function() { + return this.constructor.formats[this.o.format] || + this.constructor.getDefaultFormat(); + }, + + /** + * Serialize data. + * @method serializeData + * @param {Object} data The data to serialize + * @return {String} Serialized data + * @category core + */ + serializeData: function() { + return this.getCurrentFormat().serialize.apply(this, arguments); + }, + + /** + * Unserialize data. + * @method unserializeData + * @param {String} data The data to unserialize + * @return {Object} Unserialized data + * @category core + */ + unserializeData: function() { + return this.getCurrentFormat().unserialize.apply(this, arguments); + }, + + /** + * Get current session store of this object. + * @method getCurrentSessionStore + * @return {Object} Session store + * @category core + */ + getCurrentSessionStore: function() { + return this.constructor.sessionStores[this.o.sessionStore] || + this.constructor.getDefaultSessionStore(); + }, + + /** + * Save session data. + * @method saveSessionData + * @param {String} name The name of session + * @param {Object} data The data to save + * @category core + */ + saveSessionData: function() { + return this.getCurrentSessionStore().save.apply(this, arguments); + }, + + /** + * Fetch session data. + * @method fetchSessionData + * @param {String} name The name of session + * @return {String} The data fetched + * @category core + */ + fetchSessionData: function() { + return this.getCurrentSessionStore().fetch.apply(this, arguments); + }, + + /** + * Remove session data. + * @method removeSessionData + * @param {String} name The name of session + * @category core + */ + removeSessionData: function() { + return this.getCurrentSessionStore().remove.apply(this, arguments); + }, + + /** + * Store token data via current session store. + * @method storeTokenData + * @param {Object} tokenData The token data + * @param {String} tokenData.accessToken access token + * @param {String} tokenData.expiresIn The number of seconds + * until access token becomes invalid + * @param {String} [tokenData.sessionId] session ID + * @category core + */ + storeTokenData: function(tokenData) { + var oldData = this.getTokenData(); + if (! tokenData.sessionId && oldData && oldData.sessionId) { + tokenData.sessionId = oldData.sessionId; + } + + tokenData.startTime = this._getCurrentEpoch(); + this.saveSessionData( + this.getAppKey(), + this.serializeData(tokenData), + tokenData.sessionId && tokenData.remember + ); + this.tokenData = tokenData; + }, + + /** + * Clear token data from object and session store. + * @method clearTokenData + * @category core + */ + clearTokenData: function() { + this.removeSessionData(this.getAppKey()); + this.tokenData = null; + }, + + _updateTokenFromDefaultCookie: function() { + var defaultKey = this.constructor.accessTokenKey, + defaultCookie = Cookie.fetch(defaultKey), + defaultToken; + + if (! defaultCookie) { + return null; + } + + Cookie.bake(defaultKey, '', undefined, '/', new Date(0)); + + try { + defaultToken = this.unserializeData(defaultCookie.value); + } + catch (e) { + return null; + } + + this.storeTokenData(defaultToken); + return defaultToken; + }, + + _hasOneTimeToken: function() { + return window.location && window.location.hash.indexOf('#_ott_') === 0; + }, + + _storeOneTimeToken: function() { + var token, m; + + if (! window.location) { + return undefined; + } + + m = window.location.hash.match(/^#_ott_(.*)/); + if (! m) { + return undefined; + } + + token = { + oneTimeToken: m[1] + }; + window.location.hash = '#_login'; + + this.storeTokenData(token); + return token; + }, + + /** + * Get token data via current session store. + * @method getTokenData + * @return {Object} Token data + * @category core + */ + getTokenData: function() { + var token = this.tokenData; + + if (! token) { + if (window.location) { + if (window.location.hash === '#_login') { + try { + token = this._updateTokenFromDefaultCookie(); + } + catch (e) { + } + } + else if (this._hasOneTimeToken()) { + token = this._storeOneTimeToken(); + } + } + + if (! token) { + try { + token = this.unserializeData(this.fetchSessionData(this.getAppKey())); + } + catch (e) { + } + } + } + + if (token && + 'startTime' in token && + 'expiresIn' in token && + (token.startTime + token.expiresIn < this._getCurrentEpoch())) { + delete token.accessToken; + delete token.startTime; + delete token.expiresIn; + } + + return this.tokenData = token || null; + }, + + /** + * Get authorization request header. + * @method getAuthorizationHeader + * @return {String|null} Header string. Return null if api object has no token. + * @category core + */ + getAuthorizationHeader: function(key) { + var tokenData = this.getTokenData(); + if (tokenData) { + return 'MTAuth ' + key + '=' + (tokenData[key] || ''); + } + + return ''; + }, + + /** + * Bind parameters to route spec. + * @method bindEndpointParams + * @param {String} route Specification of route + * @param {Object} params parameters + * @param {Number|Object|Function} params.{key} Value to bind + * @return {String} Endpoint to witch parameters was bound + * @example + * api.bindEndpointParams('/sites/:site_id/entries/:entry_id/comments/:comment_id', { + * blog_id: 1, + * entry_id: {id: 1}, + * comment_id: functioin(){ return 1; } + * }); + * @category core + */ + bindEndpointParams: function(route, params) { + var k, v; + + for (k in params) { + v = params[k]; + if (typeof v === 'object') { + if (typeof v.id === 'function') { + v = v.id(); + } + else { + v = v.id; + } + } + if (typeof v === 'function') { + v = v(); + } + route = route.replace(new RegExp(':' + k), v); + } + return route; + }, + + _isElement: function(e, name) { + if (! e || typeof e !== 'object') { + return false; + } + var n = e.nodeName; + return n && n.toLowerCase() === name; + }, + + _isFormElement: function(e) { + return this._isElement(e, 'form'); + }, + + _isInputElement: function(e) { + return this._isElement(e, 'input'); + }, + + _isFileInputElement: function(e) { + return this._isInputElement(e) && e.type.toLowerCase() === 'file'; + }, + + _serializeObject: function(v) { + function f(n) { + return n < 10 ? '0' + n : n; + } + + function iso8601Date(v) { + if (! isFinite(v.valueOf())) { + return ''; + } + + var off, + tz = v.getTimezoneOffset(); + if(tz === 0) { + off = 'Z'; + } + else { + off = (tz > 0 ? '-': '+'); + tz = Math.abs(tz); + off += f(Math.floor(tz / 60)) + ':' + f(tz % 60); + } + + return v.getFullYear() + '-' + + f(v.getMonth() + 1) + '-' + + f(v.getDate()) + 'T' + + f(v.getHours()) + ':' + + f(v.getMinutes()) + ':' + + f(v.getSeconds()) + off; + } + + if (this._isFormElement(v)) { + v = this._serializeFormElementToObject(v); + } + + var type = typeof v; + if (type === 'undefined' || v === null || (type === 'number' && ! isFinite(v))) { + return ''; + } + else if (type === 'boolean') { + return v ? '1' : ''; + } + else if (v instanceof Date) { + return iso8601Date(v); + } + else if (window.File && v instanceof window.File) { + return v; + } + else if (this._isFileInputElement(v)) { + return v.files[0]; + } + else if (type === 'object') { + return this.serializeData(v, function(key, value) { + if (this[key] instanceof Date) { + return iso8601Date(this[key]); + } + return value; + }); + } + else { + return v; + } + }, + + _serializeParams: function(params) { + if (! params) { + return params; + } + if (typeof params === 'string') { + return params; + } + if (this._isFormElement(params)) { + params = this._serializeFormElementToObject(params); + } + + var k, + str = ''; + for (k in params) { + if (! params.hasOwnProperty(k)) { + continue; + } + if (str) { + str += '&'; + } + + str += + encodeURIComponent(k) + '=' + + encodeURIComponent(this._serializeObject(params[k])); + } + return str; + }, + + _unserializeParams: function(params) { + if (typeof params !== 'string') { + return params; + } + + var i, pair, + data = {}, + values = params.split('&'); + + for(i = 0; i < values.length; i++) { + pair = values[i].split('='); + data[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + + return data; + }, + + _newXMLHttpRequestStandard: function() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} + }, + + _newXMLHttpRequestActiveX: function() { + try { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } catch( e ) {} + }, + + /** + * Create XMLHttpRequest by higher browser compatibility way. + * @method newXMLHttpRequest + * @return {XMLHttpRequest} Created XMLHttpRequest + * @category core + */ + newXMLHttpRequest: function() { + return this._newXMLHttpRequestStandard() || + this._newXMLHttpRequestActiveX() || + false; + }, + + _findFileInput: function(params) { + if (typeof params !== 'object') { + return null; + } + + for (var k in params) { + if (this._isFileInputElement(params[k])) { + return params[k]; + } + } + + return null; + }, + + _isEmptyObject: function(o) { + if (! o) { + return true; + } + + for (var k in o) { + if (o.hasOwnProperty(k)) { + return false; + } + } + return true; + }, + + /** + * Send request to specified URL with params via XMLHttpRequest. + * @method sendXMLHttpRequest + * @param {XMLHttpRequest} xhr XMLHttpRequest object to send request + * @param {String} method Request method + * @param {String} url Request URL + * @param {String|FormData} params Parameters to send with request + * @return {XMLHttpRequest} + * @category core + */ + sendXMLHttpRequest: function(xhr, method, url, params, defaultHeaders) { + var k, headers, uk; + + xhr.open(method, url, this.o.async); + for (k in defaultHeaders) { + xhr.setRequestHeader(k, defaultHeaders[k]); + } + if (typeof params === 'string') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + } + if (! this.o.crossOrigin) { + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + + function normalizeHeaderKey(all, prefix, letter) { + return prefix + letter.toUpperCase(); + } + if (params && params.getHeaders) { + headers = params.getHeaders(); + for (k in headers) { + uk = k.replace(/(^|-)([a-z])/g, normalizeHeaderKey); + xhr.setRequestHeader(uk, headers[k]); + } + } + + xhr.send(params); + + return xhr; + }, + + _sendFetchApiRequest: function(method, url, params, defaultHeaders) { + var controller, signal, timeoutId, headers, k, uk, options; + controller = new AbortController(); + signal = controller.signal; + + if (typeof this.o.timeout !== 'undefined') { + timeoutId = setTimeout(function (){ + controller.abort(); + }, this.o.timeout); + } + + headers = new Headers(defaultHeaders); + if (typeof params === 'string') { + headers.set('Content-Type', 'application/x-www-form-urlencoded'); + } + if (! this.o.crossOrigin) { + headers.set('X-Requested-With', 'XMLHttpRequest'); + } + function normalizeHeaderKey(all, prefix, letter) { + return prefix + letter.toUpperCase(); + } + if (params && params.getHeaders) { + headers = params.getHeaders(); + for (k in headers) { + uk = k.replace(/(^|-)([a-z])/g, normalizeHeaderKey); + headers.set(uk, headers[k]); + } + } + + options = { + method: method, + headers: headers, + credentials: 'include', + mode: 'cors', + signal: signal + }; + if (method.toLowerCase() !== 'get') { + options.body = params; + } + + return fetch(url, options).then(function (response){ + clearTimeout(timeoutId); + return response; + }); + }, + + _serializeFormElementToObject: function(form) { + var i, e, type, + data = {}, + submitterTypes = /^(?:submit|button|image|reset)$/i, + submittable = /^(?:input|select|textarea|keygen)/i, + checkableTypes = /^(?:checkbox|radio)$/i; + + for (i = 0; i < form.elements.length; i++) { + e = form.elements[i]; + type = e.type; + + if ( + ! e.name || + e.disabled || + ! submittable.test(e.nodeName) || + submitterTypes.test(type) || + (checkableTypes.test(type) && ! e.checked) + ) { + continue; + } + + if (this._isFileInputElement(e)) { + data[e.name] = e; + } + else { + data[e.name] = this._elementValue(e); + } + } + + return data; + }, + + _elementValue: function(e) { + if (e.nodeName.toLowerCase() === 'select') { + var value, option, + options = e.options, + index = e.selectedIndex, + one = e.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( !option.parentNode.disabled || option.parentNode.nodeName.toLowerCase() !== "optgroup" ) ) { + + // Get the specific value for the option + value = option.attributes.value; + if (!value || value.specified) { + value = option.value; + } + else { + value = e.text; + } + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + else { + return e.value; + } + }, + + /** + * Execute function with specified options. + * @method withOptions + * @param {option} option Option to overwrite + * @param {Function} func Function to execute + * @return Return value of specified func + * @example + * // The DataAPI object is created with {async: true} + * api.withOptions({async: false}, function() { + * api.listEntries(1, function() { + * // This is executed synchronously + * }); + * }); + * api.listEntries(1, function() { + * // This is executed asynchronously + * }); + * @category core + */ + withOptions: function(option, func) { + var k, result, + originalOption = this.o, + o = {}; + + for (k in originalOption) { + o[k] = originalOption[k]; + } + for (k in option) { + o[k] = option[k]; + } + + this.o = o; + this._initOptions(); + + result = func.apply(this); + + this.o = originalOption; + this._initOptions(); + + return result; + }, + + _requestVia: function() { + return (window.XDomainRequest && + this.o.crossOrigin && + /msie (8|9)\./i.test(window.navigator.appVersion)) ? 'xdr' : + (window.XMLHttpRequest ? 'xhr' : 'fetch'); + }, + + /** + * Send a request to the endpoint with specified parameters. + * @method request + * @param {String} method Request method + * @param {String} endpoint Endpoint to request + * @param {String|Object} [queryParameter] + * @param {String|Object|HTMLFormElement|FormData} [requestData] + * @param {String|Object|HTMLFormElement} [requestData.{the-key-requires-json-text}] Can specify json-text value by string or object or HTMLFormElement. Serialize automatically if object or HTMLFormElement is passed. + * @param {HTMLInputElement|File} [requestData.{the-key-requires-file}] Can specify file value by HTMLInputElement or File object. + * @param {Function} [callback] + * @return {XMLHttpRequest|null} Return XMLHttpRequest if request is sent + * via XMLHttpRequest. Return null if request is not sent + * via XMLHttpRequest (e.g. sent via iframe). + * @category core + */ + request: function(method, endpoint) { + var i, k, v, base, + api = this, + paramsList = [], + params = null, + callback = function(){}, + xhr = null, + xdr = null, + via = this._requestVia(), + tokenData = this.getTokenData(), + authHeader = this.getAuthorizationHeader('accessToken'), + currentFormat = this.getCurrentFormat(), + originalMethod = method, + originalArguments = Array.prototype.slice.call(arguments), + defaultParams = {}, + defaultHeaders = {}; + + function serializeParams(params) { + var k, data; + + if (! api.o.disableFormData && window.FormData) { + if (params instanceof window.FormData) { + return params; + } + else if (api._isFormElement(params)) { + return new window.FormData(params); + } + else if (window.FormData && typeof params === 'object') { + data = new window.FormData(); + for (k in params) { + data.append(k, api._serializeObject(params[k])); + } + return data; + } + } + + + if (api._isFormElement(params)) { + params = api._serializeFormElementToObject(params); + for (k in params) { + if (params[k] instanceof Array) { + params[k] = params[k].join(','); + } + } + } + + if (api._findFileInput(params)) { + via = 'iframe'; + + data = {}; + for (k in params) { + if (api._isFileInputElement(params[k])) { + data[k] = params[k]; + } + else { + data[k] = api._serializeObject(params[k]); + } + } + params = data; + } + else if (typeof params !== 'string') { + params = api._serializeParams(params); + } + + return params; + } + + function runCallback(response) { + var status = callback(response); + if (status !== false) { + if (response.error) { + api.trigger('error', response); + } + } + return status; + } + + function needToRetry(response) { + return response.error && + response.error.code === 401 && + endpoint !== '/token' && + endpoint !== '/authentication'; + } + + function retryWithAuthentication() { + api.request('POST', '/token', function(response) { + if (response.error) { + parseArguments(originalArguments); + return runCallback(response); + } + else { + api.storeTokenData(response); + api.request.apply(api, originalArguments); + return false; + } + }); + } + + function appendParamsToURL(base, params) { + if (base.indexOf('?') === -1) { + base += '?'; + } + else { + base += '&'; + } + return base + api._serializeParams(params); + } + + function parseArguments(args) { + for (i = 2; i < args.length; i++) { + v = args[i]; + switch (typeof v) { + case 'function': + callback = v; + break; + case 'object': + if ( + v && + ! v.nodeName && + ((window.ActiveXObject && v instanceof window.ActiveXObject) || + (window.XMLHttpRequest && v instanceof window.XMLHttpRequest) || + (window.XDomainRequest && v instanceof window.XDomainRequest)) + ) { + if (window.XDomainRequest && v instanceof window.XDomainRequest) { + xdr = v; + } + else { + xhr = v; + } + } + else { + paramsList.push(v); + } + break; + case 'string': + paramsList.push(api._unserializeParams(v)); + break; + } + } + } + + if (! this.o.withoutAuthorization && + tokenData && + ! tokenData.accessToken && + endpoint !== '/token' && + endpoint !== '/authentication' + ) { + return retryWithAuthentication(); + } + + if (authHeader) { + defaultHeaders['X-MT-Authorization'] = authHeader; + } + + if (endpoint === '/token' || endpoint === '/authentication') { + if (tokenData && tokenData.oneTimeToken) { + defaultHeaders['X-MT-Authorization'] = + api.getAuthorizationHeader('oneTimeToken'); + delete tokenData.oneTimeToken; + } + else if (tokenData && tokenData.sessionId) { + defaultHeaders['X-MT-Authorization'] = + api.getAuthorizationHeader('sessionId'); + } + else if (endpoint === '/token' && originalMethod.toLowerCase() === 'post') { + delete defaultHeaders['X-MT-Authorization']; + } + defaultParams.clientId = api.o.clientId; + } + + if (this.o.withoutAuthorization) { + delete defaultHeaders['X-MT-Authorization']; + } + + if (this.o.suppressResponseCodes || + (typeof this.o.suppressResponseCodes === 'undefined' && via === 'xdr') + ) { + defaultParams.suppressResponseCodes = true; + } + + if (! this.o.cache) { + defaultParams._ = new Date().getTime(); + } + + if (currentFormat !== this.constructor.getDefaultFormat()) { + defaultParams.format = currentFormat.fileExtension; + } + + if (method.match(/^(put|delete)$/i)) { + defaultParams.__method = method; + method = 'POST'; + } + + parseArguments(arguments); + + if (paramsList.length && (method.toLowerCase() === 'get' || paramsList.length >= 2)) { + endpoint = appendParamsToURL(endpoint, paramsList.shift()); + } + + if (paramsList.length) { + params = paramsList.shift(); + } + + if (! this._isEmptyObject(defaultParams)) { + if (method.toLowerCase() === 'get') { + endpoint = appendParamsToURL(endpoint, defaultParams); + } + else if (window.FormData && params && params instanceof window.FormData) { + for (k in defaultParams) { + params.append(k, defaultParams[k]); + } + } + else { + params = params || {}; + for (k in defaultParams) { + params[k] = defaultParams[k]; + } + } + } + + params = serializeParams(params); + + + base = this.o.baseUrl.replace(/\/*$/, '/') + 'v' + this.getVersion(); + endpoint = endpoint.replace(/^\/*/, '/'); + + + function responseCallback(contentType, responseText, status, statusText, cleanup) { + var response, mimeType, format, callbackResult; + + try { + mimeType = contentType; + format = api.findFormat(mimeType) || api.getCurrentFormat(); + response = format.unserialize(responseText); + } + catch (e) { + response = { + error: { + code: +status, + message: statusText || 'Communication Error' + } + }; + } + + if (needToRetry(response)) { + retryWithAuthentication(); + if (cleanup) { + cleanup(); + } + return false; + } + + if ((! response.error && + endpoint === '/authentication' && + originalMethod.toLowerCase() === 'delete') || + (response.error && response.error.code === 401 && ( + (endpoint === '/authentication' && + originalMethod.toLowerCase() === 'post') || + (endpoint === '/token' && + originalMethod.toLowerCase() === 'post')))) { + api.clearTokenData(); + } + else if (! response.error && ( + (endpoint === '/authentication' && + originalMethod.toLowerCase() === 'post') || + (endpoint === '/token' && + originalMethod.toLowerCase() === 'post'))) { + api.storeTokenData(response); + } + + callbackResult = runCallback(response); + + if (callbackResult !== false && + response.error && response.error.code === 401 && + endpoint !== '/authentication') { + api.trigger('authorizationRequired', response); + } + } + + if (via === 'xdr') { + if (! this._isEmptyObject(defaultHeaders)) { + throw 'Cannot set request header when sending via XDomainRequest'; + } + + xdr = xdr || new window.XDomainRequest(); + xdr.onload = function() { + responseCallback(xdr.contentType, xdr.responseText, 200); + }; + xdr.onerror = function() { + responseCallback(xdr.contentType, xdr.responseText, 404); + }; + xdr.onprogress = function(){}; + xdr.ontimeout = function() { + responseCallback(xdr.contentType, xdr.responseText, 0); + }; + if (typeof this.o.timeout !== 'undefined') { + xdr.timeout = this.o.timeout || Number.MAX_VALUE; + } + xdr.open( method, base + endpoint); + xdr.send( api._serializeParams(params) || null ); + } + else if (via === 'xhr') { + xhr = xhr || this.newXMLHttpRequest(); + if (typeof this.o.timeout !== 'undefined') { + xhr.timeout = this.o.timeout; + } + xhr.onreadystatechange = function() { + var responseResult, url; + + if (xhr.readyState !== 4) { + return; + } + + function cleanup() { + xhr.onreadystatechange = function(){}; + } + + responseResult = responseCallback( + xhr.getResponseHeader('Content-Type'), + xhr.responseText, + xhr.status, + xhr.statusText, + cleanup + ); + + if (responseResult === false) { + return; + } + + url = xhr.getResponseHeader('X-MT-Next-Phase-URL'); + if (url) { + xhr.abort(); + api.sendXMLHttpRequest(xhr, method, base + url, params, defaultHeaders); + } + else { + cleanup(); + } + }; + return this.sendXMLHttpRequest(xhr, method, base + endpoint, params, defaultHeaders); + } + else if (via === 'fetch') { + this._sendFetchApiRequest(method, base + endpoint, params, defaultHeaders).then(function (response){ + var responseResult, url; + responseResult = response.text().then(function (text){ + responseCallback(response.headers.get('Content-Type'), text, response.status, response.statusText); + }); + + if (responseResult === false) { + return; + } + + url = response.headers.get('X-MT-Next-Phase-URL'); + if (!url) { + return; + } + + this._sendFetchApiRequest(method, base + url, params, defaultHeaders); + }); + } + else { + (function() { + var k, file, originalName, input, + target = api._getNextIframeName(), + doc = window.document, + form = doc.createElement('form'), + iframe = doc.createElement('iframe'); + + + // Set up a form element + form.action = base + endpoint; + form.target = target; + form.method = method; + form.style.display = 'inline'; + form.encoding = 'multipart/form-data'; + form.enctype = 'multipart/form-data'; + + // Set up a iframe element + iframe.name = target; + iframe.style.position = 'absolute'; + iframe.style.top = '-9999px'; + doc.body.appendChild(iframe); + iframe.contentWindow.name = target; + + + params = params || {}; + for (k in defaultHeaders) { + params[k] = defaultHeaders[k]; + } + params['X-MT-Requested-Via'] = 'IFRAME'; + + for (k in params) { + if (api._isFileInputElement(params[k])) { + file = params[k]; + originalName = file.name; + file.name = k; + if (file.parentNode) { + file.parentNode.insertBefore(form, file); + } + else { + doc.body.appendChild(form); + } + form.appendChild(file); + continue; + } + + input = doc.createElement('input'); + input.type = 'hidden'; + input.name = k; + input.value = params[k]; + form.appendChild(input); + } + + form.submit(); + + + function handler() { + var body = iframe.contentWindow.document.body, + contents = body.textContent || body.innerText, + response; + + function cleanup() { + setTimeout(function() { + file.name = originalName; + if (form.parentNode) { + form.parentNode.insertBefore(file, form); + form.parentNode.removeChild(form); + } + if (iframe.parentNode) { + iframe.parentNode.removeChild(iframe); + } + }); + } + + try { + response = api.unserializeData(contents); + } + catch (e) { + response = { + error: { + code: 500, + message: 'Internal Server Error' + } + }; + } + + if (needToRetry(response)) { + retryWithAuthentication(); + cleanup(); + return; + } + + cleanup(); + runCallback(response); + } + if ( iframe.addEventListener ) { + iframe.addEventListener('load', handler, false); + } else if ( iframe.attachEvent ) { + iframe.attachEvent('onload', handler); + } + })(); + + return; + } + }, + + /** + * Register callback to instance. + * @method on + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * var callback = function() { + * // Do stuff + * }; + * api.on(eventName, callback); + */ + on: function() { + this.constructor.on.apply(this, arguments); + }, + + /** + * Deregister callback from instance. + * @method off + * @param {String} key Event name + * @param {Function} callback Callback function + * @category core + * @example + * api.off(eventName, callback); + */ + off: function() { + this.constructor.off.apply(this, arguments); + }, + + /** + * Trigger event. + * First, run class level callbacks. Then, run instance level callbacks. + * @method trigger + * @param {String} key Event name + * @category core + */ + trigger: function(key) { + var i, + args = Array.prototype.slice.call(arguments, 1), + callbacks = (this.constructor.callbacks[key] || []) // Class level + .concat(this.callbacks[key] || []); // Instance level + + for (i = 0; i < callbacks.length; i++) { + callbacks[i].apply(this, args); + } + }, + + _generateEndpointMethod: function(e) { + var api = this, + varRegexp = new RegExp(':([a-zA-Z_-]+)', 'g'), + vars = null, + name = e.id.replace(/_(\w)/g, function(all, letter) { + return letter.toUpperCase(); + }); + + function extractVars() { + var m, vars = []; + while ((m = varRegexp.exec(e.route)) !== null) { + vars.push(m[1]); + } + return vars; + } + + api[name] = function() { + if (! vars) { + vars = extractVars(); + } + + var args = Array.prototype.slice.call(arguments), + endpointParams = {}, + resources = {}, + route, i; + + for (i = 0; i < vars.length; i++) { + endpointParams[vars[i]] = args.shift(); + } + route = api.bindEndpointParams(e.route, endpointParams); + + if (e.resources) { + for (i = 0; i < e.resources.length; i++) { + resources[e.resources[i]] = args.shift(); + } + args.push(resources); + } + + return api.request.apply(api, [e.verb, route].concat(args)); + }; + }, + + /** + * Generate methods to access endpoint. + * @method generateEndpointMethods + * @param {Array.Object} endpoints Endpoints to register + * @param {Object} endpoints.{i} + * @param {String} endpoints.{i}.id Normally, the ID is snake case, + * but generated method is camel case. + * @param {String} endpoints.{i}.route The template of route + * @param {String} endpoints.{i}.verb The HTTP verb + * @param {Array.String} [endpoints.{i}.resources] The required resource data + * @example + * api.generateEndpointMethods([ + * { + * "id": "list_entries", + * "route": "/sites/:site_id/entries", + * "verb": "GET", + * }, + * { + * "id": "create_entry", + * "route": "/sites/:site_id/entries", + * "verb": "POST", + * "resources": [ + * "entry" + * ] + * } + * ]); + * @category core + */ + generateEndpointMethods: function(endpoints) { + for (var i = 0; i < endpoints.length; i++) { + this._generateEndpointMethod(endpoints[i]); + } + }, + + /** + * Load endpoint from DataAPI dynamically. + * @method loadEndpoints + * @param {Object} [params] + * @param {String} [params.includeComponents] Comma separated component IDs to load + * @param {String} [params.excludeComponents] Comma separated component IDs to exclude + * @example + * Load endpoints only from specified module. + * + * api.loadEndpoints({ + * includeComponents: 'your-extension-module' + * }); + * api.getDataViaYourExtensionModule(function(response) { + * // Do stuff + * }); + * + * Load all endpoints except for core. + * Since all the endpoints of core is already loaded. + * + * api.loadEndpoints({ + * excludeComponents: 'core' + * }); + * api.getDataViaYourExtensionModule(function(response) { + * // Do stuff + * }); + * @category core + */ + loadEndpoints: function(params) { + var api = this; + + api.withOptions({withoutAuthorization: true, async: false}, function() { + api.request('GET', '/endpoints', params, function(response) { + if (response.error) { + return; + } + + api.generateEndpointMethods(response.items); + }); + }); + } +}; + +/** + * Triggered on initializing an instance + * + * @event initialize + * @example + * DataAPI.on("initialize", function() { + * console.log("initializing..."); + * }); + **/ + +/** + * Triggered on getting an error of a HTTP request + * + * @event error + * @param {Object} response A response object + * @param {Number} response.code The HTTP response code + * @param {String} response.message The error message + * @param {Object} response.data The data exists only if a current error has optional data + * @example + * api.on("error", function(response) { + * console.log(response.error.message); + * }); + **/ + +/** + * Triggered on receiving the HTTP response code 401 (Authorization required). + * + * @event authorizationRequired + * @param {Object} response A response object + * @param {Number} response.code The HTTP response code + * @param {Number} response.message The error message + * @example + * api.on("authorizationRequired", function(response) { + * // You will return to current URL after authorization succeeded. + * location.href = api.getAuthorizationUrl(location.href); + * }); + **/ + +var Cookie = function( name, value, domain, path, expires, secure ) { + this.name = name; + this.value = value; + this.domain = domain; + this.path = path; + this.expires = expires; + this.secure = secure; +}; + +Cookie.prototype = { + /** + * Get this cookie from the web browser's store of cookies. Note that if the document.cookie + * property has been written to repeatedly by the same client code in excess of 4K (regardless of the size + * of the actual cookies), IE 6 will report an empty document.cookie collection of cookies. + * @return Cookie The fetched cookie. + */ + fetch: function() { + if (! window.document) { + return undefined; + } + + var prefix = escape( this.name ) + "=", + cookies = ("" + window.document.cookie).split( /;\s*/ ), + i; + + for( i = 0; i < cookies.length; i++ ) { + if( cookies[ i ].indexOf( prefix ) === 0 ) { + this.value = unescape( cookies[ i ].substring( prefix.length ) ); + return this; + } + } + + return undefined; + }, + + + /** + * Set and store a cookie in the the web browser's native collection of cookies. + * @return Cookie The set and stored ("baked") cookie. + */ + bake: function( value ) { + if (! window.document) { + return undefined; + } + + function exists(x) { + return (x === undefined || x === null) ? false : true; + } + + if( !exists( this.name ) ) { + return undefined; + } + + if( exists( value ) ) { + this.value = value; + } + else { + value = this.value; + } + + var name = escape( this.name ), + attributes = ( this.domain ? "; domain=" + escape( this.domain ) : "") + + (this.path ? "; path=" + escape( this.path ) : "") + + (this.expires ? "; expires=" + this.expires.toGMTString() : "") + + (this.secure ? "; secure=1" : ""), + batter = name + "=" + escape( value ) + attributes; + + window.document.cookie = batter; + + return this; + }, + + + remove: function() { + this.expires = new Date( 0 ); // "Thu, 01 Jan 1970 00:00:00 GMT" + this.value = ""; + this.bake(); + } +}; + +Cookie.fetch = function( name ) { + var cookie = new this( name ); + return cookie.fetch(); +}; + + +Cookie.bake = function( name, value, domain, path, expires, secure ) { + var cookie = new this( name, value, domain, path, expires, secure ); + return cookie.bake(); +}; + +Cookie.remove = function( name ) { + var cookie = this.fetch( name ); + if ( cookie ) { + return cookie.remove(); + } +}; + +var JSON = window.JSON; +/* + json2.js + 2012-10-08 + + Public Domain. + + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + + See http://www.JSON.org/js.html + + + This code should be minified before deployment. + See http://javascript.crockford.com/jsmin.html + + USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + NOT CONTROL. + + + This file creates a global JSON object containing two methods: stringify + and parse. + + JSON.stringify(value, replacer, space) + value any JavaScript value, usually an object or array. + + replacer an optional parameter that determines how object + values are stringified for objects. It can be a + function or an array of strings. + + space an optional parameter that specifies the indentation + of nested structures. If it is omitted, the text will + be packed without extra whitespace. If it is a number, + it will specify the number of spaces to indent at each + level. If it is a string (such as '\t' or ' '), + it contains the characters used to indent at each level. + + This method produces a JSON text from a JavaScript value. + + When an object value is found, if the object contains a toJSON + method, its toJSON method will be called and the result will be + stringified. A toJSON method does not serialize: it returns the + value represented by the name/value pair that should be serialized, + or undefined if nothing should be serialized. The toJSON method + will be passed the key associated with the value, and this will be + bound to the value + + For example, this would serialize Dates as ISO strings. + + Date.prototype.toJSON = function (key) { + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + You can provide an optional replacer method. It will be passed the + key and value of each member, with this bound to the containing + object. The value that is returned from your method will be + serialized. If your method returns undefined, then the member will + be excluded from the serialization. + + If the replacer parameter is an array of strings, then it will be + used to select the members to be serialized. It filters the results + such that only members with keys listed in the replacer array are + stringified. + + Values that do not have JSON representations, such as undefined or + functions, will not be serialized. Such values in objects will be + dropped; in arrays they will be replaced with null. You can use + a replacer function to replace those with JSON values. + JSON.stringify(undefined) returns undefined. + + The optional space parameter produces a stringification of the + value that is filled with line breaks and indentation to make it + easier to read. + + If the space parameter is a non-empty string, then that string will + be used for indentation. If the space parameter is a number, then + the indentation will be that many spaces. + + Example: + + text = JSON.stringify(['e', {pluribus: 'unum'}]); + // text is '["e",{"pluribus":"unum"}]' + + + text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); + // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + text = JSON.stringify([new Date()], function (key, value) { + return this[key] instanceof Date ? + 'Date(' + this[key] + ')' : value; + }); + // text is '["Date(---current time---)"]' + + + JSON.parse(text, reviver) + This method parses a JSON text to produce an object or array. + It can throw a SyntaxError exception. + + The optional reviver parameter is a function that can filter and + transform the results. It receives each of the keys and values, + and its return value is used instead of the original value. + If it returns what it received, then the structure is not modified. + If it returns undefined then the member is deleted. + + Example: + + // Parse the text. Values that look like ISO date strings will + // be converted to Date objects. + + myData = JSON.parse(text, function (key, value) { + var a; + if (typeof value === 'string') { + a = +/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + if (a) { + return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + +a[5], +a[6])); + } + } + return value; + }); + + myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + var d; + if (typeof value === 'string' && + value.slice(0, 5) === 'Date(' && + value.slice(-1) === ')') { + d = new Date(value.slice(5, -1)); + if (d) { + return d; + } + } + return value; + }); + + + This is a reference implementation. You are free to copy, modify, or + redistribute. +*/ + +/*jslint evil: true, regexp: true */ + +/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, + call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf +*/ + + +// Create a JSON object only if one does not already exist. We create the +// methods in a closure to avoid creating global variables. + +if (typeof JSON !== 'object') { + JSON = {}; +} + +(function () { + 'use strict'; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + + + function quote(string) { + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe escape +// sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' + ? c + : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + } + + + function str(key, holder) { + +// Produce a string from holder[key]. + + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + +// If the value has a toJSON method, call it to obtain a replacement value. + + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + +// If we were called with a replacer function, then call the replacer to +// obtain a replacement value. + + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + +// What happens next depends on the value's type. + + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + +// If the value is a boolean or null, convert it to a string. Note: +// typeof null does not produce 'null'. The case is included here in +// the remote chance that this gets fixed someday. + + return String(value); + +// If the type is 'object', we might be dealing with an object or an array or +// null. + + case 'object': + +// Due to a specification blunder in ECMAScript, typeof null is 'object', +// so watch out for that case. + + if (!value) { + return 'null'; + } + +// Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + +// Is the value an array? + + if (Object.prototype.toString.apply(value) === '[object Array]') { + +// The value is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + +// Join all of the elements together, separated with commas, and wrap them in +// brackets. + + v = partial.length === 0 + ? '[]' + : gap + ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' + : '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + +// If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === 'string') { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + +// Join all of the member texts together, separated with commas, +// and wrap them in braces. + + v = partial.length === 0 + ? '{}' + : gap + ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' + : '{' + partial.join(',') + '}'; + gap = mind; + return v; + } + } + +// If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== 'function') { + JSON.stringify = function (value, replacer, space) { + +// The stringify method takes a value and an optional replacer, and an optional +// space parameter, and returns a JSON text. The replacer can be a function +// that can replace values, or an array of strings that will select the keys. +// A default replacer method can be provided. Use of the space parameter can +// produce text that is more easily readable. + + var i; + gap = ''; + indent = ''; + +// If the space parameter is a number, make an indent string containing that +// many spaces. + + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + +// If the space parameter is a string, it will be used as the indent string. + + } else if (typeof space === 'string') { + indent = space; + } + +// If there is a replacer, it must be a function or an array. +// Otherwise, throw an error. + + rep = replacer; + if (replacer && typeof replacer !== 'function' && + (typeof replacer !== 'object' || + typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + +// Make a fake root object containing our value under the key of ''. +// Return the result of stringifying the value. + + return str('', {'': value}); + }; + } + + +// If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== 'function') { + JSON.parse = function (text, reviver) { + +// The parse method takes a text and an optional reviver function, and returns +// a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + +// The walk method is used to recursively walk the resulting structure so +// that modifications can be made. + + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + +// Parsing happens in four stages. In the first stage, we replace certain +// Unicode characters with escape sequences. JavaScript handles many characters +// incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + cx.lastIndex = 0; + if (cx.test(text)) { + text = text.replace(cx, function (a) { + return '\\u' + + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + +// In the second stage, we run the text against regular expressions that look +// for non-JSON patterns. We are especially concerned with '()' and 'new' +// because they can cause invocation, and '=' because it can cause mutation. +// But just to be safe, we want to reject all unexpected forms. + +// We split the second stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/ + .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the third stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional fourth stage, we recursively walk the new structure, passing +// each name/value pair to a reviver function for possible transformation. + + return typeof reviver === 'function' + ? walk({'': j}, '') + : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('JSON.parse'); + }; + } +}()); + +DataAPI.on('initialize', function() { + this.generateEndpointMethods( + [ + { + "id": "openapi", + "route": "/", + "verb": "GET", + "resources": null + }, + { + "id": "version", + "route": "/version", + "verb": "GET", + "resources": null + }, + { + "id": "list_endpoints", + "route": "/endpoints", + "verb": "GET", + "resources": null + }, + { + "id": "authorize", + "route": "/authorization", + "verb": "GET", + "resources": null + }, + { + "id": "get_token", + "route": "/token", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_authentication", + "route": "/authentication", + "verb": "DELETE", + "resources": null + }, + { + "id": "revoke_token", + "route": "/token", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_user", + "route": "/users/:user_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_user", + "route": "/users/:user_id", + "verb": "PUT", + "resources": [ + "user" + ] + }, + { + "id": "get_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_entries", + "route": "/publish/entries", + "verb": "GET", + "resources": null + }, + { + "id": "get_stats_provider", + "route": "/sites/:site_id/stats/provider", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories", + "route": "/sites/:site_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories_for_entry", + "route": "/sites/:site_id/entries/:entry_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories", + "route": "/sites/:site_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories", + "route": "/sites/:site_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories", + "route": "/sites/:site_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category", + "route": "/sites/:site_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories", + "route": "/sites/:site_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_folders", + "route": "/sites/:site_id/folders", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_folders", + "route": "/sites/:site_id/folders/:folder_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_folders", + "route": "/sites/:site_id/folders/:folder_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_folders", + "route": "/sites/:site_id/folders/:folder_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_folder", + "route": "/sites/:site_id/folders", + "verb": "POST", + "resources": [ + "folder" + ] + }, + { + "id": "get_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "PUT", + "resources": [ + "folder" + ] + }, + { + "id": "delete_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_folders", + "route": "/sites/:site_id/folders/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_assets", + "route": "/sites/:site_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_entry", + "route": "/sites/:site_id/entries/:entry_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_page", + "route": "/sites/:site_id/pages/:page_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "get_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "PUT", + "resources": [ + "asset" + ] + }, + { + "id": "delete_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_thumbnail", + "route": "/sites/:site_id/assets/:asset_id/thumbnail", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_category", + "route": "/sites/:site_id/categories/:category_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_asset", + "route": "/sites/:site_id/assets/:asset_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "import_entries", + "route": "/sites/:site_id/entries/import", + "verb": "POST", + "resources": null + }, + { + "id": "export_entries", + "route": "/sites/:site_id/entries/export", + "verb": "GET", + "resources": null + }, + { + "id": "preview_entry_by_id", + "route": "/sites/:site_id/entries/:entry_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_entry", + "route": "/sites/:site_id/entries/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_pages", + "route": "/sites/:site_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_folder", + "route": "/sites/:site_id/folders/:folder_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_asset", + "route": "/sites/:site_id/assets/:asset_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "get_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_page_by_id", + "route": "/sites/:site_id/pages/:page_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_page", + "route": "/sites/:site_id/pages/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_sites", + "route": "/sites", + "verb": "GET", + "resources": null + }, + { + "id": "get_blog", + "route": "/sites/:site_id", + "verb": "GET", + "resources": null + }, + { + "id": "list_blogs_for_user", + "route": "/users/:user_id/sites", + "verb": "GET", + "resources": null + }, + { + "id": "list_sites_by_parent", + "route": "/sites/:site_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "insert_new_blog", + "route": "/sites/:site_id", + "verb": "POST", + "resources": [ + "blog" + ] + }, + { + "id": "insert_new_website", + "route": "/sites", + "verb": "POST", + "resources": [ + "website" + ] + }, + { + "id": "update_site", + "route": "/sites/:site_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_site", + "route": "/sites/:site_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_roles", + "route": "/roles", + "verb": "GET", + "resources": null + }, + { + "id": "create_role", + "route": "/roles", + "verb": "POST", + "resources": [ + "role" + ] + }, + { + "id": "get_role", + "route": "/roles/:role_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_role", + "route": "/roles/:role_id", + "verb": "PUT", + "resources": [ + "role" + ] + }, + { + "id": "delete_role", + "route": "/roles/:role_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions", + "route": "/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_user", + "route": "/users/:user_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_site", + "route": "/sites/:site_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_role", + "route": "/roles/:role_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_site", + "route": "/sites/:site_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "grant_permission_to_user", + "route": "/users/:user_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_site", + "route": "/sites/:site_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_user", + "route": "/users/:user_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_logs", + "route": "/sites/:site_id/logs", + "verb": "GET", + "resources": null + }, + { + "id": "get_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_log", + "route": "/sites/:site_id/logs", + "verb": "POST", + "resources": [ + "log" + ] + }, + { + "id": "update_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "PUT", + "resources": [ + "log" + ] + }, + { + "id": "delete_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "reset_logs", + "route": "/sites/:site_id/logs", + "verb": "DELETE", + "resources": null + }, + { + "id": "export_logs", + "route": "/sites/:site_id/logs/export", + "verb": "GET", + "resources": null + }, + { + "id": "list_tags_for_site", + "route": "/sites/:site_id/tags", + "verb": "GET", + "resources": null + }, + { + "id": "get_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "GET", + "resources": null + }, + { + "id": "rename_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_themes", + "route": "/themes", + "verb": "GET", + "resources": null + }, + { + "id": "list_themes_for_site", + "route": "/sites/:site_id/themes", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme", + "route": "/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme_for_site", + "route": "/sites/:site_id/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "apply_theme_to_site", + "route": "/sites/:site_id/themes/:theme_id/apply", + "verb": "POST", + "resources": null + }, + { + "id": "uninstall_theme", + "route": "/themes/:theme_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "create_template", + "route": "/sites/:site_id/templates", + "verb": "POST", + "resources": [ + "template" + ] + }, + { + "id": "refresh_templates_for_site", + "route": "/sites/:site_id/refresh_templates", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template_by_id", + "route": "/sites/:site_id/templates/:template_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template", + "route": "/sites/:site_id/templates/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_widgetsets", + "route": "/sites/:site_id/widgetsets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widgetset", + "route": "/sites/:site_id/widgetsets", + "verb": "POST", + "resources": [ + "widgetset" + ] + }, + { + "id": "update_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "PUT", + "resources": [ + "widgetset" + ] + }, + { + "id": "delete_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_widgets", + "route": "/sites/:site_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "list_widgets_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgets", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_widget_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widget", + "route": "/sites/:site_id/widgets", + "verb": "POST", + "resources": [ + "widget" + ] + }, + { + "id": "update_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "PUT", + "resources": [ + "widget" + ] + }, + { + "id": "delete_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "refresh_widget", + "route": "/sites/:site_id/widgets/:widget_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_widget", + "route": "/sites/:site_id/widgets/:widget_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_users", + "route": "/users", + "verb": "GET", + "resources": null + }, + { + "id": "create_user", + "route": "/users", + "verb": "POST", + "resources": [ + "user" + ] + }, + { + "id": "delete_user", + "route": "/users/:user_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "unlock_user", + "route": "/users/:user_id/unlock", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password_for_user", + "route": "/users/:user_id/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password", + "route": "/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "list_plugins", + "route": "/plugins", + "verb": "GET", + "resources": null + }, + { + "id": "get_plugin", + "route": "/plugins/:plugin_id", + "verb": "GET", + "resources": null + }, + { + "id": "enable_plugin", + "route": "/plugins/:plugin_id/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_plugin", + "route": "/plugins/:plugin_id/disable", + "verb": "POST", + "resources": null + }, + { + "id": "enable_all_plugins", + "route": "/plugins/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_all_plugins", + "route": "/plugins/disable", + "verb": "POST", + "resources": null + }, + { + "id": "backup_site", + "route": "/sites/:site_id/backup", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups", + "route": "/groups", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups_for_user", + "route": "/users/:user_id/groups", + "verb": "GET", + "resources": null + }, + { + "id": "get_group", + "route": "/groups/:group_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_group", + "route": "/groups", + "verb": "POST", + "resources": [ + "group" + ] + }, + { + "id": "update_group", + "route": "/groups/:group_id", + "verb": "PUT", + "resources": [ + "group" + ] + }, + { + "id": "delete_group", + "route": "/groups/:group_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions_for_group", + "route": "/groups/:group_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_group", + "route": "/groups/:group_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_group", + "route": "/groups/:group_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_members_for_group", + "route": "/groups/:group_id/members", + "verb": "GET", + "resources": null + }, + { + "id": "get_member_for_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "GET", + "resources": null + }, + { + "id": "add_member_to_group", + "route": "/groups/:group_id/members", + "verb": "POST", + "resources": null + }, + { + "id": "remove_member_from_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "authenticate", + "route": "/authentication", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset", + "route": "/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset_for_site", + "route": "/sites/:site_id/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "create_entry", + "route": "/sites/:site_id/entries", + "verb": "POST", + "resources": [ + "entry" + ] + }, + { + "id": "update_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "PUT", + "resources": [ + "entry" + ] + }, + { + "id": "create_page", + "route": "/sites/:site_id/pages", + "verb": "POST", + "resources": [ + "page" + ] + }, + { + "id": "update_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "PUT", + "resources": [ + "page" + ] + }, + { + "id": "create_category_set", + "route": "/sites/:site_id/categorySets", + "verb": "POST", + "resources": [ + "category_set" + ] + }, + { + "id": "get_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "PUT", + "resources": [ + "category_set" + ] + }, + { + "id": "delete_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_content_types", + "route": "/sites/:site_id/contentTypes", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_type", + "route": "/sites/:site_id/contentTypes", + "verb": "POST", + "resources": [ + "content_type" + ] + }, + { + "id": "get_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "PUT", + "resources": [ + "content_type" + ] + }, + { + "id": "delete_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "POST", + "resources": [ + "content_field" + ] + }, + { + "id": "get_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "PUT", + "resources": [ + "content_field" + ] + }, + { + "id": "delete_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "create_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "get_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "PUT", + "resources": [ + "content_data" + ] + }, + { + "id": "delete_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_content_data_by_id", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "preview_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "publish_content_data", + "route": "/publish/contentData", + "verb": "GET", + "resources": null + }, + { + "id": "search", + "route": "/search", + "verb": "GET", + "resources": null + }, + { + "id": "list_templates", + "route": "/sites/:site_id/templates", + "verb": "GET", + "resources": null + }, + { + "id": "get_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "PUT", + "resources": [ + "template" + ] + }, + { + "id": "delete_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_template", + "route": "/sites/:site_id/templates/:template_id/publish", + "verb": "POST", + "resources": null + }, + { + "id": "refresh_template", + "route": "/sites/:site_id/templates/:template_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_template", + "route": "/sites/:site_id/templates/:template_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_templatemaps", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "GET", + "resources": null + }, + { + "id": "get_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "POST", + "resources": [ + "templatemap" + ] + }, + { + "id": "update_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "PUT", + "resources": [ + "templatemap" + ] + }, + { + "id": "delete_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_category_sets", + "route": "/sites/:site_id/categorySets", + "verb": "GET", + "resources": null + }, + { + "id": "list_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "GET", + "resources": null + }, + { + "id": "list_text_filters", + "route": "/textFilters", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries", + "route": "/sites/:site_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_path", + "route": "/sites/:site_id/stats/path/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_path", + "route": "/sites/:site_id/stats/path/visits", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_date", + "route": "/sites/:site_id/stats/date/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_date", + "route": "/sites/:site_id/stats/date/visits", + "verb": "GET", + "resources": null + }, + { + "id": "export_site_theme", + "route": "/sites/:site_id/export_theme", + "verb": "POST", + "resources": null + }, + { + "id": "list_fields", + "route": "/sites/:site_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "get_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_field", + "route": "/sites/:site_id/fields", + "verb": "POST", + "resources": [ + "field" + ] + }, + { + "id": "update_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "PUT", + "resources": [ + "field" + ] + }, + { + "id": "delete_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "synchronize_groups", + "route": "/groups/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_import", + "route": "/users/import", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_export", + "route": "/users/export", + "verb": "GET", + "resources": null + }, + { + "id": "synchronize_users", + "route": "/users/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "list_formatted_texts", + "route": "/sites/:site_id/formatted_texts", + "verb": "GET", + "resources": null + }, + { + "id": "get_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_formatted_text", + "route": "/sites/:site_id/formatted_texts", + "verb": "POST", + "resources": [ + "formatted_text" + ] + }, + { + "id": "update_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "PUT", + "resources": [ + "formatted_text" + ] + }, + { + "id": "delete_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments", + "route": "/sites/:site_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "list_comments_for_entry", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "create_reply_comment", + "route": "/sites/:site_id/entries/:entry_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "get_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "PUT", + "resources": [ + "comment" + ] + }, + { + "id": "delete_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "POST", + "resources": [ + { + "comment": null + } + ] + }, + { + "id": "create_reply_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + } +] + + ); +}); + +;(function() { + var fs = require("fs"), + path = require("path"); + + function getPath(o) { + return o.sessionPath || path.join(process.env["HOME"], ".mt-data-api.json"); + } + + function existsSync(p) { + return !!fs.existsSync ? fs.existsSync(p) : path.existsSync(p); + } + + DataAPI.registerSessionStore('fs', { + save: function(name, data) { + var p = getPath(this.o), + d = {}, + newFile = true; + if (existsSync(p)) { + try { + d = JSON.parse(fs.readFileSync(p, "utf8")); + newFile = false; + } + catch (e) { + // Ignore + } + } + d[name] = data; + + fs.writeFileSync(p, JSON.stringify(d), "utf8"); + if (newFile) { + fs.chmodSync(p, parseInt("600", 8)); + } + }, + fetch: function(name) { + var p = getPath(this.o), + d = {}; + if (existsSync(p)) { + try { + d = JSON.parse(fs.readFileSync(p, "utf8")); + } + catch (e) { + // Ignore + } + } + + return d[name]; + }, + remove: function(name) { + var p = getPath(this.o), + d = {}; + if (existsSync(p)) { + d = JSON.parse(fs.readFileSync(p, "utf8")); + if (name in d) { + delete d[name]; + fs.writeFileSync(p, JSON.stringify(d), "utf8"); + } + } + }, + }); +})(); + +window.MT = window.MT || {}; +window.MT.DataAPI = window.MT.DataAPI || DataAPI; +window.MT.DataAPI['v' + DataAPI.version] = DataAPI; + + +return DataAPI; + +})); diff --git a/package-lock.json b/package-lock.json index 7686208..77b293e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "grunt-connect-proxy": "0.1.5", "grunt-contrib-clean": "~0.4.0", "grunt-contrib-connect": "~5.0.1", - "grunt-contrib-jasmine": "~0.5.1", + "grunt-contrib-jasmine": "^4.0.0", "grunt-contrib-jshint": "~0.6.0", "grunt-contrib-uglify": "~0.2.2", "grunt-contrib-watch": "~0.2.0", @@ -27,1735 +27,1748 @@ "node": ">=18.0.0" } }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, - "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "engines": { - "node": ">=0.4.2" + "node": ">=6.9.0" } }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha512-LjmC2dNpdn2L4UzyoaIr11ELYoLn37ZFy9zObrQFHsSuOepeUEMKnM8w5KL4Tnrp2gy88rRuQt6Ky8Bjml+Baw==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/argparse/node_modules/underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/argparse/node_modules/underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha512-yxkabuCaIBnzfIvX3kBxQqCs0ar/bfJwDnFEHJUm/ZrRVhT3IItdRF5cZjARLzEnyQYtIUhsZ2LG2j3HidFOFQ==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": "*" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { - "node": ">=0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", - "integrity": "sha512-2tEzliJmf5fHNafNwQLJXUasGzQCVctvsNkXmnlELHwypU0p08/rHohYvkqKIjyXpx+0rkrYv6QbhJ+UF4QkBg==", + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": "*" + "node": ">=10.10.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { "node": "*" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, "engines": { - "node": ">= 0.8" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha512-phbvN+yOk05EGoFcV/0S8N8ShnJqf6VCWRAw5he2gvRwBubFt/OzmcTNGqBt5b7Y4RK3YCgf6jrgGSR0Cwtsgw==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "readable-stream": "~2.0.5" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "dependencies": { - "hoek": "2.x.x" - }, "engines": { - "node": ">=0.10.40" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", - "dev": true - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 8" } }, - "node_modules/check-types": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-0.6.5.tgz", - "integrity": "sha512-VAGyaArzXtnxRMwxid/IIQFOMwhQfYiCTSMr05jPMYogztU5bc23E66HB53uCjQfEtKNYY2zR33tGMXiXyrTjw==", - "dev": true - }, - "node_modules/cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", - "integrity": "sha512-dbn5HyeJWSOU58RwOEiF1VWrl7HRvDsKLpu0uiI/vExH6iNoyUzjB5Mr3IJY5DVUfnbpe9793xw4DFJVzC9nWQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "glob": ">= 3.1.4" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=0.2.5" + "node": ">= 8" } }, - "node_modules/cli-color": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.2.3.tgz", - "integrity": "sha512-f4DFHXdoe2rGMwuVO+DTBM6CkSt4m9R4a0vjnq5CJkSCKaXbrHbslCmyjG6cz/o50HP2wkjO3G1mXvc7G3V1LQ==", + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "dependencies": { - "es5-ext": "~0.9.2", - "memoizee": "~0.2.5" + "semver": "^7.3.5" }, "engines": { - "node": ">=0.1.103" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", - "integrity": "sha512-QjQ1T4BqyHv19k6XSfdhy/QLlIOhywz0ekBUCa9h71zYMJlfDTGan/Z1JXzYkZ6v8R+GhvL/p4FZPbPW8WNXlg==", - "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" }, "engines": { - "node": ">=0.4.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/coffeescript": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", - "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" + "node-which": "bin/which.js" }, "engines": { - "node": ">=0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, "engines": { - "node": ">=0.1.90" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/commander": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", - "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", + "node_modules/@npmcli/move-file/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "keypress": "0.1.x" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.6.x" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/complexity-report": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-0.10.5.tgz", - "integrity": "sha512-co+Le/h83CSXfdascgZ1liWV/f4Z/bBa15jWBFRBA5SP6Li+rRtp05GaTC/Lbi/uFsWy79S7VqB906sShfix1A==", + "node_modules/@npmcli/move-file/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/@npmcli/move-file/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "check-types": "0.6.x", - "commander": "1.1.x", - "esprima": "1.0.x" + "brace-expansion": "^1.1.7" }, - "bin": { - "cr": "src/cli.js" + "engines": { + "node": "*" } }, - "node_modules/complexity-report/node_modules/esprima": { + "node_modules/@npmcli/move-file/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", - "integrity": "sha512-litEocitzYgqQ0IPaoLw+tCHcVcJJYW05+SAhH+LS9qutSC7iuejvawts3cUYQycZbRbLsjG8mCJLQi2KX5kEw==", + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "engines": [ - "node >= 0.8" - ], "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/concat-stream/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, "engines": { - "node": ">= 0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/connect-livereload": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", - "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, - "license": "MIT", + "dependencies": { + "which": "^3.0.0" + }, "engines": { - "node": "*" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", - "integrity": "sha512-FJahZyF+dLKrC7h4DOq5JsHA+f0cLJD3TR1+0CK3n6phtdrVAPsZZKq+PZRmo2RYSOHvvs8kNhU4uRiSZUbSbA==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { - "boom": "2.x.x" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=0.10.40" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/dashdash/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">=0.8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", - "integrity": "sha512-AXvW8g7tO4ilk5HgOWeDmPi/ZPaCnMJ+9Cg1I3p19w6mcvAAXBuuGEXAxybC+Djj1PSZUiHUcyoYu7WneCX8gQ==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "optional": true, "engines": { - "node": "*" + "node": ">=14" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/@puppeteer/browsers/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", "dev": true, - "license": "MIT", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/delayed-stream": { + "node_modules/@sigstore/sign": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, - "license": "MIT", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.4" + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" }, "engines": { - "node": ">= 0.4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">= 10" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.9.2.tgz", - "integrity": "sha512-wP3OSxZ0L/qK76t6qxPR8gWr2o5F4SzNF9qS5F/mOfVY3Ezcg07v6hSkETDmoekXIzn8xhQbHpp+tVlOE+qOAg==", + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, "engines": { - "node": ">=0.4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.12.0" + "node": ">=16 || 14 >=14.17" }, - "optionalDependencies": { - "source-map": "~0.2.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "node_modules/@types/node": { + "version": "22.15.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", + "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" + "optional": true, + "dependencies": { + "undici-types": "~6.21.0" } }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "optional": true, + "dependencies": { + "@types/node": "*" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { "node": ">= 0.6" } }, - "node_modules/event-emitter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.2.2.tgz", - "integrity": "sha512-kdjfxF6jYJ5m/OEe3ZNNJzbCEcagF4lNJeuhgrBSRnlitpdxICDKzCel+Z5Wbl7K9UhBN/7k2MzXBvCvSwfzzg==", + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, - "dependencies": { - "es5-ext": "~0.9.2" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=0.4" + "node": ">=0.4.0" } }, - "node_modules/eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", - "dev": true - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", - "integrity": "sha512-Ht7oUiEXWnX5BvLzMX/UBNIjrAs53lhXtNxMNeUe8Nv0S8rfy5UGqsKOXpP8ZQMWLvheOvRqYYShBoj6fTO9bg==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "concat-stream": "1.5.0", - "debug": "0.7.4", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" + "debug": "4" }, - "bin": { - "extract-zip": "cli.js" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/extract-zip/node_modules/debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q==", + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": "*" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/extract-zip/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/extract-zip/node_modules/mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha512-xjjNGy+ry1lhtIKcr2PT6ok3aszhQfgrUDp4OZLHacgRgFmF6XR9XCOJVcXlVGQonIqXcK1DvqgKKQOPWYGSfw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "dev": true, "dependencies": { - "minimist": "0.0.8" + "humanize-ms": "^1.2.1" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 8.0.0" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha512-MX1ZLPIuKED51hrI4++K+1B0VX87Cs4EkybD2q12Ysuf5p4vkmHqMvQJRlDwROqFr4D2Pzyit5wGQxf30grIcw==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "pend": "~1.2.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/fileset": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.8.tgz", - "integrity": "sha512-Gg0/Iy/v4BfdGWZpbpVBPKIYcap7jMn2uT5lcIDZyMFZR35VDojrJnIAwWjCj7ZOqsGp3j+ExWKqnfGrz4q0fg==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "glob": "3.x", - "minimatch": "0.x" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=0.4.2" } }, - "node_modules/findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "integrity": "sha512-yjftfYnF4ThYEvKEV/kEFR15dmtyXTAh3vQnzpJUoc7Naj5y1P0Ck7Zs1+Vroa00E3KT3IYsk756S+8WA5dNLw==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "glob": "~3.2.9", - "lodash": "~2.4.1" - }, "engines": { - "node": ">= 0.6.0" + "node": ">=8" } }, - "node_modules/findup-sync/node_modules/glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "inherits": "2", - "minimatch": "0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/findup-sync/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, - "node_modules/findup-sync/node_modules/lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", - "dev": true, - "engines": [ - "node", - "rhino" - ] - }, - "node_modules/findup-sync/node_modules/minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha512-LjmC2dNpdn2L4UzyoaIr11ELYoLn37ZFy9zObrQFHsSuOepeUEMKnM8w5KL4Tnrp2gy88rRuQt6Ky8Bjml+Baw==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "node_modules/argparse/node_modules/underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA==", + "dev": true + }, + "node_modules/argparse/node_modules/underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha512-yxkabuCaIBnzfIvX3kBxQqCs0ar/bfJwDnFEHJUm/ZrRVhT3IItdRF5cZjARLzEnyQYtIUhsZ2LG2j3HidFOFQ==", "dev": true, "engines": { "node": "*" } }, - "node_modules/form-data": { + "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha512-M4Yhq2mLogpCtpUmfopFlTTuIe6mSCTgKvnlMhDj3NcgVhA1uS20jT0n+xunKPzpmL5w2erSVtp+SKiJf1TlWg==", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "async": "^2.0.1", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, - "dependencies": { - "lodash": "^4.17.14" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/form-data/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha512-waKu+1KumRhYv8D8gMRCKJGAMI9pRnPuEb1mvgYD0f7wBscg+h6bW4FDTmEZhB9VKxvoTtxW+Y7bnIlB7zja6Q==", + "node_modules/async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha512-2tEzliJmf5fHNafNwQLJXUasGzQCVctvsNkXmnlELHwypU0p08/rHohYvkqKIjyXpx+0rkrYv6QbhJ+UF4QkBg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "engines": { + "node": "*" } }, - "node_modules/fs-extra/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/gaze": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.3.4.tgz", - "integrity": "sha512-vIK81ZT20o9X0LOHYDGo5Phq6FaQRjDjBN2KkbYSxlaXnN1WDH0Op0tPThqNVA8ZnmN/TYNZfGHAVkBTrdeBIQ==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, + "license": "MIT", "dependencies": { - "fileset": "~0.1.5", - "minimatch": "~0.2.9" + "safe-buffer": "5.1.2" }, "engines": { - "node": ">= 0.6.0" + "node": ">= 0.8" } }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "is-property": "^1.0.2" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "node_modules/bl/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "is-property": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "peer": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha512-hIGEBfnHcZpWkXPsAVeVmpYDvfy/matVl03yOY91FPmnpCC12Lm5izNxCjO3lHAeO6uaTwMxu7g450Siknlhig==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": "*" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/getpass/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=0.8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha512-ANhy2V2+tFpRajE3wN4DhkNQ08KDr0Ir1qL12/cUe5+a7STEK8jkW4onUYuY8/06qAFuT5je7mjAqzx0eKI2tQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" - }, "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globule/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/globule/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/globule/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha512-iiTUZ5vZ+2ZV+h71XAgwCSu6+NAizhFU3Yw8aC/hH5SQ3SnISqEqAek40imAFGtDcwJKNhXvSY+hzIolnLwcdQ==", - "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", "dev": true, "engines": { - "node": ">=4.x" + "node": ">=0.10.0" } }, - "node_modules/grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "integrity": "sha512-1iq3ylLjzXqz/KSq1OAE2qhnpcbkF2WyhsQcavZt+YmgvHu0EbPMEhGhy2gr0FP67isHpRdfwjB5WVeXXcJemQ==", - "dev": true, - "dependencies": { - "async": "~0.1.22", - "coffee-script": "~1.3.3", - "colors": "~0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.1.2", - "getobject": "~0.1.0", - "glob": "~3.1.21", - "grunt-legacy-log": "~0.1.0", - "grunt-legacy-util": "~0.2.0", - "hooker": "~0.2.3", - "iconv-lite": "~0.2.11", - "js-yaml": "~2.0.5", - "lodash": "~0.9.2", - "minimatch": "~0.2.12", - "nopt": "~1.0.10", - "rimraf": "~2.2.8", - "underscore.string": "~2.2.1", - "which": "~1.0.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/grunt-connect-proxy": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/grunt-connect-proxy/-/grunt-connect-proxy-0.1.5.tgz", - "integrity": "sha512-QJSFQ1bbXqyk0xihkr3/nhT7E81SH1BVsx92W+EovXwH9sP5lsOiIlAL1x/aFZ5osRpsPHdxpLjrJbvI5I6XTQ==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "http-proxy": "~0.10.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" }, - "peerDependencies": { - "grunt": "~0.4.1" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/grunt-contrib-clean": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.4.1.tgz", - "integrity": "sha512-PajoaZgwbJ1QAbY5CemvuCIXUJU8teoA3ABTd3eZA+j0UYTUBW+hlV5m3ZlZLgRxKm3ZrchAEVR85r5uBeKF9w==", + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": "~0.4.0" + "node": ">=8" } }, - "node_modules/grunt-contrib-connect": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-5.0.1.tgz", - "integrity": "sha512-Hfq/0QJl3ddD2N/a/1cDJHkKEOGk6m7W6uxNe0AmYwtf6v0F/4+8q9rvPJ1tl+mrI90lU/89I9T/h48qqeMfQA==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "async": "^3.2.5", - "connect": "^3.7.0", - "connect-livereload": "^0.6.1", - "http2-wrapper": "^2.2.1", - "morgan": "^1.10.0", - "open": "^8.0.0", - "portscanner": "^2.2.0", - "serve-index": "^1.9.1", - "serve-static": "^1.15.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/grunt-contrib-connect/node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "node_modules/check-types": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-0.6.5.tgz", + "integrity": "sha512-VAGyaArzXtnxRMwxid/IIQFOMwhQfYiCTSMr05jPMYogztU5bc23E66HB53uCjQfEtKNYY2zR33tGMXiXyrTjw==", + "dev": true + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=10" + } }, - "node_modules/grunt-contrib-jasmine": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-jasmine/-/grunt-contrib-jasmine-0.5.3.tgz", - "integrity": "sha512-88amuGVxnRIKdDQ6enE8EhIU4HgCK4EY7rby9d2qu9vIq9y1Jz902Jj0qU7WYEjB/7Of9wTaDTvk1GQVhaxUMw==", + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", "dev": true, "dependencies": { - "grunt-lib-phantomjs": "~0.5.0", - "rimraf": "~2.1.4" - }, - "engines": { - "node": ">=0.8.0" + "mitt": "3.0.0" }, "peerDependencies": { - "grunt": "~0.4.0" + "devtools-protocol": "*" } }, - "node_modules/grunt-contrib-jasmine/node_modules/rimraf": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.1.4.tgz", - "integrity": "sha512-tzwmX16YQhcFu0T/m0gHBcFKx6yQAg77Z6WWaQSJsUekXYa6yaAmHhrDdmFicgauX/er7GsdN+vRao3mBhA4kQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "optionalDependencies": { - "graceful-fs": "~1" + "engines": { + "node": ">=6" } }, - "node_modules/grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "integrity": "sha512-Hq9ExFaE41jCoAXqwdIi2b/QGI3K/1z+52aIP0m1zTaXv6DgodDhnR7ijqGTI3mm9UdJi/qfb08/UmEOEKsuLw==", + "node_modules/cli": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", + "integrity": "sha512-dbn5HyeJWSOU58RwOEiF1VWrl7HRvDsKLpu0uiI/vExH6iNoyUzjB5Mr3IJY5DVUfnbpe9793xw4DFJVzC9nWQ==", "dev": true, "dependencies": { - "jshint": "~2.1.10" + "glob": ">= 3.1.4" }, "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": "~0.4.0" + "node": ">=0.2.5" } }, - "node_modules/grunt-contrib-uglify": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz", - "integrity": "sha512-KXKM2UNLsCiUI6/DYfAIPm3i26UJJN6Cf6KD8fFa2TKllj7yLPC853IxtWBJ/3jX66QtXHGtdCORuuA6sAFvvA==", + "node_modules/cli-color": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.2.3.tgz", + "integrity": "sha512-f4DFHXdoe2rGMwuVO+DTBM6CkSt4m9R4a0vjnq5CJkSCKaXbrHbslCmyjG6cz/o50HP2wkjO3G1mXvc7G3V1LQ==", "dev": true, "dependencies": { - "grunt-lib-contrib": "~0.6.1", - "uglify-js": "~2.4.0" + "es5-ext": "~0.9.2", + "memoizee": "~0.2.5" }, "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": "~0.4.0" + "node": ">=0.1.103" } }, - "node_modules/grunt-contrib-watch": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.2.0.tgz", - "integrity": "sha512-NPhb9WoMEdqtFudcserCHlQoGEXoZKvklOKdC0WyC2tnkZpNVWdSRdNCM04OhvH08fgadBNoNSto4zfy/7ZEfA==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { - "gaze": "~0.3.3" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": "~0.4.0" + "node": ">=12" } }, - "node_modules/grunt-jasmine-node": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/grunt-jasmine-node/-/grunt-jasmine-node-0.1.0.tgz", - "integrity": "sha512-/IE/IVbkqsihLmLtGkfu35mQuTbio1ZAW4aUNkCjQ+Oyn1JJaJEjnbSDJNYaUOIuZtxob66gydi1qXUnI5wxaQ==", + "node_modules/coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha512-QjQ1T4BqyHv19k6XSfdhy/QLlIOhywz0ekBUCa9h71zYMJlfDTGan/Z1JXzYkZ6v8R+GhvL/p4FZPbPW8WNXlg==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", "dev": true, - "dependencies": { - "jasmine-node": "*" - }, "bin": { - "grunt-jasmine-node": "bin/grunt-jasmine-node" + "cake": "bin/cake", + "coffee": "bin/coffee" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.4.0" } }, - "node_modules/grunt-legacy-log": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", - "integrity": "sha512-qYs/uM0ImdzwIXLhS4O5WLV5soAM+PEqqHI/hzSxlo450ERSccEhnXqoeDA9ZozOdaWuYnzTOTwRcVRogleMxg==", + "node_modules/coffeescript": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", "dev": true, - "dependencies": { - "colors": "~0.6.2", - "grunt-legacy-log-utils": "~0.1.1", - "hooker": "~0.2.3", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.8.0" } }, - "node_modules/grunt-legacy-log-utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", - "integrity": "sha512-D0vbUX00TFYCKNZtcZzemMpwT8TR/FdRs1pmfiBw6qnUw80PfsjV+lhIozY/3eJ3PSG2zj89wd2mH/7f4tNAlw==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "colors": "~0.6.2", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">=7.0.0" } }, - "node_modules/grunt-legacy-log-utils/node_modules/lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", - "dev": true, - "engines": [ - "node", - "rhino" - ] + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/grunt-legacy-log-utils/node_modules/underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha512-hbD5MibthuDAu4yA5wxes5bzFgqd3PpBJuClbRxaNddxfdsz+qf+1kHwrGQFrmchmDHb9iNU+6EHDn8uj0xDJg==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "engines": { - "node": "*" + "bin": { + "color-support": "bin.js" } }, - "node_modules/grunt-legacy-log/node_modules/lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", - "dev": true, - "engines": [ - "node", - "rhino" - ] - }, - "node_modules/grunt-legacy-log/node_modules/underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha512-hbD5MibthuDAu4yA5wxes5bzFgqd3PpBJuClbRxaNddxfdsz+qf+1kHwrGQFrmchmDHb9iNU+6EHDn8uj0xDJg==", + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", "dev": true, "engines": { - "node": "*" + "node": ">=0.1.90" } }, - "node_modules/grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "integrity": "sha512-cXPbfF8aM+pvveQeN1K872D5fRm30xfJWZiS63Y8W8oyIPLClCsmI8bW96Txqzac9cyL4lRqEBhbhJ3n5EzUUQ==", + "node_modules/commander": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", "dev": true, "dependencies": { - "async": "~0.1.22", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~0.9.2", - "underscore.string": "~2.2.1", - "which": "~1.0.5" + "keypress": "0.1.x" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6.x" } }, - "node_modules/grunt-lib-contrib": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz", - "integrity": "sha512-HdCtJuMmmkSAVrAfsG7lZWE0YabrsPWwzcCCUgWQOAaQsQSUNhw/IwD2YjCSLh5y9NXSPzHTYFLL4ro7QbAJMA==", + "node_modules/complexity-report": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-0.10.5.tgz", + "integrity": "sha512-co+Le/h83CSXfdascgZ1liWV/f4Z/bBa15jWBFRBA5SP6Li+rRtp05GaTC/Lbi/uFsWy79S7VqB906sShfix1A==", "dev": true, "dependencies": { - "zlib-browserify": "0.0.1" + "check-types": "0.6.x", + "commander": "1.1.x", + "esprima": "1.0.x" }, - "engines": { - "node": ">= 0.8.0" + "bin": { + "cr": "src/cli.js" } }, - "node_modules/grunt-lib-phantomjs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.5.0.tgz", - "integrity": "sha512-5+TTQ9pPRoSxZ9+FggIm9iNyl6oyyi6O02eyuakP1/5mRcTGUKzxT7GplnV9vWsJHTyab4CgMi+iIjyKIdKIJg==", + "node_modules/complexity-report/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", "dev": true, - "dependencies": { - "eventemitter2": "~0.4.9", - "phantomjs": "~1.9.0-1", - "semver": "~1.0.14", - "temporary": "~0.0.4" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/grunt-open": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/grunt-open/-/grunt-open-0.2.4.tgz", - "integrity": "sha512-3VxPWr6zZBVvEPtCMkjVtP30saT/VDIeUE8nWs8Y2tNgUPROKwWoWFwo1AUTNRM5oufJ2PL1eMVaL7Byv4NhQg==", - "dev": true, - "dependencies": { - "opn": "^5.4.0" - }, "bin": { - "grunt-open": "bin/grunt-open" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.6.0" + "node": ">=0.4.0" } }, - "node_modules/grunt-plato": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/grunt-plato/-/grunt-plato-0.2.1.tgz", - "integrity": "sha512-8nf/LDxG6XSerqzg7MCWW6I06IYT8XuvbYw7Lx09UFLSKCEwoCrxreoSvkVbWGS25kI2Ku8TFBVi2jQU3Ahu0w==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "license": "MIT", "dependencies": { - "plato": "~0.6.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.10.0" } }, - "node_modules/grunt-preprocess": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/grunt-preprocess/-/grunt-preprocess-2.3.0.tgz", - "integrity": "sha512-Ld+NiXQVlkt2zoqOcUA7xZ+d29jhPDqqyCyiSh1Vm5e98wQrGw7CEvZ/FZ7fOVqpfY5JXdJOH5MiQnuYEDdbpg==", + "node_modules/connect-livereload": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", + "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", "dev": true, - "dependencies": { - "grunt": "~0.4.0a", - "preprocess": "~1.3.0" - }, - "bin": { - "grunt-preprocess": "bin/grunt-preprocess" - }, + "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": "*" } }, - "node_modules/grunt-prompt": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/grunt-prompt/-/grunt-prompt-0.1.2.tgz", - "integrity": "sha512-J06q7BPxbAtxpgk45fQ1PiqLcoXrJhl1fvPS9FVIZXuAOLgFEa6TGCmIIEW3LLg2uyUfgefYMA6QUjZL7lhTUQ==", + "node_modules/console-browserify": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", + "integrity": "sha512-FJahZyF+dLKrC7h4DOq5JsHA+f0cLJD3TR1+0CK3n6phtdrVAPsZZKq+PZRmo2RYSOHvvs8kNhU4uRiSZUbSbA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", "dev": true, "dependencies": { - "inquirer": "~0.2.1" + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14" }, - "peerDependencies": { - "grunt": "~0.4.1" + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/grunt-template-jasmine-istanbul": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/grunt-template-jasmine-istanbul/-/grunt-template-jasmine-istanbul-0.2.6.tgz", - "integrity": "sha512-9UkCvPhb1gpIfM+Nsk9F6xDfXsF6skYGp+I2mk1XSsq7pHpDQrrZBE/9QMW2guuuH4l2qiN93iuUe3n40n1nRw==", - "dev": true, - "dependencies": { - "istanbul": ">=0.1.30" - }, - "peerDependencies": { - "grunt": ">=0.4.0", - "grunt-contrib-jasmine": ">=0.3.1" - } + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "argparse": "^2.0.1" }, "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "node-fetch": "2.6.7" } }, - "node_modules/handlebars/node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=0.8.0" + "node": ">= 8" } }, - "node_modules/har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha512-P6tFV+wCcUL3nbyTDAvveDySfbhy0XkDtAIfZP6HITjM2WUsiPna/Eg1Yy93SFXvahqoX+kt0n+6xlXKDXYowA==", - "deprecated": "this library is no longer supported", + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" + "isexe": "^2.0.0" }, "bin": { - "har-validator": "bin/har-validator" + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.10" + "node": ">= 8" } }, - "node_modules/har-validator/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha512-AXvW8g7tO4ilk5HgOWeDmPi/ZPaCnMJ+9Cg1I3p19w6mcvAAXBuuGEXAxybC+Djj1PSZUiHUcyoYu7WneCX8gQ==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { "node": ">= 0.4" }, @@ -1763,25 +1776,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -1790,302 +1803,3383 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha512-jZ38TU/EBiGKrmyTNNZgnvCZHNowiRI4+w/I9noMlekHTZH3KyGgvJLmhSgykeAQ9j2SYPDosM0Bg3wHfzibAQ==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "dependencies": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==", - "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.32" + "node": ">=6.0.0" } }, - "node_modules/hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==", - "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.40" + "node": ">= 0.8" } }, - "node_modules/hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "engines": { - "node": "*" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/http-errors/node_modules/inherits": { + "node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "ISC" + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "node_modules/http-proxy": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-0.10.4.tgz", - "integrity": "sha512-lb5uBBW+eLzoZ/Tute8ENcbNvibErYYPzNhjZk9IZugBAl87kUSxzVLBwQ7FbU2qBuorbah6VObuXvp2DN1LbA==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "dependencies": { - "colors": "0.x.x", - "optimist": "0.6.x", - "pkginfo": "0.3.x", - "utile": "~0.2.1" - }, - "bin": { - "node-http-proxy": "bin/node-http-proxy" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">= 0.6.6" + "node": ">= 0.4" } }, - "node_modules/http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "dependencies": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 0.4" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "engines": { - "node": ">=10.19.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/i": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", - "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/es5-ext": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.9.2.tgz", + "integrity": "sha512-wP3OSxZ0L/qK76t6qxPR8gWr2o5F4SzNF9qS5F/mOfVY3Ezcg07v6hSkETDmoekXIzn8xhQbHpp+tVlOE+qOAg==", "dev": true, "engines": { "node": ">=0.4" } }, - "node_modules/iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha512-KhmFWgaQZY83Cbhi+ADInoUQ8Etn6BG5fikM9syeOjQltvR45h7cRKJ/9uvQEuD61I3Uju77yYce0/LhKVClQw==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha512-Al67oatbRSo3RV5hRqIoln6Y5yMVbJSIn4jEJNL7VCImzq/kLr7vvb6sFRJXqr8rpHc/2kJOM+y0sPKN47VdzA==", - "dev": true + "license": "MIT" }, - "node_modules/inquirer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.2.5.tgz", - "integrity": "sha512-AgCZjM1LcGSiFeh4d893OPTKYSpkK6v92qEO1kvj5SHqaaK1sLKFJKWkZpSwdBowNEletOKWyKd6JnhUs+qMsQ==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "async": "~0.2.8", - "cli-color": "~0.2.2", - "lodash": "~1.2.1", - "mute-stream": "0.0.3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", - "dev": true - }, - "node_modules/inquirer/node_modules/lodash": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.2.1.tgz", - "integrity": "sha512-EKI82Edm8glH3FUu17sQIF+Ly1cW2ROPc0qgf1L4DBUysBlQVL+/b+WtufJw0O8FtMo7Vq9KTrzUboyWSgW/tg==", - "dev": true, - "engines": [ - "node", - "rhino" - ] - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.2.2.tgz", + "integrity": "sha512-kdjfxF6jYJ5m/OEe3ZNNJzbCEcagF4lNJeuhgrBSRnlitpdxICDKzCel+Z5Wbl7K9UhBN/7k2MzXBvCvSwfzzg==", + "dev": true, + "dependencies": { + "es5-ext": "~0.9.2" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "peer": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "peer": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fileset": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.8.tgz", + "integrity": "sha512-Gg0/Iy/v4BfdGWZpbpVBPKIYcap7jMn2uT5lcIDZyMFZR35VDojrJnIAwWjCj7ZOqsGp3j+ExWKqnfGrz4q0fg==", + "dev": true, + "dependencies": { + "glob": "3.x", + "minimatch": "0.x" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha512-yjftfYnF4ThYEvKEV/kEFR15dmtyXTAh3vQnzpJUoc7Naj5y1P0Ck7Zs1+Vroa00E3KT3IYsk756S+8WA5dNLw==", + "dev": true, + "dependencies": { + "glob": "~3.2.9", + "lodash": "~2.4.1" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/findup-sync/node_modules/glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "inherits": "2", + "minimatch": "0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/findup-sync/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/findup-sync/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/findup-sync/node_modules/minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "peer": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "peer": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gaze": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.3.4.tgz", + "integrity": "sha512-vIK81ZT20o9X0LOHYDGo5Phq6FaQRjDjBN2KkbYSxlaXnN1WDH0Op0tPThqNVA8ZnmN/TYNZfGHAVkBTrdeBIQ==", + "dev": true, + "dependencies": { + "fileset": "~0.1.5", + "minimatch": "~0.2.9" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha512-hIGEBfnHcZpWkXPsAVeVmpYDvfy/matVl03yOY91FPmnpCC12Lm5izNxCjO3lHAeO6uaTwMxu7g450Siknlhig==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha512-ANhy2V2+tFpRajE3wN4DhkNQ08KDr0Ir1qL12/cUe5+a7STEK8jkW4onUYuY8/06qAFuT5je7mjAqzx0eKI2tQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "peer": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "peer": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/globule/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha512-iiTUZ5vZ+2ZV+h71XAgwCSu6+NAizhFU3Yw8aC/hH5SQ3SnISqEqAek40imAFGtDcwJKNhXvSY+hzIolnLwcdQ==", + "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha512-1iq3ylLjzXqz/KSq1OAE2qhnpcbkF2WyhsQcavZt+YmgvHu0EbPMEhGhy2gr0FP67isHpRdfwjB5WVeXXcJemQ==", + "dev": true, + "dependencies": { + "async": "~0.1.22", + "coffee-script": "~1.3.3", + "colors": "~0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.1.2", + "getobject": "~0.1.0", + "glob": "~3.1.21", + "grunt-legacy-log": "~0.1.0", + "grunt-legacy-util": "~0.2.0", + "hooker": "~0.2.3", + "iconv-lite": "~0.2.11", + "js-yaml": "~2.0.5", + "lodash": "~0.9.2", + "minimatch": "~0.2.12", + "nopt": "~1.0.10", + "rimraf": "~2.2.8", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "peer": true, + "dependencies": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "peer": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt-connect-proxy": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/grunt-connect-proxy/-/grunt-connect-proxy-0.1.5.tgz", + "integrity": "sha512-QJSFQ1bbXqyk0xihkr3/nhT7E81SH1BVsx92W+EovXwH9sP5lsOiIlAL1x/aFZ5osRpsPHdxpLjrJbvI5I6XTQ==", + "dev": true, + "dependencies": { + "http-proxy": "~0.10.2" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.1" + } + }, + "node_modules/grunt-contrib-clean": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.4.1.tgz", + "integrity": "sha512-PajoaZgwbJ1QAbY5CemvuCIXUJU8teoA3ABTd3eZA+j0UYTUBW+hlV5m3ZlZLgRxKm3ZrchAEVR85r5uBeKF9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.0" + } + }, + "node_modules/grunt-contrib-connect": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-5.0.1.tgz", + "integrity": "sha512-Hfq/0QJl3ddD2N/a/1cDJHkKEOGk6m7W6uxNe0AmYwtf6v0F/4+8q9rvPJ1tl+mrI90lU/89I9T/h48qqeMfQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.5", + "connect": "^3.7.0", + "connect-livereload": "^0.6.1", + "http2-wrapper": "^2.2.1", + "morgan": "^1.10.0", + "open": "^8.0.0", + "portscanner": "^2.2.0", + "serve-index": "^1.9.1", + "serve-static": "^1.15.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/grunt-contrib-connect/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/grunt-contrib-jasmine": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jasmine/-/grunt-contrib-jasmine-4.0.0.tgz", + "integrity": "sha512-Vf1w7kNJiuu9E+A0atU/GgMutbosli7oA+L1XhXBLr//rksdiVn2NLAz0UhE8RnsqxivALbDFh+oHh97qV4n2w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "grunt-eslint": "^24.0.1", + "lodash": "^4.17.21", + "pacote": "^15.0.8", + "puppeteer": "^19.5.2", + "rimraf": "^4.0.4", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "peer": true + }, + "node_modules/grunt-contrib-jasmine/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "peer": true + }, + "node_modules/grunt-contrib-jasmine/node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, + "peer": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/getobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/grunt": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", + "dev": true, + "peer": true, + "dependencies": { + "dateformat": "~4.6.2", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~5.0.0", + "glob": "~7.1.6", + "grunt-cli": "~1.4.3", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", + "iconv-lite": "~0.6.3", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "nopt": "~3.0.6" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/grunt-eslint": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.3.0.tgz", + "integrity": "sha512-dUPiRgX8fhmh4uwTAn9xrzg7HV5j5DhGmZZGJdHfjy/AN9G4jD+5IjfbcAJ209JcIG8m4B7xz3crIhuDSm3siQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "eslint": "^8.44.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "grunt": ">=1" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", + "dev": true, + "peer": true, + "dependencies": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/grunt-legacy-util": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", + "dev": true, + "peer": true, + "dependencies": { + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "peer": true + }, + "node_modules/grunt-contrib-jasmine/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/grunt-contrib-jasmine/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/grunt-contrib-jasmine/node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-contrib-jasmine/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/grunt-contrib-jshint": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", + "integrity": "sha512-Hq9ExFaE41jCoAXqwdIi2b/QGI3K/1z+52aIP0m1zTaXv6DgodDhnR7ijqGTI3mm9UdJi/qfb08/UmEOEKsuLw==", + "dev": true, + "dependencies": { + "jshint": "~2.1.10" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.0" + } + }, + "node_modules/grunt-contrib-uglify": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz", + "integrity": "sha512-KXKM2UNLsCiUI6/DYfAIPm3i26UJJN6Cf6KD8fFa2TKllj7yLPC853IxtWBJ/3jX66QtXHGtdCORuuA6sAFvvA==", + "dev": true, + "dependencies": { + "grunt-lib-contrib": "~0.6.1", + "uglify-js": "~2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.0" + } + }, + "node_modules/grunt-contrib-watch": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.2.0.tgz", + "integrity": "sha512-NPhb9WoMEdqtFudcserCHlQoGEXoZKvklOKdC0WyC2tnkZpNVWdSRdNCM04OhvH08fgadBNoNSto4zfy/7ZEfA==", + "dev": true, + "dependencies": { + "gaze": "~0.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.0" + } + }, + "node_modules/grunt-jasmine-node": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/grunt-jasmine-node/-/grunt-jasmine-node-0.1.0.tgz", + "integrity": "sha512-/IE/IVbkqsihLmLtGkfu35mQuTbio1ZAW4aUNkCjQ+Oyn1JJaJEjnbSDJNYaUOIuZtxob66gydi1qXUnI5wxaQ==", + "dev": true, + "dependencies": { + "jasmine-node": "*" + }, + "bin": { + "grunt-jasmine-node": "bin/grunt-jasmine-node" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha512-qYs/uM0ImdzwIXLhS4O5WLV5soAM+PEqqHI/hzSxlo450ERSccEhnXqoeDA9ZozOdaWuYnzTOTwRcVRogleMxg==", + "dev": true, + "dependencies": { + "colors": "~0.6.2", + "grunt-legacy-log-utils": "~0.1.1", + "hooker": "~0.2.3", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha512-D0vbUX00TFYCKNZtcZzemMpwT8TR/FdRs1pmfiBw6qnUw80PfsjV+lhIozY/3eJ3PSG2zj89wd2mH/7f4tNAlw==", + "dev": true, + "dependencies": { + "colors": "~0.6.2", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log-utils/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha512-hbD5MibthuDAu4yA5wxes5bzFgqd3PpBJuClbRxaNddxfdsz+qf+1kHwrGQFrmchmDHb9iNU+6EHDn8uj0xDJg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-legacy-log/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha512-hbD5MibthuDAu4yA5wxes5bzFgqd3PpBJuClbRxaNddxfdsz+qf+1kHwrGQFrmchmDHb9iNU+6EHDn8uj0xDJg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha512-cXPbfF8aM+pvveQeN1K872D5fRm30xfJWZiS63Y8W8oyIPLClCsmI8bW96Txqzac9cyL4lRqEBhbhJ3n5EzUUQ==", + "dev": true, + "dependencies": { + "async": "~0.1.22", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~0.9.2", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-lib-contrib": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz", + "integrity": "sha512-HdCtJuMmmkSAVrAfsG7lZWE0YabrsPWwzcCCUgWQOAaQsQSUNhw/IwD2YjCSLh5y9NXSPzHTYFLL4ro7QbAJMA==", + "dev": true, + "dependencies": { + "zlib-browserify": "0.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-open": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/grunt-open/-/grunt-open-0.2.4.tgz", + "integrity": "sha512-3VxPWr6zZBVvEPtCMkjVtP30saT/VDIeUE8nWs8Y2tNgUPROKwWoWFwo1AUTNRM5oufJ2PL1eMVaL7Byv4NhQg==", + "dev": true, + "dependencies": { + "opn": "^5.4.0" + }, + "bin": { + "grunt-open": "bin/grunt-open" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/grunt-plato": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/grunt-plato/-/grunt-plato-0.2.1.tgz", + "integrity": "sha512-8nf/LDxG6XSerqzg7MCWW6I06IYT8XuvbYw7Lx09UFLSKCEwoCrxreoSvkVbWGS25kI2Ku8TFBVi2jQU3Ahu0w==", + "dev": true, + "dependencies": { + "plato": "~0.6.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-preprocess": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/grunt-preprocess/-/grunt-preprocess-2.3.0.tgz", + "integrity": "sha512-Ld+NiXQVlkt2zoqOcUA7xZ+d29jhPDqqyCyiSh1Vm5e98wQrGw7CEvZ/FZ7fOVqpfY5JXdJOH5MiQnuYEDdbpg==", + "dev": true, + "dependencies": { + "grunt": "~0.4.0a", + "preprocess": "~1.3.0" + }, + "bin": { + "grunt-preprocess": "bin/grunt-preprocess" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/grunt-prompt": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/grunt-prompt/-/grunt-prompt-0.1.2.tgz", + "integrity": "sha512-J06q7BPxbAtxpgk45fQ1PiqLcoXrJhl1fvPS9FVIZXuAOLgFEa6TGCmIIEW3LLg2uyUfgefYMA6QUjZL7lhTUQ==", + "dev": true, + "dependencies": { + "inquirer": "~0.2.1" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.1" + } + }, + "node_modules/grunt-template-jasmine-istanbul": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/grunt-template-jasmine-istanbul/-/grunt-template-jasmine-istanbul-0.2.6.tgz", + "integrity": "sha512-9UkCvPhb1gpIfM+Nsk9F6xDfXsF6skYGp+I2mk1XSsq7pHpDQrrZBE/9QMW2guuuH4l2qiN93iuUe3n40n1nRw==", + "dev": true, + "dependencies": { + "istanbul": ">=0.1.30" + }, + "peerDependencies": { + "grunt": ">=0.4.0", + "grunt-contrib-jasmine": ">=0.3.1" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/handlebars/node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "peer": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/http-proxy": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-0.10.4.tgz", + "integrity": "sha512-lb5uBBW+eLzoZ/Tute8ENcbNvibErYYPzNhjZk9IZugBAl87kUSxzVLBwQ7FbU2qBuorbah6VObuXvp2DN1LbA==", + "dev": true, + "dependencies": { + "colors": "0.x.x", + "optimist": "0.6.x", + "pkginfo": "0.3.x", + "utile": "~0.2.1" + }, + "bin": { + "node-http-proxy": "bin/node-http-proxy" + }, + "engines": { + "node": ">= 0.6.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/i": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha512-KhmFWgaQZY83Cbhi+ADInoUQ8Etn6BG5fikM9syeOjQltvR45h7cRKJ/9uvQEuD61I3Uju77yYce0/LhKVClQw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha512-Al67oatbRSo3RV5hRqIoln6Y5yMVbJSIn4jEJNL7VCImzq/kLr7vvb6sFRJXqr8rpHc/2kJOM+y0sPKN47VdzA==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "peer": true + }, + "node_modules/inquirer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.2.5.tgz", + "integrity": "sha512-AgCZjM1LcGSiFeh4d893OPTKYSpkK6v92qEO1kvj5SHqaaK1sLKFJKWkZpSwdBowNEletOKWyKd6JnhUs+qMsQ==", + "dev": true, + "dependencies": { + "async": "~0.2.8", + "cli-color": "~0.2.2", + "lodash": "~1.2.1", + "mute-stream": "0.0.3" + } + }, + "node_modules/inquirer/node_modules/async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "node_modules/inquirer/node_modules/lodash": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.2.1.tgz", + "integrity": "sha512-EKI82Edm8glH3FUu17sQIF+Ly1cW2ROPc0qgf1L4DBUysBlQVL+/b+WtufJw0O8FtMo7Vq9KTrzUboyWSgW/tg==", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", + "dev": true, + "peer": true + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "peer": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "peer": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "peer": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/istanbul/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-growl-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", + "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", + "dev": true, + "dependencies": { + "growl": "^1.10.5" + } + }, + "node_modules/jasmine-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", + "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", + "dev": true, + "dependencies": { + "coffeescript": "~1.12.7", + "gaze": "~1.1.2", + "jasmine-growl-reporter": "~2.0.0", + "jasmine-reporters": "~1.0.0", + "mkdirp": "~0.3.5", + "requirejs": "~2.3.6", + "underscore": "~1.9.1", + "walkdir": "~0.0.12" + }, + "bin": { + "jasmine-node": "bin/jasmine-node" + } + }, + "node_modules/jasmine-node/node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jasmine-node/node_modules/mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true + }, + "node_modules/jasmine-reporters": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", + "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", + "dev": true, + "dependencies": { + "mkdirp": "~0.3.5" + } + }, + "node_modules/jasmine-reporters/node_modules/mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha512-VEKcIksckDBUhg2JS874xVouiPkywVUh4yyUmLCDe1Zg3bCd6M+F1eGPenPeHLc2XC8pp9G8bsuofK0NeEqRkA==", + "dev": true, + "dependencies": { + "argparse": "~ 0.1.11", + "esprima": "~ 1.0.2" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jshint": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", + "integrity": "sha512-dudyjI4JJQYLUIKWq4SESC5xTC4Qw/VeL+VzEnkG7ZwKaxap+jKkySGQgjHj1ruSlTN4vXr0pAUIA8EFPS/+zw==", + "dev": true, + "dependencies": { + "cli": "0.4.x", + "console-browserify": "0.1.x", + "minimatch": "0.x.x", + "shelljs": "0.1.x", + "underscore": "1.4.x" + }, + "bin": { + "jshint": "bin/jshint" + } + }, + "node_modules/jshint/node_modules/underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==", + "dev": true + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, - "engines": { - "node": ">= 0.4" + "peer": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/liftup/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { "node": ">= 0.4" @@ -2094,318 +5188,265 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha512-LVbt/rjK62gSbhehDVKL0vlaime4Y1IBixL+bKeNfoY4L2zab/jGrxU6Ka05tMA/zBxkTk5t3ivtphdyYupczw==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-my-ip-valid": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", - "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", - "dev": true + "engines": [ + "node", + "rhino" + ] }, - "node_modules/is-my-json-valid": { - "version": "2.20.6", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", - "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", "dev": true, - "dependencies": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^5.0.0", - "xtend": "^4.0.0" - } + "license": "MIT" }, - "node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lodash.isfinite": "^3.3.2" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.7" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "node_modules/make-fetch-happen/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", - "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, "bin": { - "istanbul": "lib/cli.js" + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { + "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "2 || 3", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" - } - }, - "node_modules/istanbul/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/istanbul/node_modules/minimatch": { + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -2417,358 +5458,349 @@ "node": "*" } }, - "node_modules/istanbul/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { - "abbrev": "1" + "minipass": "^3.1.1" }, - "bin": { - "nopt": "bin/nopt.js" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/istanbul/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "unique-slug": "^3.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jasmine-growl-reporter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-2.0.0.tgz", - "integrity": "sha512-RYwVfPaGgxQQSHDOt6jQ99/KAkFQ/Fiwg/AzBS+uO9A4UhGhxb7hwXaUUSU/Zs0MxBoFNqmIRC+7P4/+5O3lXg==", + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "dependencies": { - "growl": "^1.10.5" + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jasmine-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-3.0.0.tgz", - "integrity": "sha512-vUa5Q7bQYwHHqi6FlJYndiKqZp+d+c3MKe0QUMwwrC4JRmoRV3zkg0buxB/uQ6qLh0NO34TNstpAnvaZ6xGlAA==", + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, + "peer": true, "dependencies": { - "coffeescript": "~1.12.7", - "gaze": "~1.1.2", - "jasmine-growl-reporter": "~2.0.0", - "jasmine-reporters": "~1.0.0", - "mkdirp": "~0.3.5", - "requirejs": "~2.3.6", - "underscore": "~1.9.1", - "walkdir": "~0.0.12" + "kind-of": "^6.0.2" }, - "bin": { - "jasmine-node": "bin/jasmine-node" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jasmine-node/node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-0.1.2.tgz", + "integrity": "sha512-ywJ1PxWE+ok9Th8SDzslcmKMNpN8fnP9DSIknA4XTfTijzwGnPE+T1zdDvtaAd2OycqXvsqQOQe3Nt2QEKG+Zw==", "dev": true, "dependencies": { - "globule": "^1.0.0" + "minimatch": "~0.2.9" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 0.8.0" } }, - "node_modules/jasmine-node/node_modules/mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true - }, - "node_modules/jasmine-reporters": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", - "integrity": "sha512-KrMRwzykkIKfkXr5UhCs/4BRJpws4VmNOeHIVKX8EBa9lYysVik3phkKrJCnCUE2lUCZDIA4rAmFrDgw546IzA==", + "node_modules/memoizee": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.2.6.tgz", + "integrity": "sha512-0VZI0btwyGk6FSDnJGuJtso4M/eSxhVb5ID5AZNWMFFgT2LexCV18hHI764V4ELKlyfnQ5KMQ+q5H3uvFN3MLw==", "dev": true, "dependencies": { - "mkdirp": "~0.3.5" + "es5-ext": "~0.9.2", + "event-emitter": "~0.2.2", + "next-tick": "0.1.x" + }, + "engines": { + "node": ">=0.4" } }, - "node_modules/jasmine-reporters/node_modules/mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true - }, - "node_modules/js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "integrity": "sha512-VEKcIksckDBUhg2JS874xVouiPkywVUh4yyUmLCDe1Zg3bCd6M+F1eGPenPeHLc2XC8pp9G8bsuofK0NeEqRkA==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "peer": true, "dependencies": { - "argparse": "~ 0.1.11", - "esprima": "~ 1.0.2" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.6.0" + "node": ">=8.6" } }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "mime": "cli.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "integrity": "sha512-dudyjI4JJQYLUIKWq4SESC5xTC4Qw/VeL+VzEnkG7ZwKaxap+jKkySGQgjHj1ruSlTN4vXr0pAUIA8EFPS/+zw==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "cli": "0.4.x", - "console-browserify": "0.1.x", - "minimatch": "0.x.x", - "shelljs": "0.1.x", - "underscore": "1.4.x" + "mime-db": "1.52.0" }, - "bin": { - "jshint": "bin/jshint" + "engines": { + "node": ">= 0.6" } }, - "node_modules/jshint/node_modules/underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "node_modules/minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, - "node_modules/jsonfile/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "optional": true + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">= 8" } }, - "node_modules/jsprim/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha512-IG6nm0+QtAMdXt9KvbgbGdvY50RSrw+U4sGZg+KlrSKPJEwVE5JVoI3d7RWfSMdBQneRheeAOj3lIjX5VL/9RQ==", - "dev": true - }, - "node_modules/keypress": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", - "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", - "dev": true - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, "optionalDependencies": { - "graceful-fs": "^4.1.9" + "encoding": "^0.1.13" } }, - "node_modules/klaw/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "optional": true + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", - "integrity": "sha512-LVbt/rjK62gSbhehDVKL0vlaime4Y1IBixL+bKeNfoY4L2zab/jGrxU6Ka05tMA/zBxkTk5t3ivtphdyYupczw==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "engines": [ - "node", - "rhino" - ] + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==", - "dev": true + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } }, - "node_modules/matchdep": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-0.1.2.tgz", - "integrity": "sha512-ywJ1PxWE+ok9Th8SDzslcmKMNpN8fnP9DSIknA4XTfTijzwGnPE+T1zdDvtaAd2OycqXvsqQOQe3Nt2QEKG+Zw==", + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "minimatch": "~0.2.9" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/memoizee": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.2.6.tgz", - "integrity": "sha512-0VZI0btwyGk6FSDnJGuJtso4M/eSxhVb5ID5AZNWMFFgT2LexCV18hHI764V4ELKlyfnQ5KMQ+q5H3uvFN3MLw==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "dependencies": { - "es5-ext": "~0.9.2", - "event-emitter": "~0.2.2", - "next-tick": "0.1.x" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.4" + "node": ">=8" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "mime-db": "1.52.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -2781,6 +5813,12 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -2811,6 +5849,12 @@ "integrity": "sha512-yNRDZXxblEoO9SKEEmPB0ewZpizBJMcpujzPI0vIFesC8hyk5QpbIyjcby6804c7cVuddcNxLaYJDQN/g7sRUQ==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/ncp": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", @@ -2842,41 +5886,343 @@ "integrity": "sha512-I44QWeGCHJTx2D3buhnljvSjmPgJua3zdPGtlCQEvA45t9kS/CaHnlVqidTzHwq8LGXhD2SMezjk4hQgP+32Lg==", "dev": true, "engines": { - "node": ">=0.4" + "node": ">=0.4" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/node-gyp/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA==", - "deprecated": "Use uuid module instead", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "dependencies": { - "abbrev": "1" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, - "bin": { - "nopt": "bin/nopt.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==", + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/object-inspect": { @@ -2934,6 +6280,49 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "peer": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "dev": true, + "peer": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3051,13 +6440,174 @@ "node": ">= 0.8.0" } }, - "node_modules/package": { + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", + "dev": true, + "peer": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", - "integrity": "sha512-g6xZR6CO7okjie83sIRJodgGvaXqymfE5GLhN8N2TmZGShmHc/V23hO/vWbdnuy3D81As3pfovw72gGi42l9qA==", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=6" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "peer": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/parseurl": { @@ -3070,6 +6620,15 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3079,63 +6638,99 @@ "node": ">=0.10.0" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/phantomjs": { - "version": "1.9.20", - "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", - "integrity": "sha512-uja26qe+aIP4ptuCCAk0HNTJXoFIf+7l6RZ9OwCH0lbHpQtcS9VhEeirSqytsarg78wA+Zb5rKwiJK8KezrIcA==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "extract-zip": "~1.5.0", - "fs-extra": "~0.26.4", - "hasha": "^2.2.0", - "kew": "~0.7.0", - "progress": "~1.1.8", - "request": "~2.67.0", - "request-progress": "~2.0.1", - "which": "~1.2.2" - }, - "bin": { - "phantomjs": "bin/phantomjs" + "engines": { + "node": ">=8" } }, - "node_modules/phantomjs/node_modules/which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "peer": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, + "peer": true, "dependencies": { - "isexe": "^2.0.0" + "path-root-regex": "^0.1.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "dependencies": { - "pinkie": "^2.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pkginfo": { @@ -3251,71 +6846,207 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portscanner/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/posix-getopt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.0.0.tgz", + "integrity": "sha512-/t04mQdCm0Q8YjMAx9f+IT/tpBcPZjOggogCZ01pZnwA5p3OIchUfCmRKD92hwD5sdGX0mbV8JrqOgIA/By9Nw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/preprocess": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/preprocess/-/preprocess-1.3.0.tgz", + "integrity": "sha512-An00+s5P4pthERVAcmQioP7mqLJ+PRpYSaMIMJXpLrO9H4H/mVm9FAChiVB3gxjKTW8hEpnN74AYiPt2CfJCwg==", + "dev": true, + "dependencies": { + "lodash": "~0.9.1" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "dependencies": { - "lodash": "^4.17.14" + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/portscanner/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, - "license": "MIT" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "node_modules/posix-getopt": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.0.0.tgz", - "integrity": "sha512-/t04mQdCm0Q8YjMAx9f+IT/tpBcPZjOggogCZ01pZnwA5p3OIchUfCmRKD92hwD5sdGX0mbV8JrqOgIA/By9Nw==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "deprecated": "< 22.8.2 is no longer supported", "dev": true, - "engines": { - "node": ">= 0.4" + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/preprocess": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/preprocess/-/preprocess-1.3.0.tgz", - "integrity": "sha512-An00+s5P4pthERVAcmQioP7mqLJ+PRpYSaMIMJXpLrO9H4H/mVm9FAChiVB3gxjKTW8hEpnN74AYiPt2CfJCwg==", + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "lodash": "~0.9.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.6.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/quick-lru": { "version": "5.1.1", @@ -3340,18 +7071,118 @@ "node": ">= 0.6" } }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/readable-stream/node_modules/inherits": { @@ -3360,6 +7191,40 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "peer": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rechoir/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "peer": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", @@ -3378,54 +7243,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request": { - "version": "2.67.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", - "integrity": "sha512-fzMRDWVEdMktE3foqvL4CBmC+AR8WvcP8pIPx6JSqqhWuPr+BxX9tKx4XiijfyeKtqqRMNpHDWqFMw4JlRPIJg==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.6.0", - "bl": "~1.0.0", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~1.0.0-rc3", - "har-validator": "~2.0.2", - "hawk": "~3.1.0", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.7", - "oauth-sign": "~0.8.0", - "qs": "~5.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.2.0", - "tunnel-agent": "~0.4.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha512-dxdraeZVUNEn9AvLrxkgB2k6buTlym71dJk1fk4v8j3Ou3RKNm07BcgbHdj2lLgYGfqX71F+awb1MR+tWPFJzA==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "dependencies": { - "throttleit": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/request/node_modules/qs": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", - "integrity": "sha512-sh/hmLUTLEiYFhSbRvkM4zj6fMWnbqQt9wrppR2LJA/U/u4xS2eWN8LBE1xc79ExYZJBVZYSMBv/INC7wpE+fw==", - "dev": true, - "engines": ">=0.10.40" - }, "node_modules/requirejs": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", @@ -3452,6 +7278,48 @@ "dev": true, "license": "MIT" }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "peer": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", @@ -3462,6 +7330,29 @@ "rimraf": "bin.js" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3476,15 +7367,15 @@ "dev": true }, "node_modules/semver": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz", - "integrity": "sha512-edb8Hl6pnVrKQauQHTqQkRlpZB5RZ/pEe2ir3C3Ztdst0qIayag31dSLsxexLRe80NiWkCffTF5MB7XrGydhSQ==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/send": { @@ -3618,6 +7509,12 @@ "node": ">= 0.8" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -3657,6 +7554,27 @@ "dev": true, "license": "ISC" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shelljs": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz", @@ -3693,19 +7611,153 @@ "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", "dev": true }, - "node_modules/sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==", - "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { - "hoek": "2.x.x" + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, "engines": { - "node": ">=0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -3719,44 +7771,63 @@ "node": ">=0.8.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "minipass": "^7.0.3" }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/sshpk/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/statuses": { @@ -3782,27 +7853,98 @@ } }, "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "node_modules/stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { @@ -3817,25 +7959,135 @@ "node": ">=0.8.0" } }, - "node_modules/temporary": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", - "integrity": "sha512-NbWqVhmH2arfC/I7upx4VWYJEhp9SSpqjZwzt4LmCuT/7luiAUSt2L3/h9y/3crPnuIdMxg8GsxL9LvEHckdtw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { - "package": ">= 1.0.0 < 1.2.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.6.0" + "node": ">=10" } }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, "node_modules/toidentifier": { @@ -3848,29 +8100,108 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "integrity": "sha512-Knz9Yr0hlBoWQgUKzOIvRg5adinizAf49i2gHRhj6cLjlM304zRw7uyiY22ADniDxnPHXfIeyQD0EAkgpIz0ow==", - "deprecated": "ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130", + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha512-e0IoVDWx8SDHc/hwFTqJDQ7CCDTEeGhmcT9jkWJjoGQSpgBz20nAMr80E3Tpk7PatJ1b37DQDgJR3CNSzcMOZQ==", + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/type-check": { @@ -3885,13 +8216,16 @@ "node": ">= 0.8.0" } }, - "node_modules/typedarray": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.7.tgz", - "integrity": "sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/uglify-js": { @@ -3936,6 +8270,26 @@ "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", "dev": true }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/underscore": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", @@ -3951,6 +8305,37 @@ "node": "*" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "optional": true + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -3961,6 +8346,15 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4000,34 +8394,37 @@ "node": ">= 0.4.0" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, - "engines": [ - "node >=0.6.0" - ], + "peer": true, "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/verror/node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">=0.8" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/walkdir": { "version": "0.0.12", @@ -4038,6 +8435,22 @@ "node": ">=0.6.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", @@ -4100,6 +8513,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -4124,21 +8546,83 @@ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { - "node": ">=0.4" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yargs": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", @@ -4151,6 +8635,15 @@ "wordwrap": "0.0.2" } }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yargs/node_modules/wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -4161,12 +8654,25 @@ } }, "node_modules/yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha512-TXNR2Feu/p/8k5YRy4z45wCUhoncIrZywmRd+xW0IvB3lWTAM7F6wVbeJvRjO0dplQ8oqmJEj/TpJuULBV/hbw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { - "fd-slicer": "~1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zlib-browserify": { diff --git a/package.json b/package.json index b00165f..e996cde 100644 --- a/package.json +++ b/package.json @@ -13,20 +13,20 @@ "node": ">=18.0.0" }, "devDependencies": { - "matchdep": "~0.1.2", - "grunt-contrib-jshint": "~0.6.0", + "grunt-connect-proxy": "0.1.5", "grunt-contrib-clean": "~0.4.0", - "grunt-contrib-watch": "~0.2.0", - "grunt-contrib-uglify": "~0.2.2", - "grunt-preprocess": "~2.3.0", - "grunt-contrib-jasmine": "~0.5.1", "grunt-contrib-connect": "~5.0.1", - "grunt-connect-proxy": "0.1.5", + "grunt-contrib-jasmine": "^4.0.0", + "grunt-contrib-jshint": "~0.6.0", + "grunt-contrib-uglify": "~0.2.2", + "grunt-contrib-watch": "~0.2.0", "grunt-jasmine-node": "~0.1.0", - "grunt-template-jasmine-istanbul": "~0.2.4", - "grunt-prompt": "~0.1.1", "grunt-open": "~0.2.1", - "grunt-plato": "~0.2.1" + "grunt-plato": "~0.2.1", + "grunt-preprocess": "~2.3.0", + "grunt-prompt": "~0.1.1", + "grunt-template-jasmine-istanbul": "~0.2.4", + "matchdep": "~0.1.2" }, "scripts": { "test": "grunt ci" diff --git a/src/data-api/v7/endpoints.js b/src/data-api/v7/endpoints.js new file mode 100644 index 0000000..dc2f676 --- /dev/null +++ b/src/data-api/v7/endpoints.js @@ -0,0 +1,5 @@ +DataAPI.on('initialize', function() { + this.generateEndpointMethods( + // @include ./endpoints.json + ); +}); diff --git a/src/data-api/v7/endpoints.json b/src/data-api/v7/endpoints.json new file mode 100644 index 0000000..08a6afd --- /dev/null +++ b/src/data-api/v7/endpoints.json @@ -0,0 +1,1426 @@ +[ + { + "id": "openapi", + "route": "/", + "verb": "GET", + "resources": null + }, + { + "id": "version", + "route": "/version", + "verb": "GET", + "resources": null + }, + { + "id": "list_endpoints", + "route": "/endpoints", + "verb": "GET", + "resources": null + }, + { + "id": "authorize", + "route": "/authorization", + "verb": "GET", + "resources": null + }, + { + "id": "get_token", + "route": "/token", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_authentication", + "route": "/authentication", + "verb": "DELETE", + "resources": null + }, + { + "id": "revoke_token", + "route": "/token", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_user", + "route": "/users/:user_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_user", + "route": "/users/:user_id", + "verb": "PUT", + "resources": [ + "user" + ] + }, + { + "id": "get_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_entries", + "route": "/publish/entries", + "verb": "GET", + "resources": null + }, + { + "id": "get_stats_provider", + "route": "/sites/:site_id/stats/provider", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories", + "route": "/sites/:site_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_categories_for_entry", + "route": "/sites/:site_id/entries/:entry_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories", + "route": "/sites/:site_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories", + "route": "/sites/:site_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories", + "route": "/sites/:site_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category", + "route": "/sites/:site_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category", + "route": "/sites/:site_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories", + "route": "/sites/:site_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_folders", + "route": "/sites/:site_id/folders", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_folders", + "route": "/sites/:site_id/folders/:folder_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_folders", + "route": "/sites/:site_id/folders/:folder_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_folders", + "route": "/sites/:site_id/folders/:folder_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_folder", + "route": "/sites/:site_id/folders", + "verb": "POST", + "resources": [ + "folder" + ] + }, + { + "id": "get_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "PUT", + "resources": [ + "folder" + ] + }, + { + "id": "delete_folder", + "route": "/sites/:site_id/folders/:folder_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_folders", + "route": "/sites/:site_id/folders/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_assets", + "route": "/sites/:site_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_entry", + "route": "/sites/:site_id/entries/:entry_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_page", + "route": "/sites/:site_id/pages/:page_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "list_assets_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/assets", + "verb": "GET", + "resources": null + }, + { + "id": "get_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "PUT", + "resources": [ + "asset" + ] + }, + { + "id": "delete_asset", + "route": "/sites/:site_id/assets/:asset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "get_thumbnail", + "route": "/sites/:site_id/assets/:asset_id/thumbnail", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_category", + "route": "/sites/:site_id/categories/:category_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_asset", + "route": "/sites/:site_id/assets/:asset_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "import_entries", + "route": "/sites/:site_id/entries/import", + "verb": "POST", + "resources": null + }, + { + "id": "export_entries", + "route": "/sites/:site_id/entries/export", + "verb": "GET", + "resources": null + }, + { + "id": "preview_entry_by_id", + "route": "/sites/:site_id/entries/:entry_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_entry", + "route": "/sites/:site_id/entries/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_pages", + "route": "/sites/:site_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_folder", + "route": "/sites/:site_id/folders/:folder_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_asset", + "route": "/sites/:site_id/assets/:asset_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "list_pages_for_site_and_tag", + "route": "/sites/:site_id/tags/:tag_id/pages", + "verb": "GET", + "resources": null + }, + { + "id": "get_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "GET", + "resources": null + }, + { + "id": "delete_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_page_by_id", + "route": "/sites/:site_id/pages/:page_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_page", + "route": "/sites/:site_id/pages/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_sites", + "route": "/sites", + "verb": "GET", + "resources": null + }, + { + "id": "get_blog", + "route": "/sites/:site_id", + "verb": "GET", + "resources": null + }, + { + "id": "list_blogs_for_user", + "route": "/users/:user_id/sites", + "verb": "GET", + "resources": null + }, + { + "id": "list_sites_by_parent", + "route": "/sites/:site_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "insert_new_blog", + "route": "/sites/:site_id", + "verb": "POST", + "resources": [ + "blog" + ] + }, + { + "id": "insert_new_website", + "route": "/sites", + "verb": "POST", + "resources": [ + "website" + ] + }, + { + "id": "update_site", + "route": "/sites/:site_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_site", + "route": "/sites/:site_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_roles", + "route": "/roles", + "verb": "GET", + "resources": null + }, + { + "id": "create_role", + "route": "/roles", + "verb": "POST", + "resources": [ + "role" + ] + }, + { + "id": "get_role", + "route": "/roles/:role_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_role", + "route": "/roles/:role_id", + "verb": "PUT", + "resources": [ + "role" + ] + }, + { + "id": "delete_role", + "route": "/roles/:role_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions", + "route": "/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_user", + "route": "/users/:user_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_site", + "route": "/sites/:site_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "list_permissions_for_role", + "route": "/roles/:role_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_site", + "route": "/sites/:site_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "grant_permission_to_user", + "route": "/users/:user_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_site", + "route": "/sites/:site_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_user", + "route": "/users/:user_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_logs", + "route": "/sites/:site_id/logs", + "verb": "GET", + "resources": null + }, + { + "id": "get_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_log", + "route": "/sites/:site_id/logs", + "verb": "POST", + "resources": [ + "log" + ] + }, + { + "id": "update_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "PUT", + "resources": [ + "log" + ] + }, + { + "id": "delete_log", + "route": "/sites/:site_id/logs/:log_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "reset_logs", + "route": "/sites/:site_id/logs", + "verb": "DELETE", + "resources": null + }, + { + "id": "export_logs", + "route": "/sites/:site_id/logs/export", + "verb": "GET", + "resources": null + }, + { + "id": "list_tags_for_site", + "route": "/sites/:site_id/tags", + "verb": "GET", + "resources": null + }, + { + "id": "get_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "GET", + "resources": null + }, + { + "id": "rename_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "PUT", + "resources": null + }, + { + "id": "delete_tag_for_site", + "route": "/sites/:site_id/tags/:tag_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_themes", + "route": "/themes", + "verb": "GET", + "resources": null + }, + { + "id": "list_themes_for_site", + "route": "/sites/:site_id/themes", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme", + "route": "/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_theme_for_site", + "route": "/sites/:site_id/themes/:theme_id", + "verb": "GET", + "resources": null + }, + { + "id": "apply_theme_to_site", + "route": "/sites/:site_id/themes/:theme_id/apply", + "verb": "POST", + "resources": null + }, + { + "id": "uninstall_theme", + "route": "/themes/:theme_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "create_template", + "route": "/sites/:site_id/templates", + "verb": "POST", + "resources": [ + "template" + ] + }, + { + "id": "refresh_templates_for_site", + "route": "/sites/:site_id/refresh_templates", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template_by_id", + "route": "/sites/:site_id/templates/:template_id/preview", + "verb": "POST", + "resources": null + }, + { + "id": "preview_template", + "route": "/sites/:site_id/templates/preview", + "verb": "POST", + "resources": null + }, + { + "id": "list_widgetsets", + "route": "/sites/:site_id/widgetsets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widgetset", + "route": "/sites/:site_id/widgetsets", + "verb": "POST", + "resources": [ + "widgetset" + ] + }, + { + "id": "update_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "PUT", + "resources": [ + "widgetset" + ] + }, + { + "id": "delete_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_widgets", + "route": "/sites/:site_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "list_widgets_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets", + "verb": "GET", + "resources": null + }, + { + "id": "get_widgets", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "get_widget_for_widgetset", + "route": "/sites/:site_id/widgetsets/:widgetset_id/widgets/:widget_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_widget", + "route": "/sites/:site_id/widgets", + "verb": "POST", + "resources": [ + "widget" + ] + }, + { + "id": "update_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "PUT", + "resources": [ + "widget" + ] + }, + { + "id": "delete_widget", + "route": "/sites/:site_id/widgets/:widget_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "refresh_widget", + "route": "/sites/:site_id/widgets/:widget_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_widget", + "route": "/sites/:site_id/widgets/:widget_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_users", + "route": "/users", + "verb": "GET", + "resources": null + }, + { + "id": "create_user", + "route": "/users", + "verb": "POST", + "resources": [ + "user" + ] + }, + { + "id": "delete_user", + "route": "/users/:user_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "unlock_user", + "route": "/users/:user_id/unlock", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password_for_user", + "route": "/users/:user_id/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "recover_password", + "route": "/recover_password", + "verb": "POST", + "resources": null + }, + { + "id": "list_plugins", + "route": "/plugins", + "verb": "GET", + "resources": null + }, + { + "id": "get_plugin", + "route": "/plugins/:plugin_id", + "verb": "GET", + "resources": null + }, + { + "id": "enable_plugin", + "route": "/plugins/:plugin_id/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_plugin", + "route": "/plugins/:plugin_id/disable", + "verb": "POST", + "resources": null + }, + { + "id": "enable_all_plugins", + "route": "/plugins/enable", + "verb": "POST", + "resources": null + }, + { + "id": "disable_all_plugins", + "route": "/plugins/disable", + "verb": "POST", + "resources": null + }, + { + "id": "backup_site", + "route": "/sites/:site_id/backup", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups", + "route": "/groups", + "verb": "GET", + "resources": null + }, + { + "id": "list_groups_for_user", + "route": "/users/:user_id/groups", + "verb": "GET", + "resources": null + }, + { + "id": "get_group", + "route": "/groups/:group_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_group", + "route": "/groups", + "verb": "POST", + "resources": [ + "group" + ] + }, + { + "id": "update_group", + "route": "/groups/:group_id", + "verb": "PUT", + "resources": [ + "group" + ] + }, + { + "id": "delete_group", + "route": "/groups/:group_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_permissions_for_group", + "route": "/groups/:group_id/permissions", + "verb": "GET", + "resources": null + }, + { + "id": "grant_permission_to_group", + "route": "/groups/:group_id/permissions/grant", + "verb": "POST", + "resources": null + }, + { + "id": "revoke_permission_from_group", + "route": "/groups/:group_id/permissions/revoke", + "verb": "POST", + "resources": null + }, + { + "id": "list_members_for_group", + "route": "/groups/:group_id/members", + "verb": "GET", + "resources": null + }, + { + "id": "get_member_for_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "GET", + "resources": null + }, + { + "id": "add_member_to_group", + "route": "/groups/:group_id/members", + "verb": "POST", + "resources": null + }, + { + "id": "remove_member_from_group", + "route": "/groups/:group_id/members/:member_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "authenticate", + "route": "/authentication", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset", + "route": "/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "upload_asset_for_site", + "route": "/sites/:site_id/assets/upload", + "verb": "POST", + "resources": null + }, + { + "id": "create_entry", + "route": "/sites/:site_id/entries", + "verb": "POST", + "resources": [ + "entry" + ] + }, + { + "id": "update_entry", + "route": "/sites/:site_id/entries/:entry_id", + "verb": "PUT", + "resources": [ + "entry" + ] + }, + { + "id": "create_page", + "route": "/sites/:site_id/pages", + "verb": "POST", + "resources": [ + "page" + ] + }, + { + "id": "update_page", + "route": "/sites/:site_id/pages/:page_id", + "verb": "PUT", + "resources": [ + "page" + ] + }, + { + "id": "create_category_set", + "route": "/sites/:site_id/categorySets", + "verb": "POST", + "resources": [ + "category_set" + ] + }, + { + "id": "get_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "PUT", + "resources": [ + "category_set" + ] + }, + { + "id": "delete_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "GET", + "resources": null + }, + { + "id": "list_parent_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/parents", + "verb": "GET", + "resources": null + }, + { + "id": "list_sibling_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/siblings", + "verb": "GET", + "resources": null + }, + { + "id": "list_child_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id/children", + "verb": "GET", + "resources": null + }, + { + "id": "create_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories", + "verb": "POST", + "resources": [ + "category" + ] + }, + { + "id": "get_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "PUT", + "resources": [ + "category" + ] + }, + { + "id": "delete_category_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/:category_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_categories_for_category_set", + "route": "/sites/:site_id/categorySets/:category_set_id/categories/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "list_content_types", + "route": "/sites/:site_id/contentTypes", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_type", + "route": "/sites/:site_id/contentTypes", + "verb": "POST", + "resources": [ + "content_type" + ] + }, + { + "id": "get_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "PUT", + "resources": [ + "content_type" + ] + }, + { + "id": "delete_content_type", + "route": "/sites/:site_id/contentTypes/:content_type_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "create_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields", + "verb": "POST", + "resources": [ + "content_field" + ] + }, + { + "id": "get_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "PUT", + "resources": [ + "content_field" + ] + }, + { + "id": "delete_content_field", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/:content_field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "permutate_content_fields", + "route": "/sites/:site_id/contentTypes/:content_type_id/fields/permutate", + "verb": "POST", + "resources": null + }, + { + "id": "create_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "get_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "PUT", + "resources": [ + "content_data" + ] + }, + { + "id": "delete_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "preview_content_data_by_id", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/:content_data_id/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "preview_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data/preview", + "verb": "POST", + "resources": [ + "content_data" + ] + }, + { + "id": "publish_content_data", + "route": "/publish/contentData", + "verb": "GET", + "resources": null + }, + { + "id": "search", + "route": "/search", + "verb": "GET", + "resources": null + }, + { + "id": "list_templates", + "route": "/sites/:site_id/templates", + "verb": "GET", + "resources": null + }, + { + "id": "get_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "PUT", + "resources": [ + "template" + ] + }, + { + "id": "delete_template", + "route": "/sites/:site_id/templates/:template_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "publish_template", + "route": "/sites/:site_id/templates/:template_id/publish", + "verb": "POST", + "resources": null + }, + { + "id": "refresh_template", + "route": "/sites/:site_id/templates/:template_id/refresh", + "verb": "POST", + "resources": null + }, + { + "id": "clone_template", + "route": "/sites/:site_id/templates/:template_id/clone", + "verb": "POST", + "resources": null + }, + { + "id": "list_templatemaps", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "GET", + "resources": null + }, + { + "id": "get_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps", + "verb": "POST", + "resources": [ + "templatemap" + ] + }, + { + "id": "update_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "PUT", + "resources": [ + "templatemap" + ] + }, + { + "id": "delete_templatemap", + "route": "/sites/:site_id/templates/:template_id/templatemaps/:templatemap_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_category_sets", + "route": "/sites/:site_id/categorySets", + "verb": "GET", + "resources": null + }, + { + "id": "list_content_data", + "route": "/sites/:site_id/contentTypes/:content_type_id/data", + "verb": "GET", + "resources": null + }, + { + "id": "list_text_filters", + "route": "/textFilters", + "verb": "GET", + "resources": null + }, + { + "id": "list_entries", + "route": "/sites/:site_id/entries", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_path", + "route": "/sites/:site_id/stats/path/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_path", + "route": "/sites/:site_id/stats/path/visits", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_pageviews_for_date", + "route": "/sites/:site_id/stats/date/pageviews", + "verb": "GET", + "resources": null + }, + { + "id": "list_stats_visits_for_date", + "route": "/sites/:site_id/stats/date/visits", + "verb": "GET", + "resources": null + }, + { + "id": "export_site_theme", + "route": "/sites/:site_id/export_theme", + "verb": "POST", + "resources": null + }, + { + "id": "list_fields", + "route": "/sites/:site_id/fields", + "verb": "GET", + "resources": null + }, + { + "id": "get_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_field", + "route": "/sites/:site_id/fields", + "verb": "POST", + "resources": [ + "field" + ] + }, + { + "id": "update_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "PUT", + "resources": [ + "field" + ] + }, + { + "id": "delete_field", + "route": "/sites/:site_id/fields/:field_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "synchronize_groups", + "route": "/groups/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_import", + "route": "/users/import", + "verb": "POST", + "resources": null + }, + { + "id": "bulk_author_export", + "route": "/users/export", + "verb": "GET", + "resources": null + }, + { + "id": "synchronize_users", + "route": "/users/synchronize", + "verb": "POST", + "resources": null + }, + { + "id": "list_formatted_texts", + "route": "/sites/:site_id/formatted_texts", + "verb": "GET", + "resources": null + }, + { + "id": "get_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "GET", + "resources": null + }, + { + "id": "create_formatted_text", + "route": "/sites/:site_id/formatted_texts", + "verb": "POST", + "resources": [ + "formatted_text" + ] + }, + { + "id": "update_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "PUT", + "resources": [ + "formatted_text" + ] + }, + { + "id": "delete_formatted_text", + "route": "/sites/:site_id/formatted_texts/:formatted_text_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments", + "route": "/sites/:site_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "list_comments_for_entry", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment", + "route": "/sites/:site_id/entries/:entry_id/comments", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "create_reply_comment", + "route": "/sites/:site_id/entries/:entry_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + }, + { + "id": "get_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "GET", + "resources": null + }, + { + "id": "update_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "PUT", + "resources": [ + "comment" + ] + }, + { + "id": "delete_comment", + "route": "/sites/:site_id/comments/:comment_id", + "verb": "DELETE", + "resources": null + }, + { + "id": "list_comments_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "GET", + "resources": null + }, + { + "id": "create_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments", + "verb": "POST", + "resources": [ + { + "comment": null + } + ] + }, + { + "id": "create_reply_comment_for_page", + "route": "/sites/:site_id/pages/:page_id/comments/:comment_id/replies", + "verb": "POST", + "resources": [ + "comment" + ] + } +] diff --git a/src/data-api/v7/mt-data-api.js b/src/data-api/v7/mt-data-api.js new file mode 100644 index 0000000..55c82bb --- /dev/null +++ b/src/data-api/v7/mt-data-api.js @@ -0,0 +1,26 @@ +// @include ../common/header.js +;(function(window, factory) { + var DataAPI = factory(window); + + if ( typeof module === "object" && typeof module.exports === "object" ) { + module.exports = DataAPI; + } else { + if ( typeof define === "function" && define.amd ) { + define("mt-data-api", [], function() { + return DataAPI; + }); + } + } +}(typeof window === "undefined" ? undefined : window, function(window, undefined) { + +"use strict"; + +// @include ../common/core.js +// @include ../common/cookie.js +// @include ../common/json.js +// @include ./endpoints.js +// @include ../common/exports.js + +return DataAPI; + +})); diff --git a/src/data-api/v7/node-mt-data-api.js b/src/data-api/v7/node-mt-data-api.js new file mode 100644 index 0000000..e2ef94f --- /dev/null +++ b/src/data-api/v7/node-mt-data-api.js @@ -0,0 +1,28 @@ +// @include ../common/header.js +;(function(window, factory) { + var DataAPI = factory(window); + + if ( typeof module === "object" && typeof module.exports === "object" ) { + module.exports = DataAPI; + } else { + if ( typeof define === "function" && define.amd ) { + define("mt-data-api", [], function() { + return DataAPI; + }); + } + } +}(typeof window === "undefined" ? undefined : window, function(window, undefined) { + +"use strict"; + +// @include ../common/window.js +// @include ../common/core.js +// @include ../common/cookie.js +// @include ../common/json.js +// @include ./endpoints.js +// @include ../common/sessionstore-fs.js +// @include ../common/exports.js + +return DataAPI; + +}));