{"version":3,"sources":["builder/valid.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,+DAA+D;AAC/D,wDAAwD;AACxD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,8DAA8D;AAC9D,yDAAyD;AACzD,4DAA4D;AAC5D,0DAA0D;AAC1D,qBAAqB;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CAAwC,UAAiC;IAE1G,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;QACvC,aAAa;QACb,OAAO,SAAS,OAAO,CAAC,KAAU,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KACxD;IAED,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG;kBACC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;eACrB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;MAEpC,CAAC;KACF;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;QACrC,MAAM,GAAG,+BAA+B,MAAM,EAAE,CAAC;KACpD;IAED,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAA4C,CAAC;AACnG,CAAC;AAED,cAAc;AACd,SAAS,WAAW,CAAC,CAAM;IACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACvB,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;KAC3B;SAAM,IAAI,eAAe,EAAE;QACxB,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;KACjC;IACD,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;AACnC,CAAC","file":"valid.js","sourcesContent":["// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\nimport { DataType } from '../type';\nimport { valueToString } from '../util/pretty';\nimport { BigIntAvailable } from '../util/compat';\n\n/**\n * Dynamically compile the null values into an `isValid()` function whose\n * implementation is a switch statement. Microbenchmarks in v8 indicate\n * this approach is 25% faster than using an ES6 Map.\n *\n * @example\n * console.log(createIsValidFunction([null, 'N/A', NaN]));\n * `function (x) {\n *     if (x !== x) return false;\n *     switch (x) {\n *         case null:\n *         case \"N/A\":\n *             return false;\n *     }\n *     return true;\n * }`\n *\n * @ignore\n * @param nullValues\n */\nexport function createIsValidFunction<T extends DataType = any, TNull = any>(nullValues?: ReadonlyArray<TNull>) {\n\n    if (!nullValues || nullValues.length <= 0) {\n        // @ts-ignore\n        return function isValid(value: any) { return true; };\n    }\n\n    let fnBody = '';\n    let noNaNs = nullValues.filter((x) => x === x);\n\n    if (noNaNs.length > 0) {\n        fnBody = `\n    switch (x) {${noNaNs.map((x) => `\n        case ${valueToCase(x)}:`).join('')}\n            return false;\n    }`;\n    }\n\n    // NaN doesn't equal anything including itself, so it doesn't work as a\n    // switch case. Instead we must explicitly check for NaN before the switch.\n    if (nullValues.length !== noNaNs.length) {\n        fnBody = `if (x !== x) return false;\\n${fnBody}`;\n    }\n\n    return new Function(`x`, `${fnBody}\\nreturn true;`) as (value: T['TValue'] | TNull) => boolean;\n}\n\n/** @ignore */\nfunction valueToCase(x: any) {\n    if (typeof x !== 'bigint') {\n        return valueToString(x);\n    } else if (BigIntAvailable) {\n        return `${valueToString(x)}n`;\n    }\n    return `\"${valueToString(x)}\"`;\n}\n"]}