extend: function(Class, methods) { if (Class.name !== 'Job') { return; } methods = arrify(methods); assert.deepStrictEqual(methods, ['getQueryResults']); extended = true; },
extend: function(Class, methods) { if (Class.name !== 'BigQuery') { return; } methods = arrify(methods); assert.strictEqual(Class.name, 'BigQuery'); assert.deepStrictEqual(methods, ['getDatasets', 'getJobs']); extended = true; },
function test(val?: string | string[]) { arrify(val); }
import * as arrify from 'arrify'; arrify(null); arrify<number>(null); arrify(undefined); arrify<number>(undefined); arrify(1); arrify([2, 3]); function test(val?: string | string[]) { arrify(val); }
import * as arrify from 'arrify'; /***************** arrify<T> *****************/ arrify(null); arrify<number>(null); arrify(undefined); arrify<number>(undefined); arrify(1); arrify([2, 3]); function test(val?: string | string[]) { arrify(val); } /***************** arrify<T> *****************/ /***************** arrify<T1, T2> *****************/ arrify<number, string>(undefined); // returns [] arrify<number, string>(null); // returns [] { const value: number | string[] = 2018; arrify<number, string>(value); // returns [2018] } { const value: number[] | string | string[] = ['a', 'b']; arrify<number, string>(value); // returns ['a', 'b'] }
(BigQuery as any).mergeSchemaWithRows_ = BigQuery.prototype.mergeSchemaWithRows_ = function( schema, rows ) { return arrify(rows) .map(mergeSchema) .map(flattenRows); function mergeSchema(row) { return row.f.map(function(field, index) { const schemaField = schema.fields[index]; let value = field.v; if (schemaField.mode === 'REPEATED') { value = value.map(function(val) { return convert(schemaField, val.v); }); } else { value = convert(schemaField, value); } const fieldObject = {}; fieldObject[schemaField.name] = value; return fieldObject; }); } function convert(schemaField, value) { if (is.nil(value)) { return value; } switch (schemaField.type) { case 'BOOLEAN': case 'BOOL': { value = value.toLowerCase() === 'true'; break; } case 'BYTES': { value = Buffer.from(value, 'base64'); break; } case 'FLOAT': case 'FLOAT64': { value = parseFloat(value); break; } case 'INTEGER': case 'INT64': { value = parseInt(value, 10); break; } case 'NUMERIC': { value = new Big(value); break; } case 'RECORD': { value = (BigQuery as any).mergeSchemaWithRows_(schemaField, value).pop(); break; } case 'DATE': { value = (BigQuery as any).date(value); break; } case 'DATETIME': { value = (BigQuery as any).datetime(value); break; } case 'TIME': { value = (BigQuery as any).time(value); break; } case 'TIMESTAMP': { value = (BigQuery as any).timestamp(new Date(value * 1000)); break; } } return value; } function flattenRows(rows) { return rows.reduce(function(acc, row) { const key = Object.keys(row)[0]; acc[key] = row[key]; return acc; }, {}); } };