dotfiles/vscode/.vscode/extensions/randomfractalsinc.vscode-data-preview-2.3.0/node_modules/apache-arrow/builder/valid.js
Errol Sancaktar ff17c17e23 vscode
2024-06-14 09:31:58 -06:00

75 lines
2.5 KiB
JavaScript

"use strict";
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
Object.defineProperty(exports, "__esModule", { value: true });
const pretty_1 = require("../util/pretty");
const compat_1 = require("../util/compat");
/**
* Dynamically compile the null values into an `isValid()` function whose
* implementation is a switch statement. Microbenchmarks in v8 indicate
* this approach is 25% faster than using an ES6 Map.
*
* @example
* console.log(createIsValidFunction([null, 'N/A', NaN]));
* `function (x) {
* if (x !== x) return false;
* switch (x) {
* case null:
* case "N/A":
* return false;
* }
* return true;
* }`
*
* @ignore
* @param nullValues
*/
function createIsValidFunction(nullValues) {
if (!nullValues || nullValues.length <= 0) {
// @ts-ignore
return function isValid(value) { return true; };
}
let fnBody = '';
let noNaNs = nullValues.filter((x) => x === x);
if (noNaNs.length > 0) {
fnBody = `
switch (x) {${noNaNs.map((x) => `
case ${valueToCase(x)}:`).join('')}
return false;
}`;
}
// NaN doesn't equal anything including itself, so it doesn't work as a
// switch case. Instead we must explicitly check for NaN before the switch.
if (nullValues.length !== noNaNs.length) {
fnBody = `if (x !== x) return false;\n${fnBody}`;
}
return new Function(`x`, `${fnBody}\nreturn true;`);
}
exports.createIsValidFunction = createIsValidFunction;
/** @ignore */
function valueToCase(x) {
if (typeof x !== 'bigint') {
return pretty_1.valueToString(x);
}
else if (compat_1.BigIntAvailable) {
return `${pretty_1.valueToString(x)}n`;
}
return `"${pretty_1.valueToString(x)}"`;
}
//# sourceMappingURL=valid.js.map