class DataPackageClient {
constructor(dataPackageUrl) {
this._dataPackageUrl = dataPackageUrl;
}
async loadDataPackage() {
if (!this._dataPackage) {
this._dataPackage = await DataPackage.Package.load(this._dataPackageUrl);
}
return this._dataPackage;
}
async describeTables() {
const dataPackage = await this.loadDataPackage();
const tables = dataPackage.resourceNames.filter(resourceName => resourceName !== 'validation_report');
return tables.map(resourceName => ({name: resourceName}));
}
async describeColumns({table}={}) {
const dataPackage = await this.loadDataPackage();
const tableResource = dataPackage.getResource(table);
return tableResource.descriptor.schema.fields;
}
async query(string, params, options) {
const dataPackage = await this.loadDataPackage();
const tables = await this.describeTables();
if (tables.length > 0) {
const tableResource = dataPackage.getResource(tables[0].name);
let tableRows = [];
tableRows = await tableResource.read({keyed: true});
return tableRows;
}
return [];
}
async sql(strings, ...args) {
this.lastSqlQuery = strings;
this.lastQueryArgs = args;
return await this.query(strings, args);
}
}