meadow 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/async/asyncify.js","meadow.min.js","node_modules/async/eachLimit.js","node_modules/async/eachSeries.js","node_modules/async/internal/asyncEachOfLimit.js","node_modules/async/internal/awaitify.js","node_modules/async/internal/breakLoop.js","node_modules/async/internal/eachOfLimit.js","node_modules/async/internal/getIterator.js","node_modules/async/internal/initialParams.js","node_modules/async/internal/isArrayLike.js","node_modules/async/internal/iterator.js","node_modules/async/internal/once.js","node_modules/async/internal/onlyOnce.js","node_modules/async/internal/setImmediate.js","node_modules/async/internal/withoutIndex.js","node_modules/async/internal/wrapAsync.js","node_modules/async/waterfall.js","node_modules/available-typed-arrays/index.js","node_modules/call-bind/callBound.js","node_modules/call-bind/index.js","node_modules/for-each/index.js","node_modules/foxhound/source/FoxHound.js","node_modules/foxhound/source/Foxhound-Dialects.js","node_modules/foxhound/source/Parameters.js","node_modules/foxhound/source/dialects/ALASQL/FoxHound-Dialect-ALASQL.js","node_modules/foxhound/source/dialects/English/FoxHound-Dialect-English.js","node_modules/foxhound/source/dialects/MeadowEndpoints/FoxHound-Dialect-MeadowEndpoints.js","node_modules/foxhound/source/dialects/MySQL/FoxHound-Dialect-MySQL.js","node_modules/function-bind/implementation.js","node_modules/function-bind/index.js","node_modules/generate-function/index.js","node_modules/generate-object-property/index.js","node_modules/get-intrinsic/index.js","node_modules/gopd/index.js","node_modules/has-symbols/index.js","node_modules/has-symbols/shams.js","node_modules/has-tostringtag/shams.js","node_modules/has/src/index.js","node_modules/inherits/inherits_browser.js","node_modules/is-arguments/index.js","node_modules/is-callable/index.js","node_modules/is-generator-function/index.js","node_modules/is-my-ip-valid/index.js","node_modules/is-my-json-valid/formats.js","node_modules/is-my-json-valid/index.js","node_modules/is-property/is-property.js","node_modules/is-typed-array/index.js","node_modules/jsonpointer/jsonpointer.js","node_modules/process/browser.js","node_modules/timers-browserify/main.js","node_modules/util/support/isBufferBrowser.js","node_modules/util/support/types.js","node_modules/util/util.js","node_modules/which-typed-array/index.js","node_modules/xtend/immutable.js","source/Meadow-Browser-Shim.js","source/Meadow-PackageFileLoader.js","source/Meadow-PackageObjectLoader.js","source/Meadow-RawQuery.js","source/Meadow-Schema.js","source/Meadow.js","source/behaviors/Meadow-Count.js","source/behaviors/Meadow-Create.js","source/behaviors/Meadow-Delete.js","source/behaviors/Meadow-Read.js","source/behaviors/Meadow-Reads.js","source/behaviors/Meadow-Undelete.js","source/behaviors/Meadow-Update.js"],"names":["f","exports","module","define","amd","window","global","self","this","Meadow","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","Object","defineProperty","value","default","func","_wrapAsync","isAsync","args","callback","pop","handlePromise","apply","_initialParams2","result","then","_interopRequireDefault","_setImmediate2","obj","__esModule","promise","invokeCallback","err","message","error","_eachOfLimit2","_withoutIndex2","_wrapAsync2","_awaitify2","coll","limit","iteratee","_eachLimit2","generator","done","canceled","awaiting","running","idx","replenish","next","iterDone","iterateeCallback","catch","handleError","_breakLoop2","_breakLoop","asyncFn","arity","Promise","resolve","reject","cbArgs","_once2","_iterator2","_onlyOnce2","_asyncEachOfLimit2","RangeError","isAsyncGenerator","isAsyncIterable","Symbol","asyncIterator","nextElem","looping","elem","key","iterator","fn","_isArrayLike2","len","createArrayIterator","_getIterator2","item","createES2015Iterator","okeys","keys","wrapper","callFn","assign","process","setImmediate","fallback","wrap","_defer","hasQueueMicrotask","queueMicrotask","hasSetImmediate","hasNextTick","nextTick","setTimeout","defer","_process","timers","index","undefined","_asyncify","_asyncify2","toStringTag","tasks","Array","isArray","taskIndex","nextTask","task","possibleNames","g","globalThis","out","GetIntrinsic","callBind","$indexOf","name","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","arguments","configurable","applyBind","isCallable","toStr","prototype","toString","hasOwnProperty","forEachArray","array","receiver","forEachString","string","charAt","forEachObject","object","k","list","thisArg","TypeError","baseParameters","createNew","pFable","pFromParameters","new","_Fable","_DefaultParameters","_Parameters","_Dialects","_UUID","getUUID","_LogLevel","_Dialect","resetParameters","Utility","extend","query","disableAutoIdentity","disableAutoDateStamp","disableAutoUserStamp","disableDeleteTracking","body","schema","IDUser","UUID","records","parameters","executed","addJoin","pTable","pFrom","pTo","pType","log","warn","queryUUID","indexOf","invalidField","tmpJoin","Type","Table","From","To","join","push","info","setDialect","pDialectName","invalidDialect","checkDialect","tmpNewFoxHoundObject","mergeParameters","setLogLevel","pLogLevel","tmpLogLevel","setScope","pScope","tmpScope","invalidScope","scope","setDistinct","pDistinct","distinct","setIDUser","pIDUser","tmpUserID","invalidIDUser","userID","setDataElements","pDataElements","tmpDataElements","dataElements","setBegin","pBeginAmount","tmpBegin","invalidBeginAmount","begin","setCap","pCapAmount","tmpCapAmount","invalidCapAmount","cap","setFilter","pFilter","tmpFilter","filter","addFilter","pColumn","pValue","pOperator","pConnector","pParameter","invalidColumn","tmpParameter","Column","Operator","Value","Connector","Parameter","replace","newFilter","setSort","pSort","tmpSort","Direction","sort","addSort","setJoin","pJoin","forEach","addRecord","pRecord","newRecord","setDisableAutoIdentity","pFlag","setDisableAutoDateStamp","setDisableAutoUserStamp","setDisableDeleteTracking","buildCreateQuery","Create","buildReadQuery","Read","buildUpdateQuery","Update","buildDeleteQuery","Delete","buildUndeleteQuery","Undelete","buildCountQuery","Count","clone","tmpFoxHound","slice","get","set","pQuery","enumerable","pResult","pParameters","getDialects","tmpDialects","ALASQL","English","MeadowEndpoints","MySQL","queryOverride","generateTableName","escapeColumn","tmpTableName","generateFieldList","pIsForCountClause","tmpSchema","idColumn","find","entry","tmpFieldList","generateWhere","trim","tmpSchemaEntry","tmpHasDeletedParameter","x","tmpWhere","tmpLastOperatorNoConnector","tmpColumnParameter","tmpDialect","tmpCreateSetList","tmpRecords","tmpCreateSet","tmpColumn","generateCreateSetList","tmpCreateSetValues","tmpCurrentColumn","buildDefaultDefinition","generateCreateSetValues","tmpOrderBy","tmpOrderClause","generateOrderBy","tmpLimit","generateLimit","tmpOptDistinct","template","tmpQueryTemplate","FieldList","TableName","Where","OrderBy","Limit","Distinct","_Params","pError","console","tmpUpdateSetters","tmpUpdate","tmpColumnDefaultParameter","generateUpdateSetters","tmpUpdateDeleteSetters","tmpHasDeletedField","tmpUpdateSql","generateUpdateDeleteSetters","tmpDeleteTrackingState","tmpUpdateUndeleteSetters","generateUpdateUndeleteSetters","tmpURL","tmpfAddFilter","pFilterCommand","pFilterParameters","tmpfTranslateOperator","tmpNewOperator","toUpperCase","tmpFilterCommand","map","encodeURIComponent","generateFlags","tmpDisableAutoDateStamp","tmpDisableDeleteTracking","tmpDisableAutoIdentity","tmpDisableAutoUserStamp","tmpFlags","fAddFlag","pFlagSet","generateIdentityColumnName","tmpIDRecord","j","getIDRecord","SQL_NOW","qualifiedIDColumn","generateSafeFieldName","SURROUNDING_QUOTES_AND_WHITESPACE_REGEX","cleanseQuoting","str","pFieldName","pFieldNames","split","cleansedFieldName","generateJoins","tmpJoins","tmpJoinClause","Join","ERROR_MESSAGE","funcType","that","target","bound","boundLength","Math","max","boundArgs","Function","concat","Empty","implementation","util","isProperty","INDENT_START","INDENT_END","RESERVED","RESERVED_MAP","isVariable","formats","s","d","Number","JSON","stringify","genfun","lines","indent","vars","spaces","pushLine","line","test","fmt","format","sym","property","toFunction","src","vals","gen","prop","valid","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","getProto","getPrototypeOf","__proto__","needsEval","TypedArray","Uint8Array","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","BigInt64Array","BigUint64Array","Boolean","DataView","Date","decodeURI","decodeURIComponent","encodeURI","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isFinite","isNaN","Map","parseFloat","parseInt","Proxy","ReferenceError","Reflect","RegExp","Set","SharedArrayBuffer","String","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","splice","$replace","$strSlice","$exec","exec","rePropName","reEscapeChar","stringToPath","first","last","match","number","quote","subString","getBaseIntrinsic","alias","intrinsicName","parts","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","desc","has","origSymbol","hasSymbolSham","getOwnPropertySymbols","symObj","getOwnPropertyNames","syms","propertyIsEnumerable","descriptor","create","ctor","superCtor","super_","constructor","writable","TempCtor","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","callee","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","_","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","document","all","strClass","GeneratorFunction","isFnRegex","generatorFunc","getGeneratorFunc","reIpv4FirstPass","reSubnetString","reForwardSlash","reZone","reBadCharacters","reBadAddress","validate4","input","n0","n1","n2","n3","validate6","withoutSubnet","hasSubnet","withoutZone","lastPartSeparator","lastIndexOf","address","substring","halves","validate","options","version","createIpValidator","reEmailWhitespace","reHostnameFirstPass","reHostnamePart","rePhoneFirstPass","rePhoneDoubleSpace","rePhoneGlobalSpace","digits","genobj","jsonpointer","xtend","types","unique","min","isMultipleOf","multipleOf","res","factor","pow","round","testLimitedRegex","maxLength","compile","cache","root","reporter","opts","fmts","verbose","greedy","allocated","gensym","formatName","field","pattern","replacer","v","reversePatterns","patterns","genloop","shift","visit","node","schemaPath","properties","type","tuple","items","msg","required","additionalItems","req","uniqueItems","maxItems","enum","compare","some","dependencies","deps","additionalProperties","additionalProp","patternProperties","$ref","sub","additionalSchemas","ptr","id","reduce","other","end","fragment","schemas","data","not","prev","allOf","sch","anyOf","oneOf","passes","maxProperties","minProperties","minItems","minLength","minimum","exclusiveMinimum","maximum","exclusiveMaximum","errors","toJSON","parse","availableTypedArrays","gOPD","typedArrays","$slice","toStrTags","typedArray","arr","proto","superProto","tag","anyTrue","getter","tryTypedArrays","gopd","hasExcape","escapeMatcher","escapeReplacer","m","untilde","compilePointer","pointer","hasNextPart","Infinity","oldValue","setter","compiled","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","arg","copy","fill","readUInt8","isArgumentsObject","isGeneratorFunction","whichTypedArray","isTypedArray","uncurryThis","BigIntSupported","SymbolSupported","ObjectToString","numberValue","valueOf","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","isArrayBuffer","working","isDataViewToString","isDataView","isPromise","isArrayBufferView","isView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isMap","isSet","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","method","getOwnPropertyDescriptors","descriptors","formatRegExp","isString","objects","inspect","isNull","isObject","deprecate","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","ret","primitive","simple","isNumber","formatPrimitive","visibleKeys","hash","val","arrayToHash","isError","formatError","isRegExp","isDate","output","base","braces","toUTCString","l","formatProperty","formatArray","cur","numLinesEst","reduceToSingleString","ar","re","objectToString","pad","debuglog","pid","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","date","regexp","isNullOrUndefined","isSymbol","isNativeError","isPrimitive","isBuffer","months","time","getHours","getMinutes","getSeconds","getDate","getMonth","inherits","origin","add","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","original","promiseResolve","promiseReject","setPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","rej","foundName","source","libNPMModuleWrapper","pMeadow","pPackage","tmpPackage","fable","Package","tmpNewMeadow","Scope","Domain","setDomain","DefaultIdentifier","setDefaultIdentifier","Schema","setSchema","JsonSchema","setJsonSchema","DefaultObject","setDefault","Authorization","setAuthorizer","libFS","_Meadow","_Queries","doSetQuery","pQueryTag","pQueryString","loadQuery","pFileName","fCallBack","tmpCallBack","readFile","pData","QueryTag","FileName","setQuery","checkQuery","getQuery","fs","libValidator","pOriginalJsonSchema","pOriginalSchema","_Schema","_JsonSchema","_Default","_Validate","_Authorizers","pSchema","pJsonSchema","pDefault","tmpNewMeadowSchemaObject","pAuthorizer","validateObject","pObject","tmpValidation","Valid","Errors","libFoxHound","settingsManager","MeadowProvider","_IDUser","_Scope","_Query","_RawQueries","_CreateBehavior","_ReadBehavior","_ReadsBehavior","_UpdateBehavior","_DeleteBehavior","_UndeleteBehavior","_CountBehavior","_Provider","_ProviderName","_DefaultIdentifier","_DefaultGUIdentifier","_MeadowPackageLoader","_MeadowPackageObjectLoader","updateProviderState","setProvider","pProviderName","tmpProviderModuleFile","tmpProviderModule","ProviderModuleFile","InvalidProvider","_RoleNames","settings","MeadowRoleNames","tmpNewMeadowObject","doCreate","doRead","doReads","doUpdate","doDelete","doUndelete","doCount","marshalRecordFromSourceToObject","tmpNewObject","defaultObject","loadFromPackage","loadFromPackageObject","pDomain","pDefaultIdentifier","getRoleName","pRoleIndex","logSlowQuery","pProfileTime","tmpQuery","tmpFullQuery","tmpKey","Provider","Query","Body","Parameters","FullQuery","jsonSchema","addServices","foxhound","libAsyncWaterfall","tmpProfileStart","fStageComplete","rawQueries","provider","tmpProfileTime","getTime","pCount","Message","defaultGUIdentifier","tmpGUIDRecord","tmpQueryRead","tmpError","userIdentifier","schemaFull","pIDRecord","defaultIdentifier","pQueryRead","tmpRecord","Stack","stack","libAsyncEach","pRow","pQueueCallback","pRecords"],"mappings":"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","file":"meadow.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncify;\n\nvar _initialParams = require('./internal/initialParams.js');\n\nvar _initialParams2 = _interopRequireDefault(_initialParams);\n\nvar _setImmediate = require('./internal/setImmediate.js');\n\nvar _setImmediate2 = _interopRequireDefault(_setImmediate);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if ((0, _wrapAsync.isAsync)(func)) {\n return function (...args /*, callback*/) {\n const callback = args.pop();\n const promise = func.apply(this, args);\n return handlePromise(promise, callback);\n };\n }\n\n return (0, _initialParams2.default)(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback);\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(value => {\n invokeCallback(callback, null, value);\n }, err => {\n invokeCallback(callback, err && err.message ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n (0, _setImmediate2.default)(e => {\n throw e;\n }, err);\n }\n}\nmodule.exports = exports['default'];","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Meadow = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncify;\n\nvar _initialParams = require('./internal/initialParams.js');\n\nvar _initialParams2 = _interopRequireDefault(_initialParams);\n\nvar _setImmediate = require('./internal/setImmediate.js');\n\nvar _setImmediate2 = _interopRequireDefault(_setImmediate);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if ((0, _wrapAsync.isAsync)(func)) {\n return function (...args /*, callback*/) {\n const callback = args.pop();\n const promise = func.apply(this, args);\n return handlePromise(promise, callback);\n };\n }\n\n return (0, _initialParams2.default)(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback);\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(value => {\n invokeCallback(callback, null, value);\n }, err => {\n invokeCallback(callback, err && err.message ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n (0, _setImmediate2.default)(e => {\n throw e;\n }, err);\n }\n}\nmodule.exports = exports['default'];\n},{\"./internal/initialParams.js\":9,\"./internal/setImmediate.js\":14,\"./internal/wrapAsync.js\":16}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachOfLimit = require('./internal/eachOfLimit.js');\n\nvar _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);\n\nvar _withoutIndex = require('./internal/withoutIndex.js');\n\nvar _withoutIndex2 = _interopRequireDefault(_withoutIndex);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit(coll, limit, iteratee, callback) {\n return (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback);\n}\nexports.default = (0, _awaitify2.default)(eachLimit, 4);\nmodule.exports = exports['default'];\n},{\"./internal/awaitify.js\":5,\"./internal/eachOfLimit.js\":7,\"./internal/withoutIndex.js\":15,\"./internal/wrapAsync.js\":16}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachLimit = require('./eachLimit.js');\n\nvar _eachLimit2 = _interopRequireDefault(_eachLimit);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n return (0, _eachLimit2.default)(coll, 1, iteratee, callback);\n}\nexports.default = (0, _awaitify2.default)(eachSeries, 3);\nmodule.exports = exports['default'];\n},{\"./eachLimit.js\":2,\"./internal/awaitify.js\":5}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncEachOfLimit;\n\nvar _breakLoop = require('./breakLoop.js');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n let done = false;\n let canceled = false;\n let awaiting = false;\n let running = 0;\n let idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) return;\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(({ value, done: iterDone }) => {\n //console.log('got value', value)\n if (canceled || done) return;\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) return;\n if (err) return handleError(err);\n\n if (err === false) {\n done = true;\n canceled = true;\n return;\n }\n\n if (result === _breakLoop2.default || done && running <= 0) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) return;\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\nmodule.exports = exports['default'];\n},{\"./breakLoop.js\":6}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = awaitify;\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify(asyncFn, arity = asyncFn.length) {\n if (!arity) throw new Error('arity is undefined');\n function awaitable(...args) {\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args);\n }\n\n return new Promise((resolve, reject) => {\n args[arity - 1] = (err, ...cbArgs) => {\n if (err) return reject(err);\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this, args);\n });\n }\n\n return awaitable;\n}\nmodule.exports = exports['default'];\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\nexports.default = breakLoop;\nmodule.exports = exports[\"default\"];\n},{}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = require('./once.js');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _iterator = require('./iterator.js');\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _onlyOnce = require('./onlyOnce.js');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./wrapAsync.js');\n\nvar _asyncEachOfLimit = require('./asyncEachOfLimit.js');\n\nvar _asyncEachOfLimit2 = _interopRequireDefault(_asyncEachOfLimit);\n\nvar _breakLoop = require('./breakLoop.js');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = limit => {\n return (obj, iteratee, callback) => {\n callback = (0, _once2.default)(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1');\n }\n if (!obj) {\n return callback(null);\n }\n if ((0, _wrapAsync.isAsyncGenerator)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj, limit, iteratee, callback);\n }\n if ((0, _wrapAsync.isAsyncIterable)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj[Symbol.asyncIterator](), limit, iteratee, callback);\n }\n var nextElem = (0, _iterator2.default)(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) return;\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n } else if (err === false) {\n done = true;\n canceled = true;\n } else if (value === _breakLoop2.default || done && running <= 0) {\n done = true;\n return callback(null);\n } else if (!looping) {\n replenish();\n }\n }\n\n function replenish() {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\nmodule.exports = exports['default'];\n},{\"./asyncEachOfLimit.js\":4,\"./breakLoop.js\":6,\"./iterator.js\":11,\"./once.js\":12,\"./onlyOnce.js\":13,\"./wrapAsync.js\":16}],8:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n};\n\nmodule.exports = exports[\"default\"];\n},{}],9:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (fn) {\n return function (...args /*, callback*/) {\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n};\n\nmodule.exports = exports[\"default\"];\n},{}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isArrayLike;\nfunction isArrayLike(value) {\n return value && typeof value.length === 'number' && value.length >= 0 && value.length % 1 === 0;\n}\nmodule.exports = exports['default'];\n},{}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createIterator;\n\nvar _isArrayLike = require('./isArrayLike.js');\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _getIterator = require('./getIterator.js');\n\nvar _getIterator2 = _interopRequireDefault(_getIterator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? { value: coll[i], key: i } : null;\n };\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done) return null;\n i++;\n return { value: item.value, key: i };\n };\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? { value: obj[key], key } : null;\n };\n}\n\nfunction createIterator(coll) {\n if ((0, _isArrayLike2.default)(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = (0, _getIterator2.default)(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\nmodule.exports = exports['default'];\n},{\"./getIterator.js\":8,\"./isArrayLike.js\":10}],12:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = once;\nfunction once(fn) {\n function wrapper(...args) {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper;\n}\nmodule.exports = exports[\"default\"];\n},{}],13:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = onlyOnce;\nfunction onlyOnce(fn) {\n return function (...args) {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\nmodule.exports = exports[\"default\"];\n},{}],14:[function(require,module,exports){\n(function (process,setImmediate){(function (){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fallback = fallback;\nexports.wrap = wrap;\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = exports.hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer;\n\nif (hasQueueMicrotask) {\n _defer = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else if (hasNextTick) {\n _defer = process.nextTick;\n} else {\n _defer = fallback;\n}\n\nexports.default = wrap(_defer);\n}).call(this)}).call(this,require('_process'),require(\"timers\").setImmediate)\n\n},{\"_process\":50,\"timers\":51}],15:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _withoutIndex;\nfunction _withoutIndex(iteratee) {\n return (value, index, callback) => iteratee(value, callback);\n}\nmodule.exports = exports[\"default\"];\n},{}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isAsyncIterable = exports.isAsyncGenerator = exports.isAsync = undefined;\n\nvar _asyncify = require('../asyncify.js');\n\nvar _asyncify2 = _interopRequireDefault(_asyncify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') throw new Error('expected a function');\n return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn;\n}\n\nexports.default = wrapAsync;\nexports.isAsync = isAsync;\nexports.isAsyncGenerator = isAsyncGenerator;\nexports.isAsyncIterable = isAsyncIterable;\n},{\"../asyncify.js\":1}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = require('./internal/once.js');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _onlyOnce = require('./internal/onlyOnce.js');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall(tasks, callback) {\n callback = (0, _once2.default)(callback);\n if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = (0, _wrapAsync2.default)(tasks[taskIndex++]);\n task(...args, (0, _onlyOnce2.default)(next));\n }\n\n function next(err, ...args) {\n if (err === false) return;\n if (err || taskIndex === tasks.length) {\n return callback(err, ...args);\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nexports.default = (0, _awaitify2.default)(waterfall);\nmodule.exports = exports['default'];\n},{\"./internal/awaitify.js\":5,\"./internal/once.js\":12,\"./internal/onlyOnce.js\":13,\"./internal/wrapAsync.js\":16}],18:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n\n},{}],20:[function(require,module,exports){\n'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n\n},{\"./\":21,\"get-intrinsic\":34}],21:[function(require,module,exports){\n'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n\n},{\"function-bind\":31,\"get-intrinsic\":34}],22:[function(require,module,exports){\n'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n\n},{\"is-callable\":42}],23:[function(require,module,exports){\n/**\n* FoxHound Query Generation Library\n* @license MIT\n* @author Steven Velozo <steven@velozo.com>\n*/\n\n// Load our base parameters skeleton object\nconst baseParameters = require('./Parameters.js');\n\nvar FoxHound = function()\n{\n\tfunction createNew(pFable, pFromParameters)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pFable) !== 'object') || !('fable' in pFable))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\n\t\tvar _Fable = pFable;\n\n\t\t// The default parameters config object, used as a template for all new\n\t\t// queries created from this query.\n\t\tvar _DefaultParameters = (typeof(pFromParameters) === 'undefined') ? {} : pFromParameters;\n\n\t\t// The parameters config object for the current query. This is the only\n\t\t// piece of internal state that is important to operation.\n\t\tvar _Parameters = false;\n\n\t\tvar _Dialects = require('./Foxhound-Dialects.js');\n\n\t\t// The unique identifier for a query\n\t\tvar _UUID = _Fable.getUUID();\n\n\t\t// The log level, for debugging chattiness.\n\t\tvar _LogLevel = 0;\n\n\t\t// The dialect to use when generating queries\n\t\tvar _Dialect = false;\n\n\t\t/**\n\t\t* Clone the current FoxHound Query into a new Query object, copying all\n\t\t* parameters as the new default. Clone also copies the log level.\n\t\t*\n\t\t* @method clone\n\t\t* @return {Object} Returns a cloned Query. This is still chainable.\n\t\t*/\n\t\tvar clone = function()\n\t\t{\n\t\t\tvar tmpFoxHound = createNew(_Fable, baseParameters)\n\t\t\t\t.setScope(_Parameters.scope)\n\t\t\t\t.setBegin(_Parameters.begin)\n\t\t\t\t.setCap(_Parameters.cap);\n\n\t\t\t// Schema is the only part of a query that carries forward.\n\t\t\ttmpFoxHound.query.schema = _Parameters.query.schema;\n\n\t\t\tif (_Parameters.dataElements)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.dataElements = _Parameters.dataElements.slice(); // Copy the array of dataElements\n\t\t\t}\n\t\t\tif (_Parameters.sort)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.sort = _Parameters.sort.slice(); // Copy the sort array.\n\t\t\t\t// TODO: Fix the side affect nature of these being objects in the array .. they are technically clones of the previous.\n\t\t\t}\n\t\t\tif (_Parameters.filter)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.filter = _Parameters.filter.slice(); // Copy the filter array.\n\t\t\t\t// TODO: Fix the side affect nature of these being objects in the array .. they are technically clones of the previous.\n\t\t\t}\n\n\t\t\treturn tmpFoxHound;\n\t\t};\n\n\n\t\t/**\n\t\t* Reset the parameters of the FoxHound Query to the Default. Default\n\t\t* parameters were set during object construction.\n\t\t*\n\t\t* @method resetParameters\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar resetParameters = function()\n\t\t{\n\t\t\t_Parameters = _Fable.Utility.extend({}, baseParameters, _DefaultParameters);\n\t\t\t_Parameters.query = ({\n\t\t\t\tdisableAutoIdentity: false,\n\t\t\t\tdisableAutoDateStamp: false,\n\t\t\t\tdisableAutoUserStamp: false,\n\t\t\t\tdisableDeleteTracking: false,\n\t\t\t\tbody: false,\n\t\t\t\tschema: false, // The schema to intersect with our records\n\t\t\t\tIDUser: 0, // The user to stamp into records\n\t\t\t\tUUID: _Fable.getUUID(), // A UUID for this record\n\t\t\t\trecords: false, // The records to be created or changed\n\t\t\t\tparameters: {}\n\t\t\t});\n\n\t\t\t_Parameters.result = ({\n\t\t\t\texecuted: false, // True once we've run a query.\n\t\t\t\tvalue: false, // The return value of the last query run\n\t\t\t\t// Updated below due to changes in how Async.js responds to a false value here\n\t\t\t\terror: undefined // The error message of the last run query\n\t\t\t});\n\n\t\t\treturn this;\n\t\t};\n\t\tresetParameters();\n\n\t\t/**\n\t\t* Reset the parameters of the FoxHound Query to the Default. Default\n\t\t* parameters were set during object construction.\n\t\t*\n\t\t* @method mergeParameters\n\t\t* @param {Object} pFromParameters A Parameters Object to merge from\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar mergeParameters = function(pFromParameters)\n\t\t{\n\t\t\t_Parameters = _Fable.Utility.extend({}, _Parameters, pFromParameters);\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Logging level.\n\t\t*\n\t\t* The log levels are:\n\t\t* 0 - Don't log anything\n\t\t* 1 - Log queries\n\t\t* 2 - Log queries and non-parameterized queries\n\t\t* 3 - Log everything\n\t\t*\n\t\t* @method setLogLevel\n\t\t* @param {Number} pLogLevel The log level for our object\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setLogLevel = function(pLogLevel)\n\t\t{\n\t\t\tvar tmpLogLevel = 0;\n\n\t\t\tif (typeof(pLogLevel) === 'number' && (pLogLevel % 1) === 0)\n\t\t\t{\n\t\t\t\ttmpLogLevel = pLogLevel;\n\t\t\t}\n\n\t\t\t_LogLevel = tmpLogLevel;\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Scope for the Query. *Scope* is the source for the data being\n\t\t* pulled. In TSQL this would be the _table_, whereas in MongoDB this\n\t\t* would be the _collection_.\n\t\t*\n\t\t* A scope can be either a string, or an array (for JOINs and such).\n\t\t*\n\t\t* @method setScope\n\t\t* @param {String} pScope A Scope for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setScope = function(pScope)\n\t\t{\n\t\t\tvar tmpScope = false;\n\n\t\t\tif (typeof(pScope) === 'string')\n\t\t\t{\n\t\t\t\ttmpScope = pScope;\n\t\t\t}\n\t\t\telse if (pScope !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Scope set failed. You must pass in a string or array.', {queryUUID:_UUID, parameters:_Parameters, invalidScope:pScope});\n\t\t\t}\n\n\t\t\t_Parameters.scope = tmpScope;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Scope set: '+tmpScope, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set whether the query returns DISTINCT results.\n\t\t* For count queries, returns the distinct for the selected fields, or all fields in the base table by default.\n\t\t*\n\t\t* @method setDistinct\n\t\t* @param {Boolean} pDistinct True if the query should be distinct.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDistinct = function(pDistinct)\n\t\t{\n\t\t\t_Parameters.distinct = !!pDistinct;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Distinct set: '+_Parameters.distinct, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Data Elements for the Query. *Data Elements* are the fields\n\t\t* being pulled by the query. In TSQL this would be the _columns_,\n\t\t* whereas in MongoDB this would be the _fields_.\n\t\t*\n\t\t* The passed values can be either a string, or an array.\n\t\t*\n\t\t* @method setDataElements\n\t\t* @param {String} pDataElements The Data Element(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDataElements = function(pDataElements)\n\t\t{\n\t\t\tvar tmpDataElements = false;\n\n\t\t\tif (Array.isArray(pDataElements))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all strings\n\t\t\t\ttmpDataElements = pDataElements;\n\t\t\t}\n\t\t\tif (typeof(pDataElements) === 'string')\n\t\t\t{\n\t\t\t\ttmpDataElements = [pDataElements];\n\t\t\t}\n\n\t\t\t_Parameters.dataElements = tmpDataElements;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Data Elements set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the sort data element\n\t\t*\n\t\t* The passed values can be either a string, an object or an array of objects.\n\t\t*\n\t\t* The Sort object has two values:\n\t\t* {Column:'Birthday', Direction:'Ascending'}\n\t\t*\n\t\t* @method setSort\n\t\t* @param {String} pSort The sort criteria(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setSort = function(pSort)\n\t\t{\n\t\t\tvar tmpSort = false;\n\n\t\t\tif (Array.isArray(pSort))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all conformant sort objects\n\t\t\t\ttmpSort = pSort;\n\t\t\t}\n\t\t\telse if (typeof(pSort) === 'string')\n\t\t\t{\n\t\t\t\t// Default to ascending\n\t\t\t\ttmpSort = [{Column:pSort, Direction:'Ascending'}];\n\t\t\t}\n\t\t\telse if (typeof(pSort) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this sort entry conforms to a sort entry\n\t\t\t\ttmpSort = [pSort];\n\t\t\t}\n\n\t\t\t_Parameters.sort = tmpSort;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Sort set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the join data element\n\t\t*\n\t\t* The passed values can be either an object or an array of objects.\n\t\t*\n\t\t* The join object has four values:\n\t\t* {Type:'INNER JOIN', Table:'Test', From:'Test.ID', To:'Scope.IDItem'}\n\t\t*\n\t\t* @method setJoin\n\t\t* @param {Object} pJoin The join criteria(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setJoin = function(pJoin)\n\t\t{\n\t\t\t_Parameters.join = [];\n\n\t\t\tif (Array.isArray(pJoin))\n\t\t\t{\n\t\t\t\tpJoin.forEach(function(join)\n\t\t\t\t{\n\t\t\t\t\taddJoin(join.Table, join.From, join.To, join.Type);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (typeof(pJoin) === 'object')\n\t\t\t{\n\t\t\t\taddJoin(pJoin.Table, pJoin.From, pJoin.To, pJoin.Type);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Add a sort data element\n\t\t*\n\t\t* The passed values can be either a string, an object or an array of objects.\n\t\t*\n\t\t* The Sort object has two values:\n\t\t* {Column:'Birthday', Direction:'Ascending'}\n\t\t*\n\t\t* @method setSort\n\t\t* @param {String} pSort The sort criteria to add to the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addSort = function(pSort)\n\t\t{\n\t\t\tvar tmpSort = false;\n\n\t\t\tif (typeof(pSort) === 'string')\n\t\t\t{\n\t\t\t\t// Default to ascending\n\t\t\t\ttmpSort = {Column:pSort, Direction:'Ascending'};\n\t\t\t}\n\t\t\tif (typeof(pSort) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this sort entry conforms to a sort entry\n\t\t\t\ttmpSort = pSort;\n\t\t\t}\n\n\t\t\tif (!_Parameters.sort)\n\t\t\t{\n\t\t\t\t_Parameters.sort = [];\n\t\t\t}\n\n\t\t\t_Parameters.sort.push(tmpSort);\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Sort set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Begin index for the Query. *Begin* is the index at which\n\t\t* a query should start returning rows. In TSQL this would be the n\n\t\t* parameter of ```LIMIT 1,n```, whereas in MongoDB this would be the\n\t\t* n in ```skip(n)```.\n\t\t*\n\t\t* The passed value must be an Integer >= 0.\n\t\t*\n\t\t* @method setBegin\n\t\t* @param {Number} pBeginAmount The index to begin returning Query data.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setBegin = function(pBeginAmount)\n\t\t{\n\t\t\tvar tmpBegin = false;\n\n\t\t\t// Test if it is an integer > -1\n\t\t\t// http://jsperf.com/numbers-and-integers\n\t\t\tif (typeof(pBeginAmount) === 'number' && (pBeginAmount % 1) === 0 && pBeginAmount >= 0)\n\t\t\t{\n\t\t\t\ttmpBegin = pBeginAmount;\n\t\t\t}\n\t\t\telse if (pBeginAmount !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Begin set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidBeginAmount:pBeginAmount});\n\t\t\t}\n\n\t\t\t_Parameters.begin = tmpBegin;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Begin set: '+pBeginAmount, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Cap for the Query. *Cap* is the maximum number of records\n\t\t* a Query should return in a set. In TSQL this would be the n\n\t\t* parameter of ```LIMIT n```, whereas in MongoDB this would be the\n\t\t* n in ```limit(n)```.\n\t\t*\n\t\t* The passed value must be an Integer >= 0.\n\t\t*\n\t\t* @method setCap\n\t\t* @param {Number} pCapAmount The maximum records for the Query set.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setCap = function(pCapAmount)\n\t\t{\n\t\t\tvar tmpCapAmount = false;\n\n\t\t\tif (typeof(pCapAmount) === 'number' && (pCapAmount % 1) === 0 && pCapAmount >= 0)\n\t\t\t{\n\t\t\t\ttmpCapAmount = pCapAmount;\n\t\t\t}\n\t\t\telse if (pCapAmount !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Cap set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidCapAmount:pCapAmount});\n\t\t\t}\n\n\n\t\t\t_Parameters.cap = tmpCapAmount;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Cap set to: '+tmpCapAmount, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the filter expression\n\t\t*\n\t\t* The passed values can be either an object or an array of objects.\n\t\t*\n\t\t* The Filter object has a minimum of two values (which expands to the following):\n\t\t* {Column:'Name', Value:'John'}\n\t\t* {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t*\n\t\t* @method setFilter\n\t\t* @param {String} pFilter The filter(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setFilter = function(pFilter)\n\t\t{\n\t\t\tvar tmpFilter = false;\n\n\t\t\tif (Array.isArray(pFilter))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all conformant Filter objects\n\t\t\t\ttmpFilter = pFilter;\n\t\t\t}\n\t\t\telse if (typeof(pFilter) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this Filter entry conforms to a Filter entry\n\t\t\t\ttmpFilter = [pFilter];\n\t\t\t}\n\n\t\t\t_Parameters.filter = tmpFilter;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Filter set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Add a filter expression\n\t\t*\n\t\t* {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t*\n\t\t* @method addFilter\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addFilter = function(pColumn, pValue, pOperator, pConnector, pParameter)\n\t\t{\n\t\t\tif (typeof(pColumn) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query filter column', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof(pValue) === 'undefined')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query filter value', {queryUUID:_UUID, parameters:_Parameters, invalidColumn:pColumn});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tvar tmpOperator = (typeof(pOperator) === 'undefined') ? '=' : pOperator;\n\t\t\tvar tmpConnector = (typeof(pConnector) === 'undefined') ? 'AND' : pConnector;\n\t\t\tvar tmpParameter = (typeof(pParameter) === 'undefined') ? pColumn : pParameter;\n\n\t\t\t//support table.field notation (mysql2 requires this)\n\t\t\ttmpParameter = tmpParameter.replace('.', '_');\n\n\t\t\tvar tmpFilter = (\n\t\t\t\t{\n\t\t\t\t\tColumn: pColumn,\n\t\t\t\t\tOperator: tmpOperator,\n\t\t\t\t\tValue: pValue,\n\t\t\t\t\tConnector: tmpConnector,\n\t\t\t\t\tParameter: tmpParameter\n\t\t\t\t});\n\n\t\t\tif (!Array.isArray(_Parameters.filter))\n\t\t\t{\n\t\t\t\t_Parameters.filter = [tmpFilter];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.filter.push(tmpFilter);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a filter', {queryUUID:_UUID, parameters:_Parameters, newFilter:tmpFilter});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Add a join expression\n\t\t*\n\t\t* {Type:'INNER JOIN', Table:'Test', From:'Test.ID', To:'Scope.IDItem'}\n\t\t*\n\t\t* @method addJoin\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addJoin = function(pTable, pFrom, pTo, pType)\n\t\t{\n\t\t\tif (typeof(pTable) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join table', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof(pFrom) === 'undefined' || typeof(pTo) === 'undefined')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\t//sanity check the join fields\n\t\t\tif (pFrom.indexOf(pTable)!=0)\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field, join must come FROM the join table!', {queryUUID:_UUID, parameters:_Parameters, invalidField:pFrom});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (pTo.indexOf('.')<=0)\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field, join must go TO a field on another table ([table].[field])!', {queryUUID:_UUID, parameters:_Parameters, invalidField:pTo});\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar tmpType = (typeof(pType) === 'undefined') ? 'INNER JOIN' : pType;\n\n\t\t\tvar tmpJoin = (\n\t\t\t\t{\n\t\t\t\t\tType: tmpType,\n\t\t\t\t\tTable: pTable,\n\t\t\t\t\tFrom: pFrom,\n\t\t\t\t\tTo: pTo\n\t\t\t\t});\n\n\t\t\tif (!Array.isArray(_Parameters.join))\n\t\t\t{\n\t\t\t\t_Parameters.join = [tmpJoin];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.join.push(tmpJoin);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a join', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Add a record (for UPDATE and INSERT)\n\t\t*\n\t\t*\n\t\t* @method addRecord\n\t\t* @param {Object} pRecord The record to add.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addRecord = function(pRecord)\n\t\t{\n\t\t\tif (typeof(pRecord) !== 'object')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid record to the query -- records must be an object', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!Array.isArray(_Parameters.query.records))\n\t\t\t{\n\t\t\t\t_Parameters.query.records = [pRecord];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.query.records.push(pRecord);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a record to the query', {queryUUID:_UUID, parameters:_Parameters, newRecord:pRecord});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Set the Dialect for Query generation.\n\t\t*\n\t\t* This function expects a string, case sensitive, which matches both the\n\t\t* folder and filename\n\t\t*\n\t\t* @method setDialect\n\t\t* @param {String} pDialectName The dialect for query generation.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDialect = function(pDialectName)\n\t\t{\n\n\t\t\tif (typeof(pDialectName) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Dialect set to English - invalid name', {queryUUID:_UUID, parameters:_Parameters, invalidDialect:pDialectName});\n\t\t\t\treturn setDialect('English');\n\t\t\t}\n\n\t\t\tif (_Dialects.hasOwnProperty(pDialectName))\n\t\t\t{\n\t\t\t\t_Dialect = _Dialects[pDialectName](_Fable);\n\t\t\t\tif (_LogLevel > 2)\n\t\t\t\t{\n\t\t\t\t\t_Fable.log.info('Dialog set to: '+pDialectName, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Fable.log.error('Dialect not set - unknown dialect \"'+pDialectName+\"'\", {queryUUID:_UUID, parameters:_Parameters, invalidDialect:pDialectName});\n\t\t\t\tsetDialect('English');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* User to use for this query\n\t\t*\n\t\t* @method setIDUser\n\t\t*/\n\t\tvar setIDUser = function(pIDUser)\n\t\t{\n\n\t\t\tvar tmpUserID = 0;\n\n\t\t\tif (typeof(pIDUser) === 'number' && (pIDUser % 1) === 0 && pIDUser >= 0)\n\t\t\t{\n\t\t\t\ttmpUserID = pIDUser;\n\t\t\t}\n\t\t\telse if (pIDUser !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('User set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidIDUser:pIDUser});\n\t\t\t}\n\n\n\t\t\t_Parameters.userID = tmpUserID;\n\t\t\t_Parameters.query.IDUser = tmpUserID;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('IDUser set to: '+tmpUserID, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto identity\n\t\t*\n\t\t* @method setDisableAutoIdentity\n\t\t*/\n\t\tvar setDisableAutoIdentity = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoIdentity = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto datestamp\n\t\t*\n\t\t* @method setDisableAutoDateStamp\n\t\t*/\n\t\tvar setDisableAutoDateStamp = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoDateStamp = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto userstamp\n\t\t*\n\t\t* @method setDisableAutoUserStamp\n\t\t*/\n\t\tvar setDisableAutoUserStamp = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoUserStamp = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable delete tracking\n\t\t*\n\t\t* @method setDisableDeleteTracking\n\t\t*/\n\t\tvar setDisableDeleteTracking = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableDeleteTracking = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Check that a valid Dialect has been set\n\t\t*\n\t\t* If there has not been a dialect set, it defaults to English.\n\t\t* TODO: Have the json configuration define a \"default\" dialect.\n\t\t*\n\t\t* @method checkDialect\n\t\t*/\n\t\tvar checkDialect = function()\n\t\t{\n\t\t\tif (_Dialect === false)\n\t\t\t{\n\t\t\t\tsetDialect('English');\n\t\t\t}\n\t\t};\n\n\n\t\tvar buildCreateQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Create(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildReadQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Read(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildUpdateQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Update(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildDeleteQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Delete(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildUndeleteQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Undelete(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildCountQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Count(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Container Object for our Factory Pattern\n\t\t*/\n\t\tvar tmpNewFoxHoundObject = (\n\t\t{\n\t\t\tresetParameters: resetParameters,\n\t\t\tmergeParameters: mergeParameters,\n\n\t\t\tsetLogLevel: setLogLevel,\n\n\t\t\tsetScope: setScope,\n\t\t\tsetDistinct: setDistinct,\n\t\t\tsetIDUser: setIDUser,\n\t\t\tsetDataElements: setDataElements,\n\t\t\tsetBegin: setBegin,\n\t\t\tsetCap: setCap,\n\t\t\tsetFilter: setFilter,\n\t\t\taddFilter: addFilter,\n\t\t\tsetSort: setSort,\n\t\t\taddSort: addSort,\n\t\t\tsetJoin: setJoin,\n\t\t\taddJoin: addJoin,\n\n\t\t\taddRecord: addRecord,\n\t\t\tsetDisableAutoIdentity: setDisableAutoIdentity,\n\t\t\tsetDisableAutoDateStamp: setDisableAutoDateStamp,\n\t\t\tsetDisableAutoUserStamp: setDisableAutoUserStamp,\n\t\t\tsetDisableDeleteTracking: setDisableDeleteTracking,\n\n\t\t\tsetDialect: setDialect,\n\n\t\t\tbuildCreateQuery: buildCreateQuery,\n\t\t\tbuildReadQuery: buildReadQuery,\n\t\t\tbuildUpdateQuery: buildUpdateQuery,\n\t\t\tbuildDeleteQuery: buildDeleteQuery,\n\t\t\tbuildUndeleteQuery: buildUndeleteQuery,\n\t\t\tbuildCountQuery: buildCountQuery,\n\n\t\t\tclone: clone,\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * Query\n\t\t *\n\t\t * @property query\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'query',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters.query; },\n\t\t\t\tset: function(pQuery) { _Parameters.query = pQuery; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Result\n\t\t *\n\t\t * @property result\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'result',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters.result; },\n\t\t\t\tset: function(pResult) { _Parameters.result = pResult; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Query Parameters\n\t\t *\n\t\t * @property parameters\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'parameters',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters; },\n\t\t\t\tset: function(pParameters) { _Parameters = pParameters; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Dialect\n\t\t *\n\t\t * @property dialect\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'dialect',\n\t\t\t{\n\t\t\t\tget: function() { return _Dialect; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Universally Unique Identifier\n\t\t *\n\t\t * @property uuid\n\t\t * @type String\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'uuid',\n\t\t\t{\n\t\t\t\tget: function() { return _UUID; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Log Level\n\t\t *\n\t\t * @property logLevel\n\t\t * @type Integer\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'logLevel',\n\t\t\t{\n\t\t\t\tget: function() { return _LogLevel; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\treturn tmpNewFoxHoundObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = FoxHound();\n\n},{\"./Foxhound-Dialects.js\":24,\"./Parameters.js\":25}],24:[function(require,module,exports){\ngetDialects = () =>\n{\n\tlet tmpDialects = {};\n\n\ttmpDialects.ALASQL = require('./dialects/ALASQL/FoxHound-Dialect-ALASQL.js');\n\ttmpDialects.English = require('./dialects/English/FoxHound-Dialect-English.js');\n\ttmpDialects.MeadowEndpoints = require('./dialects/MeadowEndpoints/FoxHound-Dialect-MeadowEndpoints.js');\n\ttmpDialects.MySQL = require('./dialects/MySQL/FoxHound-Dialect-MySQL.js');\n\n\ttmpDialects.default = tmpDialects.English;\n\n\treturn tmpDialects;\n}\n\nmodule.exports = getDialects();\n},{\"./dialects/ALASQL/FoxHound-Dialect-ALASQL.js\":26,\"./dialects/English/FoxHound-Dialect-English.js\":27,\"./dialects/MeadowEndpoints/FoxHound-Dialect-MeadowEndpoints.js\":28,\"./dialects/MySQL/FoxHound-Dialect-MySQL.js\":29}],25:[function(require,module,exports){\n/**\n* Query Parameters Object\n*\n* @class FoxHoundQueryParameters\n* @constructor\n*/\nvar FoxHoundQueryParameters = (\n{\n\t\tscope: false, // STR: The scope of the data\n\t\t\t\t\t\t\t\t// TSQL: the \"Table\" or \"View\"\n\t\t\t\t\t\t\t\t// MongoDB: the \"Collection\"\n\n\t\tdataElements: false, // ARR of STR: The data elements to return\n\t\t\t\t\t\t\t\t// TSQL: the \"Columns\"\n\t\t\t\t\t\t\t\t// MongoDB: the \"Fields\"\n\n\t\tbegin: false, // INT: Record index to start at\n\t\t\t\t\t\t\t\t// TSQL: n in LIMIT 1,n\n\t\t\t\t\t\t\t\t// MongoDB: n in Skip(n)\n\n\t\tcap: false, // INT: Maximum number of records to return\n\t\t\t\t\t\t\t\t// TSQL: n in LIMIT n\n\t\t\t\t\t\t\t\t// MongoDB: n in limit(n)\n\n\t\t// Serialization example for a query:\n\t\t// Take the filter and return an array of filter instructions\n\t\t// Basic instruction anatomy:\n\t\t// INSTRUCTION~FIELD~OPERATOR~VALUE\n\t\t// FOP - Filter Open Paren\n\t\t// FOP~~(~\n\t\t// FCP - Filter Close Paren\n\t\t// FCP~~)~\n\t\t// FBV - Filter By Value\n\t\t// FBV~Category~EQ~Books\n\t\t// Possible comparisons:\n\t\t// * EQ - Equals To (=)\n\t\t// * NE - Not Equals To (!=)\n\t\t// * GT - Greater Than (>)\n\t\t// * GE - Greater Than or Equals To (>=)\n\t\t// * LT - Less Than (<)\n\t\t// * LE - Less Than or Equals To (<=)\n\t\t// * LK - Like (Like)\n\t\t// FBL - Filter By List (value list, separated by commas)\n\t\t// FBL~Category~EQ~Books,Movies\n\t\t// FSF - Filter Sort Field\n\t\t// FSF~Category~ASC~0\n\t\t// FSF~Category~DESC~0\n\t\t// FCC - Filter Constraint Cap (the limit of what is returned)\n\t\t// FCC~~10~\n\t\t// FCB - Filter Constraint Begin (the zero-based start index of what is returned)\n\t\t// FCB~~10~\n\t\t//\n\t\t// This means: FBV~Category~EQ~Books~FBV~PublishedYear~GT~2000~FSF~PublishedYear~DESC~0\n\t\t// Filters down to ALL BOOKS PUBLISHED AFTER 2000 IN DESCENDING ORDER\n\t\tfilter: false, // ARR of OBJ: Data filter expression list {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t\t\t\t\t\t\t// TSQL: the WHERE clause\n\t\t\t\t\t\t\t\t// MongoDB: a find() expression\n\n\t\tsort: false, // ARR of OBJ: The sort order {Column:'Birthday', Direction:'Ascending'}\n\t\t\t\t\t\t\t\t// TSQL: ORDER BY\n\t\t\t\t\t\t\t\t// MongoDB: sort()\n\n\t\tjoin: false, // ARR of OBJ: The join tables {Type:'INNER JOIN', Table:'test', From: 'Test.ID', To: 'Scope.IDItem' }\n\t\t\t\t\t\t\t\t// TSQL: JOIN\n\n\t\t// Force a specific query to run regardless of above ... this is used to override the query generator.\n\t\tqueryOverride: false,\n\n\t\t// Where the generated query goes\n\t\tquery: false,\n\t\t/*\n\t\t\t{\n\t\t\t\tbody: false,\n\t\t\t\tschema: false, // The schema to intersect with our records\n\t\t\t\tIDUser: 0, // The User ID to stamp into records\n\t\t\t\tUUID: A_UUID, // Some globally unique record id, different per cloned query.\n\t\t\t\trecords: false, // The records to be created or changed\n\t\t\t\tparameters: {}\n\t\t\t}\n\t\t*/\n\t\t\n\t\t// Who is making the query\n\t\tuserID: 0,\n\n\t\t// Where the query results are stuck\n\t\tresult: false\n\t\t/*\n\t\t\t{\n\t\t\t\texecuted: false, // True once we've run a query.\n\t\t\t\tvalue: false, // The return value of the last query run\n\t\t\t\terror: false // The error message of the last run query\n\t\t\t}\n\t\t*/\n});\n\nmodule.exports = FoxHoundQueryParameters;\n},{}],26:[function(require,module,exports){\n/**\n* FoxHound ALASQL Dialect\n*\n* @license MIT\n*\n* For an ALASQL query override:\n// An underscore template with the following values:\n// <%= DataElements %> = Field1, Field2, Field3, Field4\n// <%= Begin %> = 0\n// <%= Cap %> = 10\n// <%= Filter %> = WHERE StartDate > :MyStartDate\n// <%= Sort %> = ORDER BY Field1\n// The values are empty strings if they aren't set.\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectALASQL\n*/\n\nvar FoxHoundDialectALASQL = function(pFable)\n{\n\t//Request time from SQL server with microseconds resolution\n\tconst SQL_NOW = \"NOW(3)\";\n\n\t_Fable = pFable;\n\n\t/**\n\t* Generate a table name from the scope.\n\t*\n\t* Because ALASQL is all in-memory, and can be run in two modes (anonymous\n\t* working on arrays or table-based) we are going to make this a programmable\n\t* value. Then we can share the code across both providers.\n\t*\n\t* @method: generateTableName\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateTableName = function(pParameters)\n\t{\n\t\treturn ' '+pParameters.scope;\n\t};\n\n\t/**\n\t* Escape columns, because ALASQL has more reserved KWs than most SQL dialects\n\t*/\n\tvar escapeColumn = (pColumn, pParameters) =>\n\t{\n\t\tif (pColumn.indexOf('.') < 0)\n\t\t{\n\t\t\treturn '`'+pColumn+'`';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// This could suck if the scope is not the same\n\t\t\tvar tmpTableName = pParameters.scope;\n\t\t\tif (pColumn.indexOf(tmpTableName+'.') > -1)\n\t\t\t{\n\t\t\t\treturn '`'+pColumn.replace(tmpTableName+'.', '')+'`';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// This doesn't work well but we'll try it.\n\t\t\t\treturn '`'+pColumn+'`';\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t* Generate a field list from the array of dataElements\n\t*\n\t* Each entry in the dataElements is a simple string\n\t*\n\t* @method: generateFieldList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @param {Boolean} pIsForCountClause (optional) If true, generate fields for use within a count clause.\n\t* @return: {String} Returns the field list clause, or empty string if explicit fields are requested but cannot be fulfilled\n\t* due to missing schema.\n\t*/\n\tvar generateFieldList = function(pParameters, pIsForCountClause)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\tif (!pIsForCountClause)\n\t\t\t{\n\t\t\t\treturn ' *';\n\t\t\t}\n\t\t\t// we need to list all of the table fields explicitly; get them from the schema\n\t\t\tconst tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tif (tmpSchema.length < 1)\n\t\t\t{\n\t\t\t\t// this means we have no schema; returning an empty string here signals the calling code to handle this case\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst idColumn = tmpSchema.find((entry) => entry.Type === 'AutoIdentity');\n\t\t\tif (!idColumn)\n\t\t\t{\n\t\t\t\t// this means there is no autoincrementing unique ID column; treat as above\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn ` ${idColumn.Column}`;\n\t\t}\n\n\t\tvar tmpFieldList = ' ';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ', ';\n\t\t\t}\n\t\t\ttmpFieldList += escapeColumn(tmpDataElements[i], pParameters);\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\t/**\n\t* Generate a query from the array of where clauses\n\t*\n\t* Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name',\n\t\t\tOperator:'EQ',\n\t\t\tValue:'John',\n\t\t\tConnector:'And',\n\t\t\tParameter:'Name'\n\t\t}\n\t*\n\t* @method: generateWhere\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t*/\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters).trim();\n\n\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t// Check if there is a Deleted column on the Schema. If so, we add this to the filters automatically (if not already present)\n\t\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\tvar tmpSchemaEntry = tmpSchema[i];\n\n\t\t\t\tif (tmpSchemaEntry.Type === 'Deleted')\n\t\t\t\t{\n\t\t\t\t\tvar tmpHasDeletedParameter = false;\n\n\t\t\t\t\t//first, check to see if filters are already looking for Deleted column\n\t\t\t\t\tif (tmpFilter.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var x = 0; x < tmpFilter.length; x++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (tmpFilter[x].Column === tmpSchemaEntry.Column)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpHasDeletedParameter = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!tmpHasDeletedParameter)\n\t\t\t\t\t{\n\t\t\t\t\t\t//if not, we need to add it\n\t\t\t\t\t\ttmpFilter.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tColumn: tmpTableName + '.' + tmpSchemaEntry.Column,\n\t\t\t\t\t\t\tOperator: '=',\n\t\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\t\tConnector: 'AND',\n\t\t\t\t\t\t\tParameter: 'Deleted'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpWhere = ' WHERE';\n\n\t\t// This is used to disable the connectors for subsequent queries.\n\t\t// Only the open parenthesis operator uses this, currently.\n\t\tvar tmpLastOperatorNoConnector = false;\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif ((tmpFilter[i].Connector != 'NONE') && (tmpFilter[i].Operator != ')') && (tmpWhere != ' WHERE') && (tmpLastOperatorNoConnector == false))\n\t\t\t{\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Connector;\n\t\t\t}\n\n\t\t\ttmpLastOperatorNoConnector = false;\n\n\t\t\tvar tmpColumnParameter;\n\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n\t\t\t\t// Open a logical grouping\n\t\t\t\ttmpWhere += ' (';\n\t\t\t\ttmpLastOperatorNoConnector = true;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n\t\t\t\ttmpWhere += ' )';\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN')\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator+' ( :'+tmpColumnParameter+' )';\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator+' :'+tmpColumnParameter;\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpWhere;\n\t};\n\n\t/**\n\t* Generate an ORDER BY clause from the sort array\n\t*\n\t* Each entry in the sort is an object like:\n\t* {Column:'Color',Direction:'Descending'}\n\t*\n\t* @method: generateOrderBy\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the field list clause\n\t*/\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tif (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpOrderClause = ' ORDER BY';\n\t\tfor (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += ',';\n\t\t\t}\n\t\t\ttmpOrderClause += ' '+escapeColumn(tmpOrderBy[i].Column, pParameters);\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += ' DESC';\n\t\t\t}\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t* Generate the limit clause\n\t*\n\t* @method: generateLimit\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpLimit = ' LIMIT';\n\t\t// Cap is required for a limit clause.\n\t\ttmpLimit += ' ' + pParameters.cap;\n\n\t\t// If there is a begin record, we'll pass that in as well.\n\t\tif (pParameters.begin !== false)\n\t\t{\n\t\t\ttmpLimit += ' FETCH ' + pParameters.begin;\n\t\t}\n\n\t\treturn tmpLimit;\n\t};\n\n\t/**\n\t* Generate the update SET clause\n\t*\n\t* @method: generateUpdateSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateSetters = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpUpdate = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pParameters.query.disableAutoDateStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateDate')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pParameters.query.disableAutoUserStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateIDUser')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// These are all ignored on update\n\t\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar tmpColumnDefaultParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = :'+tmpColumnDefaultParameter;\n\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnDefaultParameter] = tmpRecords[0][tmpColumn];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateDeleteSetters = function(pParameters)\n\t{\n\t\tif (pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t//Don't generate an UPDATE query if Delete tracking is disabled\n\t\t\treturn false;\n\t\t}\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = 1';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateUndeleteSetters = function(pParameters)\n\t{\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = 0';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetValues = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpCreateSet += ',';\n\t\t\t}\n\n\t\t\t//define a re-usable method for setting up field definitions in a default pattern\n\t\t\tvar buildDefaultDefinition = function()\n\t\t\t{\n\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t// Set the query parameter\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpRecords[0][tmpColumn];\n\t\t\t};\n\n\t\t\tvar tmpColumnParameter;\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NULL';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'AutoGUID':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse if (tmpRecords[0][tmpColumn] &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn].length >= 5 &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn] !== '0x0000000000000000') //stricture default\n\t\t\t\t\t{\n\t\t\t\t\t\t// Allow consumer to override AutoGUID\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.UUID;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\tif (pParameters.query.disableAutoDateStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NOW()';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\tif (pParameters.query.disableAutoUserStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use an appended number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpCreateSet === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetList = function(pParameters)\n\t{\n\t\t// The records were already validated by generateCreateSetValues\n\t\tvar tmpRecords = pParameters.query.records;\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\t\tif (tmpCreateSet != '')\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpCreateSet += ',';\n\t\t\t\t\t}\n\t\t\t\t\ttmpCreateSet += ' '+escapeColumn(tmpColumn, pParameters);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpCreateSetList = generateCreateSetList(pParameters);\n\t\tvar tmpCreateSetValues = generateCreateSetValues(pParameters);\n\n\t\tif (!tmpCreateSetValues)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'INSERT INTO'+tmpTableName+' ('+tmpCreateSetList+') VALUES ('+tmpCreateSetValues+');';\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* SELECT * FROM WIDGETS;\n\t* SELECT * FROM WIDGETS LIMIT 0, 20;\n\t* SELECT * FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20 WHERE LastName = 'Smith';\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpOrderBy = generateOrderBy(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\t\tconst tmpOptDistinct = pParameters.distinct ? ' DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:tmpFieldList, TableName:tmpTableName, Where:tmpWhere, OrderBy:tmpOrderBy, Limit:tmpLimit, Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Read Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT${tmpOptDistinct}${tmpFieldList} FROM${tmpTableName}${tmpWhere}${tmpOrderBy}${tmpLimit};`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateSetters = generateUpdateSetters(pParameters);\n\n\t\tif (!tmpUpdateSetters)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateSetters+tmpWhere+';';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateDeleteSetters = generateUpdateDeleteSetters(pParameters);\n\n\t\tif (tmpUpdateDeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateDeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'DELETE FROM'+tmpTableName+tmpWhere+';';\n\t\t}\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tlet tmpDeleteTrackingState = pParameters.query.disableDeleteTracking;\n\t\tpParameters.query.disableDeleteTracking = true;\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateUndeleteSetters = generateUpdateUndeleteSetters(pParameters);\n\t\tpParameters.query.disableDeleteTracking = tmpDeleteTrackingState;\n\n\t\tif (tmpUpdateUndeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateUndeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'SELECT NULL;';\n\t\t}\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tconst tmpFieldList = pParameters.distinct ? generateFieldList(pParameters, true) : '*';\n\n\t\t// here, we ignore the distinct keyword if no fields have been specified and\n\t\tif (pParameters.distinct && tmpFieldList.length < 1)\n\t\t{\n\t\t\tconsole.warn('Distinct requested but no field list or schema are available, so not honoring distinct for count query.');\n\t\t}\n\t\tconst tmpOptDistinct = pParameters.distinct && tmpFieldList.length > 0 ? 'DISTINCT' : '';\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:[], TableName:tmpTableName, Where:tmpWhere, OrderBy:'', Limit:'', Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Count Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT COUNT(${tmpOptDistinct}${tmpFieldList || '*'}) AS RowCount FROM${tmpTableName}${tmpWhere};`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t* Dialect Name\n\t*\n\t* @property name\n\t* @type string\n\t*/\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'ALASQL'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectALASQL;\n\n},{}],27:[function(require,module,exports){\n/**\n* FoxHound English Dialect\n*\n* Because if I can't ask for it in my native tongue, how am I going to ask a\n* complicated server for it?\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectEnglish\n*/\nvar FoxHoundDialectEnglish = function()\n{\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'Here is a '+tmpScope+'.';\n\t};\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* Please give me all your Widget records. Thanks.\n\t* Please give me 20 Widget records. Thanks.\n\t* Please give me 20 Widget records starting with record 5. Thanks.\n\t* Please give me the ID, Name and Cost of 20 Widget records starting with record 5. Thanks.\n\t* Please give me the ID and Name of 20 Widget records starting with record 5, when LastName equals \"Smith\". Thanks.\n\t*\n\t* @method Read\n\t* @param {Number} pLogLevel The log level for our object\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\t\tconst tmpDistinct = pParameters.distinct ? 'unique ' : '';\n\n\t\treturn `Please give me all your ${tmpDistinct}${tmpScope} records. Thanks.`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am changing your '+tmpScope+'.';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am deleting your '+tmpScope+'.';\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am undeleting your '+tmpScope+'.';\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\t\tconst tmpDistinct = pParameters.distinct ? 'unique ' : '';\n\n\t\treturn `Count your ${tmpDistinct}${tmpScope}.`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t * Dialect Name\n\t *\n\t * @property name\n\t * @type string\n\t */\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'English'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectEnglish;\n\n},{}],28:[function(require,module,exports){\n/**\n* FoxHound Meadow Endpoints Dialect\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectMeadowEndpoints\n*/\n\nvar FoxHoundDialectMeadowEndpoints = function()\n{\n\t/**\n\t * Generate a table name from the scope\n\t *\n\t * @method: generateTableName\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateTableName = function(pParameters)\n\t{\n\t\treturn pParameters.scope;\n\t};\n\n\t/**\n\t * Generate the Identity column from the schema or scope\n\t * \n\t * @method: generateIdentityColumnName\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateIdentityColumnName = function(pParameters)\n\t{\n\t\t// TODO: See about using the Schema or the Schemata for this\n\t\treturn `ID${pParameters.scope}`;\n\t};\n\n\t/**\n\t * Generate a field list from the array of dataElements\n\t *\n\t * Each entry in the dataElements is a simple string\n\t *\n\t * @method: generateFieldList\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the field list clause\n\t */\n\tvar generateFieldList = function(pParameters)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpFieldList = '';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ',';\n\t\t\t}\n\n tmpFieldList += tmpDataElements[i];\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\t/**\n\t * Generate a query from the array of where clauses\n\t *\n\t * Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name', \n\t\t\tOperator:'EQ', \n\t\t\tValue:'John', \n\t\t\tConnector:'And', \n\t\t\tParameter:'Name'\n\t\t}\n\t *\n\t * @method: generateWhere\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t */\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters);\n \n var tmpURL = '';\n\n let tmpfAddFilter = (pFilterCommand, pFilterParameters) =>\n {\n if (tmpURL.length > 0)\n {\n tmpURL += '~';\n }\n \n tmpURL += `${pFilterCommand}~${pFilterParameters[0]}~${pFilterParameters[1]}~${pFilterParameters[2]}`;\n };\n\n let tmpfTranslateOperator = (pOperator) =>\n {\n tmpNewOperator = 'EQ';\n switch(pOperator.toUpperCase())\n {\n case '!=':\n tmpNewOperator = 'NE';\n break;\n case '>':\n tmpNewOperator = 'GT';\n break;\n case '>=':\n tmpNewOperator = 'GE';\n break;\n case '<=':\n tmpNewOperator = 'LE';\n break;\n case '<':\n tmpNewOperator = 'LT';\n break;\n case 'LIKE':\n tmpNewOperator = 'LK';\n break;\n case 'IN':\n tmpNewOperator = 'INN';\n break;\n case 'NOT IN':\n tmpNewOperator = 'NI';\n break;\n }\n return tmpNewOperator;\n }\n\n // Translating Delete Tracking bit on query to a query with automagic\n // This will eventually deprecate this as part of the necessary query\n if (pParameters.query.disableDeleteTracking)\n {\n tmpfAddFilter('FBV',['Deleted','GE','0'])\n }\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n tmpfAddFilter('FOP',['0','(','0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n tmpfAddFilter('FCP',['0',')','0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN' || tmpFilter[i].Operator === \"NOT IN\")\n\t\t\t{\n let tmpFilterCommand = 'FBV';\n if (tmpFilter[i].Connector == 'OR')\n {\n tmpFilterCommand = 'FBVOR';\n }\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n tmpfAddFilter(tmpFilterCommand, [tmpFilter[i].Column, tmpfTranslateOperator(tmpFilter[i].Operator), tmpFilter[i].Value.map(encodeURIComponent).join(',')])\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NULL')\n\t\t\t{\n\t\t\t\t// IS NULL is a special operator which doesn't require a value, or parameter\n tmpfAddFilter('FBV', [tmpFilter[i].Column, 'IN', '0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n tmpfAddFilter('FBV', [tmpFilter[i].Column, 'NN', '0']);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n let tmpFilterCommand = 'FBV';\n if (tmpFilter[i].Connector == 'OR')\n {\n tmpFilterCommand = 'FBVOR';\n }\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n tmpfAddFilter(tmpFilterCommand, [tmpFilter[i].Column, tmpfTranslateOperator(tmpFilter[i].Operator), encodeURIComponent(tmpFilter[i].Value)]);\n\t\t\t}\n\t\t}\n\n let tmpOrderBy = generateOrderBy(pParameters);\n if (tmpOrderBy)\n {\n if (tmpURL)\n {\n tmpURL += '~';\n }\n tmpURL += tmpOrderBy;\n }\n\n\t\treturn tmpURL;\n\t};\n\n /**\n\t * Get the flags for the request\n * \n * These are usually passed in for Update and Create when extra tracking is disabled.\n\t *\n\t * @method: generateFlags\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Flags to be sent, if any.\n\t */\n function generateFlags(pParameters)\n {\n let tmpDisableAutoDateStamp = pParameters.query.disableAutoDateStamp;\n let tmpDisableDeleteTracking = pParameters.query.disableDeleteTracking;\n let tmpDisableAutoIdentity = pParameters.query.disableAutoIdentity;\n let tmpDisableAutoUserStamp = pParameters.query.disableAutoUserStamp;\n\n let tmpFlags = '';\n\n let fAddFlag = (pFlagSet, pFlag) =>\n {\n if (pFlagSet)\n {\n if (tmpFlags.length > 0)\n {\n tmpFlags += ',';\n }\n tmpFlags += pFlag;\n }\n };\n\n fAddFlag(tmpDisableAutoDateStamp, 'DisableAutoDateStamp');\n fAddFlag(tmpDisableDeleteTracking, 'DisableDeleteTracking');\n fAddFlag(tmpDisableAutoIdentity, 'DisableAutoIdentity');\n fAddFlag(tmpDisableAutoUserStamp, 'DisableAutoUserStamp');\n\n return tmpFlags;\n };\n\n /**\n\t * Get the ID for the record, to be used in URIs\n\t *\n\t * @method: getIDRecord\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} ID of the record in string form for the URI\n\t */\n\tvar getIDRecord = function(pParameters)\n\t{\n var tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\n\t\tvar tmpIDRecord = false;\n\n if (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn tmpIDRecord;\n\t\t}\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n // Check Schema Entry Type\n var tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tvar tmpSchemaEntry = {Column:tmpFilter[i].Column, Type:'Default'};\n\t\t\tfor (var j = 0; j < tmpSchema.length; j++)\n\t\t\t{\n // If this column is the AutoIdentity, set it.\n\t\t\t\tif ((tmpFilter[i].Column == tmpSchema[j].Column) &&\n (tmpSchema[j].Type == 'AutoIdentity'))\n\t\t\t\t{\n tmpIDRecord = tmpFilter[i].Value;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tmpIDRecord;\n }\n\t\n /**\n\t * Generate an ORDER BY clause from the sort array\n\t *\n\t * Each entry in the sort is an object like:\n\t * {Column:'Color',Direction:'Descending'}\n\t *\n\t * @method: generateOrderBy\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the field list clause\n\t */\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tvar tmpOrderClause = false;\n\n if (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn tmpOrderClause;\n\t\t}\n\n tmpOrderClause = '';\n\n for (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += '~';\n\t\t\t}\n\t\t\ttmpOrderClause += `FSF~${tmpOrderBy[i].Column}~`;\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += 'DESC~0';\n\t\t\t}\n else\n {\n tmpOrderClause += 'ASC~0'\n }\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t * Generate the limit clause\n\t *\n\t * @method: generateLimit\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n let tmpBegin = (pParameters.begin !== false) ? pParameters.begin : 0;\n\n return `${tmpBegin}/${pParameters.cap}`;\n\t};\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n var tmpFlags = generateFlags(pParameters);\n\n if (tmpTableName)\n {\n let tmpURL = tmpTableName;\n if (tmpFlags)\n {\n tmpURL = `${tmpURL}/WithFlags/${tmpFlags}`\n }\n return tmpURL;\n }\n else\n {\n return false;\n }\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\n\t\tvar tmpURL = `${tmpTableName}`;\n\t\t// In the case that there is only a single query parameter, and the parameter is a single identity, \n\t\t// we will cast it to the READ endpoint rather than READS.\n\t\tif ((pParameters.filter)\n\t\t\t && (pParameters.filter.length == 1)\n // If there is exactly one query filter parameter\n\t\t\t && (pParameters.filter[0].Column === generateIdentityColumnName(pParameters))\n\t\t\t // AND It is the Identity column\n\t\t\t && (pParameters.filter[0].Operator === '=')\n\t\t\t // AND The comparators is a simple equals \n\t\t\t && (tmpLimit == '') && (tmpFieldList == '')\n\t\t\t // AND There is no limit or field list set\n\t\t\t && (!pParameters.sort))\n\t\t\t // AND There is no sort clause\n\t\t{\n\t\t\t// THEN This is a SINGLE READ by presumption.\n\t\t\t// There are some bad side affects this could cause with chaining and overridden behaviors, if \n\t\t\t// we are requesting a filtered list of 1 record.\n\t\t\ttmpURL = `${tmpURL}/${pParameters.filter[0].Value}`;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttmpURL = `${tmpURL}s`;\n\t\t\tif (tmpFieldList)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/LiteExtended/${tmpFieldList}`\n\t\t\t}\n\t\t\tif (tmpWhere)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/FilteredTo/${tmpWhere}`;\n\t\t\t}\n\t\t\tif (tmpLimit)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/${tmpLimit}`;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpURL;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n var tmpFlags = generateFlags(pParameters);\n\n if (tmpTableName)\n {\n let tmpURL = tmpTableName;\n if (tmpFlags)\n {\n tmpURL = `${tmpURL}/WithFlags/${tmpFlags}`\n }\n return tmpURL;\n }\n else\n {\n return false;\n }\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpIDRecord = getIDRecord(pParameters);\n\n if (!tmpIDRecord)\n {\n return false;\n }\n\n\t\treturn `${tmpTableName}/${tmpIDRecord}`;\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\n let tmpCountQuery = `${tmpTableName}s/Count`;\n\n if (tmpWhere)\n {\n return `${tmpTableName}s/Count/FilteredTo/${tmpWhere}`;\n }\n\n return tmpCountQuery;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t * Dialect Name\n\t *\n\t * @property name\n\t * @type string\n\t */\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'MeadowEndpoints'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectMeadowEndpoints;\n\n},{}],29:[function(require,module,exports){\n/**\n* FoxHound MySQL Dialect\n*\n* @license MIT\n*\n* For a MySQL query override:\n// An underscore template with the following values:\n// <%= DataElements %> = Field1, Field2, Field3, Field4\n// <%= Begin %> = 0\n// <%= Cap %> = 10\n// <%= Filter %> = WHERE StartDate > :MyStartDate\n// <%= Sort %> = ORDER BY Field1\n// The values are empty strings if they aren't set.\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectMySQL\n*/\n\nvar FoxHoundDialectMySQL = function(pFable)\n{\n\t//Request time from SQL server with microseconds resolution\n\tconst SQL_NOW = \"NOW(3)\";\n\n\t_Fable = pFable;\n\n\t/**\n\t* Generate a table name from the scope\n\t*\n\t* @method: generateTableName\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateTableName = function(pParameters)\n\t{\n\t\tif (pParameters.scope && pParameters.scope.indexOf('`') >= 0)\n\t\t\treturn ' '+pParameters.scope+'';\n\t\telse\n\t\t\treturn ' `'+pParameters.scope+'`';\n\t};\n\n\t/**\n\t* Generate a field list from the array of dataElements\n\t*\n\t* Each entry in the dataElements is a simple string\n\t*\n\t* @method: generateFieldList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @param {Boolean} pIsForCountClause (optional) If true, generate fields for use within a count clause.\n\t* @return: {String} Returns the field list clause, or empty string if explicit fields are requested but cannot be fulfilled\n\t* due to missing schema.\n\t*/\n\tvar generateFieldList = function(pParameters, pIsForCountClause)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\tconst tmpTableName = generateTableName(pParameters);\n\t\t\tif (!pIsForCountClause)\n\t\t\t{\n\t\t\t\treturn tmpTableName + '.*';\n\t\t\t}\n\t\t\t// we need to list all of the table fields explicitly; get them from the schema\n\t\t\tconst tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tif (tmpSchema.length < 1)\n\t\t\t{\n\t\t\t\t// this means we have no schema; returning an empty string here signals the calling code to handle this case\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst idColumn = tmpSchema.find((entry) => entry.Type === 'AutoIdentity');\n\t\t\tif (!idColumn)\n\t\t\t{\n\t\t\t\t// this means there is no autoincrementing unique ID column; treat as above\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst qualifiedIDColumn = `${tmpTableName}.${idColumn.Column}`;\n\t\t\treturn ` ${generateSafeFieldName(qualifiedIDColumn)}`;\n\t\t}\n\n\t\tvar tmpFieldList = ' ';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ', ';\n\t\t\t}\n\t\t\tif (Array.isArray(tmpDataElements[i]))\n\t\t\t{\n\t\t\t\ttmpFieldList += generateSafeFieldName(tmpDataElements[i][0]);\n\t\t\t\tif (tmpDataElements[i].length > 1 && tmpDataElements[i][1])\n\t\t\t\t{\n\t\t\t\t\ttmpFieldList += \" AS \" + generateSafeFieldName(tmpDataElements[i][1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpFieldList += generateSafeFieldName(tmpDataElements[i]);\n\t\t\t}\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\tconst SURROUNDING_QUOTES_AND_WHITESPACE_REGEX = /^[` ]+|[` ]+$/g;\n\n\tconst cleanseQuoting = (str) =>\n\t{\n\t\treturn str.replace(SURROUNDING_QUOTES_AND_WHITESPACE_REGEX, '');\n\t};\n\n\t/**\n\t* Ensure a field name is properly escaped.\n\t*/\n\tvar generateSafeFieldName = function(pFieldName)\n\t{\n\t\tlet pFieldNames = pFieldName.split('.');\n\t\tif (pFieldNames.length > 1)\n\t\t{\n\t\t\tconst cleansedFieldName = cleanseQuoting(pFieldNames[1]);\n\t\t\tif (cleansedFieldName === '*')\n\t\t\t{\n\t\t\t\t// do not put * as `*`\n\t\t\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`.*\";\n\t\t\t}\n\t\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`.`\" + cleansedFieldName + \"`\";\n\t\t}\n\t\tconst cleansedFieldName = cleanseQuoting(pFieldNames[0]);\n\t\tif (cleansedFieldName === '*')\n\t\t{\n\t\t\t// do not put * as `*`\n\t\t\treturn '*';\n\t\t}\n\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`\";\n\t}\n\n\t/**\n\t* Generate a query from the array of where clauses\n\t*\n\t* Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name',\n\t\t\tOperator:'EQ',\n\t\t\tValue:'John',\n\t\t\tConnector:'And',\n\t\t\tParameter:'Name'\n\t\t}\n\t*\n\t* @method: generateWhere\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t*/\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters);\n\n\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t// Check if there is a Deleted column on the Schema. If so, we add this to the filters automatically (if not already present)\n\t\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\tvar tmpSchemaEntry = tmpSchema[i];\n\n\t\t\t\tif (tmpSchemaEntry.Type === 'Deleted')\n\t\t\t\t{\n\t\t\t\t\tvar tmpHasDeletedParameter = false;\n\n\t\t\t\t\t//first, check to see if filters are already looking for Deleted column\n\t\t\t\t\tif (tmpFilter.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var x = 0; x < tmpFilter.length; x++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (tmpFilter[x].Column === tmpSchemaEntry.Column)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpHasDeletedParameter = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!tmpHasDeletedParameter)\n\t\t\t\t\t{\n\t\t\t\t\t\t//if not, we need to add it\n\t\t\t\t\t\ttmpFilter.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tColumn: tmpTableName + '.' + tmpSchemaEntry.Column,\n\t\t\t\t\t\t\tOperator: '=',\n\t\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\t\tConnector: 'AND',\n\t\t\t\t\t\t\tParameter: 'Deleted'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpWhere = ' WHERE';\n\n\t\t// This is used to disable the connectors for subsequent queries.\n\t\t// Only the open parenthesis operator uses this, currently.\n\t\tvar tmpLastOperatorNoConnector = false;\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif ((tmpFilter[i].Connector != 'NONE') && (tmpFilter[i].Operator != ')') && (tmpWhere != ' WHERE') && (tmpLastOperatorNoConnector == false))\n\t\t\t{\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Connector;\n\t\t\t}\n\n\t\t\ttmpLastOperatorNoConnector = false;\n\n\t\t\tvar tmpColumnParameter;\n\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n\t\t\t\t// Open a logical grouping\n\t\t\t\ttmpWhere += ' (';\n\t\t\t\ttmpLastOperatorNoConnector = true;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n\t\t\t\ttmpWhere += ' )';\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN' || tmpFilter[i].Operator === \"NOT IN\")\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator+' ( :'+tmpColumnParameter+' )';\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NULL')\n\t\t\t{\n\t\t\t\t// IS NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator+' :'+tmpColumnParameter;\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpWhere;\n\t};\n\n\t/**\n\t* Generate an ORDER BY clause from the sort array\n\t*\n\t* Each entry in the sort is an object like:\n\t* {Column:'Color',Direction:'Descending'}\n\t*\n\t* @method: generateOrderBy\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the field list clause\n\t*/\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tif (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpOrderClause = ' ORDER BY';\n\t\tfor (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += ',';\n\t\t\t}\n\t\t\ttmpOrderClause += ' '+tmpOrderBy[i].Column;\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += ' DESC';\n\t\t\t}\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t* Generate the limit clause\n\t*\n\t* @method: generateLimit\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpLimit = ' LIMIT';\n\t\t// If there is a begin record, we'll pass that in as well.\n\t\tif (pParameters.begin !== false)\n\t\t{\n\t\t\ttmpLimit += ' ' + pParameters.begin + ',';\n\t\t}\n\t\t// Cap is required for a limit clause.\n\t\ttmpLimit += ' ' + pParameters.cap;\n\n\t\treturn tmpLimit;\n\t};\n\n\t/**\n\t* Generate the join clause\n\t*\n\t* @method: generateJoins\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the join clause\n\t*/\n\tvar generateJoins = function(pParameters)\n\t{\n\t\tvar tmpJoins = pParameters.join;\n\t\tif (!Array.isArray(tmpJoins) || tmpJoins.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpJoinClause = ''; //ex. ' INNER JOIN';\n\t\tfor (var i = 0; i < tmpJoins.length; i++)\n\t\t{\n\t\t\tvar join = tmpJoins[i];\n\t\t\t//verify that all required fields are valid\n\t\t\tif (join.Type && join.Table && join.From && join.To)\n\t\t\t{\n\t\t\t\ttmpJoinClause += ` ${join.Type} ${join.Table} ON ${join.From} = ${join.To}`;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpJoinClause;\n\t}\n\n\t/**\n\t* Generate the update SET clause\n\t*\n\t* @method: generateUpdateSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateSetters = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpUpdate = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pParameters.query.disableAutoDateStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateDate')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pParameters.query.disableAutoUserStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateIDUser')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// These are all ignored on update\n\t\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar tmpColumnDefaultParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = :'+tmpColumnDefaultParameter;\n\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnDefaultParameter] = tmpRecords[0][tmpColumn];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateDeleteSetters = function(pParameters)\n\t{\n\t\tif (pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t//Don't generate an UPDATE query if Delete tracking is disabled\n\t\t\treturn false;\n\t\t}\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = 1';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-undelete SET clause\n\t*\n\t* @method: generateUpdateUndeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateUndeleteSetters = function(pParameters)\n\t{\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = 0';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// The undelete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = :'+tmpColumnParameter;\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetValues = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpCreateSet += ',';\n\t\t\t}\n\n\t\t\t//define a re-usable method for setting up field definitions in a default pattern\n\t\t\tvar buildDefaultDefinition = function()\n\t\t\t{\n\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t// Set the query parameter\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpRecords[0][tmpColumn];\n\t\t\t};\n\n\t\t\tvar tmpColumnParameter;\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NULL';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'AutoGUID':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse if (tmpRecords[0][tmpColumn] &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn].length >= 5 &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn] !== '0x0000000000000000') //stricture default\n\t\t\t\t\t{\n\t\t\t\t\t\t// Allow consumer to override AutoGUID\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.UUID;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\tif (pParameters.query.disableAutoDateStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' ' + SQL_NOW;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\t\tif (pParameters.query.disableAutoUserStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use an appended number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpCreateSet === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetList = function(pParameters)\n\t{\n\t\t// The records were already validated by generateCreateSetValues\n\t\tvar tmpRecords = pParameters.query.records;\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\t\tif (tmpCreateSet != '')\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpCreateSet += ',';\n\t\t\t\t\t}\n\t\t\t\t\ttmpCreateSet += ' '+tmpColumn;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpCreateSetList = generateCreateSetList(pParameters);\n\t\tvar tmpCreateSetValues = generateCreateSetValues(pParameters);\n\n\t\tif (!tmpCreateSetValues)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'INSERT INTO'+tmpTableName+' ('+tmpCreateSetList+') VALUES ('+tmpCreateSetValues+');';\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* SELECT * FROM WIDGETS;\n\t* SELECT * FROM WIDGETS LIMIT 0, 20;\n\t* SELECT * FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20 WHERE LastName = 'Smith';\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpJoin = generateJoins(pParameters);\n\t\tvar tmpOrderBy = generateOrderBy(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\t\tconst tmpOptDistinct = pParameters.distinct ? ' DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:tmpFieldList, TableName:tmpTableName, Where:tmpWhere, Join:tmpJoin, OrderBy:tmpOrderBy, Limit:tmpLimit, Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Read Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT${tmpOptDistinct}${tmpFieldList} FROM${tmpTableName}${tmpJoin}${tmpWhere}${tmpOrderBy}${tmpLimit};`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateSetters = generateUpdateSetters(pParameters);\n\n\t\tif (!tmpUpdateSetters)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateSetters+tmpWhere+';';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateDeleteSetters = generateUpdateDeleteSetters(pParameters);\n\n\t\tif (tmpUpdateDeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateDeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'DELETE FROM'+tmpTableName+tmpWhere+';';\n\t\t}\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\t// TODO: Fix these\n\t\tlet tmpDeleteTrackingState = pParameters.query.disableDeleteTracking;\n\t\tpParameters.query.disableDeleteTracking = true;\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateUndeleteSetters = generateUpdateUndeleteSetters(pParameters);\n\t\tpParameters.query.disableDeleteTracking = tmpDeleteTrackingState;\n\n\t\tif (tmpUpdateUndeleteSetters)\n\t\t{\n\t\t\t//If the table has a deleted bit, go forward with the update to change things.\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateUndeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// This is a no-op because the record can't be undeleted.\n\t\t\t// TODO: Should it throw instead?\n\t\t\treturn 'SELECT NULL;';\n\t\t}\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpFieldList = pParameters.distinct ? generateFieldList(pParameters, true) : '*';\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpJoin = generateJoins(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\t// here, we ignore the distinct keyword if no fields have been specified and\n\t\tif (pParameters.distinct && tmpFieldList.length < 1)\n\t\t{\n\t\t\tconsole.warn('Distinct requested but no field list or schema are available, so not honoring distinct for count query.');\n\t\t}\n\t\tconst tmpOptDistinct = pParameters.distinct && tmpFieldList.length > 0 ? 'DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:[], TableName:tmpTableName, Where:tmpWhere, OrderBy:'', Limit:'', Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Count Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT COUNT(${tmpOptDistinct}${tmpFieldList || '*'}) AS RowCount FROM${tmpTableName}${tmpJoin}${tmpWhere};`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t* Dialect Name\n\t*\n\t* @property name\n\t* @type string\n\t*/\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'MySQL'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectMySQL;\n\n},{}],30:[function(require,module,exports){\n'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n\n},{}],31:[function(require,module,exports){\n'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n\n},{\"./implementation\":30}],32:[function(require,module,exports){\nvar util = require('util')\nvar isProperty = require('is-property')\n\nvar INDENT_START = /[\\{\\[]/\nvar INDENT_END = /[\\}\\]]/\n\n// from https://mathiasbynens.be/notes/reserved-keywords\nvar RESERVED = [\n 'do',\n 'if',\n 'in',\n 'for',\n 'let',\n 'new',\n 'try',\n 'var',\n 'case',\n 'else',\n 'enum',\n 'eval',\n 'null',\n 'this',\n 'true',\n 'void',\n 'with',\n 'await',\n 'break',\n 'catch',\n 'class',\n 'const',\n 'false',\n 'super',\n 'throw',\n 'while',\n 'yield',\n 'delete',\n 'export',\n 'import',\n 'public',\n 'return',\n 'static',\n 'switch',\n 'typeof',\n 'default',\n 'extends',\n 'finally',\n 'package',\n 'private',\n 'continue',\n 'debugger',\n 'function',\n 'arguments',\n 'interface',\n 'protected',\n 'implements',\n 'instanceof',\n 'NaN',\n 'undefined'\n]\n\nvar RESERVED_MAP = {}\n\nfor (var i = 0; i < RESERVED.length; i++) {\n RESERVED_MAP[RESERVED[i]] = true\n}\n\nvar isVariable = function (name) {\n return isProperty(name) && !RESERVED_MAP.hasOwnProperty(name)\n}\n\nvar formats = {\n s: function(s) {\n return '' + s\n },\n d: function(d) {\n return '' + Number(d)\n },\n o: function(o) {\n return JSON.stringify(o)\n }\n}\n\nvar genfun = function() {\n var lines = []\n var indent = 0\n var vars = {}\n\n var push = function(str) {\n var spaces = ''\n while (spaces.length < indent*2) spaces += ' '\n lines.push(spaces+str)\n }\n\n var pushLine = function(line) {\n if (INDENT_END.test(line.trim()[0]) && INDENT_START.test(line[line.length-1])) {\n indent--\n push(line)\n indent++\n return\n }\n if (INDENT_START.test(line[line.length-1])) {\n push(line)\n indent++\n return\n }\n if (INDENT_END.test(line.trim()[0])) {\n indent--\n push(line)\n return\n }\n\n push(line)\n }\n\n var line = function(fmt) {\n if (!fmt) return line\n\n if (arguments.length === 1 && fmt.indexOf('\\n') > -1) {\n var lines = fmt.trim().split('\\n')\n for (var i = 0; i < lines.length; i++) {\n pushLine(lines[i].trim())\n }\n } else {\n pushLine(util.format.apply(util, arguments))\n }\n\n return line\n }\n\n line.scope = {}\n line.formats = formats\n\n line.sym = function(name) {\n if (!name || !isVariable(name)) name = 'tmp'\n if (!vars[name]) vars[name] = 0\n return name + (vars[name]++ || '')\n }\n\n line.property = function(obj, name) {\n if (arguments.length === 1) {\n name = obj\n obj = ''\n }\n\n name = name + ''\n\n if (isProperty(name)) return (obj ? obj + '.' + name : name)\n return obj ? obj + '[' + JSON.stringify(name) + ']' : JSON.stringify(name)\n }\n\n line.toString = function() {\n return lines.join('\\n')\n }\n\n line.toFunction = function(scope) {\n if (!scope) scope = {}\n\n var src = 'return ('+line.toString()+')'\n\n Object.keys(line.scope).forEach(function (key) {\n if (!scope[key]) scope[key] = line.scope[key]\n })\n\n var keys = Object.keys(scope).map(function(key) {\n return key\n })\n\n var vals = keys.map(function(key) {\n return scope[key]\n })\n\n return Function.apply(null, keys.concat(src)).apply(null, vals)\n }\n\n if (arguments.length) line.apply(null, arguments)\n\n return line\n}\n\ngenfun.formats = formats\nmodule.exports = genfun\n\n},{\"is-property\":47,\"util\":54}],33:[function(require,module,exports){\nvar isProperty = require('is-property')\n\nvar gen = function(obj, prop) {\n return isProperty(prop) ? obj+'.'+prop : obj+'['+JSON.stringify(prop)+']'\n}\n\ngen.valid = isProperty\ngen.property = function (prop) {\n return isProperty(prop) ? prop : JSON.stringify(prop)\n}\n\nmodule.exports = gen\n\n},{\"is-property\":47}],34:[function(require,module,exports){\n'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\n},{\"function-bind\":31,\"has\":39,\"has-symbols\":36}],35:[function(require,module,exports){\n'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n\n},{\"get-intrinsic\":34}],36:[function(require,module,exports){\n'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n\n},{\"./shams\":37}],37:[function(require,module,exports){\n'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n\n},{}],38:[function(require,module,exports){\n'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n\n},{\"has-symbols/shams\":37}],39:[function(require,module,exports){\n'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n\n},{\"function-bind\":31}],40:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n\n},{}],41:[function(require,module,exports){\n'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n\n},{\"call-bind/callBound\":20,\"has-tostringtag/shams\":38}],42:[function(require,module,exports){\n'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n\n},{}],43:[function(require,module,exports){\n'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n\n},{\"has-tostringtag/shams\":38}],44:[function(require,module,exports){\nvar reIpv4FirstPass = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/\n\nvar reSubnetString = /\\/\\d{1,3}(?=%|$)/\nvar reForwardSlash = /\\//\nvar reZone = /%.*$/\nvar reBadCharacters = /([^0-9a-f:/%])/i\nvar reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/i\n\nfunction validate4 (input) {\n if (!(reIpv4FirstPass.test(input))) return false\n\n var parts = input.split('.')\n\n if (parts.length !== 4) return false\n\n if (parts[0][0] === '0' && parts[0].length > 1) return false\n if (parts[1][0] === '0' && parts[1].length > 1) return false\n if (parts[2][0] === '0' && parts[2].length > 1) return false\n if (parts[3][0] === '0' && parts[3].length > 1) return false\n\n var n0 = Number(parts[0])\n var n1 = Number(parts[1])\n var n2 = Number(parts[2])\n var n3 = Number(parts[3])\n\n return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256)\n}\n\nfunction validate6 (input) {\n var withoutSubnet = input.replace(reSubnetString, '')\n var hasSubnet = (input.length !== withoutSubnet.length)\n\n // FIXME: this should probably be an option in the future\n if (hasSubnet) return false\n\n if (!hasSubnet) {\n if (reForwardSlash.test(input)) return false\n }\n\n var withoutZone = withoutSubnet.replace(reZone, '')\n var lastPartSeparator = withoutZone.lastIndexOf(':')\n\n if (lastPartSeparator === -1) return false\n\n var lastPart = withoutZone.substring(lastPartSeparator + 1)\n var hasV4Part = validate4(lastPart)\n var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone)\n\n if (reBadCharacters.test(address)) return false\n if (reBadAddress.test(address)) return false\n\n var halves = address.split('::')\n\n if (halves.length > 2) return false\n\n if (halves.length === 2) {\n var first = (halves[0] === '' ? [] : halves[0].split(':'))\n var last = (halves[1] === '' ? [] : halves[1].split(':'))\n var remainingLength = 8 - (first.length + last.length)\n\n if (remainingLength <= 0) return false\n } else {\n if (address.split(':').length !== 8) return false\n }\n\n return true\n}\n\nfunction validate (input) {\n return validate4(input) || validate6(input)\n}\n\nmodule.exports = function validator (options) {\n if (!options) options = {}\n\n if (options.version === 4) return validate4\n if (options.version === 6) return validate6\n if (options.version == null) return validate\n\n throw new Error('Unknown version: ' + options.version)\n}\n\nmodule.exports['__all_regexes__'] = [\n reIpv4FirstPass,\n reSubnetString,\n reForwardSlash,\n reZone,\n reBadCharacters,\n reBadAddress\n]\n\n},{}],45:[function(require,module,exports){\nvar createIpValidator = require('is-my-ip-valid')\n\nvar reEmailWhitespace = /\\s/\nvar reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/\nvar reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/\nvar rePhoneFirstPass = /^\\+[0-9][0-9 ]{5,27}[0-9]$/\nvar rePhoneDoubleSpace = / {2}/\nvar rePhoneGlobalSpace = / /g\n\nexports['date-time'] = /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+|)([zZ]|[+-]\\d{2}:\\d{2})$/\nexports['date'] = /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/\nexports['time'] = /^\\d{2}:\\d{2}:\\d{2}$/\nexports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) }\nexports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 })\nexports['ipv6'] = createIpValidator({ version: 6 })\nexports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\\-.]*:[^\\s]*$/\nexports['color'] = /(#?([0-9A-Fa-f]{3,6})\\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\))/\nexports['hostname'] = function (input) {\n if (!(reHostnameFirstPass.test(input))) return false\n\n var parts = input.split('.')\n\n for (var i = 0; i < parts.length; i++) {\n if (!(reHostnamePart.test(parts[i]))) return false\n }\n\n return true\n}\nexports['alpha'] = /^[a-zA-Z]+$/\nexports['alphanumeric'] = /^[a-zA-Z0-9]+$/\nexports['style'] = /.:\\s*[^;]/g\nexports['phone'] = function (input) {\n if (!(rePhoneFirstPass.test(input))) return false\n if (rePhoneDoubleSpace.test(input)) return false\n\n var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length\n\n return (digits >= 7 && digits <= 15)\n}\nexports['utc-millisec'] = /^[0-9]{1,15}\\.?[0-9]{0,15}$/\n\n},{\"is-my-ip-valid\":44}],46:[function(require,module,exports){\nvar genobj = require('generate-object-property')\nvar genfun = require('generate-function')\nvar jsonpointer = require('jsonpointer')\nvar xtend = require('xtend')\nvar formats = require('./formats')\n\nvar get = function(obj, additionalSchemas, ptr) {\n\n var visit = function(sub) {\n if (sub && sub.id === ptr) return sub\n if (typeof sub !== 'object' || !sub) return null\n return Object.keys(sub).reduce(function(res, k) {\n return res || visit(sub[k])\n }, null)\n }\n\n var res = visit(obj)\n if (res) return res\n\n ptr = ptr.replace(/^#/, '')\n ptr = ptr.replace(/\\/$/, '')\n\n try {\n return jsonpointer.get(obj, decodeURI(ptr))\n } catch (err) {\n var end = ptr.indexOf('#')\n var other\n // external reference\n if (end !== 0) {\n // fragment doesn't exist.\n if (end === -1) {\n other = additionalSchemas[ptr]\n } else {\n var ext = ptr.slice(0, end)\n other = additionalSchemas[ext]\n var fragment = ptr.slice(end).replace(/^#/, '')\n try {\n return jsonpointer.get(other, fragment)\n } catch (err) {}\n }\n } else {\n other = additionalSchemas[ptr]\n }\n return other || null\n }\n}\n\nvar types = {}\n\ntypes.any = function() {\n return 'true'\n}\n\ntypes.null = function(name) {\n return name+' === null'\n}\n\ntypes.boolean = function(name) {\n return 'typeof '+name+' === \"boolean\"'\n}\n\ntypes.array = function(name) {\n return 'Array.isArray('+name+')'\n}\n\ntypes.object = function(name) {\n return 'typeof '+name+' === \"object\" && '+name+' && !Array.isArray('+name+')'\n}\n\ntypes.number = function(name) {\n return 'typeof '+name+' === \"number\" && isFinite('+name+')'\n}\n\ntypes.integer = function(name) {\n return 'typeof '+name+' === \"number\" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)'\n}\n\ntypes.string = function(name) {\n return 'typeof '+name+' === \"string\"'\n}\n\nvar unique = function(array, len) {\n len = Math.min(len === -1 ? array.length : len, array.length)\n var list = []\n for (var i = 0; i < len; i++) {\n list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i])\n }\n for (var i = 1; i < list.length; i++) {\n if (list.indexOf(list[i]) !== i) return false\n }\n return true\n}\n\nvar isMultipleOf = function(name, multipleOf) {\n var res;\n var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1\n if (factor > 1) {\n var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1\n if (factorName > factor) res = true\n else res = Math.round(factor * name) % (factor * multipleOf)\n }\n else res = name % multipleOf;\n return !res;\n}\n\nvar testLimitedRegex = function (r, s, maxLength) {\n if (maxLength > -1 && s.length > maxLength) return true\n return r.test(s)\n}\n\nvar compile = function(schema, cache, root, reporter, opts) {\n var fmts = opts ? xtend(formats, opts.formats) : formats\n var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex}\n var verbose = opts ? !!opts.verbose : false;\n var greedy = opts && opts.greedy !== undefined ?\n opts.greedy : false;\n\n var syms = {}\n var allocated = []\n var gensym = function(name) {\n var res = name+(syms[name] = (syms[name] || 0)+1)\n allocated.push(res)\n return res\n }\n\n var formatName = function(field) {\n var s = JSON.stringify(field)\n try {\n var pattern = /\\[([^\\[\\]\"]+)\\]/\n while (pattern.test(s)) s = s.replace(pattern, replacer)\n return s\n } catch (_) {\n return JSON.stringify(field)\n }\n\n function replacer (match, v) {\n if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable')\n return '.\" + ' + v + ' + \"'\n }\n }\n\n var reversePatterns = {}\n var patterns = function(p) {\n if (reversePatterns[p]) return reversePatterns[p]\n var n = gensym('pattern')\n scope[n] = new RegExp(p)\n reversePatterns[p] = n\n return n\n }\n\n var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z']\n var genloop = function() {\n var v = vars.shift()\n vars.push(v+v[0])\n allocated.push(v)\n return v\n }\n\n var visit = function(name, node, reporter, filter, schemaPath) {\n var properties = node.properties\n var type = node.type\n var tuple = false\n\n if (Array.isArray(node.items)) { // tuple type\n properties = {}\n node.items.forEach(function(item, i) {\n properties[i] = item\n })\n type = 'array'\n tuple = true\n }\n\n var indent = 0\n var error = function(msg, prop, value) {\n validate('errors++')\n if (reporter === true) {\n validate('if (validate.errors === null) validate.errors = []')\n if (verbose) {\n validate(\n 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})',\n formatName(prop || name),\n JSON.stringify(msg),\n value || name,\n JSON.stringify(type),\n JSON.stringify(schemaPath)\n )\n } else {\n validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg))\n }\n }\n }\n\n if (node.required === true) {\n indent++\n validate('if (%s === undefined) {', name)\n error('is required')\n validate('} else {')\n } else {\n indent++\n validate('if (%s !== undefined) {', name)\n }\n\n var valid = [].concat(type)\n .map(function(t) {\n if (t && !types.hasOwnProperty(t)) {\n throw new Error('Unknown type: ' + t)\n }\n\n return types[t || 'any'](name)\n })\n .join(' || ') || 'true'\n\n if (valid !== 'true') {\n indent++\n validate('if (!(%s)) {', valid)\n error('is the wrong type')\n validate('} else {')\n }\n\n if (tuple) {\n if (node.additionalItems === false) {\n validate('if (%s.length > %d) {', name, node.items.length)\n error('has additional items')\n validate('}')\n } else if (node.additionalItems) {\n var i = genloop()\n validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i)\n visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems'))\n validate('}')\n }\n }\n\n if (node.format && fmts[node.format]) {\n if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name))\n var n = gensym('format')\n scope[n] = fmts[node.format]\n\n if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name)\n else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength)\n error('must be '+node.format+' format')\n validate('}')\n if (type !== 'string' && formats[node.format]) validate('}')\n }\n\n if (Array.isArray(node.required)) {\n var n = gensym('missing')\n validate('var %s = 0', n)\n var checkRequired = function (req) {\n var prop = genobj(name, req);\n validate('if (%s === undefined) {', prop)\n error('is required', prop)\n validate('%s++', n)\n validate('}')\n }\n validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true')\n node.required.map(checkRequired)\n validate('}');\n if (!greedy) {\n validate('if (%s === 0) {', n)\n indent++\n }\n }\n\n if (node.uniqueItems) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1)\n error('must be unique')\n validate('}')\n if (type !== 'array') validate('}')\n }\n\n if (node.enum) {\n var complex = node.enum.some(function(e) {\n return typeof e === 'object'\n })\n\n var compare = complex ?\n function(e) {\n return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')'\n } :\n function(e) {\n return name+' !== '+JSON.stringify(e)\n }\n\n validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false')\n error('must be an enum value')\n validate('}')\n }\n\n if (node.dependencies) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n Object.keys(node.dependencies).forEach(function(key) {\n var deps = node.dependencies[key]\n if (typeof deps === 'string') deps = [deps]\n\n var exists = function(k) {\n return genobj(name, k) + ' !== undefined'\n }\n\n if (Array.isArray(deps)) {\n validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true')\n error('dependencies not set')\n validate('}')\n }\n if (typeof deps === 'object') {\n validate('if (%s !== undefined) {', genobj(name, key))\n visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key]))\n validate('}')\n }\n })\n\n if (type !== 'object') validate('}')\n }\n\n if (node.additionalProperties || node.additionalProperties === false) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n var i = genloop()\n var keys = gensym('keys')\n\n var toCompare = function(p) {\n return keys+'['+i+'] !== '+JSON.stringify(p)\n }\n\n var toTest = function(p) {\n return '!'+patterns(p)+'.test('+keys+'['+i+'])'\n }\n\n var additionalProp = Object.keys(properties || {}).map(toCompare)\n .concat(Object.keys(node.patternProperties || {}).map(toTest))\n .join(' && ') || 'true'\n\n validate('var %s = Object.keys(%s)', keys, name)\n ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i)\n ('if (%s) {', additionalProp)\n\n if (node.additionalProperties === false) {\n if (filter) validate('delete %s', name+'['+keys+'['+i+']]')\n error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']')\n } else {\n visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties']))\n }\n\n validate\n ('}')\n ('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.$ref) {\n var sub = get(root, opts && opts.schemas || {}, node.$ref)\n if (sub) {\n var fn = cache[node.$ref]\n if (!fn) {\n cache[node.$ref] = function proxy(data) {\n return fn(data)\n }\n fn = compile(sub, cache, root, false, opts)\n }\n var n = gensym('ref')\n scope[n] = fn\n validate('if (!(%s(%s))) {', n, name)\n error('referenced schema does not match')\n validate('}')\n }\n }\n\n if (node.not) {\n var prev = gensym('prev')\n validate('var %s = errors', prev)\n visit(name, node.not, false, filter, schemaPath.concat('not'))\n validate('if (%s === errors) {', prev)\n error('negative schema matches')\n validate('} else {')\n ('errors = %s', prev)\n ('}')\n }\n\n if (node.items && !tuple) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n var i = genloop()\n validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i)\n visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items'))\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.patternProperties) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n var keys = gensym('keys')\n var i = genloop()\n validate\n ('var %s = Object.keys(%s)', keys, name)\n ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i)\n\n Object.keys(node.patternProperties).forEach(function(key) {\n var p = patterns(key)\n validate('if (%s.test(%s)) {', p, keys+'['+i+']')\n visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key]))\n validate('}')\n })\n\n validate('}')\n if (type !== 'object') validate('}')\n }\n\n if (node.pattern) {\n var p = patterns(node.pattern)\n if (type !== 'string') validate('if (%s) {', types.string(name))\n validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength)\n error('pattern mismatch')\n validate('}')\n if (type !== 'string') validate('}')\n }\n\n if (node.allOf) {\n node.allOf.forEach(function(sch, key) {\n visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key]))\n })\n }\n\n if (node.anyOf && node.anyOf.length) {\n var prev = gensym('prev')\n\n node.anyOf.forEach(function(sch, i) {\n if (i === 0) {\n validate('var %s = errors', prev)\n } else {\n validate('if (errors !== %s) {', prev)\n ('errors = %s', prev)\n }\n visit(name, sch, false, false, schemaPath)\n })\n node.anyOf.forEach(function(sch, i) {\n if (i) validate('}')\n })\n validate('if (%s !== errors) {', prev)\n error('no schemas match')\n validate('}')\n }\n\n if (node.oneOf && node.oneOf.length) {\n var prev = gensym('prev')\n var passes = gensym('passes')\n\n validate\n ('var %s = errors', prev)\n ('var %s = 0', passes)\n\n node.oneOf.forEach(function(sch, i) {\n visit(name, sch, false, false, schemaPath)\n validate('if (%s === errors) {', prev)\n ('%s++', passes)\n ('} else {')\n ('errors = %s', prev)\n ('}')\n })\n\n validate('if (%s !== 1) {', passes)\n error('no (or more than one) schemas match')\n validate('}')\n }\n\n if (node.multipleOf !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf)\n\n error('has a remainder')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (node.maxProperties !== undefined) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties)\n error('has more properties than allowed')\n validate('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.minProperties !== undefined) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n validate('if (Object.keys(%s).length < %d) {', name, node.minProperties)\n error('has less properties than allowed')\n validate('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.maxItems !== undefined) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n validate('if (%s.length > %d) {', name, node.maxItems)\n error('has more items than allowed')\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.minItems !== undefined) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n validate('if (%s.length < %d) {', name, node.minItems)\n error('has less items than allowed')\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.maxLength !== undefined) {\n if (type !== 'string') validate('if (%s) {', types.string(name))\n\n validate('if (%s.length > %d) {', name, node.maxLength)\n error('has longer length than allowed')\n validate('}')\n\n if (type !== 'string') validate('}')\n }\n\n if (node.minLength !== undefined) {\n if (type !== 'string') validate('if (%s) {', types.string(name))\n\n validate('if (%s.length < %d) {', name, node.minLength)\n error('has less length than allowed')\n validate('}')\n\n if (type !== 'string') validate('}')\n }\n\n if (node.minimum !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum)\n error('is less than minimum')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (node.maximum !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum)\n error('is more than maximum')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (properties) {\n Object.keys(properties).forEach(function(p) {\n if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name)\n\n visit(\n genobj(name, p),\n properties[p],\n reporter,\n filter,\n schemaPath.concat(tuple ? p : ['properties', p])\n )\n\n if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}')\n })\n }\n\n while (indent--) validate('}')\n }\n\n var validate = genfun\n ('function validate(data) {')\n // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this\n ('if (data === undefined) data = null')\n ('validate.errors = null')\n ('var errors = 0')\n\n visit('data', schema, reporter, opts && opts.filter, [])\n\n validate\n ('return errors === 0')\n ('}')\n\n validate = validate.toFunction(scope)\n validate.errors = null\n\n if (Object.defineProperty) {\n Object.defineProperty(validate, 'error', {\n get: function() {\n if (!validate.errors) return ''\n return validate.errors.map(function(err) {\n return err.field + ' ' + err.message;\n }).join('\\n')\n }\n })\n }\n\n validate.toJSON = function() {\n return schema\n }\n\n return validate\n}\n\nmodule.exports = function(schema, opts) {\n if (typeof schema === 'string') schema = JSON.parse(schema)\n return compile(schema, {}, schema, true, opts)\n}\n\nmodule.exports.filter = function(schema, opts) {\n var validate = module.exports(schema, xtend(opts, {filter: true}))\n return function(sch) {\n validate(sch)\n return sch\n }\n}\n\n},{\"./formats\":45,\"generate-function\":32,\"generate-object-property\":33,\"jsonpointer\":49,\"xtend\":56}],47:[function(require,module,exports){\n\"use strict\"\nfunction isProperty(str) {\n return /^[$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc][$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc0-9\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19b0-\\u19c0\\u19c8\\u19c9\\u19d0-\\u19d9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua900-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f]*$/.test(str)\n}\nmodule.exports = isProperty\n},{}],48:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar gOPD = require('gopd');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"available-typed-arrays\":18,\"call-bind/callBound\":20,\"for-each\":22,\"gopd\":35,\"has-tostringtag/shams\":38}],49:[function(require,module,exports){\nvar hasExcape = /~/\nvar escapeMatcher = /~[01]/g\nfunction escapeReplacer (m) {\n switch (m) {\n case '~1': return '/'\n case '~0': return '~'\n }\n throw new Error('Invalid tilde escape: ' + m)\n}\n\nfunction untilde (str) {\n if (!hasExcape.test(str)) return str\n return str.replace(escapeMatcher, escapeReplacer)\n}\n\nfunction setter (obj, pointer, value) {\n var part\n var hasNextPart\n\n for (var p = 1, len = pointer.length; p < len;) {\n if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj\n\n part = untilde(pointer[p++])\n hasNextPart = len > p\n\n if (typeof obj[part] === 'undefined') {\n // support setting of /-\n if (Array.isArray(obj) && part === '-') {\n part = obj.length\n }\n\n // support nested objects/array when setting values\n if (hasNextPart) {\n if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = []\n else obj[part] = {}\n }\n }\n\n if (!hasNextPart) break\n obj = obj[part]\n }\n\n var oldValue = obj[part]\n if (value === undefined) delete obj[part]\n else obj[part] = value\n return oldValue\n}\n\nfunction compilePointer (pointer) {\n if (typeof pointer === 'string') {\n pointer = pointer.split('/')\n if (pointer[0] === '') return pointer\n throw new Error('Invalid JSON pointer.')\n } else if (Array.isArray(pointer)) {\n for (const part of pointer) {\n if (typeof part !== 'string' && typeof part !== 'number') {\n throw new Error('Invalid JSON pointer. Must be of type string or number.')\n }\n }\n return pointer\n }\n\n throw new Error('Invalid JSON pointer.')\n}\n\nfunction get (obj, pointer) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n var len = pointer.length\n if (len === 1) return obj\n\n for (var p = 1; p < len;) {\n obj = obj[untilde(pointer[p++])]\n if (len === p) return obj\n if (typeof obj !== 'object' || obj === null) return undefined\n }\n}\n\nfunction set (obj, pointer, value) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.')\n return setter(obj, pointer, value)\n}\n\nfunction compile (pointer) {\n var compiled = compilePointer(pointer)\n return {\n get: function (object) {\n return get(object, compiled)\n },\n set: function (object, value) {\n return set(object, compiled, value)\n }\n }\n}\n\nexports.get = get\nexports.set = set\nexports.compile = compile\n\n},{}],50:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],51:[function(require,module,exports){\n(function (setImmediate,clearImmediate){(function (){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n}).call(this)}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n\n},{\"process/browser.js\":50,\"timers\":51}],52:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n},{}],53:[function(require,module,exports){\n// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n\n},{\"is-arguments\":41,\"is-generator-function\":43,\"is-typed-array\":48,\"which-typed-array\":55}],54:[function(require,module,exports){\n(function (process){(function (){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n\n}).call(this)}).call(this,require('_process'))\n\n},{\"./support/isBuffer\":52,\"./support/types\":53,\"_process\":50,\"inherits\":40}],55:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"available-typed-arrays\":18,\"call-bind/callBound\":20,\"for-each\":22,\"gopd\":35,\"has-tostringtag/shams\":38,\"is-typed-array\":48}],56:[function(require,module,exports){\nmodule.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n\n},{}],57:[function(require,module,exports){\n/**\n* Simple browser shim loader - assign the npm module to a window global automatically\n*\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libNPMModuleWrapper = require('./Meadow.js');\n\nif ((typeof(window) === 'object') && !window.hasOwnProperty('Meadow'))\n{\n\twindow.Meadow = libNPMModuleWrapper;\n}\n\nmodule.exports = libNPMModuleWrapper;\n},{\"./Meadow.js\":62}],58:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\n\n/**\n* Load the schema and metadata from a package file\n*\n* @method loadFromPackageFile\n* @return {Object} Returns a new Meadow, or false if it failed\n*/\nvar loadFromPackageFile = function(pMeadow, pPackage)\n{\n\t// Use the package loader to grab the configuration objects and clone a new Meadow.\n\tvar tmpPackage = false;\n\ttry\n\t{\n\t\ttmpPackage = require(pPackage);\n\t}\n\tcatch(pError)\n\t{\n\t\tpMeadow.fable.log.error('Error loading Fable package', {Package:pPackage});\n\t\treturn false;\n\t}\n\n\t// Spool up a new Meadow object\n\tvar tmpNewMeadow = pMeadow.new(pMeadow.fable);\n\n\t// Safely set the parameters\n\tif (typeof(tmpPackage.Scope) === 'string')\n\t{\n\t\ttmpNewMeadow.setScope(tmpPackage.Scope);\n\t}\n\t\n\tif (typeof(tmpPackage.Domain) === 'string')\n\t{\n\t\ttmpNewMeadow.setDomain(tmpPackage.Domain);\n\t}\n\n\tif (typeof(tmpPackage.DefaultIdentifier) === 'string')\n\t{\n\t\ttmpNewMeadow.setDefaultIdentifier(tmpPackage.DefaultIdentifier);\n\t}\n\tif (Array.isArray(tmpPackage.Schema))\n\t{\n\t\ttmpNewMeadow.setSchema(tmpPackage.Schema);\n\t}\n\tif (typeof(tmpPackage.JsonSchema) === 'object')\n\t{\n\t\ttmpNewMeadow.setJsonSchema(tmpPackage.JsonSchema);\n\t}\n\tif (typeof(tmpPackage.DefaultObject) === 'object')\n\t{\n\t\ttmpNewMeadow.setDefault(tmpPackage.DefaultObject);\n\t}\n\n\tif (typeof(tmpPackage.Authorization) === 'object')\n\t{\n\t\ttmpNewMeadow.setAuthorizer(tmpPackage.Authorization);\n\t}\n\n\treturn tmpNewMeadow;\n};\n\nmodule.exports = loadFromPackageFile;\n},{}],59:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\n\n/**\n* Load the schema and metadata from a package object\n*\n* @method loadFromPackageObject\n* @return {Object} Returns a new Meadow, or false if it failed\n*/\nvar loadFromPackageObject = function(pMeadow, pPackage)\n{\n\t// Use the package loader to grab the configuration objects and clone a new Meadow.\n\tvar tmpPackage = (typeof(pPackage) == 'object') ? pPackage : {};\n\n\tif (!pPackage.hasOwnProperty('Scope'))\n\t{\n\t\tpMeadow.fable.log.error('Error loading Fable package -- scope not defined.', {Package:pPackage});\n\t}\n\n\t// Spool up a new Meadow object\n\tvar tmpNewMeadow = pMeadow.new(pMeadow.fable);\n\n\t// Safely set the parameters\n\tif (typeof(tmpPackage.Scope) === 'string')\n\t{\n\t\ttmpNewMeadow.setScope(tmpPackage.Scope);\n\t}\n\t\n\tif (typeof(tmpPackage.Domain) === 'string')\n\t{\n\t\ttmpNewMeadow.setDomain(tmpPackage.Domain);\n\t}\n\n\tif (typeof(tmpPackage.DefaultIdentifier) === 'string')\n\t{\n\t\ttmpNewMeadow.setDefaultIdentifier(tmpPackage.DefaultIdentifier);\n\t}\n\tif (Array.isArray(tmpPackage.Schema))\n\t{\n\t\ttmpNewMeadow.setSchema(tmpPackage.Schema);\n\t}\n\tif (typeof(tmpPackage.JsonSchema) === 'object')\n\t{\n\t\ttmpNewMeadow.setJsonSchema(tmpPackage.JsonSchema);\n\t}\n\tif (typeof(tmpPackage.DefaultObject) === 'object')\n\t{\n\t\ttmpNewMeadow.setDefault(tmpPackage.DefaultObject);\n\t}\n\n\tif (typeof(tmpPackage.Authorization) === 'object')\n\t{\n\t\ttmpNewMeadow.setAuthorizer(tmpPackage.Authorization);\n\t}\n\n\treturn tmpNewMeadow;\n};\n\nmodule.exports = loadFromPackageObject;\n},{}],60:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libFS = require('fs');\n\n/**\n* ### Meadow Raw Query Library\n*\n* This library loads and stores raw queries for FoxHound to use.\n* You can overload the default query that is built for each of\n* the following query archetypes:\n*\n* `Create`, `Read`, `Reads`, `Update`, `Delete`, `Count`\n*\n* You can also load other custom queries and give them an\n* arbitrary name.\n*\n* @class MeadowRawQuery\n*/\nvar MeadowRawQuery = function()\n{\n\tfunction createNew(pMeadow)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pMeadow) !== 'object') || !('fable' in pMeadow))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\t\tvar _Meadow = pMeadow;\n\n\t\tvar _Queries = {};\n\n\n\t\t/**\n\t\t* Load a Custom Query from a File\n\t\t*\n\t\t* @method doLoadQuery\n\t\t*/\n\t\tfunction doLoadQuery(pQueryTag, pFileName, fCallBack)\n\t\t{\n\t\t\tvar tmpCallBack = (typeof(fCallBack) === 'function') ? fCallBack : function() {};\n\n\t\t\tlibFS.readFile(pFileName, 'utf8',\n\t\t\t\tfunction (pError, pData)\n\t\t\t\t{\n\t\t\t\t\tif (pError)\n\t\t\t\t\t{\n\t\t\t\t\t\t_Meadow.fable.log.error('Problem loading custom query file.', {QueryTag:pQueryTag, FileName:pFileName, Error:pError});\n\t\t\t\t\t\t// There is some debate whether we should leave the queries entry unset or set it to empty so nothing happens.\n\t\t\t\t\t\t// If this were to set the query to `false` instead of `''`, FoxHound would be used to generate a query.\n\t\t\t\t\t\tdoSetQuery(pQueryTag, '');\n\t\t\t\t\t\ttmpCallBack(false);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_Meadow.fable.log.trace('Loaded custom query file.', {QueryTag:pQueryTag, FileName:pFileName});\n\t\t\t\t\t\tdoSetQuery(pQueryTag, pData);\n\t\t\t\t\t\ttmpCallBack(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn _Meadow;\n\t\t}\n\n\n\t\t/**\n\t\t* Sets a Custom Query from a String\n\t\t*\n\t\t* @method doSetQuery\n\t\t*/\n\t\tfunction doSetQuery(pQueryTag, pQueryString)\n\t\t{\n\t\t\t_Queries[pQueryTag] = pQueryString;\n\t\t\treturn _Meadow;\n\t\t}\n\n\n\t\t/**\n\t\t* Returns a Custom Query if one has been set for this tag\n\t\t*\n\t\t* @method doGetQuery\n\t\t*/\n\t\tfunction doGetQuery(pQueryTag)\n\t\t{\n\t\t\tif (_Queries.hasOwnProperty(pQueryTag))\n\t\t\t{\n\t\t\t\treturn _Queries[pQueryTag];\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\n\t\t/**\n\t\t* Check if a Custom Query exists\n\t\t*\n\t\t* @method doCheckQuery\n\t\t*/\n\t\tfunction doCheckQuery(pQueryTag)\n\t\t{\n\t\t\treturn _Queries.hasOwnProperty(pQueryTag);\n\t\t}\n\n\t\tvar tmpNewMeadowRawQuery = (\n\t\t{\n\t\t\tloadQuery: doLoadQuery,\n\t\t\tsetQuery: doSetQuery,\n\n\t\t\tcheckQuery: doCheckQuery,\n\t\t\tgetQuery: doGetQuery,\n\n\t\t\tnew: createNew\n\t\t});\n\n\t\treturn tmpNewMeadowRawQuery;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new MeadowRawQuery();\n\n},{\"fs\":19}],61:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libValidator = require('is-my-json-valid');\n\n/**\n* @class MeadowSchema\n*/\nvar MeadowSchema = function()\n{\n\tfunction createNew(pOriginalJsonSchema, pOriginalSchema)\n\t{\n\t\t/* ^ An Example Meadow Schema Object\n\t\t [\n\t\t \t{ \"Column\": \"IDAnimal\", \"Type\":\"AutoIdentity\" },\n\t\t \t{ \"Column\": \"GUIDAnimal\", \"Type\":\"AutoGUID\" },\n\t\t \t{ \"Column\": \"Created\", \"Type\":\"CreateDate\" },\n\t\t \t{ \"Column\": \"CreatingIDUser\", \"Type\":\"CreateIDUser\" },\n\t\t \t{ \"Column\": \"Modified\", \"Type\":\"UpdateDate\" },\n\t\t \t{ \"Column\": \"ModifyingIDUser\", \"Type\":\"UpdateIDUser\" },\n\t\t \t{ \"Column\": \"Deleted\", \"Type\":\"Deleted\" },\n\t\t \t{ \"Column\": \"DeletingIDUser\", \"Type\":\"DeleteIDUser\" },\n\t\t \t{ \"Column\": \"DeleteDate\", \"Type\":\"DeleteDate\" }\n\t\t ]\n\t\t*/\n\t\t/* #### The Meadow Schema\n\t\t *\n\t\t * Meadow uses this description object to create queries, broker data and generate interfaces.\n\t\t */\n\t\tvar _Schema = false;\n\n\t\t/* ^ An Example JSONSchema Object:\n\t\t \t{\n\t\t \t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\n\t\t \t\t\"title\": \"Product\",\n\t\t \t\t\"description\": \"A product from Acme's catalog\",\n\t\t \t\t\"type\": \"object\",\n\t\t \t\t\"properties\": {\n\t\t \t\t\t\"id\": {\n\t\t \t\t\t\t\"description\": \"The unique identifier for a product\",\n\t\t \t\t\t\t\"type\": \"integer\"\n\t\t \t\t\t},\n\t\t \t\t\t\"name\": {\n\t\t \t\t\t\t\"description\": \"Name of the product\",\n\t\t \t\t\t\t\"type\": \"string\"\n\t\t \t\t\t},\n\t\t \t\t\t\"price\": {\n\t\t \t\t\t\t\"type\": \"number\",\n\t\t \t\t\t\t\"minimum\": 0,\n\t\t \t\t\t\t\"exclusiveMinimum\": true\n\t\t \t\t\t},\n\t\t \t\t\t\"tags\": {\n\t\t \t\t\t\t\"type\": \"array\",\n\t\t \t\t\t\t\"items\": {\n\t\t \t\t\t\t\t\"type\": \"string\"\n\t\t \t\t\t\t},\n\t\t \t\t\t\t\"minItems\": 1,\n\t\t \t\t\t\t\"uniqueItems\": true\n\t\t \t\t\t}\n\t\t \t\t},\n\t\t \t\t\"required\": [\"id\", \"name\", \"price\"]\n\t\t \t}\n\t\t*/\n\t\t/* #### A JSONSchema Description\n\t\t *\n\t\t * http://json-schema.org/examples.html\n\t\t *\n\t\t * http://json-schema.org/latest/json-schema-core.html\n\t\t */\n\t\tvar _JsonSchema = false;\n\n\t\t/* #### An \"empty\" ORM object\n\t\t * This is the basis for being filled out by the marshalling code.\n\t\t */\n\t\tvar _Default = false;\n\n\t\t// The cached validator, which uses the JSONSchema\n\t\tvar _Validate = false;\n\n\t\t// The authorizers available to this meadow object\n\t\tvar _Authorizers = {};\n\n\n\t\t/**\n\t\t* Set the Meadow schema\n\t\t*\n\t\t* Our schemas are really instructions for *what* to do *when*. We track:\n\t\t* - Column\n\t\t* - Type _(e.g. AutoIdentity, AutoGUID, CreateDate, CreateIDUser, UpdateDate, UpdateIDUser, DeleteDate, Deleted, DeleteIDUser)_\n\t\t* - Optionally Special Instractions\n\t\t*\n\t\t* @method setSchema\n\t\t*/\n\t\tvar setSchema = function(pSchema)\n\t\t{\n\t\t\t_Schema = (typeof(pSchema) === 'object') ? pSchema : (\n\t\t\t{\n\t\t\t\ttitle: 'Unknown',\n\t\t\t\ttype: 'object',\n\t\t\t\trequired: []\n\t\t\t});\n\t\t};\n\t\tsetSchema(pOriginalSchema);\n\n\t\t/**\n\t\t* Set the JSONSchema\n\t\t*\n\t\t* @method setJsonSchema\n\t\t*/\n\t\tvar setJsonSchema = function(pJsonSchema)\n\t\t{\n\t\t\t_JsonSchema = (typeof(pJsonSchema) === 'object') ? pJsonSchema : (\n\t\t\t{\n\t\t\t\ttitle: 'Unknown',\n\t\t\t\ttype: 'object',\n\t\t\t\trequired: []\n\t\t\t});\n\t\t\t_Validate = libValidator(_JsonSchema, { greedy:true, verbose:true });\n\t\t};\n\t\tsetJsonSchema(pOriginalJsonSchema);\n\n\t\t/**\n\t\t* Set the Default ORM object\n\t\t*\n\t\t* @method setDefault\n\t\t*/\n\t\tvar setDefault = function(pDefault)\n\t\t{\n\t\t\t_Default = (typeof(pDefault) === 'object') ? pDefault : {};\n\t\t};\n\t\tsetDefault();\n\n\t\t/**\n\t\t* Set the authorizer set\n\t\t*\n\t\t* @method setAuthorizer\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setAuthorizer = function(pAuthorizer)\n\t\t{\n\t\t\t_Authorizers = (typeof(pAuthorizer) === 'object') ? pAuthorizer : {};\n\t\t};\n\n\t\t/**\n\t\t* Validate an object against the current schema\n\t\t*\n\t\t* @method validateObject\n\t\t*/\n\t\tvar validateObject = function(pObject)\n\t\t{\n\t\t\tvar tmpValidation = { Valid:_Validate(pObject) };\n\n\t\t\t// Stuff the errors in if it is invalid\n\t\t\tif (!tmpValidation.Valid)\n\t\t\t{\n\t\t\t\ttmpValidation.Errors = _Validate.errors;\n\t\t\t}\n\n\t\t\treturn tmpValidation;\n\t\t};\n\n\n\t\tvar tmpNewMeadowSchemaObject = (\n\t\t{\n\t\t\tsetSchema: setSchema,\n\t\t\tsetJsonSchema: setJsonSchema,\n\t\t\tsetDefault: setDefault,\n\t\t\tsetAuthorizer: setAuthorizer,\n\t\t\tvalidateObject: validateObject,\n\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * The Meadow Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'schema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * The JsonSchema\n\t\t *\n\t\t * @property jsonSchema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'jsonSchema',\n\t\t\t{\n\t\t\t\tget: function() { return _JsonSchema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * Default Object\n\t\t *\n\t\t * @property defaultObject\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'defaultObject',\n\t\t\t{\n\t\t\t\tget: function() { return _Default; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * Authorizer\n\t\t *\n\t\t * @property defaultObject\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'authorizer',\n\t\t\t{\n\t\t\t\tget: function() { return _Authorizers; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\treturn tmpNewMeadowSchemaObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new MeadowSchema();\n\n},{\"is-my-json-valid\":46}],62:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libFoxHound = require('foxhound');\n\n/**\n* Meadow Data Broker Library\n*\n* @class Meadow\n*/\nvar Meadow = function()\n{\n\tfunction createNew(pFable, pScope, pJsonSchema, pSchema)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pFable) !== 'object') || !('fable' in pFable))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\t\tvar _Fable = pFable;\n\t\t// Make sure there is a valid data broker set\n\t\t_Fable.settingsManager.fill({MeadowProvider:'None'});\n\n\t\tvar _IDUser = 0;\n\n\t\t// The scope of this broker.\n\t\tvar _Scope = (typeof(pScope) === 'string') ? pScope : 'Unknown';\n\t\tvar _Domain = 'Default';\n\n\t\t// The schema for this broker\n\t\tvar _Schema = require('./Meadow-Schema.js').new(pJsonSchema, pSchema);\n\t\t// The query for this broker\n\t\tvar _Query = libFoxHound.new(_Fable).setScope(_Scope);\n\t\t// The custom query loader\n\t\tvar _RawQueries = require('./Meadow-RawQuery.js').new(_Fable);\n\n\t\t// The core behaviors.. abstracted into their own modules to encapsulate complexity\n\t\tvar _CreateBehavior = require('./behaviors/Meadow-Create.js');\n\t\tvar _ReadBehavior = require('./behaviors/Meadow-Read.js');\n\t\tvar _ReadsBehavior = require('./behaviors/Meadow-Reads.js');\n\t\tvar _UpdateBehavior = require('./behaviors/Meadow-Update.js');\n\t\tvar _DeleteBehavior = require('./behaviors/Meadow-Delete.js');\n\t\tvar _UndeleteBehavior = require('./behaviors/Meadow-Undelete.js');\n\t\tvar _CountBehavior = require('./behaviors/Meadow-Count.js');\n\n\t\t// The data provider\n\t\tvar _Provider = false;\n\t\tvar _ProviderName = false;\n\n\t\t// The default identifier for this broker.\n\t\t// This is what is used for the automated endpoint queries\n\t\t// For example the 198 in GET http://myapi.com/Widget/198\n\t\t//\n\t\t// Our development model prefers IDWidget as the column name for the default identifier.\n\t\tvar _DefaultIdentifier = 'ID'+_Scope;\n\t\tvar _DefaultGUIdentifier = 'GUID'+_Scope;\n\n\n\t\t/**\n\t\t * Load a Meadow Package JSON, create a Meadow object from it.\n\t\t */\n\t\tvar _MeadowPackageLoader = require('./Meadow-PackageFileLoader.js');\n\t\tvar loadFromPackage = function(pPackage)\n\t\t{\n\t\t\treturn _MeadowPackageLoader(this, pPackage);\n\t\t};\n\n\t\t/**\n\t\t * Load a Meadow Package JSON from file, create a Meadow object from it.\n\t\t */\n\t\tvar _MeadowPackageObjectLoader = require('./Meadow-PackageObjectLoader.js');\n\t\tvar loadFromPackageObject = function(pPackage)\n\t\t{\n\t\t\treturn _MeadowPackageObjectLoader(this, pPackage);\n\t\t};\n\n\t\t/**\n\t\t* Pass relevant state into the provider\n\t\t*\n\t\t* @method updateProviderState\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar updateProviderState = ()=>\n\t\t{\n\t\t\tif (typeof(_Provider.setSchema) === 'function')\n\t\t\t{\n\t\t\t\t_Provider.setSchema(_Scope, _Schema.schema, _DefaultIdentifier, _DefaultGUIdentifier);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the scope\n\t\t*\n\t\t* @method setScope\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setScope = function(pScope)\n\t\t{\n\t\t\t_Scope = pScope;\n\t\t\t_Query.setScope(pScope);\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the user ID for inserts and updates\n\t\t*\n\t\t* @method setIDUser\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setIDUser = function(pIDUser)\n\t\t{\n\t\t\t_IDUser = pIDUser;\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Provider for Query execution.\n\t\t*\n\t\t* This function expects a string, case sensitive, which matches the\n\t\t* provider filename\n\t\t*\n\t\t* @method setProvider\n\t\t* @param {String} pProviderName The provider for query generation.\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setProvider = function(pProviderName)\n\t\t{\n\t\t\tif (typeof(pProviderName) !== 'string')\n\t\t\t{\n\t\t\t\tpProviderName = 'None';\n\t\t\t}\n\n\t\t\tvar tmpProviderModuleFile = './providers/Meadow-Provider-'+pProviderName+'.js';\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpProviderModule = require(tmpProviderModuleFile).new(_Fable);\n\t\t\t\t_Provider = tmpProviderModule;\n\n\t\t\t\t// Give the provider access to the schema object\n\t\t\t\tupdateProviderState();\n\n\t\t\t\t_ProviderName = pProviderName;\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Provider not set - require load problem', {ProviderModuleFile:tmpProviderModuleFile, InvalidProvider:pProviderName, error:pError});\n\t\t\t\t//setProvider('None');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\t\tsetProvider(_Fable.settings.MeadowProvider);\n\n\t\t/**\n\t\t* Set the schema to be something else\n\t\t*\n\t\t* @method setSchema\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setSchema = function(pSchema)\n\t\t{\n\t\t\t_Schema.setSchema(pSchema);\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the Jsonschema to be something else\n\t\t*\n\t\t* @method setJsonSchema\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setJsonSchema = function(pJsonSchema)\n\t\t{\n\t\t\t_Schema.setJsonSchema(pJsonSchema);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the default object to be something else\n\t\t*\n\t\t* @method setDefault\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDefault = function(pDefault)\n\t\t{\n\t\t\t_Schema.setDefault(pDefault);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the authorizer set\n\t\t*\n\t\t* @method setAuthorizer\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setAuthorizer = function(pAuthorizer)\n\t\t{\n\t\t\t_Schema.setAuthorizer(pAuthorizer);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the domain\n\t\t*\n\t\t* @method setDomain\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDomain = function(pDomain)\n\t\t{\n\t\t\t_Domain = pDomain;\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the default identifier\n\t\t*\n\t\t* @method setDefaultIdentifier\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDefaultIdentifier = function(pDefaultIdentifier)\n\t\t{\n\t\t\t_DefaultIdentifier = pDefaultIdentifier;\n\t\t\t_DefaultGUIdentifier = 'GU' + pDefaultIdentifier;\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t * Create a record\n\t\t */\n\t\tvar doCreate = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _CreateBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Read a record\n\t\t */\n\t\tvar doRead = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _ReadBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Read multiple records\n\t\t */\n\t\tvar doReads = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _ReadsBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\n\t\t/**\n\t\t * Update a record\n\t\t */\n\t\tvar doUpdate = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _UpdateBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\n\t\t/**\n\t\t * Delete a record\n\t\t */\n\t\tvar doDelete = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _DeleteBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Undelete a record\n\t\t */\n\t\tvar doUndelete = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _UndeleteBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Count multiple records\n\t\t */\n\t\tvar doCount = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _CountBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Get the role name for an index\n\t\t */\n\t\tlet _RoleNames;\n\t\tif (Array.isArray(_Fable.settings.MeadowRoleNames))\n\t\t{\n\t\t\t_RoleNames = _Fable.settings.MeadowRoleNames;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_RoleNames =\n\t\t\t[\n\t\t\t\t'Unauthenticated',\n\t\t\t\t'User',\n\t\t\t\t'Manager',\n\t\t\t\t'Director',\n\t\t\t\t'Executive',\n\t\t\t\t'Administrator',\n\t\t\t];\n\t\t}\n\t\tvar getRoleName = function(pRoleIndex)\n\t\t{\n\t\t\tif (pRoleIndex < 0 || pRoleIndex >= _RoleNames.length)\n\t\t\t{\n\t\t\t\treturn 'Unauthenticated';\n\t\t\t}\n\n\t\t\treturn _RoleNames[pRoleIndex];\n\t\t};\n\n\t\t/**\n\t\t * Take the stored representation of our object and stuff the proper values\n\t\t * into our record, translating where necessary.\n\t\t */\n\t\tvar marshalRecordFromSourceToObject = function(pRecord)\n\t\t{\n\t\t\t// Create an object from the default schema object\n\t\t\tvar tmpNewObject = _Fable.Utility.extend({}, _Schema.defaultObject);\n\t\t\t// Now marshal the values from pRecord into tmpNewObject, based on schema\n\t\t\t_Provider.marshalRecordFromSourceToObject(tmpNewObject, pRecord, _Schema.schema);\n\t\t\t// This turns on magical validation\n\t\t\t//_Fable.log.trace('Validation', {Value:tmpNewObject, Validation:_Schema.validateObject(tmpNewObject)})\n\t\t\treturn tmpNewObject;\n\t\t};\n\n\t\t/**\n\t\t * Method to log slow queries in a consistent pattern\n\t\t */\n\t\tvar logSlowQuery = function(pProfileTime, pQuery)\n\t\t{\n\t\t\tvar tmpQuery = pQuery.query || {body: '', parameters: {}};\n\t\t\tvar tmpFullQuery = tmpQuery.body;\n\t\t\tif (tmpQuery.parameters.length)\n\t\t\t{\n\t\t\t\tfor (var tmpKey in tmpQuery.parameters)\n\t\t\t\t{\n\t\t\t\t\ttmpFullQuery = tmpFullQuery.replace(':' + tmpKey, tmpQuery.parameters[tmpKey]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_Fable.log.warn('Slow Read query took ' + pProfileTime + 'ms',\n\t\t\t\t{\n\t\t\t\t\tProvider: _ProviderName,\n\t\t\t\t\tQuery:\n\t\t\t\t\t{\n\t\t\t\t\t\tBody: tmpQuery.body,\n\t\t\t\t\t\tParameters: tmpQuery.parameters,\n\t\t\t\t\t\tFullQuery: tmpFullQuery\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t* Container Object for our Factory Pattern\n\t\t*/\n\t\tvar tmpNewMeadowObject = (\n\t\t{\n\t\t\tdoCreate: doCreate,\n\t\t\tdoRead: doRead,\n\t\t\tdoReads: doReads,\n\t\t\tdoUpdate: doUpdate,\n\t\t\tdoDelete: doDelete,\n\t\t\tdoUndelete: doUndelete,\n\t\t\tdoCount: doCount,\n\n\t\t\tvalidateObject: _Schema.validateObject,\n\t\t\tmarshalRecordFromSourceToObject: marshalRecordFromSourceToObject,\n\n\t\t\tsetProvider: setProvider,\n\t\t\tsetIDUser: setIDUser,\n\n\t\t\tloadFromPackage: loadFromPackage,\n\t\t\tloadFromPackageObject: loadFromPackageObject,\n\t\t\tsetScope: setScope,\n\t\t\tsetDomain: setDomain,\n\t\t\tsetSchema: setSchema,\n\t\t\tsetJsonSchema: setJsonSchema,\n\t\t\tsetDefault: setDefault,\n\t\t\tsetDefaultIdentifier: setDefaultIdentifier,\n\t\t\tsetAuthorizer: setAuthorizer,\n\n\t\t\tgetRoleName: getRoleName,\n\n\t\t\tlogSlowQuery: logSlowQuery,\n\n\t\t\t// Factory\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * Entity Scope -- usually the name of the entity it represents\n\t\t *\n\t\t * @property scope\n\t\t * @type string\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'scope',\n\t\t\t{\n\t\t\t\tget: function() { return _Scope; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Entity Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'schema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema.schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Entity Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'schemaFull',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Default Identifier\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'defaultIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _DefaultIdentifier; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Default GUIdentifier\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'defaultGUIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _DefaultGUIdentifier; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Json Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'jsonSchema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema.jsonSchema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * User Identifier\n\t\t *\n\t\t * Used to stamp user identity into Create/Update operations.\n\t\t *\n\t\t * @property userIdentifier\n\t\t * @type string\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'userIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _IDUser; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Query (FoxHound) object\n\t\t *\n\t\t * This always returns a cloned query, so it's safe to get queries with a simple:\n\t\t * var tmpQuery = libSomeFableObject.query;\n\t\t *\n\t\t * and not expect leakage of basic (cap, begin, filter, dataelements) cloned values.\n\t\t *\n\t\t * @property query\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'query',\n\t\t\t{\n\t\t\t\tget: function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar tmpQuery = _Query.clone();\n\t\t\t\t\t\t\t// Set the default schema\n\t\t\t\t\t\t\ttmpQuery.query.schema = _Schema.schema;\n\t\t\t\t\t\t\treturn tmpQuery;\n\t\t\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Raw Queries\n\t\t *\n\t\t * @property rawQueries\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'rawQueries',\n\t\t\t{\n\t\t\t\tget: function() { return _RawQueries; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Provider\n\t\t *\n\t\t * @property provider\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'provider',\n\t\t\t{\n\t\t\t\tget: function() { return _Provider; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Provider Name\n\t\t *\n\t\t * @property providerName\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'providerName',\n\t\t\t{\n\t\t\t\tget: function() { return _ProviderName; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t// addServices removed in fable 2.x\n\t\tif (typeof(_Fable.addServices) === 'function')\n\t\t{\n\t\t\t_Fable.addServices(tmpNewMeadowObject);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// bring over addServices implementation from Fable 1.x for backward compatibility\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'fable',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'settings',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable.settings; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'log',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable.log; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\t\t}\n\n\t\treturn tmpNewMeadowObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new Meadow();\n\n},{\"./Meadow-PackageFileLoader.js\":58,\"./Meadow-PackageObjectLoader.js\":59,\"./Meadow-RawQuery.js\":60,\"./Meadow-Schema.js\":61,\"./behaviors/Meadow-Count.js\":63,\"./behaviors/Meadow-Create.js\":64,\"./behaviors/Meadow-Delete.js\":65,\"./behaviors/Meadow-Read.js\":66,\"./behaviors/Meadow-Reads.js\":67,\"./behaviors/Meadow-Undelete.js\":68,\"./behaviors/Meadow-Update.js\":69,\"foxhound\":23}],63:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Count multiple records\n*\n* @function meadowBehaviorCount\n*/\nvar meadowBehaviorCount = function(pMeadow, pQuery, fCallBack)\n{\n\tvar tmpProfileStart = new Date(); //for profiling query time\n\n\t// Count the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record countfrom the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Count'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Count');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Count(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Validate the resulting value\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check if query time exceeded threshold in settings. Log if slow.\n\t\t\t\tvar tmpProfileTime = new Date().getTime() - tmpProfileStart.getTime();\n\t\t\t\tif (tmpProfileTime > (pMeadow.fable.settings['QueryThresholdWarnTime'] || 200))\n\t\t\t\t{\n\t\t\t\t\tpMeadow.logSlowQuery(tmpProfileTime, pQuery);\n\t\t\t\t}\n\n\t\t\t\tif (typeof(pQuery.parameters.result.value) !== 'number')\n\t\t\t\t{\n\t\t\t\t\t// The return value is a number.. something is wrong.\n\t\t\t\t\treturn fStageComplete('Count did not return valid results.', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQuery.result.value);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pCount)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the count waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pCount);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorCount;\n},{\"async/waterfall\":17}],64:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Create\n*\n* @function meadowBehaviorCreate\n*/\nvar meadowBehaviorCreate = function(pMeadow, pQuery, fCallBack)\n{\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 0: If GUID is specified, make sure the record does not already exist\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\t// Make sure the user submitted a record\n\t\t\t\tif (!pQuery.query.records)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record submitted', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tif (pQuery.query.records[0][pMeadow.defaultGUIdentifier] &&\n\t\t\t\t\tpQuery.query.records[0][pMeadow.defaultGUIdentifier].length >= 5) //see Foxhound mysql build create query: GUID min len must be 5\n\t\t\t\t{\n\t\t\t\t\tvar tmpGUIDRecord = pQuery.query.records[0][pMeadow.defaultGUIdentifier];\n\n\t\t\t\t\tvar tmpQueryRead = pQuery.clone().addFilter(pMeadow.defaultGUIdentifier, tmpGUIDRecord)\n\t\t\t\t\t\t\t\t\t\t\t\t .setDisableDeleteTracking(true); //this check is to guarantee uniqueness across the entire table, so always do this\n\n\t\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t\t}\n\t\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar tmpError = tmpQueryRead.error;\n\n\t\t\t\t\t\t\tif (!tmpError &&\n\t\t\t\t\t\t\t\ttmpQueryRead.result.value.length > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpError = 'Record with GUID ' + tmpGUIDRecord + ' already exists!';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tmpError)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn fStageComplete(tmpError, tmpQueryRead, tmpQueryRead, null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn fStageComplete();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete();\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Step 1: Create the record in the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (!pQuery.query.IDUser)\n\t\t\t\t{\n\t\t\t\t\t// The user ID is not already set, set it magically.\n\t\t\t\t\tif (typeof(pQuery.userID) === 'number' && (pQuery.userID % 1) === 0 && pQuery.userID >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pQuery.userID;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pMeadow.userIdentifier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Merge in the default record with the passed-in record for completeness\n\t\t\t\tpQuery.query.records[0] = pMeadow.fable.Utility.extend({}, pMeadow.schemaFull.defaultObject, pQuery.query.records[0]);\n\t\t\t\t// Create override is too complex ... punting for now\n\t\t\t\t// if (pMeadow.rawQueries.checkQuery('Create'))\n\t\t\t\t//\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Create');\n\t\t\t\tpMeadow.provider.Create(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Setup a read operation\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// The value is not set (it should be set to the value for our DefaultIdentifier)\n\t\t\t\tif (pQuery.parameters.result.value === false)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Creation failed', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpIDRecord = pQuery.result.value;\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpIDRecord);\n\t\t\t},\n\t\t\t// Step 3: Read the record\n\t\t\tfunction (pQuery, pIDRecord, fStageComplete)\n\t\t\t{\n\t\t\t\tvar tmpQueryRead = pQuery.clone().addFilter(pMeadow.defaultIdentifier, pIDRecord)\n\t\t\t\t\t\t\t\t\t\t\t\t .setDisableDeleteTracking(pQuery.parameters.query.disableDeleteTracking); //if delete tracking is disabled, we need to disable it on this Read operation\n\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function(){ fStageComplete(tmpQueryRead.result.error, pQuery, tmpQueryRead); });\n\t\t\t},\n\t\t\t// Step 4: Marshal the record into a POJO\n\t\t\tfunction (pQuery, pQueryRead, fStageComplete)\n\t\t\t{\n\t\t\t\t// Ensure there is not at least one record returned\n\t\t\t\tif (pQueryRead.parameters.result.value.length < 1)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record found after create.', pQuery, pQueryRead, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQueryRead, tmpRecord);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pQueryRead, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the create waterfall', {Error:pError, Message: pError.message, Query: pQuery.query, Stack: pError.stack});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pQueryRead, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorCreate;\n},{\"async/waterfall\":17}],65:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Delete a single record\n*\n* @function meadowBehaviorDelete\n*/\nvar meadowBehaviorDelete = function(pMeadow, pQuery, fCallBack)\n{\n\t// TODO: Check if this recordset has implicit delete tracking, branch in this module.\n\t// Delete the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Delete the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Delete'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Delete');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Delete(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery, pQuery.result.value); });\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the delete waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorDelete;\n},{\"async/waterfall\":17}],66:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Read a single record\n*\n* @function meadowBehaviorRead\n*/\nvar meadowBehaviorRead = function(pMeadow, pQuery, fCallBack)\n{\n\t// Read the record from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record from the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\t// If there is a Read override query, use it!\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Marshal the record into a POJO\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check that a record was returned\n\t\t\t\tif (pQuery.parameters.result.value.length < 1)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete(undefined, pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQuery.result.value[0]);\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpRecord);\n\t\t\t}\n\t\t],\n\t\t(pError, pQuery, pRecord)=>\n\t\t{\n\t\t\tconsole.log('b')\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the read waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorRead;\n},{\"async/waterfall\":17}],67:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\nvar libAsyncEach = require('async/eachSeries');\n\n/**\n* Meadow Behavior - Read multiple records\n*\n* @function meadowBehaviorReads\n*/\nvar meadowBehaviorReads = function(pMeadow, pQuery, fCallBack)\n{\n\tvar tmpProfileStart = new Date(); //for profiling query time\n\n\t// Read the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record(s) from the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Reads'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Reads');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Marshal all the records into an array of POJOs\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check if query time exceeded threshold in settings. Log if slow.\n\t\t\t\tvar tmpProfileTime = new Date().getTime() - tmpProfileStart.getTime();\n\t\t\t\tif (tmpProfileTime > (pMeadow.fable.settings['QueryThresholdWarnTime'] || 200))\n\t\t\t\t{\n\t\t\t\t\tpMeadow.logSlowQuery(tmpProfileTime, pQuery);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecords = [];\n\n\t\t\t\tlibAsyncEach\n\t\t\t\t(\n\t\t\t\t\tpQuery.parameters.result.value,\n\t\t\t\t\tfunction(pRow, pQueueCallback)\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpRecords.push(pMeadow.marshalRecordFromSourceToObject(pRow));\n\t\t\t\t\t\tpQueueCallback();\n\t\t\t\t\t},\n\t\t\t\t\tfunction()\n\t\t\t\t\t{\n\t\t\t\t\t\t// After we've pushed every record into the array in order, complete the waterfall\n\t\t\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpRecords);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecords)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the read multiple waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecords);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorReads;\n},{\"async/eachSeries\":3,\"async/waterfall\":17}],68:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Undelete a single record\n*\n* @function meadowBehaviorUndelete\n*/\nvar meadowBehaviorUndelete = function(pMeadow, pQuery, fCallBack)\n{\n\t// TODO: Check if this recordset has implicit delete tracking, branch in this module?\n\t// Undelete the record(s) if they were deleted with a bit\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Undelete the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Undelete'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Undelete');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Undelete(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery, pQuery.result.value); });\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the undelete waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorUndelete;\n},{\"async/waterfall\":17}],69:[function(require,module,exports){\n// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Update a single record\n*\n* @function meadowBehaviorUpdate\n*/\nvar meadowBehaviorUpdate = function(pMeadow, pQuery, fCallBack)\n{\n\t// Update the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Update the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (!pQuery.query.IDUser)\n\t\t\t\t{\n\t\t\t\t\t// The user ID is not already set, set it magically.\n\t\t\t\t\tif (typeof(pQuery.userID) === 'number' && (pQuery.userID % 1) === 0 && pQuery.userID >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pQuery.userID;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pMeadow.userIdentifier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Make sure the developer submitted a record\n\t\t\t\tif (!pQuery.query.records)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record submitted', pQuery, false);\n\t\t\t\t}\n\t\t\t\t// Make sure there is a default identifier\n\t\t\t\tif (!pQuery.query.records[0].hasOwnProperty(pMeadow.defaultIdentifier))\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Automated update missing default identifier', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\t// Now see if there is anything in the schema that is an Update action that isn't in this query\n\t\t\t\tfor (var i = 0; i < pMeadow.schema.length; i++)\n\t\t\t\t{\n\t\t\t\t\tswitch (pMeadow.schema[i].Type)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t\t\tpQuery.query.records[0][pMeadow.schema[i].Column] = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set the update filter\n\t\t\t\tpQuery.addFilter(pMeadow.defaultIdentifier, pQuery.query.records[0][pMeadow.defaultIdentifier]);\n\n\t\t\t\t// Sanity check on update to make sure we don't update EVERY record.\n\t\t\t\tif ((pQuery.parameters.filter === false) || (pQuery.parameters.filter.length < 1))\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Automated update missing filters... aborting!', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\t// Updates are too complex to override for now, punting on this feature.\n\t\t\t\t//if (pMeadow.rawQueries.checkQuery('Update'))\n\t\t\t\t//\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Update');\n\t\t\t\tpMeadow.provider.Update(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Check that the record was updated\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\tif (typeof(pQuery.parameters.result.value) !== 'object')\n\t\t\t\t{\n\t\t\t\t\t// The value is not an object\n\t\t\t\t\treturn fStageComplete('No record updated.', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery);\n\t\t\t},\n\t\t\t// Step 3: Read the record\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// We can clone the query, since it has the criteria for the update in it already (filters survive a clone)\n\t\t\t\tvar tmpQueryRead = pQuery.clone();\n\t\t\t\t// Make sure to load the record with the custom query if necessary.\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function(){ fStageComplete(tmpQueryRead.result.error, pQuery, tmpQueryRead); });\n\t\t\t},\n\t\t\t// Step 4: Marshal the record into a POJO\n\t\t\tfunction (pQuery, pQueryRead, fStageComplete)\n\t\t\t{\n\t\t\t\tif (pQueryRead.result.value.length === 0)\n\t\t\t\t{\n\t\t\t\t\t//No record found to update\n\t\t\t\t\treturn fStageComplete('No record found to update!', pQueryRead.result, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQueryRead, tmpRecord);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pQueryRead, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during Update waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pQueryRead, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorUpdate;\n},{\"async/waterfall\":17}]},{},[57])(57)\n});\n\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachOfLimit = require('./internal/eachOfLimit.js');\n\nvar _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);\n\nvar _withoutIndex = require('./internal/withoutIndex.js');\n\nvar _withoutIndex2 = _interopRequireDefault(_withoutIndex);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit(coll, limit, iteratee, callback) {\n return (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback);\n}\nexports.default = (0, _awaitify2.default)(eachLimit, 4);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachLimit = require('./eachLimit.js');\n\nvar _eachLimit2 = _interopRequireDefault(_eachLimit);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n return (0, _eachLimit2.default)(coll, 1, iteratee, callback);\n}\nexports.default = (0, _awaitify2.default)(eachSeries, 3);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncEachOfLimit;\n\nvar _breakLoop = require('./breakLoop.js');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n let done = false;\n let canceled = false;\n let awaiting = false;\n let running = 0;\n let idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) return;\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(({ value, done: iterDone }) => {\n //console.log('got value', value)\n if (canceled || done) return;\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) return;\n if (err) return handleError(err);\n\n if (err === false) {\n done = true;\n canceled = true;\n return;\n }\n\n if (result === _breakLoop2.default || done && running <= 0) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) return;\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = awaitify;\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify(asyncFn, arity = asyncFn.length) {\n if (!arity) throw new Error('arity is undefined');\n function awaitable(...args) {\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args);\n }\n\n return new Promise((resolve, reject) => {\n args[arity - 1] = (err, ...cbArgs) => {\n if (err) return reject(err);\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this, args);\n });\n }\n\n return awaitable;\n}\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\nexports.default = breakLoop;\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = require('./once.js');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _iterator = require('./iterator.js');\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _onlyOnce = require('./onlyOnce.js');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./wrapAsync.js');\n\nvar _asyncEachOfLimit = require('./asyncEachOfLimit.js');\n\nvar _asyncEachOfLimit2 = _interopRequireDefault(_asyncEachOfLimit);\n\nvar _breakLoop = require('./breakLoop.js');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = limit => {\n return (obj, iteratee, callback) => {\n callback = (0, _once2.default)(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1');\n }\n if (!obj) {\n return callback(null);\n }\n if ((0, _wrapAsync.isAsyncGenerator)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj, limit, iteratee, callback);\n }\n if ((0, _wrapAsync.isAsyncIterable)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj[Symbol.asyncIterator](), limit, iteratee, callback);\n }\n var nextElem = (0, _iterator2.default)(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) return;\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n } else if (err === false) {\n done = true;\n canceled = true;\n } else if (value === _breakLoop2.default || done && running <= 0) {\n done = true;\n return callback(null);\n } else if (!looping) {\n replenish();\n }\n }\n\n function replenish() {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n};\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (fn) {\n return function (...args /*, callback*/) {\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n};\n\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isArrayLike;\nfunction isArrayLike(value) {\n return value && typeof value.length === 'number' && value.length >= 0 && value.length % 1 === 0;\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createIterator;\n\nvar _isArrayLike = require('./isArrayLike.js');\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _getIterator = require('./getIterator.js');\n\nvar _getIterator2 = _interopRequireDefault(_getIterator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? { value: coll[i], key: i } : null;\n };\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done) return null;\n i++;\n return { value: item.value, key: i };\n };\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? { value: obj[key], key } : null;\n };\n}\n\nfunction createIterator(coll) {\n if ((0, _isArrayLike2.default)(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = (0, _getIterator2.default)(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = once;\nfunction once(fn) {\n function wrapper(...args) {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper;\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = onlyOnce;\nfunction onlyOnce(fn) {\n return function (...args) {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fallback = fallback;\nexports.wrap = wrap;\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = exports.hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer;\n\nif (hasQueueMicrotask) {\n _defer = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else if (hasNextTick) {\n _defer = process.nextTick;\n} else {\n _defer = fallback;\n}\n\nexports.default = wrap(_defer);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _withoutIndex;\nfunction _withoutIndex(iteratee) {\n return (value, index, callback) => iteratee(value, callback);\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isAsyncIterable = exports.isAsyncGenerator = exports.isAsync = undefined;\n\nvar _asyncify = require('../asyncify.js');\n\nvar _asyncify2 = _interopRequireDefault(_asyncify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') throw new Error('expected a function');\n return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn;\n}\n\nexports.default = wrapAsync;\nexports.isAsync = isAsync;\nexports.isAsyncGenerator = isAsyncGenerator;\nexports.isAsyncIterable = isAsyncIterable;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = require('./internal/once.js');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _onlyOnce = require('./internal/onlyOnce.js');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./internal/wrapAsync.js');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = require('./internal/awaitify.js');\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall(tasks, callback) {\n callback = (0, _once2.default)(callback);\n if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = (0, _wrapAsync2.default)(tasks[taskIndex++]);\n task(...args, (0, _onlyOnce2.default)(next));\n }\n\n function next(err, ...args) {\n if (err === false) return;\n if (err || taskIndex === tasks.length) {\n return callback(err, ...args);\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nexports.default = (0, _awaitify2.default)(waterfall);\nmodule.exports = exports['default'];","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","/**\n* FoxHound Query Generation Library\n* @license MIT\n* @author Steven Velozo <steven@velozo.com>\n*/\n\n// Load our base parameters skeleton object\nconst baseParameters = require('./Parameters.js');\n\nvar FoxHound = function()\n{\n\tfunction createNew(pFable, pFromParameters)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pFable) !== 'object') || !('fable' in pFable))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\n\t\tvar _Fable = pFable;\n\n\t\t// The default parameters config object, used as a template for all new\n\t\t// queries created from this query.\n\t\tvar _DefaultParameters = (typeof(pFromParameters) === 'undefined') ? {} : pFromParameters;\n\n\t\t// The parameters config object for the current query. This is the only\n\t\t// piece of internal state that is important to operation.\n\t\tvar _Parameters = false;\n\n\t\tvar _Dialects = require('./Foxhound-Dialects.js');\n\n\t\t// The unique identifier for a query\n\t\tvar _UUID = _Fable.getUUID();\n\n\t\t// The log level, for debugging chattiness.\n\t\tvar _LogLevel = 0;\n\n\t\t// The dialect to use when generating queries\n\t\tvar _Dialect = false;\n\n\t\t/**\n\t\t* Clone the current FoxHound Query into a new Query object, copying all\n\t\t* parameters as the new default. Clone also copies the log level.\n\t\t*\n\t\t* @method clone\n\t\t* @return {Object} Returns a cloned Query. This is still chainable.\n\t\t*/\n\t\tvar clone = function()\n\t\t{\n\t\t\tvar tmpFoxHound = createNew(_Fable, baseParameters)\n\t\t\t\t.setScope(_Parameters.scope)\n\t\t\t\t.setBegin(_Parameters.begin)\n\t\t\t\t.setCap(_Parameters.cap);\n\n\t\t\t// Schema is the only part of a query that carries forward.\n\t\t\ttmpFoxHound.query.schema = _Parameters.query.schema;\n\n\t\t\tif (_Parameters.dataElements)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.dataElements = _Parameters.dataElements.slice(); // Copy the array of dataElements\n\t\t\t}\n\t\t\tif (_Parameters.sort)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.sort = _Parameters.sort.slice(); // Copy the sort array.\n\t\t\t\t// TODO: Fix the side affect nature of these being objects in the array .. they are technically clones of the previous.\n\t\t\t}\n\t\t\tif (_Parameters.filter)\n\t\t\t{\n\t\t\t\ttmpFoxHound.parameters.filter = _Parameters.filter.slice(); // Copy the filter array.\n\t\t\t\t// TODO: Fix the side affect nature of these being objects in the array .. they are technically clones of the previous.\n\t\t\t}\n\n\t\t\treturn tmpFoxHound;\n\t\t};\n\n\n\t\t/**\n\t\t* Reset the parameters of the FoxHound Query to the Default. Default\n\t\t* parameters were set during object construction.\n\t\t*\n\t\t* @method resetParameters\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar resetParameters = function()\n\t\t{\n\t\t\t_Parameters = _Fable.Utility.extend({}, baseParameters, _DefaultParameters);\n\t\t\t_Parameters.query = ({\n\t\t\t\tdisableAutoIdentity: false,\n\t\t\t\tdisableAutoDateStamp: false,\n\t\t\t\tdisableAutoUserStamp: false,\n\t\t\t\tdisableDeleteTracking: false,\n\t\t\t\tbody: false,\n\t\t\t\tschema: false, // The schema to intersect with our records\n\t\t\t\tIDUser: 0, // The user to stamp into records\n\t\t\t\tUUID: _Fable.getUUID(), // A UUID for this record\n\t\t\t\trecords: false, // The records to be created or changed\n\t\t\t\tparameters: {}\n\t\t\t});\n\n\t\t\t_Parameters.result = ({\n\t\t\t\texecuted: false, // True once we've run a query.\n\t\t\t\tvalue: false, // The return value of the last query run\n\t\t\t\t// Updated below due to changes in how Async.js responds to a false value here\n\t\t\t\terror: undefined // The error message of the last run query\n\t\t\t});\n\n\t\t\treturn this;\n\t\t};\n\t\tresetParameters();\n\n\t\t/**\n\t\t* Reset the parameters of the FoxHound Query to the Default. Default\n\t\t* parameters were set during object construction.\n\t\t*\n\t\t* @method mergeParameters\n\t\t* @param {Object} pFromParameters A Parameters Object to merge from\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar mergeParameters = function(pFromParameters)\n\t\t{\n\t\t\t_Parameters = _Fable.Utility.extend({}, _Parameters, pFromParameters);\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Logging level.\n\t\t*\n\t\t* The log levels are:\n\t\t* 0 - Don't log anything\n\t\t* 1 - Log queries\n\t\t* 2 - Log queries and non-parameterized queries\n\t\t* 3 - Log everything\n\t\t*\n\t\t* @method setLogLevel\n\t\t* @param {Number} pLogLevel The log level for our object\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setLogLevel = function(pLogLevel)\n\t\t{\n\t\t\tvar tmpLogLevel = 0;\n\n\t\t\tif (typeof(pLogLevel) === 'number' && (pLogLevel % 1) === 0)\n\t\t\t{\n\t\t\t\ttmpLogLevel = pLogLevel;\n\t\t\t}\n\n\t\t\t_LogLevel = tmpLogLevel;\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Scope for the Query. *Scope* is the source for the data being\n\t\t* pulled. In TSQL this would be the _table_, whereas in MongoDB this\n\t\t* would be the _collection_.\n\t\t*\n\t\t* A scope can be either a string, or an array (for JOINs and such).\n\t\t*\n\t\t* @method setScope\n\t\t* @param {String} pScope A Scope for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setScope = function(pScope)\n\t\t{\n\t\t\tvar tmpScope = false;\n\n\t\t\tif (typeof(pScope) === 'string')\n\t\t\t{\n\t\t\t\ttmpScope = pScope;\n\t\t\t}\n\t\t\telse if (pScope !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Scope set failed. You must pass in a string or array.', {queryUUID:_UUID, parameters:_Parameters, invalidScope:pScope});\n\t\t\t}\n\n\t\t\t_Parameters.scope = tmpScope;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Scope set: '+tmpScope, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set whether the query returns DISTINCT results.\n\t\t* For count queries, returns the distinct for the selected fields, or all fields in the base table by default.\n\t\t*\n\t\t* @method setDistinct\n\t\t* @param {Boolean} pDistinct True if the query should be distinct.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDistinct = function(pDistinct)\n\t\t{\n\t\t\t_Parameters.distinct = !!pDistinct;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Distinct set: '+_Parameters.distinct, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Data Elements for the Query. *Data Elements* are the fields\n\t\t* being pulled by the query. In TSQL this would be the _columns_,\n\t\t* whereas in MongoDB this would be the _fields_.\n\t\t*\n\t\t* The passed values can be either a string, or an array.\n\t\t*\n\t\t* @method setDataElements\n\t\t* @param {String} pDataElements The Data Element(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDataElements = function(pDataElements)\n\t\t{\n\t\t\tvar tmpDataElements = false;\n\n\t\t\tif (Array.isArray(pDataElements))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all strings\n\t\t\t\ttmpDataElements = pDataElements;\n\t\t\t}\n\t\t\tif (typeof(pDataElements) === 'string')\n\t\t\t{\n\t\t\t\ttmpDataElements = [pDataElements];\n\t\t\t}\n\n\t\t\t_Parameters.dataElements = tmpDataElements;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Data Elements set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the sort data element\n\t\t*\n\t\t* The passed values can be either a string, an object or an array of objects.\n\t\t*\n\t\t* The Sort object has two values:\n\t\t* {Column:'Birthday', Direction:'Ascending'}\n\t\t*\n\t\t* @method setSort\n\t\t* @param {String} pSort The sort criteria(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setSort = function(pSort)\n\t\t{\n\t\t\tvar tmpSort = false;\n\n\t\t\tif (Array.isArray(pSort))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all conformant sort objects\n\t\t\t\ttmpSort = pSort;\n\t\t\t}\n\t\t\telse if (typeof(pSort) === 'string')\n\t\t\t{\n\t\t\t\t// Default to ascending\n\t\t\t\ttmpSort = [{Column:pSort, Direction:'Ascending'}];\n\t\t\t}\n\t\t\telse if (typeof(pSort) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this sort entry conforms to a sort entry\n\t\t\t\ttmpSort = [pSort];\n\t\t\t}\n\n\t\t\t_Parameters.sort = tmpSort;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Sort set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the join data element\n\t\t*\n\t\t* The passed values can be either an object or an array of objects.\n\t\t*\n\t\t* The join object has four values:\n\t\t* {Type:'INNER JOIN', Table:'Test', From:'Test.ID', To:'Scope.IDItem'}\n\t\t*\n\t\t* @method setJoin\n\t\t* @param {Object} pJoin The join criteria(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setJoin = function(pJoin)\n\t\t{\n\t\t\t_Parameters.join = [];\n\n\t\t\tif (Array.isArray(pJoin))\n\t\t\t{\n\t\t\t\tpJoin.forEach(function(join)\n\t\t\t\t{\n\t\t\t\t\taddJoin(join.Table, join.From, join.To, join.Type);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (typeof(pJoin) === 'object')\n\t\t\t{\n\t\t\t\taddJoin(pJoin.Table, pJoin.From, pJoin.To, pJoin.Type);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Add a sort data element\n\t\t*\n\t\t* The passed values can be either a string, an object or an array of objects.\n\t\t*\n\t\t* The Sort object has two values:\n\t\t* {Column:'Birthday', Direction:'Ascending'}\n\t\t*\n\t\t* @method setSort\n\t\t* @param {String} pSort The sort criteria to add to the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addSort = function(pSort)\n\t\t{\n\t\t\tvar tmpSort = false;\n\n\t\t\tif (typeof(pSort) === 'string')\n\t\t\t{\n\t\t\t\t// Default to ascending\n\t\t\t\ttmpSort = {Column:pSort, Direction:'Ascending'};\n\t\t\t}\n\t\t\tif (typeof(pSort) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this sort entry conforms to a sort entry\n\t\t\t\ttmpSort = pSort;\n\t\t\t}\n\n\t\t\tif (!_Parameters.sort)\n\t\t\t{\n\t\t\t\t_Parameters.sort = [];\n\t\t\t}\n\n\t\t\t_Parameters.sort.push(tmpSort);\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Sort set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Begin index for the Query. *Begin* is the index at which\n\t\t* a query should start returning rows. In TSQL this would be the n\n\t\t* parameter of ```LIMIT 1,n```, whereas in MongoDB this would be the\n\t\t* n in ```skip(n)```.\n\t\t*\n\t\t* The passed value must be an Integer >= 0.\n\t\t*\n\t\t* @method setBegin\n\t\t* @param {Number} pBeginAmount The index to begin returning Query data.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setBegin = function(pBeginAmount)\n\t\t{\n\t\t\tvar tmpBegin = false;\n\n\t\t\t// Test if it is an integer > -1\n\t\t\t// http://jsperf.com/numbers-and-integers\n\t\t\tif (typeof(pBeginAmount) === 'number' && (pBeginAmount % 1) === 0 && pBeginAmount >= 0)\n\t\t\t{\n\t\t\t\ttmpBegin = pBeginAmount;\n\t\t\t}\n\t\t\telse if (pBeginAmount !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Begin set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidBeginAmount:pBeginAmount});\n\t\t\t}\n\n\t\t\t_Parameters.begin = tmpBegin;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Begin set: '+pBeginAmount, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the the Cap for the Query. *Cap* is the maximum number of records\n\t\t* a Query should return in a set. In TSQL this would be the n\n\t\t* parameter of ```LIMIT n```, whereas in MongoDB this would be the\n\t\t* n in ```limit(n)```.\n\t\t*\n\t\t* The passed value must be an Integer >= 0.\n\t\t*\n\t\t* @method setCap\n\t\t* @param {Number} pCapAmount The maximum records for the Query set.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setCap = function(pCapAmount)\n\t\t{\n\t\t\tvar tmpCapAmount = false;\n\n\t\t\tif (typeof(pCapAmount) === 'number' && (pCapAmount % 1) === 0 && pCapAmount >= 0)\n\t\t\t{\n\t\t\t\ttmpCapAmount = pCapAmount;\n\t\t\t}\n\t\t\telse if (pCapAmount !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Cap set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidCapAmount:pCapAmount});\n\t\t\t}\n\n\n\t\t\t_Parameters.cap = tmpCapAmount;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Cap set to: '+tmpCapAmount, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the filter expression\n\t\t*\n\t\t* The passed values can be either an object or an array of objects.\n\t\t*\n\t\t* The Filter object has a minimum of two values (which expands to the following):\n\t\t* {Column:'Name', Value:'John'}\n\t\t* {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t*\n\t\t* @method setFilter\n\t\t* @param {String} pFilter The filter(s) for the Query.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setFilter = function(pFilter)\n\t\t{\n\t\t\tvar tmpFilter = false;\n\n\t\t\tif (Array.isArray(pFilter))\n\t\t\t{\n\t\t\t\t// TODO: Check each entry of the array are all conformant Filter objects\n\t\t\t\ttmpFilter = pFilter;\n\t\t\t}\n\t\t\telse if (typeof(pFilter) === 'object')\n\t\t\t{\n\t\t\t\t// TODO: Check that this Filter entry conforms to a Filter entry\n\t\t\t\ttmpFilter = [pFilter];\n\t\t\t}\n\n\t\t\t_Parameters.filter = tmpFilter;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Filter set', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Add a filter expression\n\t\t*\n\t\t* {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t*\n\t\t* @method addFilter\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addFilter = function(pColumn, pValue, pOperator, pConnector, pParameter)\n\t\t{\n\t\t\tif (typeof(pColumn) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query filter column', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof(pValue) === 'undefined')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query filter value', {queryUUID:_UUID, parameters:_Parameters, invalidColumn:pColumn});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tvar tmpOperator = (typeof(pOperator) === 'undefined') ? '=' : pOperator;\n\t\t\tvar tmpConnector = (typeof(pConnector) === 'undefined') ? 'AND' : pConnector;\n\t\t\tvar tmpParameter = (typeof(pParameter) === 'undefined') ? pColumn : pParameter;\n\n\t\t\t//support table.field notation (mysql2 requires this)\n\t\t\ttmpParameter = tmpParameter.replace('.', '_');\n\n\t\t\tvar tmpFilter = (\n\t\t\t\t{\n\t\t\t\t\tColumn: pColumn,\n\t\t\t\t\tOperator: tmpOperator,\n\t\t\t\t\tValue: pValue,\n\t\t\t\t\tConnector: tmpConnector,\n\t\t\t\t\tParameter: tmpParameter\n\t\t\t\t});\n\n\t\t\tif (!Array.isArray(_Parameters.filter))\n\t\t\t{\n\t\t\t\t_Parameters.filter = [tmpFilter];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.filter.push(tmpFilter);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a filter', {queryUUID:_UUID, parameters:_Parameters, newFilter:tmpFilter});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Add a join expression\n\t\t*\n\t\t* {Type:'INNER JOIN', Table:'Test', From:'Test.ID', To:'Scope.IDItem'}\n\t\t*\n\t\t* @method addJoin\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addJoin = function(pTable, pFrom, pTo, pType)\n\t\t{\n\t\t\tif (typeof(pTable) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join table', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof(pFrom) === 'undefined' || typeof(pTo) === 'undefined')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\t//sanity check the join fields\n\t\t\tif (pFrom.indexOf(pTable)!=0)\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field, join must come FROM the join table!', {queryUUID:_UUID, parameters:_Parameters, invalidField:pFrom});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (pTo.indexOf('.')<=0)\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid query join field, join must go TO a field on another table ([table].[field])!', {queryUUID:_UUID, parameters:_Parameters, invalidField:pTo});\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar tmpType = (typeof(pType) === 'undefined') ? 'INNER JOIN' : pType;\n\n\t\t\tvar tmpJoin = (\n\t\t\t\t{\n\t\t\t\t\tType: tmpType,\n\t\t\t\t\tTable: pTable,\n\t\t\t\t\tFrom: pFrom,\n\t\t\t\t\tTo: pTo\n\t\t\t\t});\n\n\t\t\tif (!Array.isArray(_Parameters.join))\n\t\t\t{\n\t\t\t\t_Parameters.join = [tmpJoin];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.join.push(tmpJoin);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a join', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Add a record (for UPDATE and INSERT)\n\t\t*\n\t\t*\n\t\t* @method addRecord\n\t\t* @param {Object} pRecord The record to add.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar addRecord = function(pRecord)\n\t\t{\n\t\t\tif (typeof(pRecord) !== 'object')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Tried to add an invalid record to the query -- records must be an object', {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!Array.isArray(_Parameters.query.records))\n\t\t\t{\n\t\t\t\t_Parameters.query.records = [pRecord];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Parameters.query.records.push(pRecord);\n\t\t\t}\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('Added a record to the query', {queryUUID:_UUID, parameters:_Parameters, newRecord:pRecord});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\n\n\t\t/**\n\t\t* Set the Dialect for Query generation.\n\t\t*\n\t\t* This function expects a string, case sensitive, which matches both the\n\t\t* folder and filename\n\t\t*\n\t\t* @method setDialect\n\t\t* @param {String} pDialectName The dialect for query generation.\n\t\t* @return {Object} Returns the current Query for chaining.\n\t\t*/\n\t\tvar setDialect = function(pDialectName)\n\t\t{\n\n\t\t\tif (typeof(pDialectName) !== 'string')\n\t\t\t{\n\t\t\t\t_Fable.log.warn('Dialect set to English - invalid name', {queryUUID:_UUID, parameters:_Parameters, invalidDialect:pDialectName});\n\t\t\t\treturn setDialect('English');\n\t\t\t}\n\n\t\t\tif (_Dialects.hasOwnProperty(pDialectName))\n\t\t\t{\n\t\t\t\t_Dialect = _Dialects[pDialectName](_Fable);\n\t\t\t\tif (_LogLevel > 2)\n\t\t\t\t{\n\t\t\t\t\t_Fable.log.info('Dialog set to: '+pDialectName, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_Fable.log.error('Dialect not set - unknown dialect \"'+pDialectName+\"'\", {queryUUID:_UUID, parameters:_Parameters, invalidDialect:pDialectName});\n\t\t\t\tsetDialect('English');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* User to use for this query\n\t\t*\n\t\t* @method setIDUser\n\t\t*/\n\t\tvar setIDUser = function(pIDUser)\n\t\t{\n\n\t\t\tvar tmpUserID = 0;\n\n\t\t\tif (typeof(pIDUser) === 'number' && (pIDUser % 1) === 0 && pIDUser >= 0)\n\t\t\t{\n\t\t\t\ttmpUserID = pIDUser;\n\t\t\t}\n\t\t\telse if (pIDUser !== false)\n\t\t\t{\n\t\t\t\t_Fable.log.error('User set failed; non-positive or non-numeric argument.', {queryUUID:_UUID, parameters:_Parameters, invalidIDUser:pIDUser});\n\t\t\t}\n\n\n\t\t\t_Parameters.userID = tmpUserID;\n\t\t\t_Parameters.query.IDUser = tmpUserID;\n\n\t\t\tif (_LogLevel > 2)\n\t\t\t{\n\t\t\t\t_Fable.log.info('IDUser set to: '+tmpUserID, {queryUUID:_UUID, parameters:_Parameters});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto identity\n\t\t*\n\t\t* @method setDisableAutoIdentity\n\t\t*/\n\t\tvar setDisableAutoIdentity = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoIdentity = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto datestamp\n\t\t*\n\t\t* @method setDisableAutoDateStamp\n\t\t*/\n\t\tvar setDisableAutoDateStamp = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoDateStamp = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable auto userstamp\n\t\t*\n\t\t* @method setDisableAutoUserStamp\n\t\t*/\n\t\tvar setDisableAutoUserStamp = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableAutoUserStamp = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Flag to disable delete tracking\n\t\t*\n\t\t* @method setDisableDeleteTracking\n\t\t*/\n\t\tvar setDisableDeleteTracking = function(pFlag)\n\t\t{\n\t\t\t_Parameters.query.disableDeleteTracking = pFlag;\n\n\t\t\treturn this; //chainable\n\t\t};\n\n\t\t/**\n\t\t* Check that a valid Dialect has been set\n\t\t*\n\t\t* If there has not been a dialect set, it defaults to English.\n\t\t* TODO: Have the json configuration define a \"default\" dialect.\n\t\t*\n\t\t* @method checkDialect\n\t\t*/\n\t\tvar checkDialect = function()\n\t\t{\n\t\t\tif (_Dialect === false)\n\t\t\t{\n\t\t\t\tsetDialect('English');\n\t\t\t}\n\t\t};\n\n\n\t\tvar buildCreateQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Create(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildReadQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Read(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildUpdateQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Update(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildDeleteQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Delete(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildUndeleteQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Undelete(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\tvar buildCountQuery = function()\n\t\t{\n\t\t\tcheckDialect();\n\t\t\t_Parameters.query.body = _Dialect.Count(_Parameters);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Container Object for our Factory Pattern\n\t\t*/\n\t\tvar tmpNewFoxHoundObject = (\n\t\t{\n\t\t\tresetParameters: resetParameters,\n\t\t\tmergeParameters: mergeParameters,\n\n\t\t\tsetLogLevel: setLogLevel,\n\n\t\t\tsetScope: setScope,\n\t\t\tsetDistinct: setDistinct,\n\t\t\tsetIDUser: setIDUser,\n\t\t\tsetDataElements: setDataElements,\n\t\t\tsetBegin: setBegin,\n\t\t\tsetCap: setCap,\n\t\t\tsetFilter: setFilter,\n\t\t\taddFilter: addFilter,\n\t\t\tsetSort: setSort,\n\t\t\taddSort: addSort,\n\t\t\tsetJoin: setJoin,\n\t\t\taddJoin: addJoin,\n\n\t\t\taddRecord: addRecord,\n\t\t\tsetDisableAutoIdentity: setDisableAutoIdentity,\n\t\t\tsetDisableAutoDateStamp: setDisableAutoDateStamp,\n\t\t\tsetDisableAutoUserStamp: setDisableAutoUserStamp,\n\t\t\tsetDisableDeleteTracking: setDisableDeleteTracking,\n\n\t\t\tsetDialect: setDialect,\n\n\t\t\tbuildCreateQuery: buildCreateQuery,\n\t\t\tbuildReadQuery: buildReadQuery,\n\t\t\tbuildUpdateQuery: buildUpdateQuery,\n\t\t\tbuildDeleteQuery: buildDeleteQuery,\n\t\t\tbuildUndeleteQuery: buildUndeleteQuery,\n\t\t\tbuildCountQuery: buildCountQuery,\n\n\t\t\tclone: clone,\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * Query\n\t\t *\n\t\t * @property query\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'query',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters.query; },\n\t\t\t\tset: function(pQuery) { _Parameters.query = pQuery; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Result\n\t\t *\n\t\t * @property result\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'result',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters.result; },\n\t\t\t\tset: function(pResult) { _Parameters.result = pResult; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Query Parameters\n\t\t *\n\t\t * @property parameters\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'parameters',\n\t\t\t{\n\t\t\t\tget: function() { return _Parameters; },\n\t\t\t\tset: function(pParameters) { _Parameters = pParameters; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Dialect\n\t\t *\n\t\t * @property dialect\n\t\t * @type Object\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'dialect',\n\t\t\t{\n\t\t\t\tget: function() { return _Dialect; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Universally Unique Identifier\n\t\t *\n\t\t * @property uuid\n\t\t * @type String\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'uuid',\n\t\t\t{\n\t\t\t\tget: function() { return _UUID; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Log Level\n\t\t *\n\t\t * @property logLevel\n\t\t * @type Integer\n\t\t */\n\t\tObject.defineProperty(tmpNewFoxHoundObject, 'logLevel',\n\t\t\t{\n\t\t\t\tget: function() { return _LogLevel; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\treturn tmpNewFoxHoundObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = FoxHound();\n","getDialects = () =>\n{\n\tlet tmpDialects = {};\n\n\ttmpDialects.ALASQL = require('./dialects/ALASQL/FoxHound-Dialect-ALASQL.js');\n\ttmpDialects.English = require('./dialects/English/FoxHound-Dialect-English.js');\n\ttmpDialects.MeadowEndpoints = require('./dialects/MeadowEndpoints/FoxHound-Dialect-MeadowEndpoints.js');\n\ttmpDialects.MySQL = require('./dialects/MySQL/FoxHound-Dialect-MySQL.js');\n\n\ttmpDialects.default = tmpDialects.English;\n\n\treturn tmpDialects;\n}\n\nmodule.exports = getDialects();","/**\n* Query Parameters Object\n*\n* @class FoxHoundQueryParameters\n* @constructor\n*/\nvar FoxHoundQueryParameters = (\n{\n\t\tscope: false, // STR: The scope of the data\n\t\t\t\t\t\t\t\t// TSQL: the \"Table\" or \"View\"\n\t\t\t\t\t\t\t\t// MongoDB: the \"Collection\"\n\n\t\tdataElements: false, // ARR of STR: The data elements to return\n\t\t\t\t\t\t\t\t// TSQL: the \"Columns\"\n\t\t\t\t\t\t\t\t// MongoDB: the \"Fields\"\n\n\t\tbegin: false, // INT: Record index to start at\n\t\t\t\t\t\t\t\t// TSQL: n in LIMIT 1,n\n\t\t\t\t\t\t\t\t// MongoDB: n in Skip(n)\n\n\t\tcap: false, // INT: Maximum number of records to return\n\t\t\t\t\t\t\t\t// TSQL: n in LIMIT n\n\t\t\t\t\t\t\t\t// MongoDB: n in limit(n)\n\n\t\t// Serialization example for a query:\n\t\t// Take the filter and return an array of filter instructions\n\t\t// Basic instruction anatomy:\n\t\t// INSTRUCTION~FIELD~OPERATOR~VALUE\n\t\t// FOP - Filter Open Paren\n\t\t// FOP~~(~\n\t\t// FCP - Filter Close Paren\n\t\t// FCP~~)~\n\t\t// FBV - Filter By Value\n\t\t// FBV~Category~EQ~Books\n\t\t// Possible comparisons:\n\t\t// * EQ - Equals To (=)\n\t\t// * NE - Not Equals To (!=)\n\t\t// * GT - Greater Than (>)\n\t\t// * GE - Greater Than or Equals To (>=)\n\t\t// * LT - Less Than (<)\n\t\t// * LE - Less Than or Equals To (<=)\n\t\t// * LK - Like (Like)\n\t\t// FBL - Filter By List (value list, separated by commas)\n\t\t// FBL~Category~EQ~Books,Movies\n\t\t// FSF - Filter Sort Field\n\t\t// FSF~Category~ASC~0\n\t\t// FSF~Category~DESC~0\n\t\t// FCC - Filter Constraint Cap (the limit of what is returned)\n\t\t// FCC~~10~\n\t\t// FCB - Filter Constraint Begin (the zero-based start index of what is returned)\n\t\t// FCB~~10~\n\t\t//\n\t\t// This means: FBV~Category~EQ~Books~FBV~PublishedYear~GT~2000~FSF~PublishedYear~DESC~0\n\t\t// Filters down to ALL BOOKS PUBLISHED AFTER 2000 IN DESCENDING ORDER\n\t\tfilter: false, // ARR of OBJ: Data filter expression list {Column:'Name', Operator:'EQ', Value:'John', Connector:'And', Parameter:'Name'}\n\t\t\t\t\t\t\t\t// TSQL: the WHERE clause\n\t\t\t\t\t\t\t\t// MongoDB: a find() expression\n\n\t\tsort: false, // ARR of OBJ: The sort order {Column:'Birthday', Direction:'Ascending'}\n\t\t\t\t\t\t\t\t// TSQL: ORDER BY\n\t\t\t\t\t\t\t\t// MongoDB: sort()\n\n\t\tjoin: false, // ARR of OBJ: The join tables {Type:'INNER JOIN', Table:'test', From: 'Test.ID', To: 'Scope.IDItem' }\n\t\t\t\t\t\t\t\t// TSQL: JOIN\n\n\t\t// Force a specific query to run regardless of above ... this is used to override the query generator.\n\t\tqueryOverride: false,\n\n\t\t// Where the generated query goes\n\t\tquery: false,\n\t\t/*\n\t\t\t{\n\t\t\t\tbody: false,\n\t\t\t\tschema: false, // The schema to intersect with our records\n\t\t\t\tIDUser: 0, // The User ID to stamp into records\n\t\t\t\tUUID: A_UUID, // Some globally unique record id, different per cloned query.\n\t\t\t\trecords: false, // The records to be created or changed\n\t\t\t\tparameters: {}\n\t\t\t}\n\t\t*/\n\t\t\n\t\t// Who is making the query\n\t\tuserID: 0,\n\n\t\t// Where the query results are stuck\n\t\tresult: false\n\t\t/*\n\t\t\t{\n\t\t\t\texecuted: false, // True once we've run a query.\n\t\t\t\tvalue: false, // The return value of the last query run\n\t\t\t\terror: false // The error message of the last run query\n\t\t\t}\n\t\t*/\n});\n\nmodule.exports = FoxHoundQueryParameters;","/**\n* FoxHound ALASQL Dialect\n*\n* @license MIT\n*\n* For an ALASQL query override:\n// An underscore template with the following values:\n// <%= DataElements %> = Field1, Field2, Field3, Field4\n// <%= Begin %> = 0\n// <%= Cap %> = 10\n// <%= Filter %> = WHERE StartDate > :MyStartDate\n// <%= Sort %> = ORDER BY Field1\n// The values are empty strings if they aren't set.\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectALASQL\n*/\n\nvar FoxHoundDialectALASQL = function(pFable)\n{\n\t//Request time from SQL server with microseconds resolution\n\tconst SQL_NOW = \"NOW(3)\";\n\n\t_Fable = pFable;\n\n\t/**\n\t* Generate a table name from the scope.\n\t*\n\t* Because ALASQL is all in-memory, and can be run in two modes (anonymous\n\t* working on arrays or table-based) we are going to make this a programmable\n\t* value. Then we can share the code across both providers.\n\t*\n\t* @method: generateTableName\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateTableName = function(pParameters)\n\t{\n\t\treturn ' '+pParameters.scope;\n\t};\n\n\t/**\n\t* Escape columns, because ALASQL has more reserved KWs than most SQL dialects\n\t*/\n\tvar escapeColumn = (pColumn, pParameters) =>\n\t{\n\t\tif (pColumn.indexOf('.') < 0)\n\t\t{\n\t\t\treturn '`'+pColumn+'`';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// This could suck if the scope is not the same\n\t\t\tvar tmpTableName = pParameters.scope;\n\t\t\tif (pColumn.indexOf(tmpTableName+'.') > -1)\n\t\t\t{\n\t\t\t\treturn '`'+pColumn.replace(tmpTableName+'.', '')+'`';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// This doesn't work well but we'll try it.\n\t\t\t\treturn '`'+pColumn+'`';\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t* Generate a field list from the array of dataElements\n\t*\n\t* Each entry in the dataElements is a simple string\n\t*\n\t* @method: generateFieldList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @param {Boolean} pIsForCountClause (optional) If true, generate fields for use within a count clause.\n\t* @return: {String} Returns the field list clause, or empty string if explicit fields are requested but cannot be fulfilled\n\t* due to missing schema.\n\t*/\n\tvar generateFieldList = function(pParameters, pIsForCountClause)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\tif (!pIsForCountClause)\n\t\t\t{\n\t\t\t\treturn ' *';\n\t\t\t}\n\t\t\t// we need to list all of the table fields explicitly; get them from the schema\n\t\t\tconst tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tif (tmpSchema.length < 1)\n\t\t\t{\n\t\t\t\t// this means we have no schema; returning an empty string here signals the calling code to handle this case\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst idColumn = tmpSchema.find((entry) => entry.Type === 'AutoIdentity');\n\t\t\tif (!idColumn)\n\t\t\t{\n\t\t\t\t// this means there is no autoincrementing unique ID column; treat as above\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn ` ${idColumn.Column}`;\n\t\t}\n\n\t\tvar tmpFieldList = ' ';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ', ';\n\t\t\t}\n\t\t\ttmpFieldList += escapeColumn(tmpDataElements[i], pParameters);\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\t/**\n\t* Generate a query from the array of where clauses\n\t*\n\t* Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name',\n\t\t\tOperator:'EQ',\n\t\t\tValue:'John',\n\t\t\tConnector:'And',\n\t\t\tParameter:'Name'\n\t\t}\n\t*\n\t* @method: generateWhere\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t*/\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters).trim();\n\n\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t// Check if there is a Deleted column on the Schema. If so, we add this to the filters automatically (if not already present)\n\t\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\tvar tmpSchemaEntry = tmpSchema[i];\n\n\t\t\t\tif (tmpSchemaEntry.Type === 'Deleted')\n\t\t\t\t{\n\t\t\t\t\tvar tmpHasDeletedParameter = false;\n\n\t\t\t\t\t//first, check to see if filters are already looking for Deleted column\n\t\t\t\t\tif (tmpFilter.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var x = 0; x < tmpFilter.length; x++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (tmpFilter[x].Column === tmpSchemaEntry.Column)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpHasDeletedParameter = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!tmpHasDeletedParameter)\n\t\t\t\t\t{\n\t\t\t\t\t\t//if not, we need to add it\n\t\t\t\t\t\ttmpFilter.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tColumn: tmpTableName + '.' + tmpSchemaEntry.Column,\n\t\t\t\t\t\t\tOperator: '=',\n\t\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\t\tConnector: 'AND',\n\t\t\t\t\t\t\tParameter: 'Deleted'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpWhere = ' WHERE';\n\n\t\t// This is used to disable the connectors for subsequent queries.\n\t\t// Only the open parenthesis operator uses this, currently.\n\t\tvar tmpLastOperatorNoConnector = false;\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif ((tmpFilter[i].Connector != 'NONE') && (tmpFilter[i].Operator != ')') && (tmpWhere != ' WHERE') && (tmpLastOperatorNoConnector == false))\n\t\t\t{\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Connector;\n\t\t\t}\n\n\t\t\ttmpLastOperatorNoConnector = false;\n\n\t\t\tvar tmpColumnParameter;\n\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n\t\t\t\t// Open a logical grouping\n\t\t\t\ttmpWhere += ' (';\n\t\t\t\ttmpLastOperatorNoConnector = true;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n\t\t\t\ttmpWhere += ' )';\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN')\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator+' ( :'+tmpColumnParameter+' )';\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+escapeColumn(tmpFilter[i].Column, pParameters)+' '+tmpFilter[i].Operator+' :'+tmpColumnParameter;\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpWhere;\n\t};\n\n\t/**\n\t* Generate an ORDER BY clause from the sort array\n\t*\n\t* Each entry in the sort is an object like:\n\t* {Column:'Color',Direction:'Descending'}\n\t*\n\t* @method: generateOrderBy\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the field list clause\n\t*/\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tif (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpOrderClause = ' ORDER BY';\n\t\tfor (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += ',';\n\t\t\t}\n\t\t\ttmpOrderClause += ' '+escapeColumn(tmpOrderBy[i].Column, pParameters);\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += ' DESC';\n\t\t\t}\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t* Generate the limit clause\n\t*\n\t* @method: generateLimit\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpLimit = ' LIMIT';\n\t\t// Cap is required for a limit clause.\n\t\ttmpLimit += ' ' + pParameters.cap;\n\n\t\t// If there is a begin record, we'll pass that in as well.\n\t\tif (pParameters.begin !== false)\n\t\t{\n\t\t\ttmpLimit += ' FETCH ' + pParameters.begin;\n\t\t}\n\n\t\treturn tmpLimit;\n\t};\n\n\t/**\n\t* Generate the update SET clause\n\t*\n\t* @method: generateUpdateSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateSetters = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpUpdate = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pParameters.query.disableAutoDateStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateDate')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pParameters.query.disableAutoUserStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateIDUser')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// These are all ignored on update\n\t\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar tmpColumnDefaultParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+escapeColumn(tmpColumn, pParameters)+' = :'+tmpColumnDefaultParameter;\n\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnDefaultParameter] = tmpRecords[0][tmpColumn];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateDeleteSetters = function(pParameters)\n\t{\n\t\tif (pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t//Don't generate an UPDATE query if Delete tracking is disabled\n\t\t\treturn false;\n\t\t}\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = 1';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateUndeleteSetters = function(pParameters)\n\t{\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = 0';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = NOW()';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+escapeColumn(tmpSchemaEntry.Column, pParameters)+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetValues = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpCreateSet += ',';\n\t\t\t}\n\n\t\t\t//define a re-usable method for setting up field definitions in a default pattern\n\t\t\tvar buildDefaultDefinition = function()\n\t\t\t{\n\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t// Set the query parameter\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpRecords[0][tmpColumn];\n\t\t\t};\n\n\t\t\tvar tmpColumnParameter;\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NULL';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'AutoGUID':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse if (tmpRecords[0][tmpColumn] &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn].length >= 5 &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn] !== '0x0000000000000000') //stricture default\n\t\t\t\t\t{\n\t\t\t\t\t\t// Allow consumer to override AutoGUID\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.UUID;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\tif (pParameters.query.disableAutoDateStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NOW()';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\tif (pParameters.query.disableAutoUserStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use an appended number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpCreateSet === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetList = function(pParameters)\n\t{\n\t\t// The records were already validated by generateCreateSetValues\n\t\tvar tmpRecords = pParameters.query.records;\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\t\tif (tmpCreateSet != '')\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpCreateSet += ',';\n\t\t\t\t\t}\n\t\t\t\t\ttmpCreateSet += ' '+escapeColumn(tmpColumn, pParameters);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpCreateSetList = generateCreateSetList(pParameters);\n\t\tvar tmpCreateSetValues = generateCreateSetValues(pParameters);\n\n\t\tif (!tmpCreateSetValues)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'INSERT INTO'+tmpTableName+' ('+tmpCreateSetList+') VALUES ('+tmpCreateSetValues+');';\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* SELECT * FROM WIDGETS;\n\t* SELECT * FROM WIDGETS LIMIT 0, 20;\n\t* SELECT * FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20 WHERE LastName = 'Smith';\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpOrderBy = generateOrderBy(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\t\tconst tmpOptDistinct = pParameters.distinct ? ' DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:tmpFieldList, TableName:tmpTableName, Where:tmpWhere, OrderBy:tmpOrderBy, Limit:tmpLimit, Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Read Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT${tmpOptDistinct}${tmpFieldList} FROM${tmpTableName}${tmpWhere}${tmpOrderBy}${tmpLimit};`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateSetters = generateUpdateSetters(pParameters);\n\n\t\tif (!tmpUpdateSetters)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateSetters+tmpWhere+';';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateDeleteSetters = generateUpdateDeleteSetters(pParameters);\n\n\t\tif (tmpUpdateDeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateDeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'DELETE FROM'+tmpTableName+tmpWhere+';';\n\t\t}\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tlet tmpDeleteTrackingState = pParameters.query.disableDeleteTracking;\n\t\tpParameters.query.disableDeleteTracking = true;\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateUndeleteSetters = generateUpdateUndeleteSetters(pParameters);\n\t\tpParameters.query.disableDeleteTracking = tmpDeleteTrackingState;\n\n\t\tif (tmpUpdateUndeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateUndeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'SELECT NULL;';\n\t\t}\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tconst tmpFieldList = pParameters.distinct ? generateFieldList(pParameters, true) : '*';\n\n\t\t// here, we ignore the distinct keyword if no fields have been specified and\n\t\tif (pParameters.distinct && tmpFieldList.length < 1)\n\t\t{\n\t\t\tconsole.warn('Distinct requested but no field list or schema are available, so not honoring distinct for count query.');\n\t\t}\n\t\tconst tmpOptDistinct = pParameters.distinct && tmpFieldList.length > 0 ? 'DISTINCT' : '';\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:[], TableName:tmpTableName, Where:tmpWhere, OrderBy:'', Limit:'', Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Count Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT COUNT(${tmpOptDistinct}${tmpFieldList || '*'}) AS RowCount FROM${tmpTableName}${tmpWhere};`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t* Dialect Name\n\t*\n\t* @property name\n\t* @type string\n\t*/\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'ALASQL'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectALASQL;\n","/**\n* FoxHound English Dialect\n*\n* Because if I can't ask for it in my native tongue, how am I going to ask a\n* complicated server for it?\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectEnglish\n*/\nvar FoxHoundDialectEnglish = function()\n{\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'Here is a '+tmpScope+'.';\n\t};\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* Please give me all your Widget records. Thanks.\n\t* Please give me 20 Widget records. Thanks.\n\t* Please give me 20 Widget records starting with record 5. Thanks.\n\t* Please give me the ID, Name and Cost of 20 Widget records starting with record 5. Thanks.\n\t* Please give me the ID and Name of 20 Widget records starting with record 5, when LastName equals \"Smith\". Thanks.\n\t*\n\t* @method Read\n\t* @param {Number} pLogLevel The log level for our object\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\t\tconst tmpDistinct = pParameters.distinct ? 'unique ' : '';\n\n\t\treturn `Please give me all your ${tmpDistinct}${tmpScope} records. Thanks.`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am changing your '+tmpScope+'.';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am deleting your '+tmpScope+'.';\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\n\t\treturn 'I am undeleting your '+tmpScope+'.';\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpScope = pParameters.scope;\n\t\tconst tmpDistinct = pParameters.distinct ? 'unique ' : '';\n\n\t\treturn `Count your ${tmpDistinct}${tmpScope}.`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t * Dialect Name\n\t *\n\t * @property name\n\t * @type string\n\t */\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'English'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectEnglish;\n","/**\n* FoxHound Meadow Endpoints Dialect\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectMeadowEndpoints\n*/\n\nvar FoxHoundDialectMeadowEndpoints = function()\n{\n\t/**\n\t * Generate a table name from the scope\n\t *\n\t * @method: generateTableName\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateTableName = function(pParameters)\n\t{\n\t\treturn pParameters.scope;\n\t};\n\n\t/**\n\t * Generate the Identity column from the schema or scope\n\t * \n\t * @method: generateIdentityColumnName\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateIdentityColumnName = function(pParameters)\n\t{\n\t\t// TODO: See about using the Schema or the Schemata for this\n\t\treturn `ID${pParameters.scope}`;\n\t};\n\n\t/**\n\t * Generate a field list from the array of dataElements\n\t *\n\t * Each entry in the dataElements is a simple string\n\t *\n\t * @method: generateFieldList\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the field list clause\n\t */\n\tvar generateFieldList = function(pParameters)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpFieldList = '';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ',';\n\t\t\t}\n\n tmpFieldList += tmpDataElements[i];\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\t/**\n\t * Generate a query from the array of where clauses\n\t *\n\t * Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name', \n\t\t\tOperator:'EQ', \n\t\t\tValue:'John', \n\t\t\tConnector:'And', \n\t\t\tParameter:'Name'\n\t\t}\n\t *\n\t * @method: generateWhere\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t */\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters);\n \n var tmpURL = '';\n\n let tmpfAddFilter = (pFilterCommand, pFilterParameters) =>\n {\n if (tmpURL.length > 0)\n {\n tmpURL += '~';\n }\n \n tmpURL += `${pFilterCommand}~${pFilterParameters[0]}~${pFilterParameters[1]}~${pFilterParameters[2]}`;\n };\n\n let tmpfTranslateOperator = (pOperator) =>\n {\n tmpNewOperator = 'EQ';\n switch(pOperator.toUpperCase())\n {\n case '!=':\n tmpNewOperator = 'NE';\n break;\n case '>':\n tmpNewOperator = 'GT';\n break;\n case '>=':\n tmpNewOperator = 'GE';\n break;\n case '<=':\n tmpNewOperator = 'LE';\n break;\n case '<':\n tmpNewOperator = 'LT';\n break;\n case 'LIKE':\n tmpNewOperator = 'LK';\n break;\n case 'IN':\n tmpNewOperator = 'INN';\n break;\n case 'NOT IN':\n tmpNewOperator = 'NI';\n break;\n }\n return tmpNewOperator;\n }\n\n // Translating Delete Tracking bit on query to a query with automagic\n // This will eventually deprecate this as part of the necessary query\n if (pParameters.query.disableDeleteTracking)\n {\n tmpfAddFilter('FBV',['Deleted','GE','0'])\n }\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n tmpfAddFilter('FOP',['0','(','0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n tmpfAddFilter('FCP',['0',')','0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN' || tmpFilter[i].Operator === \"NOT IN\")\n\t\t\t{\n let tmpFilterCommand = 'FBV';\n if (tmpFilter[i].Connector == 'OR')\n {\n tmpFilterCommand = 'FBVOR';\n }\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n tmpfAddFilter(tmpFilterCommand, [tmpFilter[i].Column, tmpfTranslateOperator(tmpFilter[i].Operator), tmpFilter[i].Value.map(encodeURIComponent).join(',')])\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NULL')\n\t\t\t{\n\t\t\t\t// IS NULL is a special operator which doesn't require a value, or parameter\n tmpfAddFilter('FBV', [tmpFilter[i].Column, 'IN', '0']);\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n tmpfAddFilter('FBV', [tmpFilter[i].Column, 'NN', '0']);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n let tmpFilterCommand = 'FBV';\n if (tmpFilter[i].Connector == 'OR')\n {\n tmpFilterCommand = 'FBVOR';\n }\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n tmpfAddFilter(tmpFilterCommand, [tmpFilter[i].Column, tmpfTranslateOperator(tmpFilter[i].Operator), encodeURIComponent(tmpFilter[i].Value)]);\n\t\t\t}\n\t\t}\n\n let tmpOrderBy = generateOrderBy(pParameters);\n if (tmpOrderBy)\n {\n if (tmpURL)\n {\n tmpURL += '~';\n }\n tmpURL += tmpOrderBy;\n }\n\n\t\treturn tmpURL;\n\t};\n\n /**\n\t * Get the flags for the request\n * \n * These are usually passed in for Update and Create when extra tracking is disabled.\n\t *\n\t * @method: generateFlags\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Flags to be sent, if any.\n\t */\n function generateFlags(pParameters)\n {\n let tmpDisableAutoDateStamp = pParameters.query.disableAutoDateStamp;\n let tmpDisableDeleteTracking = pParameters.query.disableDeleteTracking;\n let tmpDisableAutoIdentity = pParameters.query.disableAutoIdentity;\n let tmpDisableAutoUserStamp = pParameters.query.disableAutoUserStamp;\n\n let tmpFlags = '';\n\n let fAddFlag = (pFlagSet, pFlag) =>\n {\n if (pFlagSet)\n {\n if (tmpFlags.length > 0)\n {\n tmpFlags += ',';\n }\n tmpFlags += pFlag;\n }\n };\n\n fAddFlag(tmpDisableAutoDateStamp, 'DisableAutoDateStamp');\n fAddFlag(tmpDisableDeleteTracking, 'DisableDeleteTracking');\n fAddFlag(tmpDisableAutoIdentity, 'DisableAutoIdentity');\n fAddFlag(tmpDisableAutoUserStamp, 'DisableAutoUserStamp');\n\n return tmpFlags;\n };\n\n /**\n\t * Get the ID for the record, to be used in URIs\n\t *\n\t * @method: getIDRecord\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} ID of the record in string form for the URI\n\t */\n\tvar getIDRecord = function(pParameters)\n\t{\n var tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\n\t\tvar tmpIDRecord = false;\n\n if (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn tmpIDRecord;\n\t\t}\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n // Check Schema Entry Type\n var tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tvar tmpSchemaEntry = {Column:tmpFilter[i].Column, Type:'Default'};\n\t\t\tfor (var j = 0; j < tmpSchema.length; j++)\n\t\t\t{\n // If this column is the AutoIdentity, set it.\n\t\t\t\tif ((tmpFilter[i].Column == tmpSchema[j].Column) &&\n (tmpSchema[j].Type == 'AutoIdentity'))\n\t\t\t\t{\n tmpIDRecord = tmpFilter[i].Value;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn tmpIDRecord;\n }\n\t\n /**\n\t * Generate an ORDER BY clause from the sort array\n\t *\n\t * Each entry in the sort is an object like:\n\t * {Column:'Color',Direction:'Descending'}\n\t *\n\t * @method: generateOrderBy\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the field list clause\n\t */\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tvar tmpOrderClause = false;\n\n if (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn tmpOrderClause;\n\t\t}\n\n tmpOrderClause = '';\n\n for (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += '~';\n\t\t\t}\n\t\t\ttmpOrderClause += `FSF~${tmpOrderBy[i].Column}~`;\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += 'DESC~0';\n\t\t\t}\n else\n {\n tmpOrderClause += 'ASC~0'\n }\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t * Generate the limit clause\n\t *\n\t * @method: generateLimit\n\t * @param: {Object} pParameters SQL Query Parameters\n\t * @return: {String} Returns the table name clause\n\t */\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n let tmpBegin = (pParameters.begin !== false) ? pParameters.begin : 0;\n\n return `${tmpBegin}/${pParameters.cap}`;\n\t};\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n var tmpFlags = generateFlags(pParameters);\n\n if (tmpTableName)\n {\n let tmpURL = tmpTableName;\n if (tmpFlags)\n {\n tmpURL = `${tmpURL}/WithFlags/${tmpFlags}`\n }\n return tmpURL;\n }\n else\n {\n return false;\n }\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\n\t\tvar tmpURL = `${tmpTableName}`;\n\t\t// In the case that there is only a single query parameter, and the parameter is a single identity, \n\t\t// we will cast it to the READ endpoint rather than READS.\n\t\tif ((pParameters.filter)\n\t\t\t && (pParameters.filter.length == 1)\n // If there is exactly one query filter parameter\n\t\t\t && (pParameters.filter[0].Column === generateIdentityColumnName(pParameters))\n\t\t\t // AND It is the Identity column\n\t\t\t && (pParameters.filter[0].Operator === '=')\n\t\t\t // AND The comparators is a simple equals \n\t\t\t && (tmpLimit == '') && (tmpFieldList == '')\n\t\t\t // AND There is no limit or field list set\n\t\t\t && (!pParameters.sort))\n\t\t\t // AND There is no sort clause\n\t\t{\n\t\t\t// THEN This is a SINGLE READ by presumption.\n\t\t\t// There are some bad side affects this could cause with chaining and overridden behaviors, if \n\t\t\t// we are requesting a filtered list of 1 record.\n\t\t\ttmpURL = `${tmpURL}/${pParameters.filter[0].Value}`;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttmpURL = `${tmpURL}s`;\n\t\t\tif (tmpFieldList)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/LiteExtended/${tmpFieldList}`\n\t\t\t}\n\t\t\tif (tmpWhere)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/FilteredTo/${tmpWhere}`;\n\t\t\t}\n\t\t\tif (tmpLimit)\n\t\t\t{\n\t\t\t\ttmpURL = `${tmpURL}/${tmpLimit}`;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpURL;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n var tmpFlags = generateFlags(pParameters);\n\n if (tmpTableName)\n {\n let tmpURL = tmpTableName;\n if (tmpFlags)\n {\n tmpURL = `${tmpURL}/WithFlags/${tmpFlags}`\n }\n return tmpURL;\n }\n else\n {\n return false;\n }\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpIDRecord = getIDRecord(pParameters);\n\n if (!tmpIDRecord)\n {\n return false;\n }\n\n\t\treturn `${tmpTableName}/${tmpIDRecord}`;\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\n let tmpCountQuery = `${tmpTableName}s/Count`;\n\n if (tmpWhere)\n {\n return `${tmpTableName}s/Count/FilteredTo/${tmpWhere}`;\n }\n\n return tmpCountQuery;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t * Dialect Name\n\t *\n\t * @property name\n\t * @type string\n\t */\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'MeadowEndpoints'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectMeadowEndpoints;\n","/**\n* FoxHound MySQL Dialect\n*\n* @license MIT\n*\n* For a MySQL query override:\n// An underscore template with the following values:\n// <%= DataElements %> = Field1, Field2, Field3, Field4\n// <%= Begin %> = 0\n// <%= Cap %> = 10\n// <%= Filter %> = WHERE StartDate > :MyStartDate\n// <%= Sort %> = ORDER BY Field1\n// The values are empty strings if they aren't set.\n*\n* @author Steven Velozo <steven@velozo.com>\n* @class FoxHoundDialectMySQL\n*/\n\nvar FoxHoundDialectMySQL = function(pFable)\n{\n\t//Request time from SQL server with microseconds resolution\n\tconst SQL_NOW = \"NOW(3)\";\n\n\t_Fable = pFable;\n\n\t/**\n\t* Generate a table name from the scope\n\t*\n\t* @method: generateTableName\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateTableName = function(pParameters)\n\t{\n\t\tif (pParameters.scope && pParameters.scope.indexOf('`') >= 0)\n\t\t\treturn ' '+pParameters.scope+'';\n\t\telse\n\t\t\treturn ' `'+pParameters.scope+'`';\n\t};\n\n\t/**\n\t* Generate a field list from the array of dataElements\n\t*\n\t* Each entry in the dataElements is a simple string\n\t*\n\t* @method: generateFieldList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @param {Boolean} pIsForCountClause (optional) If true, generate fields for use within a count clause.\n\t* @return: {String} Returns the field list clause, or empty string if explicit fields are requested but cannot be fulfilled\n\t* due to missing schema.\n\t*/\n\tvar generateFieldList = function(pParameters, pIsForCountClause)\n\t{\n\t\tvar tmpDataElements = pParameters.dataElements;\n\t\tif (!Array.isArray(tmpDataElements) || tmpDataElements.length < 1)\n\t\t{\n\t\t\tconst tmpTableName = generateTableName(pParameters);\n\t\t\tif (!pIsForCountClause)\n\t\t\t{\n\t\t\t\treturn tmpTableName + '.*';\n\t\t\t}\n\t\t\t// we need to list all of the table fields explicitly; get them from the schema\n\t\t\tconst tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tif (tmpSchema.length < 1)\n\t\t\t{\n\t\t\t\t// this means we have no schema; returning an empty string here signals the calling code to handle this case\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst idColumn = tmpSchema.find((entry) => entry.Type === 'AutoIdentity');\n\t\t\tif (!idColumn)\n\t\t\t{\n\t\t\t\t// this means there is no autoincrementing unique ID column; treat as above\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tconst qualifiedIDColumn = `${tmpTableName}.${idColumn.Column}`;\n\t\t\treturn ` ${generateSafeFieldName(qualifiedIDColumn)}`;\n\t\t}\n\n\t\tvar tmpFieldList = ' ';\n\t\tfor (var i = 0; i < tmpDataElements.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpFieldList += ', ';\n\t\t\t}\n\t\t\tif (Array.isArray(tmpDataElements[i]))\n\t\t\t{\n\t\t\t\ttmpFieldList += generateSafeFieldName(tmpDataElements[i][0]);\n\t\t\t\tif (tmpDataElements[i].length > 1 && tmpDataElements[i][1])\n\t\t\t\t{\n\t\t\t\t\ttmpFieldList += \" AS \" + generateSafeFieldName(tmpDataElements[i][1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpFieldList += generateSafeFieldName(tmpDataElements[i]);\n\t\t\t}\n\t\t}\n\t\treturn tmpFieldList;\n\t};\n\n\tconst SURROUNDING_QUOTES_AND_WHITESPACE_REGEX = /^[` ]+|[` ]+$/g;\n\n\tconst cleanseQuoting = (str) =>\n\t{\n\t\treturn str.replace(SURROUNDING_QUOTES_AND_WHITESPACE_REGEX, '');\n\t};\n\n\t/**\n\t* Ensure a field name is properly escaped.\n\t*/\n\tvar generateSafeFieldName = function(pFieldName)\n\t{\n\t\tlet pFieldNames = pFieldName.split('.');\n\t\tif (pFieldNames.length > 1)\n\t\t{\n\t\t\tconst cleansedFieldName = cleanseQuoting(pFieldNames[1]);\n\t\t\tif (cleansedFieldName === '*')\n\t\t\t{\n\t\t\t\t// do not put * as `*`\n\t\t\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`.*\";\n\t\t\t}\n\t\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`.`\" + cleansedFieldName + \"`\";\n\t\t}\n\t\tconst cleansedFieldName = cleanseQuoting(pFieldNames[0]);\n\t\tif (cleansedFieldName === '*')\n\t\t{\n\t\t\t// do not put * as `*`\n\t\t\treturn '*';\n\t\t}\n\t\treturn \"`\" + cleanseQuoting(pFieldNames[0]) + \"`\";\n\t}\n\n\t/**\n\t* Generate a query from the array of where clauses\n\t*\n\t* Each clause is an object like:\n\t\t{\n\t\t\tColumn:'Name',\n\t\t\tOperator:'EQ',\n\t\t\tValue:'John',\n\t\t\tConnector:'And',\n\t\t\tParameter:'Name'\n\t\t}\n\t*\n\t* @method: generateWhere\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the WHERE clause prefixed with WHERE, or an empty string if unnecessary\n\t*/\n\tvar generateWhere = function(pParameters)\n\t{\n\t\tvar tmpFilter = Array.isArray(pParameters.filter) ? pParameters.filter : [];\n\t\tvar tmpTableName = generateTableName(pParameters);\n\n\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t// Check if there is a Deleted column on the Schema. If so, we add this to the filters automatically (if not already present)\n\t\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\tvar tmpSchemaEntry = tmpSchema[i];\n\n\t\t\t\tif (tmpSchemaEntry.Type === 'Deleted')\n\t\t\t\t{\n\t\t\t\t\tvar tmpHasDeletedParameter = false;\n\n\t\t\t\t\t//first, check to see if filters are already looking for Deleted column\n\t\t\t\t\tif (tmpFilter.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var x = 0; x < tmpFilter.length; x++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (tmpFilter[x].Column === tmpSchemaEntry.Column)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpHasDeletedParameter = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!tmpHasDeletedParameter)\n\t\t\t\t\t{\n\t\t\t\t\t\t//if not, we need to add it\n\t\t\t\t\t\ttmpFilter.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tColumn: tmpTableName + '.' + tmpSchemaEntry.Column,\n\t\t\t\t\t\t\tOperator: '=',\n\t\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\t\tConnector: 'AND',\n\t\t\t\t\t\t\tParameter: 'Deleted'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (tmpFilter.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpWhere = ' WHERE';\n\n\t\t// This is used to disable the connectors for subsequent queries.\n\t\t// Only the open parenthesis operator uses this, currently.\n\t\tvar tmpLastOperatorNoConnector = false;\n\n\t\tfor (var i = 0; i < tmpFilter.length; i++)\n\t\t{\n\t\t\tif ((tmpFilter[i].Connector != 'NONE') && (tmpFilter[i].Operator != ')') && (tmpWhere != ' WHERE') && (tmpLastOperatorNoConnector == false))\n\t\t\t{\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Connector;\n\t\t\t}\n\n\t\t\ttmpLastOperatorNoConnector = false;\n\n\t\t\tvar tmpColumnParameter;\n\n\t\t\tif (tmpFilter[i].Operator === '(')\n\t\t\t{\n\t\t\t\t// Open a logical grouping\n\t\t\t\ttmpWhere += ' (';\n\t\t\t\ttmpLastOperatorNoConnector = true;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === ')')\n\t\t\t{\n\t\t\t\t// Close a logical grouping\n\t\t\t\ttmpWhere += ' )';\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IN' || tmpFilter[i].Operator === \"NOT IN\")\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator+' ( :'+tmpColumnParameter+' )';\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NULL')\n\t\t\t{\n\t\t\t\t// IS NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse if (tmpFilter[i].Operator === 'IS NOT NULL')\n\t\t\t{\n\t\t\t\t// IS NOT NULL is a special operator which doesn't require a value, or parameter\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttmpColumnParameter = tmpFilter[i].Parameter+'_w'+i;\n\t\t\t\t// Add the column name, operator and parameter name to the list of where value parenthetical\n\t\t\t\ttmpWhere += ' '+tmpFilter[i].Column+' '+tmpFilter[i].Operator+' :'+tmpColumnParameter;\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpFilter[i].Value;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpWhere;\n\t};\n\n\t/**\n\t* Generate an ORDER BY clause from the sort array\n\t*\n\t* Each entry in the sort is an object like:\n\t* {Column:'Color',Direction:'Descending'}\n\t*\n\t* @method: generateOrderBy\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the field list clause\n\t*/\n\tvar generateOrderBy = function(pParameters)\n\t{\n\t\tvar tmpOrderBy = pParameters.sort;\n\t\tif (!Array.isArray(tmpOrderBy) || tmpOrderBy.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpOrderClause = ' ORDER BY';\n\t\tfor (var i = 0; i < tmpOrderBy.length; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\ttmpOrderClause += ',';\n\t\t\t}\n\t\t\ttmpOrderClause += ' '+tmpOrderBy[i].Column;\n\n\t\t\tif (tmpOrderBy[i].Direction == 'Descending')\n\t\t\t{\n\t\t\t\ttmpOrderClause += ' DESC';\n\t\t\t}\n\t\t}\n\t\treturn tmpOrderClause;\n\t};\n\n\t/**\n\t* Generate the limit clause\n\t*\n\t* @method: generateLimit\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateLimit = function(pParameters)\n\t{\n\t\tif (!pParameters.cap)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpLimit = ' LIMIT';\n\t\t// If there is a begin record, we'll pass that in as well.\n\t\tif (pParameters.begin !== false)\n\t\t{\n\t\t\ttmpLimit += ' ' + pParameters.begin + ',';\n\t\t}\n\t\t// Cap is required for a limit clause.\n\t\ttmpLimit += ' ' + pParameters.cap;\n\n\t\treturn tmpLimit;\n\t};\n\n\t/**\n\t* Generate the join clause\n\t*\n\t* @method: generateJoins\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the join clause\n\t*/\n\tvar generateJoins = function(pParameters)\n\t{\n\t\tvar tmpJoins = pParameters.join;\n\t\tif (!Array.isArray(tmpJoins) || tmpJoins.length < 1)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\tvar tmpJoinClause = ''; //ex. ' INNER JOIN';\n\t\tfor (var i = 0; i < tmpJoins.length; i++)\n\t\t{\n\t\t\tvar join = tmpJoins[i];\n\t\t\t//verify that all required fields are valid\n\t\t\tif (join.Type && join.Table && join.From && join.To)\n\t\t\t{\n\t\t\t\ttmpJoinClause += ` ${join.Type} ${join.Table} ON ${join.From} = ${join.To}`;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpJoinClause;\n\t}\n\n\t/**\n\t* Generate the update SET clause\n\t*\n\t* @method: generateUpdateSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateSetters = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpUpdate = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pParameters.query.disableAutoDateStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateDate')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (pParameters.query.disableAutoUserStamp &&\n\t\t\t\ttmpSchemaEntry.Type === 'UpdateIDUser')\n\t\t\t{\n\t\t\t\t// This is ignored if flag is set\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// These are all ignored on update\n\t\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar tmpColumnDefaultParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdate += ' '+tmpColumn+' = :'+tmpColumnDefaultParameter;\n\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnDefaultParameter] = tmpRecords[0][tmpColumn];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-delete SET clause\n\t*\n\t* @method: generateUpdateDeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateDeleteSetters = function(pParameters)\n\t{\n\t\tif (pParameters.query.disableDeleteTracking)\n\t\t{\n\t\t\t//Don't generate an UPDATE query if Delete tracking is disabled\n\t\t\treturn false;\n\t\t}\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = 1';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// Delete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = :'+tmpColumnParameter;\n\t\t\t\t\t// Set the query parameter\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the update-undelete SET clause\n\t*\n\t* @method: generateUpdateUndeleteSetters\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateUpdateUndeleteSetters = function(pParameters)\n\t{\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCurrentColumn = 0;\n\t\tvar tmpHasDeletedField = false;\n\t\tvar tmpUpdate = '';\n\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\tvar tmpSchemaEntry = {Type:'Default'};\n\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t{\n\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\ttmpSchemaEntry = tmpSchema[i];\n\n\t\t\tvar tmpUpdateSql = null;\n\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'Deleted':\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = 0';\n\t\t\t\t\ttmpHasDeletedField = true; //this field is required in order for query to be built\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t// The undelete operation is an Update, so we should stamp the update time\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = ' + SQL_NOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\tvar tmpColumnParameter = tmpSchemaEntry.Column+'_'+tmpCurrentColumn;\n\t\t\t\t\ttmpUpdateSql = ' '+tmpSchemaEntry.Column+' = :'+tmpColumnParameter;\n\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//DON'T allow update of other fields in this query\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpUpdate += ',';\n\t\t\t}\n\n\t\t\ttmpUpdate += tmpUpdateSql;\n\n\t\t\t// We use a number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (!tmpHasDeletedField ||\n\t\t\ttmpUpdate === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpUpdate;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetValues = function(pParameters)\n\t{\n\t\tvar tmpRecords = pParameters.query.records;\n\t\t// We need to tell the query not to generate improperly if there are no values to set.\n\t\tif (!Array.isArray(tmpRecords) || tmpRecords.length < 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tvar tmpCurrentColumn = 0;\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tmpCurrentColumn > 0)\n\t\t\t{\n\t\t\t\ttmpCreateSet += ',';\n\t\t\t}\n\n\t\t\t//define a re-usable method for setting up field definitions in a default pattern\n\t\t\tvar buildDefaultDefinition = function()\n\t\t\t{\n\t\t\t\tvar tmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t// Set the query parameter\n\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = tmpRecords[0][tmpColumn];\n\t\t\t};\n\n\t\t\tvar tmpColumnParameter;\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tcase 'AutoIdentity':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' NULL';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'AutoGUID':\n\t\t\t\t\tif (pParameters.query.disableAutoIdentity)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse if (tmpRecords[0][tmpColumn] &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn].length >= 5 &&\n\t\t\t\t\t\t\ttmpRecords[0][tmpColumn] !== '0x0000000000000000') //stricture default\n\t\t\t\t\t{\n\t\t\t\t\t\t// Allow consumer to override AutoGUID\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.UUID;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'UpdateDate':\n\t\t\t\tcase 'CreateDate':\n\t\t\t\tcase 'DeleteDate':\n\t\t\t\t\tif (pParameters.query.disableAutoDateStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is an autoidentity, so we don't parameterize it and just pass in NULL\n\t\t\t\t\t\ttmpCreateSet += ' ' + SQL_NOW;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DeleteIDUser':\n\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\tcase 'CreateIDUser':\n\t\t\t\t\tif (pParameters.query.disableAutoUserStamp)\n\t\t\t\t\t{\n\t\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// This is the user ID, which we hope is in the query.\n\t\t\t\t\t\t// This is how to deal with a normal column\n\t\t\t\t\t\ttmpColumnParameter = tmpColumn+'_'+tmpCurrentColumn;\n\t\t\t\t\t\ttmpCreateSet += ' :'+tmpColumnParameter;\n\t\t\t\t\t\t// Set the query parameter\n\t\t\t\t\t\tpParameters.query.parameters[tmpColumnParameter] = pParameters.query.IDUser;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbuildDefaultDefinition();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// We use an appended number to make sure parameters are unique.\n\t\t\ttmpCurrentColumn++;\n\t\t}\n\n\t\t// We need to tell the query not to generate improperly if there are no values set.\n\t\tif (tmpCreateSet === '')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\t/**\n\t* Generate the create SET clause\n\t*\n\t* @method: generateCreateSetList\n\t* @param: {Object} pParameters SQL Query Parameters\n\t* @return: {String} Returns the table name clause\n\t*/\n\tvar generateCreateSetList = function(pParameters)\n\t{\n\t\t// The records were already validated by generateCreateSetValues\n\t\tvar tmpRecords = pParameters.query.records;\n\n\t\t// Check if there is a schema. If so, we will use it to decide if these are parameterized or not.\n\t\tvar tmpSchema = Array.isArray(pParameters.query.schema) ? pParameters.query.schema : [];\n\n\t\tvar tmpCreateSet = '';\n\t\t// If there is more than one record in records, we are going to ignore them for now.\n\t\tfor(var tmpColumn in tmpRecords[0])\n\t\t{\n\t\t\t// No hash table yet, so, we will just linear search it for now.\n\t\t\t// This uses the schema to decide if we want to treat a column differently on insert\n\t\t\tvar tmpSchemaEntry = {Column:tmpColumn, Type:'Default'};\n\t\t\tfor (var i = 0; i < tmpSchema.length; i++)\n\t\t\t{\n\t\t\t\tif (tmpColumn == tmpSchema[i].Column)\n\t\t\t\t{\n\t\t\t\t\t// There is a schema entry for it. Process it accordingly.\n\t\t\t\t\ttmpSchemaEntry = tmpSchema[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!pParameters.query.disableDeleteTracking)\n\t\t\t{\n\t\t\t\tif (tmpSchemaEntry.Type === 'DeleteDate' ||\n\t\t\t\t\ttmpSchemaEntry.Type === 'DeleteIDUser')\n\t\t\t\t{\n\t\t\t\t\t// These are all ignored on insert (if delete tracking is enabled as normal)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (tmpSchemaEntry.Type)\n\t\t\t{\n\t\t\t\tdefault:\n\t\t\t\t\tif (tmpCreateSet != '')\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpCreateSet += ',';\n\t\t\t\t\t}\n\t\t\t\t\ttmpCreateSet += ' '+tmpColumn;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn tmpCreateSet;\n\t};\n\n\n\tvar Create = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpCreateSetList = generateCreateSetList(pParameters);\n\t\tvar tmpCreateSetValues = generateCreateSetValues(pParameters);\n\n\t\tif (!tmpCreateSetValues)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'INSERT INTO'+tmpTableName+' ('+tmpCreateSetList+') VALUES ('+tmpCreateSetValues+');';\n\t};\n\n\n\t/**\n\t* Read one or many records\n\t*\n\t* Some examples:\n\t* SELECT * FROM WIDGETS;\n\t* SELECT * FROM WIDGETS LIMIT 0, 20;\n\t* SELECT * FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20;\n\t* SELECT ID, Name, Cost FROM WIDGETS LIMIT 5, 20 WHERE LastName = 'Smith';\n\t*\n\t* @method Read\n\t* @param {Object} pParameters SQL Query parameters\n\t* @return {String} Returns the current Query for chaining.\n\t*/\n\tvar Read = function(pParameters)\n\t{\n\t\tvar tmpFieldList = generateFieldList(pParameters);\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpJoin = generateJoins(pParameters);\n\t\tvar tmpOrderBy = generateOrderBy(pParameters);\n\t\tvar tmpLimit = generateLimit(pParameters);\n\t\tconst tmpOptDistinct = pParameters.distinct ? ' DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:tmpFieldList, TableName:tmpTableName, Where:tmpWhere, Join:tmpJoin, OrderBy:tmpOrderBy, Limit:tmpLimit, Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Read Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT${tmpOptDistinct}${tmpFieldList} FROM${tmpTableName}${tmpJoin}${tmpWhere}${tmpOrderBy}${tmpLimit};`;\n\t};\n\n\tvar Update = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateSetters = generateUpdateSetters(pParameters);\n\n\t\tif (!tmpUpdateSetters)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateSetters+tmpWhere+';';\n\t};\n\n\tvar Delete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateDeleteSetters = generateUpdateDeleteSetters(pParameters);\n\n\t\tif (tmpUpdateDeleteSetters)\n\t\t{\n\t\t\t//If it has a deleted bit, update it instead of actually deleting the record\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateDeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn 'DELETE FROM'+tmpTableName+tmpWhere+';';\n\t\t}\n\t};\n\n\tvar Undelete = function(pParameters)\n\t{\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\t// TODO: Fix these\n\t\tlet tmpDeleteTrackingState = pParameters.query.disableDeleteTracking;\n\t\tpParameters.query.disableDeleteTracking = true;\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\tvar tmpUpdateUndeleteSetters = generateUpdateUndeleteSetters(pParameters);\n\t\tpParameters.query.disableDeleteTracking = tmpDeleteTrackingState;\n\n\t\tif (tmpUpdateUndeleteSetters)\n\t\t{\n\t\t\t//If the table has a deleted bit, go forward with the update to change things.\n\t\t\treturn 'UPDATE'+tmpTableName+' SET'+tmpUpdateUndeleteSetters+tmpWhere+';';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// This is a no-op because the record can't be undeleted.\n\t\t\t// TODO: Should it throw instead?\n\t\t\treturn 'SELECT NULL;';\n\t\t}\n\t};\n\n\tvar Count = function(pParameters)\n\t{\n\t\tvar tmpFieldList = pParameters.distinct ? generateFieldList(pParameters, true) : '*';\n\t\tvar tmpTableName = generateTableName(pParameters);\n\t\tvar tmpJoin = generateJoins(pParameters);\n\t\tvar tmpWhere = generateWhere(pParameters);\n\t\t// here, we ignore the distinct keyword if no fields have been specified and\n\t\tif (pParameters.distinct && tmpFieldList.length < 1)\n\t\t{\n\t\t\tconsole.warn('Distinct requested but no field list or schema are available, so not honoring distinct for count query.');\n\t\t}\n\t\tconst tmpOptDistinct = pParameters.distinct && tmpFieldList.length > 0 ? 'DISTINCT' : '';\n\n\t\tif (pParameters.queryOverride)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpQueryTemplate = _Fable.Utility.template(pParameters.queryOverride);\n\t\t\t\treturn tmpQueryTemplate({FieldList:[], TableName:tmpTableName, Where:tmpWhere, OrderBy:'', Limit:'', Distinct: tmpOptDistinct, _Params: pParameters});\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t// This pokemon is here to give us a convenient way of not throwing up totally if the query fails.\n\t\t\t\tconsole.log('Error with custom Count Query ['+pParameters.queryOverride+']: '+pError);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn `SELECT COUNT(${tmpOptDistinct}${tmpFieldList || '*'}) AS RowCount FROM${tmpTableName}${tmpJoin}${tmpWhere};`;\n\t};\n\n\tvar tmpDialect = ({\n\t\tCreate: Create,\n\t\tRead: Read,\n\t\tUpdate: Update,\n\t\tDelete: Delete,\n\t\tUndelete: Undelete,\n\t\tCount: Count\n\t});\n\n\t/**\n\t* Dialect Name\n\t*\n\t* @property name\n\t* @type string\n\t*/\n\tObject.defineProperty(tmpDialect, 'name',\n\t\t{\n\t\t\tget: function() { return 'MySQL'; },\n\t\t\tenumerable: true\n\t\t});\n\n\treturn tmpDialect;\n};\n\nmodule.exports = FoxHoundDialectMySQL;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","var util = require('util')\nvar isProperty = require('is-property')\n\nvar INDENT_START = /[\\{\\[]/\nvar INDENT_END = /[\\}\\]]/\n\n// from https://mathiasbynens.be/notes/reserved-keywords\nvar RESERVED = [\n 'do',\n 'if',\n 'in',\n 'for',\n 'let',\n 'new',\n 'try',\n 'var',\n 'case',\n 'else',\n 'enum',\n 'eval',\n 'null',\n 'this',\n 'true',\n 'void',\n 'with',\n 'await',\n 'break',\n 'catch',\n 'class',\n 'const',\n 'false',\n 'super',\n 'throw',\n 'while',\n 'yield',\n 'delete',\n 'export',\n 'import',\n 'public',\n 'return',\n 'static',\n 'switch',\n 'typeof',\n 'default',\n 'extends',\n 'finally',\n 'package',\n 'private',\n 'continue',\n 'debugger',\n 'function',\n 'arguments',\n 'interface',\n 'protected',\n 'implements',\n 'instanceof',\n 'NaN',\n 'undefined'\n]\n\nvar RESERVED_MAP = {}\n\nfor (var i = 0; i < RESERVED.length; i++) {\n RESERVED_MAP[RESERVED[i]] = true\n}\n\nvar isVariable = function (name) {\n return isProperty(name) && !RESERVED_MAP.hasOwnProperty(name)\n}\n\nvar formats = {\n s: function(s) {\n return '' + s\n },\n d: function(d) {\n return '' + Number(d)\n },\n o: function(o) {\n return JSON.stringify(o)\n }\n}\n\nvar genfun = function() {\n var lines = []\n var indent = 0\n var vars = {}\n\n var push = function(str) {\n var spaces = ''\n while (spaces.length < indent*2) spaces += ' '\n lines.push(spaces+str)\n }\n\n var pushLine = function(line) {\n if (INDENT_END.test(line.trim()[0]) && INDENT_START.test(line[line.length-1])) {\n indent--\n push(line)\n indent++\n return\n }\n if (INDENT_START.test(line[line.length-1])) {\n push(line)\n indent++\n return\n }\n if (INDENT_END.test(line.trim()[0])) {\n indent--\n push(line)\n return\n }\n\n push(line)\n }\n\n var line = function(fmt) {\n if (!fmt) return line\n\n if (arguments.length === 1 && fmt.indexOf('\\n') > -1) {\n var lines = fmt.trim().split('\\n')\n for (var i = 0; i < lines.length; i++) {\n pushLine(lines[i].trim())\n }\n } else {\n pushLine(util.format.apply(util, arguments))\n }\n\n return line\n }\n\n line.scope = {}\n line.formats = formats\n\n line.sym = function(name) {\n if (!name || !isVariable(name)) name = 'tmp'\n if (!vars[name]) vars[name] = 0\n return name + (vars[name]++ || '')\n }\n\n line.property = function(obj, name) {\n if (arguments.length === 1) {\n name = obj\n obj = ''\n }\n\n name = name + ''\n\n if (isProperty(name)) return (obj ? obj + '.' + name : name)\n return obj ? obj + '[' + JSON.stringify(name) + ']' : JSON.stringify(name)\n }\n\n line.toString = function() {\n return lines.join('\\n')\n }\n\n line.toFunction = function(scope) {\n if (!scope) scope = {}\n\n var src = 'return ('+line.toString()+')'\n\n Object.keys(line.scope).forEach(function (key) {\n if (!scope[key]) scope[key] = line.scope[key]\n })\n\n var keys = Object.keys(scope).map(function(key) {\n return key\n })\n\n var vals = keys.map(function(key) {\n return scope[key]\n })\n\n return Function.apply(null, keys.concat(src)).apply(null, vals)\n }\n\n if (arguments.length) line.apply(null, arguments)\n\n return line\n}\n\ngenfun.formats = formats\nmodule.exports = genfun\n","var isProperty = require('is-property')\n\nvar gen = function(obj, prop) {\n return isProperty(prop) ? obj+'.'+prop : obj+'['+JSON.stringify(prop)+']'\n}\n\ngen.valid = isProperty\ngen.property = function (prop) {\n return isProperty(prop) ? prop : JSON.stringify(prop)\n}\n\nmodule.exports = gen\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","var reIpv4FirstPass = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/\n\nvar reSubnetString = /\\/\\d{1,3}(?=%|$)/\nvar reForwardSlash = /\\//\nvar reZone = /%.*$/\nvar reBadCharacters = /([^0-9a-f:/%])/i\nvar reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/i\n\nfunction validate4 (input) {\n if (!(reIpv4FirstPass.test(input))) return false\n\n var parts = input.split('.')\n\n if (parts.length !== 4) return false\n\n if (parts[0][0] === '0' && parts[0].length > 1) return false\n if (parts[1][0] === '0' && parts[1].length > 1) return false\n if (parts[2][0] === '0' && parts[2].length > 1) return false\n if (parts[3][0] === '0' && parts[3].length > 1) return false\n\n var n0 = Number(parts[0])\n var n1 = Number(parts[1])\n var n2 = Number(parts[2])\n var n3 = Number(parts[3])\n\n return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256)\n}\n\nfunction validate6 (input) {\n var withoutSubnet = input.replace(reSubnetString, '')\n var hasSubnet = (input.length !== withoutSubnet.length)\n\n // FIXME: this should probably be an option in the future\n if (hasSubnet) return false\n\n if (!hasSubnet) {\n if (reForwardSlash.test(input)) return false\n }\n\n var withoutZone = withoutSubnet.replace(reZone, '')\n var lastPartSeparator = withoutZone.lastIndexOf(':')\n\n if (lastPartSeparator === -1) return false\n\n var lastPart = withoutZone.substring(lastPartSeparator + 1)\n var hasV4Part = validate4(lastPart)\n var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone)\n\n if (reBadCharacters.test(address)) return false\n if (reBadAddress.test(address)) return false\n\n var halves = address.split('::')\n\n if (halves.length > 2) return false\n\n if (halves.length === 2) {\n var first = (halves[0] === '' ? [] : halves[0].split(':'))\n var last = (halves[1] === '' ? [] : halves[1].split(':'))\n var remainingLength = 8 - (first.length + last.length)\n\n if (remainingLength <= 0) return false\n } else {\n if (address.split(':').length !== 8) return false\n }\n\n return true\n}\n\nfunction validate (input) {\n return validate4(input) || validate6(input)\n}\n\nmodule.exports = function validator (options) {\n if (!options) options = {}\n\n if (options.version === 4) return validate4\n if (options.version === 6) return validate6\n if (options.version == null) return validate\n\n throw new Error('Unknown version: ' + options.version)\n}\n\nmodule.exports['__all_regexes__'] = [\n reIpv4FirstPass,\n reSubnetString,\n reForwardSlash,\n reZone,\n reBadCharacters,\n reBadAddress\n]\n","var createIpValidator = require('is-my-ip-valid')\n\nvar reEmailWhitespace = /\\s/\nvar reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/\nvar reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/\nvar rePhoneFirstPass = /^\\+[0-9][0-9 ]{5,27}[0-9]$/\nvar rePhoneDoubleSpace = / {2}/\nvar rePhoneGlobalSpace = / /g\n\nexports['date-time'] = /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+|)([zZ]|[+-]\\d{2}:\\d{2})$/\nexports['date'] = /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/\nexports['time'] = /^\\d{2}:\\d{2}:\\d{2}$/\nexports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) }\nexports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 })\nexports['ipv6'] = createIpValidator({ version: 6 })\nexports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\\-.]*:[^\\s]*$/\nexports['color'] = /(#?([0-9A-Fa-f]{3,6})\\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\))/\nexports['hostname'] = function (input) {\n if (!(reHostnameFirstPass.test(input))) return false\n\n var parts = input.split('.')\n\n for (var i = 0; i < parts.length; i++) {\n if (!(reHostnamePart.test(parts[i]))) return false\n }\n\n return true\n}\nexports['alpha'] = /^[a-zA-Z]+$/\nexports['alphanumeric'] = /^[a-zA-Z0-9]+$/\nexports['style'] = /.:\\s*[^;]/g\nexports['phone'] = function (input) {\n if (!(rePhoneFirstPass.test(input))) return false\n if (rePhoneDoubleSpace.test(input)) return false\n\n var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length\n\n return (digits >= 7 && digits <= 15)\n}\nexports['utc-millisec'] = /^[0-9]{1,15}\\.?[0-9]{0,15}$/\n","var genobj = require('generate-object-property')\nvar genfun = require('generate-function')\nvar jsonpointer = require('jsonpointer')\nvar xtend = require('xtend')\nvar formats = require('./formats')\n\nvar get = function(obj, additionalSchemas, ptr) {\n\n var visit = function(sub) {\n if (sub && sub.id === ptr) return sub\n if (typeof sub !== 'object' || !sub) return null\n return Object.keys(sub).reduce(function(res, k) {\n return res || visit(sub[k])\n }, null)\n }\n\n var res = visit(obj)\n if (res) return res\n\n ptr = ptr.replace(/^#/, '')\n ptr = ptr.replace(/\\/$/, '')\n\n try {\n return jsonpointer.get(obj, decodeURI(ptr))\n } catch (err) {\n var end = ptr.indexOf('#')\n var other\n // external reference\n if (end !== 0) {\n // fragment doesn't exist.\n if (end === -1) {\n other = additionalSchemas[ptr]\n } else {\n var ext = ptr.slice(0, end)\n other = additionalSchemas[ext]\n var fragment = ptr.slice(end).replace(/^#/, '')\n try {\n return jsonpointer.get(other, fragment)\n } catch (err) {}\n }\n } else {\n other = additionalSchemas[ptr]\n }\n return other || null\n }\n}\n\nvar types = {}\n\ntypes.any = function() {\n return 'true'\n}\n\ntypes.null = function(name) {\n return name+' === null'\n}\n\ntypes.boolean = function(name) {\n return 'typeof '+name+' === \"boolean\"'\n}\n\ntypes.array = function(name) {\n return 'Array.isArray('+name+')'\n}\n\ntypes.object = function(name) {\n return 'typeof '+name+' === \"object\" && '+name+' && !Array.isArray('+name+')'\n}\n\ntypes.number = function(name) {\n return 'typeof '+name+' === \"number\" && isFinite('+name+')'\n}\n\ntypes.integer = function(name) {\n return 'typeof '+name+' === \"number\" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)'\n}\n\ntypes.string = function(name) {\n return 'typeof '+name+' === \"string\"'\n}\n\nvar unique = function(array, len) {\n len = Math.min(len === -1 ? array.length : len, array.length)\n var list = []\n for (var i = 0; i < len; i++) {\n list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i])\n }\n for (var i = 1; i < list.length; i++) {\n if (list.indexOf(list[i]) !== i) return false\n }\n return true\n}\n\nvar isMultipleOf = function(name, multipleOf) {\n var res;\n var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1\n if (factor > 1) {\n var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1\n if (factorName > factor) res = true\n else res = Math.round(factor * name) % (factor * multipleOf)\n }\n else res = name % multipleOf;\n return !res;\n}\n\nvar testLimitedRegex = function (r, s, maxLength) {\n if (maxLength > -1 && s.length > maxLength) return true\n return r.test(s)\n}\n\nvar compile = function(schema, cache, root, reporter, opts) {\n var fmts = opts ? xtend(formats, opts.formats) : formats\n var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex}\n var verbose = opts ? !!opts.verbose : false;\n var greedy = opts && opts.greedy !== undefined ?\n opts.greedy : false;\n\n var syms = {}\n var allocated = []\n var gensym = function(name) {\n var res = name+(syms[name] = (syms[name] || 0)+1)\n allocated.push(res)\n return res\n }\n\n var formatName = function(field) {\n var s = JSON.stringify(field)\n try {\n var pattern = /\\[([^\\[\\]\"]+)\\]/\n while (pattern.test(s)) s = s.replace(pattern, replacer)\n return s\n } catch (_) {\n return JSON.stringify(field)\n }\n\n function replacer (match, v) {\n if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable')\n return '.\" + ' + v + ' + \"'\n }\n }\n\n var reversePatterns = {}\n var patterns = function(p) {\n if (reversePatterns[p]) return reversePatterns[p]\n var n = gensym('pattern')\n scope[n] = new RegExp(p)\n reversePatterns[p] = n\n return n\n }\n\n var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z']\n var genloop = function() {\n var v = vars.shift()\n vars.push(v+v[0])\n allocated.push(v)\n return v\n }\n\n var visit = function(name, node, reporter, filter, schemaPath) {\n var properties = node.properties\n var type = node.type\n var tuple = false\n\n if (Array.isArray(node.items)) { // tuple type\n properties = {}\n node.items.forEach(function(item, i) {\n properties[i] = item\n })\n type = 'array'\n tuple = true\n }\n\n var indent = 0\n var error = function(msg, prop, value) {\n validate('errors++')\n if (reporter === true) {\n validate('if (validate.errors === null) validate.errors = []')\n if (verbose) {\n validate(\n 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})',\n formatName(prop || name),\n JSON.stringify(msg),\n value || name,\n JSON.stringify(type),\n JSON.stringify(schemaPath)\n )\n } else {\n validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg))\n }\n }\n }\n\n if (node.required === true) {\n indent++\n validate('if (%s === undefined) {', name)\n error('is required')\n validate('} else {')\n } else {\n indent++\n validate('if (%s !== undefined) {', name)\n }\n\n var valid = [].concat(type)\n .map(function(t) {\n if (t && !types.hasOwnProperty(t)) {\n throw new Error('Unknown type: ' + t)\n }\n\n return types[t || 'any'](name)\n })\n .join(' || ') || 'true'\n\n if (valid !== 'true') {\n indent++\n validate('if (!(%s)) {', valid)\n error('is the wrong type')\n validate('} else {')\n }\n\n if (tuple) {\n if (node.additionalItems === false) {\n validate('if (%s.length > %d) {', name, node.items.length)\n error('has additional items')\n validate('}')\n } else if (node.additionalItems) {\n var i = genloop()\n validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i)\n visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems'))\n validate('}')\n }\n }\n\n if (node.format && fmts[node.format]) {\n if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name))\n var n = gensym('format')\n scope[n] = fmts[node.format]\n\n if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name)\n else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength)\n error('must be '+node.format+' format')\n validate('}')\n if (type !== 'string' && formats[node.format]) validate('}')\n }\n\n if (Array.isArray(node.required)) {\n var n = gensym('missing')\n validate('var %s = 0', n)\n var checkRequired = function (req) {\n var prop = genobj(name, req);\n validate('if (%s === undefined) {', prop)\n error('is required', prop)\n validate('%s++', n)\n validate('}')\n }\n validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true')\n node.required.map(checkRequired)\n validate('}');\n if (!greedy) {\n validate('if (%s === 0) {', n)\n indent++\n }\n }\n\n if (node.uniqueItems) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1)\n error('must be unique')\n validate('}')\n if (type !== 'array') validate('}')\n }\n\n if (node.enum) {\n var complex = node.enum.some(function(e) {\n return typeof e === 'object'\n })\n\n var compare = complex ?\n function(e) {\n return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')'\n } :\n function(e) {\n return name+' !== '+JSON.stringify(e)\n }\n\n validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false')\n error('must be an enum value')\n validate('}')\n }\n\n if (node.dependencies) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n Object.keys(node.dependencies).forEach(function(key) {\n var deps = node.dependencies[key]\n if (typeof deps === 'string') deps = [deps]\n\n var exists = function(k) {\n return genobj(name, k) + ' !== undefined'\n }\n\n if (Array.isArray(deps)) {\n validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true')\n error('dependencies not set')\n validate('}')\n }\n if (typeof deps === 'object') {\n validate('if (%s !== undefined) {', genobj(name, key))\n visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key]))\n validate('}')\n }\n })\n\n if (type !== 'object') validate('}')\n }\n\n if (node.additionalProperties || node.additionalProperties === false) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n var i = genloop()\n var keys = gensym('keys')\n\n var toCompare = function(p) {\n return keys+'['+i+'] !== '+JSON.stringify(p)\n }\n\n var toTest = function(p) {\n return '!'+patterns(p)+'.test('+keys+'['+i+'])'\n }\n\n var additionalProp = Object.keys(properties || {}).map(toCompare)\n .concat(Object.keys(node.patternProperties || {}).map(toTest))\n .join(' && ') || 'true'\n\n validate('var %s = Object.keys(%s)', keys, name)\n ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i)\n ('if (%s) {', additionalProp)\n\n if (node.additionalProperties === false) {\n if (filter) validate('delete %s', name+'['+keys+'['+i+']]')\n error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']')\n } else {\n visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties']))\n }\n\n validate\n ('}')\n ('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.$ref) {\n var sub = get(root, opts && opts.schemas || {}, node.$ref)\n if (sub) {\n var fn = cache[node.$ref]\n if (!fn) {\n cache[node.$ref] = function proxy(data) {\n return fn(data)\n }\n fn = compile(sub, cache, root, false, opts)\n }\n var n = gensym('ref')\n scope[n] = fn\n validate('if (!(%s(%s))) {', n, name)\n error('referenced schema does not match')\n validate('}')\n }\n }\n\n if (node.not) {\n var prev = gensym('prev')\n validate('var %s = errors', prev)\n visit(name, node.not, false, filter, schemaPath.concat('not'))\n validate('if (%s === errors) {', prev)\n error('negative schema matches')\n validate('} else {')\n ('errors = %s', prev)\n ('}')\n }\n\n if (node.items && !tuple) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n var i = genloop()\n validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i)\n visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items'))\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.patternProperties) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n var keys = gensym('keys')\n var i = genloop()\n validate\n ('var %s = Object.keys(%s)', keys, name)\n ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i)\n\n Object.keys(node.patternProperties).forEach(function(key) {\n var p = patterns(key)\n validate('if (%s.test(%s)) {', p, keys+'['+i+']')\n visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key]))\n validate('}')\n })\n\n validate('}')\n if (type !== 'object') validate('}')\n }\n\n if (node.pattern) {\n var p = patterns(node.pattern)\n if (type !== 'string') validate('if (%s) {', types.string(name))\n validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength)\n error('pattern mismatch')\n validate('}')\n if (type !== 'string') validate('}')\n }\n\n if (node.allOf) {\n node.allOf.forEach(function(sch, key) {\n visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key]))\n })\n }\n\n if (node.anyOf && node.anyOf.length) {\n var prev = gensym('prev')\n\n node.anyOf.forEach(function(sch, i) {\n if (i === 0) {\n validate('var %s = errors', prev)\n } else {\n validate('if (errors !== %s) {', prev)\n ('errors = %s', prev)\n }\n visit(name, sch, false, false, schemaPath)\n })\n node.anyOf.forEach(function(sch, i) {\n if (i) validate('}')\n })\n validate('if (%s !== errors) {', prev)\n error('no schemas match')\n validate('}')\n }\n\n if (node.oneOf && node.oneOf.length) {\n var prev = gensym('prev')\n var passes = gensym('passes')\n\n validate\n ('var %s = errors', prev)\n ('var %s = 0', passes)\n\n node.oneOf.forEach(function(sch, i) {\n visit(name, sch, false, false, schemaPath)\n validate('if (%s === errors) {', prev)\n ('%s++', passes)\n ('} else {')\n ('errors = %s', prev)\n ('}')\n })\n\n validate('if (%s !== 1) {', passes)\n error('no (or more than one) schemas match')\n validate('}')\n }\n\n if (node.multipleOf !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf)\n\n error('has a remainder')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (node.maxProperties !== undefined) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties)\n error('has more properties than allowed')\n validate('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.minProperties !== undefined) {\n if (type !== 'object') validate('if (%s) {', types.object(name))\n\n validate('if (Object.keys(%s).length < %d) {', name, node.minProperties)\n error('has less properties than allowed')\n validate('}')\n\n if (type !== 'object') validate('}')\n }\n\n if (node.maxItems !== undefined) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n validate('if (%s.length > %d) {', name, node.maxItems)\n error('has more items than allowed')\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.minItems !== undefined) {\n if (type !== 'array') validate('if (%s) {', types.array(name))\n\n validate('if (%s.length < %d) {', name, node.minItems)\n error('has less items than allowed')\n validate('}')\n\n if (type !== 'array') validate('}')\n }\n\n if (node.maxLength !== undefined) {\n if (type !== 'string') validate('if (%s) {', types.string(name))\n\n validate('if (%s.length > %d) {', name, node.maxLength)\n error('has longer length than allowed')\n validate('}')\n\n if (type !== 'string') validate('}')\n }\n\n if (node.minLength !== undefined) {\n if (type !== 'string') validate('if (%s) {', types.string(name))\n\n validate('if (%s.length < %d) {', name, node.minLength)\n error('has less length than allowed')\n validate('}')\n\n if (type !== 'string') validate('}')\n }\n\n if (node.minimum !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum)\n error('is less than minimum')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (node.maximum !== undefined) {\n if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name))\n\n validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum)\n error('is more than maximum')\n validate('}')\n\n if (type !== 'number' && type !== 'integer') validate('}')\n }\n\n if (properties) {\n Object.keys(properties).forEach(function(p) {\n if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name)\n\n visit(\n genobj(name, p),\n properties[p],\n reporter,\n filter,\n schemaPath.concat(tuple ? p : ['properties', p])\n )\n\n if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}')\n })\n }\n\n while (indent--) validate('}')\n }\n\n var validate = genfun\n ('function validate(data) {')\n // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this\n ('if (data === undefined) data = null')\n ('validate.errors = null')\n ('var errors = 0')\n\n visit('data', schema, reporter, opts && opts.filter, [])\n\n validate\n ('return errors === 0')\n ('}')\n\n validate = validate.toFunction(scope)\n validate.errors = null\n\n if (Object.defineProperty) {\n Object.defineProperty(validate, 'error', {\n get: function() {\n if (!validate.errors) return ''\n return validate.errors.map(function(err) {\n return err.field + ' ' + err.message;\n }).join('\\n')\n }\n })\n }\n\n validate.toJSON = function() {\n return schema\n }\n\n return validate\n}\n\nmodule.exports = function(schema, opts) {\n if (typeof schema === 'string') schema = JSON.parse(schema)\n return compile(schema, {}, schema, true, opts)\n}\n\nmodule.exports.filter = function(schema, opts) {\n var validate = module.exports(schema, xtend(opts, {filter: true}))\n return function(sch) {\n validate(sch)\n return sch\n }\n}\n","\"use strict\"\nfunction isProperty(str) {\n return /^[$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc][$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc0-9\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19b0-\\u19c0\\u19c8\\u19c9\\u19d0-\\u19d9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2-\\u1cf4\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua900-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f]*$/.test(str)\n}\nmodule.exports = isProperty","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar gOPD = require('gopd');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","var hasExcape = /~/\nvar escapeMatcher = /~[01]/g\nfunction escapeReplacer (m) {\n switch (m) {\n case '~1': return '/'\n case '~0': return '~'\n }\n throw new Error('Invalid tilde escape: ' + m)\n}\n\nfunction untilde (str) {\n if (!hasExcape.test(str)) return str\n return str.replace(escapeMatcher, escapeReplacer)\n}\n\nfunction setter (obj, pointer, value) {\n var part\n var hasNextPart\n\n for (var p = 1, len = pointer.length; p < len;) {\n if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj\n\n part = untilde(pointer[p++])\n hasNextPart = len > p\n\n if (typeof obj[part] === 'undefined') {\n // support setting of /-\n if (Array.isArray(obj) && part === '-') {\n part = obj.length\n }\n\n // support nested objects/array when setting values\n if (hasNextPart) {\n if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = []\n else obj[part] = {}\n }\n }\n\n if (!hasNextPart) break\n obj = obj[part]\n }\n\n var oldValue = obj[part]\n if (value === undefined) delete obj[part]\n else obj[part] = value\n return oldValue\n}\n\nfunction compilePointer (pointer) {\n if (typeof pointer === 'string') {\n pointer = pointer.split('/')\n if (pointer[0] === '') return pointer\n throw new Error('Invalid JSON pointer.')\n } else if (Array.isArray(pointer)) {\n for (const part of pointer) {\n if (typeof part !== 'string' && typeof part !== 'number') {\n throw new Error('Invalid JSON pointer. Must be of type string or number.')\n }\n }\n return pointer\n }\n\n throw new Error('Invalid JSON pointer.')\n}\n\nfunction get (obj, pointer) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n var len = pointer.length\n if (len === 1) return obj\n\n for (var p = 1; p < len;) {\n obj = obj[untilde(pointer[p++])]\n if (len === p) return obj\n if (typeof obj !== 'object' || obj === null) return undefined\n }\n}\n\nfunction set (obj, pointer, value) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.')\n return setter(obj, pointer, value)\n}\n\nfunction compile (pointer) {\n var compiled = compilePointer(pointer)\n return {\n get: function (object) {\n return get(object, compiled)\n },\n set: function (object, value) {\n return set(object, compiled, value)\n }\n }\n}\n\nexports.get = get\nexports.set = set\nexports.compile = compile\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","/**\n* Simple browser shim loader - assign the npm module to a window global automatically\n*\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libNPMModuleWrapper = require('./Meadow.js');\n\nif ((typeof(window) === 'object') && !window.hasOwnProperty('Meadow'))\n{\n\twindow.Meadow = libNPMModuleWrapper;\n}\n\nmodule.exports = libNPMModuleWrapper;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\n\n/**\n* Load the schema and metadata from a package file\n*\n* @method loadFromPackageFile\n* @return {Object} Returns a new Meadow, or false if it failed\n*/\nvar loadFromPackageFile = function(pMeadow, pPackage)\n{\n\t// Use the package loader to grab the configuration objects and clone a new Meadow.\n\tvar tmpPackage = false;\n\ttry\n\t{\n\t\ttmpPackage = require(pPackage);\n\t}\n\tcatch(pError)\n\t{\n\t\tpMeadow.fable.log.error('Error loading Fable package', {Package:pPackage});\n\t\treturn false;\n\t}\n\n\t// Spool up a new Meadow object\n\tvar tmpNewMeadow = pMeadow.new(pMeadow.fable);\n\n\t// Safely set the parameters\n\tif (typeof(tmpPackage.Scope) === 'string')\n\t{\n\t\ttmpNewMeadow.setScope(tmpPackage.Scope);\n\t}\n\t\n\tif (typeof(tmpPackage.Domain) === 'string')\n\t{\n\t\ttmpNewMeadow.setDomain(tmpPackage.Domain);\n\t}\n\n\tif (typeof(tmpPackage.DefaultIdentifier) === 'string')\n\t{\n\t\ttmpNewMeadow.setDefaultIdentifier(tmpPackage.DefaultIdentifier);\n\t}\n\tif (Array.isArray(tmpPackage.Schema))\n\t{\n\t\ttmpNewMeadow.setSchema(tmpPackage.Schema);\n\t}\n\tif (typeof(tmpPackage.JsonSchema) === 'object')\n\t{\n\t\ttmpNewMeadow.setJsonSchema(tmpPackage.JsonSchema);\n\t}\n\tif (typeof(tmpPackage.DefaultObject) === 'object')\n\t{\n\t\ttmpNewMeadow.setDefault(tmpPackage.DefaultObject);\n\t}\n\n\tif (typeof(tmpPackage.Authorization) === 'object')\n\t{\n\t\ttmpNewMeadow.setAuthorizer(tmpPackage.Authorization);\n\t}\n\n\treturn tmpNewMeadow;\n};\n\nmodule.exports = loadFromPackageFile;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\n\n/**\n* Load the schema and metadata from a package object\n*\n* @method loadFromPackageObject\n* @return {Object} Returns a new Meadow, or false if it failed\n*/\nvar loadFromPackageObject = function(pMeadow, pPackage)\n{\n\t// Use the package loader to grab the configuration objects and clone a new Meadow.\n\tvar tmpPackage = (typeof(pPackage) == 'object') ? pPackage : {};\n\n\tif (!pPackage.hasOwnProperty('Scope'))\n\t{\n\t\tpMeadow.fable.log.error('Error loading Fable package -- scope not defined.', {Package:pPackage});\n\t}\n\n\t// Spool up a new Meadow object\n\tvar tmpNewMeadow = pMeadow.new(pMeadow.fable);\n\n\t// Safely set the parameters\n\tif (typeof(tmpPackage.Scope) === 'string')\n\t{\n\t\ttmpNewMeadow.setScope(tmpPackage.Scope);\n\t}\n\t\n\tif (typeof(tmpPackage.Domain) === 'string')\n\t{\n\t\ttmpNewMeadow.setDomain(tmpPackage.Domain);\n\t}\n\n\tif (typeof(tmpPackage.DefaultIdentifier) === 'string')\n\t{\n\t\ttmpNewMeadow.setDefaultIdentifier(tmpPackage.DefaultIdentifier);\n\t}\n\tif (Array.isArray(tmpPackage.Schema))\n\t{\n\t\ttmpNewMeadow.setSchema(tmpPackage.Schema);\n\t}\n\tif (typeof(tmpPackage.JsonSchema) === 'object')\n\t{\n\t\ttmpNewMeadow.setJsonSchema(tmpPackage.JsonSchema);\n\t}\n\tif (typeof(tmpPackage.DefaultObject) === 'object')\n\t{\n\t\ttmpNewMeadow.setDefault(tmpPackage.DefaultObject);\n\t}\n\n\tif (typeof(tmpPackage.Authorization) === 'object')\n\t{\n\t\ttmpNewMeadow.setAuthorizer(tmpPackage.Authorization);\n\t}\n\n\treturn tmpNewMeadow;\n};\n\nmodule.exports = loadFromPackageObject;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libFS = require('fs');\n\n/**\n* ### Meadow Raw Query Library\n*\n* This library loads and stores raw queries for FoxHound to use.\n* You can overload the default query that is built for each of\n* the following query archetypes:\n*\n* `Create`, `Read`, `Reads`, `Update`, `Delete`, `Count`\n*\n* You can also load other custom queries and give them an\n* arbitrary name.\n*\n* @class MeadowRawQuery\n*/\nvar MeadowRawQuery = function()\n{\n\tfunction createNew(pMeadow)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pMeadow) !== 'object') || !('fable' in pMeadow))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\t\tvar _Meadow = pMeadow;\n\n\t\tvar _Queries = {};\n\n\n\t\t/**\n\t\t* Load a Custom Query from a File\n\t\t*\n\t\t* @method doLoadQuery\n\t\t*/\n\t\tfunction doLoadQuery(pQueryTag, pFileName, fCallBack)\n\t\t{\n\t\t\tvar tmpCallBack = (typeof(fCallBack) === 'function') ? fCallBack : function() {};\n\n\t\t\tlibFS.readFile(pFileName, 'utf8',\n\t\t\t\tfunction (pError, pData)\n\t\t\t\t{\n\t\t\t\t\tif (pError)\n\t\t\t\t\t{\n\t\t\t\t\t\t_Meadow.fable.log.error('Problem loading custom query file.', {QueryTag:pQueryTag, FileName:pFileName, Error:pError});\n\t\t\t\t\t\t// There is some debate whether we should leave the queries entry unset or set it to empty so nothing happens.\n\t\t\t\t\t\t// If this were to set the query to `false` instead of `''`, FoxHound would be used to generate a query.\n\t\t\t\t\t\tdoSetQuery(pQueryTag, '');\n\t\t\t\t\t\ttmpCallBack(false);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_Meadow.fable.log.trace('Loaded custom query file.', {QueryTag:pQueryTag, FileName:pFileName});\n\t\t\t\t\t\tdoSetQuery(pQueryTag, pData);\n\t\t\t\t\t\ttmpCallBack(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\treturn _Meadow;\n\t\t}\n\n\n\t\t/**\n\t\t* Sets a Custom Query from a String\n\t\t*\n\t\t* @method doSetQuery\n\t\t*/\n\t\tfunction doSetQuery(pQueryTag, pQueryString)\n\t\t{\n\t\t\t_Queries[pQueryTag] = pQueryString;\n\t\t\treturn _Meadow;\n\t\t}\n\n\n\t\t/**\n\t\t* Returns a Custom Query if one has been set for this tag\n\t\t*\n\t\t* @method doGetQuery\n\t\t*/\n\t\tfunction doGetQuery(pQueryTag)\n\t\t{\n\t\t\tif (_Queries.hasOwnProperty(pQueryTag))\n\t\t\t{\n\t\t\t\treturn _Queries[pQueryTag];\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\n\t\t/**\n\t\t* Check if a Custom Query exists\n\t\t*\n\t\t* @method doCheckQuery\n\t\t*/\n\t\tfunction doCheckQuery(pQueryTag)\n\t\t{\n\t\t\treturn _Queries.hasOwnProperty(pQueryTag);\n\t\t}\n\n\t\tvar tmpNewMeadowRawQuery = (\n\t\t{\n\t\t\tloadQuery: doLoadQuery,\n\t\t\tsetQuery: doSetQuery,\n\n\t\t\tcheckQuery: doCheckQuery,\n\t\t\tgetQuery: doGetQuery,\n\n\t\t\tnew: createNew\n\t\t});\n\n\t\treturn tmpNewMeadowRawQuery;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new MeadowRawQuery();\n","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libValidator = require('is-my-json-valid');\n\n/**\n* @class MeadowSchema\n*/\nvar MeadowSchema = function()\n{\n\tfunction createNew(pOriginalJsonSchema, pOriginalSchema)\n\t{\n\t\t/* ^ An Example Meadow Schema Object\n\t\t [\n\t\t \t{ \"Column\": \"IDAnimal\", \"Type\":\"AutoIdentity\" },\n\t\t \t{ \"Column\": \"GUIDAnimal\", \"Type\":\"AutoGUID\" },\n\t\t \t{ \"Column\": \"Created\", \"Type\":\"CreateDate\" },\n\t\t \t{ \"Column\": \"CreatingIDUser\", \"Type\":\"CreateIDUser\" },\n\t\t \t{ \"Column\": \"Modified\", \"Type\":\"UpdateDate\" },\n\t\t \t{ \"Column\": \"ModifyingIDUser\", \"Type\":\"UpdateIDUser\" },\n\t\t \t{ \"Column\": \"Deleted\", \"Type\":\"Deleted\" },\n\t\t \t{ \"Column\": \"DeletingIDUser\", \"Type\":\"DeleteIDUser\" },\n\t\t \t{ \"Column\": \"DeleteDate\", \"Type\":\"DeleteDate\" }\n\t\t ]\n\t\t*/\n\t\t/* #### The Meadow Schema\n\t\t *\n\t\t * Meadow uses this description object to create queries, broker data and generate interfaces.\n\t\t */\n\t\tvar _Schema = false;\n\n\t\t/* ^ An Example JSONSchema Object:\n\t\t \t{\n\t\t \t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\n\t\t \t\t\"title\": \"Product\",\n\t\t \t\t\"description\": \"A product from Acme's catalog\",\n\t\t \t\t\"type\": \"object\",\n\t\t \t\t\"properties\": {\n\t\t \t\t\t\"id\": {\n\t\t \t\t\t\t\"description\": \"The unique identifier for a product\",\n\t\t \t\t\t\t\"type\": \"integer\"\n\t\t \t\t\t},\n\t\t \t\t\t\"name\": {\n\t\t \t\t\t\t\"description\": \"Name of the product\",\n\t\t \t\t\t\t\"type\": \"string\"\n\t\t \t\t\t},\n\t\t \t\t\t\"price\": {\n\t\t \t\t\t\t\"type\": \"number\",\n\t\t \t\t\t\t\"minimum\": 0,\n\t\t \t\t\t\t\"exclusiveMinimum\": true\n\t\t \t\t\t},\n\t\t \t\t\t\"tags\": {\n\t\t \t\t\t\t\"type\": \"array\",\n\t\t \t\t\t\t\"items\": {\n\t\t \t\t\t\t\t\"type\": \"string\"\n\t\t \t\t\t\t},\n\t\t \t\t\t\t\"minItems\": 1,\n\t\t \t\t\t\t\"uniqueItems\": true\n\t\t \t\t\t}\n\t\t \t\t},\n\t\t \t\t\"required\": [\"id\", \"name\", \"price\"]\n\t\t \t}\n\t\t*/\n\t\t/* #### A JSONSchema Description\n\t\t *\n\t\t * http://json-schema.org/examples.html\n\t\t *\n\t\t * http://json-schema.org/latest/json-schema-core.html\n\t\t */\n\t\tvar _JsonSchema = false;\n\n\t\t/* #### An \"empty\" ORM object\n\t\t * This is the basis for being filled out by the marshalling code.\n\t\t */\n\t\tvar _Default = false;\n\n\t\t// The cached validator, which uses the JSONSchema\n\t\tvar _Validate = false;\n\n\t\t// The authorizers available to this meadow object\n\t\tvar _Authorizers = {};\n\n\n\t\t/**\n\t\t* Set the Meadow schema\n\t\t*\n\t\t* Our schemas are really instructions for *what* to do *when*. We track:\n\t\t* - Column\n\t\t* - Type _(e.g. AutoIdentity, AutoGUID, CreateDate, CreateIDUser, UpdateDate, UpdateIDUser, DeleteDate, Deleted, DeleteIDUser)_\n\t\t* - Optionally Special Instractions\n\t\t*\n\t\t* @method setSchema\n\t\t*/\n\t\tvar setSchema = function(pSchema)\n\t\t{\n\t\t\t_Schema = (typeof(pSchema) === 'object') ? pSchema : (\n\t\t\t{\n\t\t\t\ttitle: 'Unknown',\n\t\t\t\ttype: 'object',\n\t\t\t\trequired: []\n\t\t\t});\n\t\t};\n\t\tsetSchema(pOriginalSchema);\n\n\t\t/**\n\t\t* Set the JSONSchema\n\t\t*\n\t\t* @method setJsonSchema\n\t\t*/\n\t\tvar setJsonSchema = function(pJsonSchema)\n\t\t{\n\t\t\t_JsonSchema = (typeof(pJsonSchema) === 'object') ? pJsonSchema : (\n\t\t\t{\n\t\t\t\ttitle: 'Unknown',\n\t\t\t\ttype: 'object',\n\t\t\t\trequired: []\n\t\t\t});\n\t\t\t_Validate = libValidator(_JsonSchema, { greedy:true, verbose:true });\n\t\t};\n\t\tsetJsonSchema(pOriginalJsonSchema);\n\n\t\t/**\n\t\t* Set the Default ORM object\n\t\t*\n\t\t* @method setDefault\n\t\t*/\n\t\tvar setDefault = function(pDefault)\n\t\t{\n\t\t\t_Default = (typeof(pDefault) === 'object') ? pDefault : {};\n\t\t};\n\t\tsetDefault();\n\n\t\t/**\n\t\t* Set the authorizer set\n\t\t*\n\t\t* @method setAuthorizer\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setAuthorizer = function(pAuthorizer)\n\t\t{\n\t\t\t_Authorizers = (typeof(pAuthorizer) === 'object') ? pAuthorizer : {};\n\t\t};\n\n\t\t/**\n\t\t* Validate an object against the current schema\n\t\t*\n\t\t* @method validateObject\n\t\t*/\n\t\tvar validateObject = function(pObject)\n\t\t{\n\t\t\tvar tmpValidation = { Valid:_Validate(pObject) };\n\n\t\t\t// Stuff the errors in if it is invalid\n\t\t\tif (!tmpValidation.Valid)\n\t\t\t{\n\t\t\t\ttmpValidation.Errors = _Validate.errors;\n\t\t\t}\n\n\t\t\treturn tmpValidation;\n\t\t};\n\n\n\t\tvar tmpNewMeadowSchemaObject = (\n\t\t{\n\t\t\tsetSchema: setSchema,\n\t\t\tsetJsonSchema: setJsonSchema,\n\t\t\tsetDefault: setDefault,\n\t\t\tsetAuthorizer: setAuthorizer,\n\t\t\tvalidateObject: validateObject,\n\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * The Meadow Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'schema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * The JsonSchema\n\t\t *\n\t\t * @property jsonSchema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'jsonSchema',\n\t\t\t{\n\t\t\t\tget: function() { return _JsonSchema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * Default Object\n\t\t *\n\t\t * @property defaultObject\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'defaultObject',\n\t\t\t{\n\t\t\t\tget: function() { return _Default; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\t/**\n\t\t * Authorizer\n\t\t *\n\t\t * @property defaultObject\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowSchemaObject, 'authorizer',\n\t\t\t{\n\t\t\t\tget: function() { return _Authorizers; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\n\t\treturn tmpNewMeadowSchemaObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new MeadowSchema();\n","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libFoxHound = require('foxhound');\n\n/**\n* Meadow Data Broker Library\n*\n* @class Meadow\n*/\nvar Meadow = function()\n{\n\tfunction createNew(pFable, pScope, pJsonSchema, pSchema)\n\t{\n\t\t// If a valid Fable object isn't passed in, return a constructor\n\t\tif ((typeof(pFable) !== 'object') || !('fable' in pFable))\n\t\t{\n\t\t\treturn {new: createNew};\n\t\t}\n\t\tvar _Fable = pFable;\n\t\t// Make sure there is a valid data broker set\n\t\t_Fable.settingsManager.fill({MeadowProvider:'None'});\n\n\t\tvar _IDUser = 0;\n\n\t\t// The scope of this broker.\n\t\tvar _Scope = (typeof(pScope) === 'string') ? pScope : 'Unknown';\n\t\tvar _Domain = 'Default';\n\n\t\t// The schema for this broker\n\t\tvar _Schema = require('./Meadow-Schema.js').new(pJsonSchema, pSchema);\n\t\t// The query for this broker\n\t\tvar _Query = libFoxHound.new(_Fable).setScope(_Scope);\n\t\t// The custom query loader\n\t\tvar _RawQueries = require('./Meadow-RawQuery.js').new(_Fable);\n\n\t\t// The core behaviors.. abstracted into their own modules to encapsulate complexity\n\t\tvar _CreateBehavior = require('./behaviors/Meadow-Create.js');\n\t\tvar _ReadBehavior = require('./behaviors/Meadow-Read.js');\n\t\tvar _ReadsBehavior = require('./behaviors/Meadow-Reads.js');\n\t\tvar _UpdateBehavior = require('./behaviors/Meadow-Update.js');\n\t\tvar _DeleteBehavior = require('./behaviors/Meadow-Delete.js');\n\t\tvar _UndeleteBehavior = require('./behaviors/Meadow-Undelete.js');\n\t\tvar _CountBehavior = require('./behaviors/Meadow-Count.js');\n\n\t\t// The data provider\n\t\tvar _Provider = false;\n\t\tvar _ProviderName = false;\n\n\t\t// The default identifier for this broker.\n\t\t// This is what is used for the automated endpoint queries\n\t\t// For example the 198 in GET http://myapi.com/Widget/198\n\t\t//\n\t\t// Our development model prefers IDWidget as the column name for the default identifier.\n\t\tvar _DefaultIdentifier = 'ID'+_Scope;\n\t\tvar _DefaultGUIdentifier = 'GUID'+_Scope;\n\n\n\t\t/**\n\t\t * Load a Meadow Package JSON, create a Meadow object from it.\n\t\t */\n\t\tvar _MeadowPackageLoader = require('./Meadow-PackageFileLoader.js');\n\t\tvar loadFromPackage = function(pPackage)\n\t\t{\n\t\t\treturn _MeadowPackageLoader(this, pPackage);\n\t\t};\n\n\t\t/**\n\t\t * Load a Meadow Package JSON from file, create a Meadow object from it.\n\t\t */\n\t\tvar _MeadowPackageObjectLoader = require('./Meadow-PackageObjectLoader.js');\n\t\tvar loadFromPackageObject = function(pPackage)\n\t\t{\n\t\t\treturn _MeadowPackageObjectLoader(this, pPackage);\n\t\t};\n\n\t\t/**\n\t\t* Pass relevant state into the provider\n\t\t*\n\t\t* @method updateProviderState\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar updateProviderState = ()=>\n\t\t{\n\t\t\tif (typeof(_Provider.setSchema) === 'function')\n\t\t\t{\n\t\t\t\t_Provider.setSchema(_Scope, _Schema.schema, _DefaultIdentifier, _DefaultGUIdentifier);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the scope\n\t\t*\n\t\t* @method setScope\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setScope = function(pScope)\n\t\t{\n\t\t\t_Scope = pScope;\n\t\t\t_Query.setScope(pScope);\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the user ID for inserts and updates\n\t\t*\n\t\t* @method setIDUser\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setIDUser = function(pIDUser)\n\t\t{\n\t\t\t_IDUser = pIDUser;\n\t\t\treturn this;\n\t\t};\n\n\n\t\t/**\n\t\t* Set the Provider for Query execution.\n\t\t*\n\t\t* This function expects a string, case sensitive, which matches the\n\t\t* provider filename\n\t\t*\n\t\t* @method setProvider\n\t\t* @param {String} pProviderName The provider for query generation.\n\t\t* @return {Object} Returns the current Meadow for chaining.\n\t\t*/\n\t\tvar setProvider = function(pProviderName)\n\t\t{\n\t\t\tif (typeof(pProviderName) !== 'string')\n\t\t\t{\n\t\t\t\tpProviderName = 'None';\n\t\t\t}\n\n\t\t\tvar tmpProviderModuleFile = './providers/Meadow-Provider-'+pProviderName+'.js';\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar tmpProviderModule = require(tmpProviderModuleFile).new(_Fable);\n\t\t\t\t_Provider = tmpProviderModule;\n\n\t\t\t\t// Give the provider access to the schema object\n\t\t\t\tupdateProviderState();\n\n\t\t\t\t_ProviderName = pProviderName;\n\t\t\t}\n\t\t\tcatch (pError)\n\t\t\t{\n\t\t\t\t_Fable.log.error('Provider not set - require load problem', {ProviderModuleFile:tmpProviderModuleFile, InvalidProvider:pProviderName, error:pError});\n\t\t\t\t//setProvider('None');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\t\tsetProvider(_Fable.settings.MeadowProvider);\n\n\t\t/**\n\t\t* Set the schema to be something else\n\t\t*\n\t\t* @method setSchema\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setSchema = function(pSchema)\n\t\t{\n\t\t\t_Schema.setSchema(pSchema);\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the Jsonschema to be something else\n\t\t*\n\t\t* @method setJsonSchema\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setJsonSchema = function(pJsonSchema)\n\t\t{\n\t\t\t_Schema.setJsonSchema(pJsonSchema);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the default object to be something else\n\t\t*\n\t\t* @method setDefault\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDefault = function(pDefault)\n\t\t{\n\t\t\t_Schema.setDefault(pDefault);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the authorizer set\n\t\t*\n\t\t* @method setAuthorizer\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setAuthorizer = function(pAuthorizer)\n\t\t{\n\t\t\t_Schema.setAuthorizer(pAuthorizer);\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the domain\n\t\t*\n\t\t* @method setDomain\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDomain = function(pDomain)\n\t\t{\n\t\t\t_Domain = pDomain;\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t* Set the default identifier\n\t\t*\n\t\t* @method setDefaultIdentifier\n\t\t* @return {Object} This is chainable.\n\t\t*/\n\t\tvar setDefaultIdentifier = function(pDefaultIdentifier)\n\t\t{\n\t\t\t_DefaultIdentifier = pDefaultIdentifier;\n\t\t\t_DefaultGUIdentifier = 'GU' + pDefaultIdentifier;\n\t\t\tupdateProviderState();\n\t\t\treturn this;\n\t\t};\n\n\t\t/**\n\t\t * Create a record\n\t\t */\n\t\tvar doCreate = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _CreateBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Read a record\n\t\t */\n\t\tvar doRead = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _ReadBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Read multiple records\n\t\t */\n\t\tvar doReads = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _ReadsBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\n\t\t/**\n\t\t * Update a record\n\t\t */\n\t\tvar doUpdate = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _UpdateBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\n\t\t/**\n\t\t * Delete a record\n\t\t */\n\t\tvar doDelete = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _DeleteBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Undelete a record\n\t\t */\n\t\tvar doUndelete = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _UndeleteBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Count multiple records\n\t\t */\n\t\tvar doCount = function(pQuery, fCallBack)\n\t\t{\n\t\t\treturn _CountBehavior(this, pQuery, fCallBack);\n\t\t};\n\n\t\t/**\n\t\t * Get the role name for an index\n\t\t */\n\t\tlet _RoleNames;\n\t\tif (Array.isArray(_Fable.settings.MeadowRoleNames))\n\t\t{\n\t\t\t_RoleNames = _Fable.settings.MeadowRoleNames;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_RoleNames =\n\t\t\t[\n\t\t\t\t'Unauthenticated',\n\t\t\t\t'User',\n\t\t\t\t'Manager',\n\t\t\t\t'Director',\n\t\t\t\t'Executive',\n\t\t\t\t'Administrator',\n\t\t\t];\n\t\t}\n\t\tvar getRoleName = function(pRoleIndex)\n\t\t{\n\t\t\tif (pRoleIndex < 0 || pRoleIndex >= _RoleNames.length)\n\t\t\t{\n\t\t\t\treturn 'Unauthenticated';\n\t\t\t}\n\n\t\t\treturn _RoleNames[pRoleIndex];\n\t\t};\n\n\t\t/**\n\t\t * Take the stored representation of our object and stuff the proper values\n\t\t * into our record, translating where necessary.\n\t\t */\n\t\tvar marshalRecordFromSourceToObject = function(pRecord)\n\t\t{\n\t\t\t// Create an object from the default schema object\n\t\t\tvar tmpNewObject = _Fable.Utility.extend({}, _Schema.defaultObject);\n\t\t\t// Now marshal the values from pRecord into tmpNewObject, based on schema\n\t\t\t_Provider.marshalRecordFromSourceToObject(tmpNewObject, pRecord, _Schema.schema);\n\t\t\t// This turns on magical validation\n\t\t\t//_Fable.log.trace('Validation', {Value:tmpNewObject, Validation:_Schema.validateObject(tmpNewObject)})\n\t\t\treturn tmpNewObject;\n\t\t};\n\n\t\t/**\n\t\t * Method to log slow queries in a consistent pattern\n\t\t */\n\t\tvar logSlowQuery = function(pProfileTime, pQuery)\n\t\t{\n\t\t\tvar tmpQuery = pQuery.query || {body: '', parameters: {}};\n\t\t\tvar tmpFullQuery = tmpQuery.body;\n\t\t\tif (tmpQuery.parameters.length)\n\t\t\t{\n\t\t\t\tfor (var tmpKey in tmpQuery.parameters)\n\t\t\t\t{\n\t\t\t\t\ttmpFullQuery = tmpFullQuery.replace(':' + tmpKey, tmpQuery.parameters[tmpKey]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_Fable.log.warn('Slow Read query took ' + pProfileTime + 'ms',\n\t\t\t\t{\n\t\t\t\t\tProvider: _ProviderName,\n\t\t\t\t\tQuery:\n\t\t\t\t\t{\n\t\t\t\t\t\tBody: tmpQuery.body,\n\t\t\t\t\t\tParameters: tmpQuery.parameters,\n\t\t\t\t\t\tFullQuery: tmpFullQuery\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t* Container Object for our Factory Pattern\n\t\t*/\n\t\tvar tmpNewMeadowObject = (\n\t\t{\n\t\t\tdoCreate: doCreate,\n\t\t\tdoRead: doRead,\n\t\t\tdoReads: doReads,\n\t\t\tdoUpdate: doUpdate,\n\t\t\tdoDelete: doDelete,\n\t\t\tdoUndelete: doUndelete,\n\t\t\tdoCount: doCount,\n\n\t\t\tvalidateObject: _Schema.validateObject,\n\t\t\tmarshalRecordFromSourceToObject: marshalRecordFromSourceToObject,\n\n\t\t\tsetProvider: setProvider,\n\t\t\tsetIDUser: setIDUser,\n\n\t\t\tloadFromPackage: loadFromPackage,\n\t\t\tloadFromPackageObject: loadFromPackageObject,\n\t\t\tsetScope: setScope,\n\t\t\tsetDomain: setDomain,\n\t\t\tsetSchema: setSchema,\n\t\t\tsetJsonSchema: setJsonSchema,\n\t\t\tsetDefault: setDefault,\n\t\t\tsetDefaultIdentifier: setDefaultIdentifier,\n\t\t\tsetAuthorizer: setAuthorizer,\n\n\t\t\tgetRoleName: getRoleName,\n\n\t\t\tlogSlowQuery: logSlowQuery,\n\n\t\t\t// Factory\n\t\t\tnew: createNew\n\t\t});\n\n\t\t/**\n\t\t * Entity Scope -- usually the name of the entity it represents\n\t\t *\n\t\t * @property scope\n\t\t * @type string\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'scope',\n\t\t\t{\n\t\t\t\tget: function() { return _Scope; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Entity Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'schema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema.schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Entity Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'schemaFull',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Default Identifier\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'defaultIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _DefaultIdentifier; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Default GUIdentifier\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'defaultGUIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _DefaultGUIdentifier; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Json Schema\n\t\t *\n\t\t * @property schema\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'jsonSchema',\n\t\t\t{\n\t\t\t\tget: function() { return _Schema.jsonSchema; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * User Identifier\n\t\t *\n\t\t * Used to stamp user identity into Create/Update operations.\n\t\t *\n\t\t * @property userIdentifier\n\t\t * @type string\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'userIdentifier',\n\t\t\t{\n\t\t\t\tget: function() { return _IDUser; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Query (FoxHound) object\n\t\t *\n\t\t * This always returns a cloned query, so it's safe to get queries with a simple:\n\t\t * var tmpQuery = libSomeFableObject.query;\n\t\t *\n\t\t * and not expect leakage of basic (cap, begin, filter, dataelements) cloned values.\n\t\t *\n\t\t * @property query\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'query',\n\t\t\t{\n\t\t\t\tget: function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar tmpQuery = _Query.clone();\n\t\t\t\t\t\t\t// Set the default schema\n\t\t\t\t\t\t\ttmpQuery.query.schema = _Schema.schema;\n\t\t\t\t\t\t\treturn tmpQuery;\n\t\t\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Raw Queries\n\t\t *\n\t\t * @property rawQueries\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'rawQueries',\n\t\t\t{\n\t\t\t\tget: function() { return _RawQueries; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Provider\n\t\t *\n\t\t * @property provider\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'provider',\n\t\t\t{\n\t\t\t\tget: function() { return _Provider; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t/**\n\t\t * Provider Name\n\t\t *\n\t\t * @property providerName\n\t\t * @type object\n\t\t */\n\t\tObject.defineProperty(tmpNewMeadowObject, 'providerName',\n\t\t\t{\n\t\t\t\tget: function() { return _ProviderName; },\n\t\t\t\tenumerable: true\n\t\t\t});\n\n\t\t// addServices removed in fable 2.x\n\t\tif (typeof(_Fable.addServices) === 'function')\n\t\t{\n\t\t\t_Fable.addServices(tmpNewMeadowObject);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// bring over addServices implementation from Fable 1.x for backward compatibility\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'fable',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'settings',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable.settings; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\n\t\t\tObject.defineProperty(tmpNewMeadowObject, 'log',\n\t\t\t{\n\t\t\t\tget: function() { return _Fable.log; },\n\t\t\t\tenumerable: false,\n\t\t\t});\n\t\t}\n\n\t\treturn tmpNewMeadowObject;\n\t}\n\n\treturn createNew();\n};\n\nmodule.exports = new Meadow();\n","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Count multiple records\n*\n* @function meadowBehaviorCount\n*/\nvar meadowBehaviorCount = function(pMeadow, pQuery, fCallBack)\n{\n\tvar tmpProfileStart = new Date(); //for profiling query time\n\n\t// Count the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record countfrom the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Count'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Count');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Count(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Validate the resulting value\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check if query time exceeded threshold in settings. Log if slow.\n\t\t\t\tvar tmpProfileTime = new Date().getTime() - tmpProfileStart.getTime();\n\t\t\t\tif (tmpProfileTime > (pMeadow.fable.settings['QueryThresholdWarnTime'] || 200))\n\t\t\t\t{\n\t\t\t\t\tpMeadow.logSlowQuery(tmpProfileTime, pQuery);\n\t\t\t\t}\n\n\t\t\t\tif (typeof(pQuery.parameters.result.value) !== 'number')\n\t\t\t\t{\n\t\t\t\t\t// The return value is a number.. something is wrong.\n\t\t\t\t\treturn fStageComplete('Count did not return valid results.', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQuery.result.value);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pCount)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the count waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pCount);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorCount;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Create\n*\n* @function meadowBehaviorCreate\n*/\nvar meadowBehaviorCreate = function(pMeadow, pQuery, fCallBack)\n{\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 0: If GUID is specified, make sure the record does not already exist\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\t// Make sure the user submitted a record\n\t\t\t\tif (!pQuery.query.records)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record submitted', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tif (pQuery.query.records[0][pMeadow.defaultGUIdentifier] &&\n\t\t\t\t\tpQuery.query.records[0][pMeadow.defaultGUIdentifier].length >= 5) //see Foxhound mysql build create query: GUID min len must be 5\n\t\t\t\t{\n\t\t\t\t\tvar tmpGUIDRecord = pQuery.query.records[0][pMeadow.defaultGUIdentifier];\n\n\t\t\t\t\tvar tmpQueryRead = pQuery.clone().addFilter(pMeadow.defaultGUIdentifier, tmpGUIDRecord)\n\t\t\t\t\t\t\t\t\t\t\t\t .setDisableDeleteTracking(true); //this check is to guarantee uniqueness across the entire table, so always do this\n\n\t\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t\t}\n\t\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar tmpError = tmpQueryRead.error;\n\n\t\t\t\t\t\t\tif (!tmpError &&\n\t\t\t\t\t\t\t\ttmpQueryRead.result.value.length > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttmpError = 'Record with GUID ' + tmpGUIDRecord + ' already exists!';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tmpError)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn fStageComplete(tmpError, tmpQueryRead, tmpQueryRead, null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn fStageComplete();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete();\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Step 1: Create the record in the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (!pQuery.query.IDUser)\n\t\t\t\t{\n\t\t\t\t\t// The user ID is not already set, set it magically.\n\t\t\t\t\tif (typeof(pQuery.userID) === 'number' && (pQuery.userID % 1) === 0 && pQuery.userID >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pQuery.userID;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pMeadow.userIdentifier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Merge in the default record with the passed-in record for completeness\n\t\t\t\tpQuery.query.records[0] = pMeadow.fable.Utility.extend({}, pMeadow.schemaFull.defaultObject, pQuery.query.records[0]);\n\t\t\t\t// Create override is too complex ... punting for now\n\t\t\t\t// if (pMeadow.rawQueries.checkQuery('Create'))\n\t\t\t\t//\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Create');\n\t\t\t\tpMeadow.provider.Create(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Setup a read operation\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// The value is not set (it should be set to the value for our DefaultIdentifier)\n\t\t\t\tif (pQuery.parameters.result.value === false)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Creation failed', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpIDRecord = pQuery.result.value;\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpIDRecord);\n\t\t\t},\n\t\t\t// Step 3: Read the record\n\t\t\tfunction (pQuery, pIDRecord, fStageComplete)\n\t\t\t{\n\t\t\t\tvar tmpQueryRead = pQuery.clone().addFilter(pMeadow.defaultIdentifier, pIDRecord)\n\t\t\t\t\t\t\t\t\t\t\t\t .setDisableDeleteTracking(pQuery.parameters.query.disableDeleteTracking); //if delete tracking is disabled, we need to disable it on this Read operation\n\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function(){ fStageComplete(tmpQueryRead.result.error, pQuery, tmpQueryRead); });\n\t\t\t},\n\t\t\t// Step 4: Marshal the record into a POJO\n\t\t\tfunction (pQuery, pQueryRead, fStageComplete)\n\t\t\t{\n\t\t\t\t// Ensure there is not at least one record returned\n\t\t\t\tif (pQueryRead.parameters.result.value.length < 1)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record found after create.', pQuery, pQueryRead, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQueryRead, tmpRecord);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pQueryRead, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the create waterfall', {Error:pError, Message: pError.message, Query: pQuery.query, Stack: pError.stack});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pQueryRead, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorCreate;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Delete a single record\n*\n* @function meadowBehaviorDelete\n*/\nvar meadowBehaviorDelete = function(pMeadow, pQuery, fCallBack)\n{\n\t// TODO: Check if this recordset has implicit delete tracking, branch in this module.\n\t// Delete the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Delete the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Delete'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Delete');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Delete(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery, pQuery.result.value); });\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the delete waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorDelete;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Read a single record\n*\n* @function meadowBehaviorRead\n*/\nvar meadowBehaviorRead = function(pMeadow, pQuery, fCallBack)\n{\n\t// Read the record from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record from the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\t// If there is a Read override query, use it!\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Marshal the record into a POJO\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check that a record was returned\n\t\t\t\tif (pQuery.parameters.result.value.length < 1)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete(undefined, pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQuery.result.value[0]);\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpRecord);\n\t\t\t}\n\t\t],\n\t\t(pError, pQuery, pRecord)=>\n\t\t{\n\t\t\tconsole.log('b')\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the read waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorRead;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\nvar libAsyncEach = require('async/eachSeries');\n\n/**\n* Meadow Behavior - Read multiple records\n*\n* @function meadowBehaviorReads\n*/\nvar meadowBehaviorReads = function(pMeadow, pQuery, fCallBack)\n{\n\tvar tmpProfileStart = new Date(); //for profiling query time\n\n\t// Read the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Get the record(s) from the data source\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Reads'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Reads');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Marshal all the records into an array of POJOs\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// Check if query time exceeded threshold in settings. Log if slow.\n\t\t\t\tvar tmpProfileTime = new Date().getTime() - tmpProfileStart.getTime();\n\t\t\t\tif (tmpProfileTime > (pMeadow.fable.settings['QueryThresholdWarnTime'] || 200))\n\t\t\t\t{\n\t\t\t\t\tpMeadow.logSlowQuery(tmpProfileTime, pQuery);\n\t\t\t\t}\n\n\t\t\t\tvar tmpRecords = [];\n\n\t\t\t\tlibAsyncEach\n\t\t\t\t(\n\t\t\t\t\tpQuery.parameters.result.value,\n\t\t\t\t\tfunction(pRow, pQueueCallback)\n\t\t\t\t\t{\n\t\t\t\t\t\ttmpRecords.push(pMeadow.marshalRecordFromSourceToObject(pRow));\n\t\t\t\t\t\tpQueueCallback();\n\t\t\t\t\t},\n\t\t\t\t\tfunction()\n\t\t\t\t\t{\n\t\t\t\t\t\t// After we've pushed every record into the array in order, complete the waterfall\n\t\t\t\t\t\tfStageComplete(pQuery.result.error, pQuery, tmpRecords);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecords)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the read multiple waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecords);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorReads;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Undelete a single record\n*\n* @function meadowBehaviorUndelete\n*/\nvar meadowBehaviorUndelete = function(pMeadow, pQuery, fCallBack)\n{\n\t// TODO: Check if this recordset has implicit delete tracking, branch in this module?\n\t// Undelete the record(s) if they were deleted with a bit\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Undelete the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Undelete'))\n\t\t\t\t{\n\t\t\t\t\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Undelete');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Undelete(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery, pQuery.result.value); });\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during the undelete waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorUndelete;","// ##### Part of the **[retold](https://stevenvelozo.github.io/retold/)** system\n/**\n* @license MIT\n* @author <steven@velozo.com>\n*/\nvar libAsyncWaterfall = require('async/waterfall');\n\n/**\n* Meadow Behavior - Update a single record\n*\n* @function meadowBehaviorUpdate\n*/\nvar meadowBehaviorUpdate = function(pMeadow, pQuery, fCallBack)\n{\n\t// Update the record(s) from the source\n\tlibAsyncWaterfall(\n\t\t[\n\t\t\t// Step 1: Update the record\n\t\t\tfunction (fStageComplete)\n\t\t\t{\n\t\t\t\tif (!pQuery.query.IDUser)\n\t\t\t\t{\n\t\t\t\t\t// The user ID is not already set, set it magically.\n\t\t\t\t\tif (typeof(pQuery.userID) === 'number' && (pQuery.userID % 1) === 0 && pQuery.userID >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pQuery.userID;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tpQuery.query.IDUser = pMeadow.userIdentifier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Make sure the developer submitted a record\n\t\t\t\tif (!pQuery.query.records)\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('No record submitted', pQuery, false);\n\t\t\t\t}\n\t\t\t\t// Make sure there is a default identifier\n\t\t\t\tif (!pQuery.query.records[0].hasOwnProperty(pMeadow.defaultIdentifier))\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Automated update missing default identifier', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\t// Now see if there is anything in the schema that is an Update action that isn't in this query\n\t\t\t\tfor (var i = 0; i < pMeadow.schema.length; i++)\n\t\t\t\t{\n\t\t\t\t\tswitch (pMeadow.schema[i].Type)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase 'UpdateIDUser':\n\t\t\t\t\t\tcase 'UpdateDate':\n\t\t\t\t\t\t\tpQuery.query.records[0][pMeadow.schema[i].Column] = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set the update filter\n\t\t\t\tpQuery.addFilter(pMeadow.defaultIdentifier, pQuery.query.records[0][pMeadow.defaultIdentifier]);\n\n\t\t\t\t// Sanity check on update to make sure we don't update EVERY record.\n\t\t\t\tif ((pQuery.parameters.filter === false) || (pQuery.parameters.filter.length < 1))\n\t\t\t\t{\n\t\t\t\t\treturn fStageComplete('Automated update missing filters... aborting!', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\t// Updates are too complex to override for now, punting on this feature.\n\t\t\t\t//if (pMeadow.rawQueries.checkQuery('Update'))\n\t\t\t\t//\tpQuery.parameters.queryOverride = pMeadow.rawQueries.getQuery('Update');\n\t\t\t\tpMeadow.provider.Update(pQuery, function(){ fStageComplete(pQuery.result.error, pQuery); });\n\t\t\t},\n\t\t\t// Step 2: Check that the record was updated\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\tif (typeof(pQuery.parameters.result.value) !== 'object')\n\t\t\t\t{\n\t\t\t\t\t// The value is not an object\n\t\t\t\t\treturn fStageComplete('No record updated.', pQuery, false);\n\t\t\t\t}\n\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery);\n\t\t\t},\n\t\t\t// Step 3: Read the record\n\t\t\tfunction (pQuery, fStageComplete)\n\t\t\t{\n\t\t\t\t// We can clone the query, since it has the criteria for the update in it already (filters survive a clone)\n\t\t\t\tvar tmpQueryRead = pQuery.clone();\n\t\t\t\t// Make sure to load the record with the custom query if necessary.\n\t\t\t\tif (pMeadow.rawQueries.checkQuery('Read'))\n\t\t\t\t{\n\t\t\t\t\ttmpQueryRead.parameters.queryOverride = pMeadow.rawQueries.getQuery('Read');\n\t\t\t\t}\n\t\t\t\tpMeadow.provider.Read(tmpQueryRead, function(){ fStageComplete(tmpQueryRead.result.error, pQuery, tmpQueryRead); });\n\t\t\t},\n\t\t\t// Step 4: Marshal the record into a POJO\n\t\t\tfunction (pQuery, pQueryRead, fStageComplete)\n\t\t\t{\n\t\t\t\tif (pQueryRead.result.value.length === 0)\n\t\t\t\t{\n\t\t\t\t\t//No record found to update\n\t\t\t\t\treturn fStageComplete('No record found to update!', pQueryRead.result, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar tmpRecord = pMeadow.marshalRecordFromSourceToObject(pQueryRead.result.value[0]);\n\t\t\t\tfStageComplete(pQuery.result.error, pQuery, pQueryRead, tmpRecord);\n\t\t\t}\n\t\t],\n\t\tfunction(pError, pQuery, pQueryRead, pRecord)\n\t\t{\n\t\t\tif (pError)\n\t\t\t{\n\t\t\t\tpMeadow.fable.log.warn('Error during Update waterfall', {Error:pError, Message: pError.message, Query: pQuery.query});\n\t\t\t}\n\t\t\tfCallBack(pError, pQuery, pQueryRead, pRecord);\n\t\t}\n\t);\n\n\treturn pMeadow;\n};\n\nmodule.exports = meadowBehaviorUpdate;"]}