dotfiles/vscode/.vscode/extensions/randomfractalsinc.vscode-data-preview-2.3.0/out/data.providers/avro.data.provider.js
Errol Sancaktar ff17c17e23 vscode
2024-06-14 09:31:58 -06:00

79 lines
3.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AvroDataProvider = void 0;
const fs = require("fs");
const avro = require("avsc");
const config = require("../config");
const fileUtils = require("../utils/file.utils");
const jsonUtils = require("../utils/json.utils");
const logger_1 = require("../logger");
/**
* Avro data provider.
*/
class AvroDataProvider {
/**
* Creates data provider for Avro data files.
*/
constructor() {
// TODO: add mime types later for http data loading
this.supportedDataFileTypes = ['.avro'];
this.logger = new logger_1.Logger('avro.data.provider:', config.logLevel);
this.logger.debug('created for:', this.supportedDataFileTypes);
}
/**
* Gets local or remote Avro file data.
* @param dataUrl Local data file path or remote data url.
* @param parseOptions Data parse options.
* @param loadData Load data callback.
*/
getData(dataUrl, parseOptions, loadData) {
let dataRows = [];
const dataBlockDecoder = avro.createFileDecoder(dataUrl);
dataBlockDecoder.on('metadata', (dataSchema) => {
this.logger.debug('metadata', dataSchema);
// create schema.json file for Avro metadata preview
const dataSchemaFilePath = dataUrl.replace('.avro', '.schema.json');
if (parseOptions.createJsonSchema && !fs.existsSync(dataSchemaFilePath)) {
fileUtils.createJsonFile(dataSchemaFilePath, dataSchema);
}
});
dataBlockDecoder.on('data', (data) => dataRows.push(data));
dataBlockDecoder.on('end', () => {
// create data json file for Avro text data preview
const jsonFilePath = dataUrl.replace('.avro', '.json');
if (parseOptions.createJsonFiles && !fs.existsSync(jsonFilePath)) {
fileUtils.createJsonFile(jsonFilePath, dataRows);
}
// Note: flatten data rows for now since Avro format has hierarchical data structure
dataRows = dataRows.map(rowObject => jsonUtils.flattenObject(rowObject));
loadData(dataRows);
});
} // end of getData()
/**
* Gets data table names for data sources with multiple data sets.
* @param dataUrl Local data file path or remote data url.
*/
getDataTableNames(dataUrl) {
return []; // none for Avro data for now
}
/**
* Gets data schema in json format for file types that provide it.
* @param dataUrl Local data file path or remote data url.
*/
getDataSchema(dataUrl) {
// TODO: convert avro metadata to data view schema
return null; // none for avro data files
}
/**
* Saves Avro data.
* @param filePath Local data file path.
* @param fileData Raw data to save.
* @param tableName Table name for data files with multiple tables support.
* @param showData Show saved data callback.
*/
saveData(filePath, fileData, tableName, showData) {
// TODO
}
}
exports.AvroDataProvider = AvroDataProvider;
//# sourceMappingURL=avro.data.provider.js.map