@forzalabs/remora
Version:
A powerful CLI tool for seamless data translation.
47 lines (46 loc) • 2.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ConsumerManager_1 = __importDefault(require("../consumer/ConsumerManager"));
const Environment_1 = __importDefault(require("../Environment"));
class DeploymentPlannerClass {
constructor() {
this.planConsumer = (consumer) => {
const [source, producer] = ConsumerManager_1.default.getSource(consumer);
const plan = [];
for (let i = 0; i < consumer.outputs.length; i++) {
const output = consumer.outputs[i];
switch (output.format) {
// csv, json, parquet outputs do not need to generate anything at deploy
case 'SQL': {
if (output.accellerated && !output.direct)
plan.push({ type: 'create-materialized-view', output: output });
else if (!output.direct)
plan.push({ type: 'create-view', output: output });
break;
}
case 'API': {
throw new Error(`Invalid consumer "${consumer.name}" format "${output.format}": not implemented yet.`);
}
}
}
return plan;
};
this.planProducer = (producer) => {
const source = Environment_1.default.getSource(producer.source);
const plan = [];
switch (source.engine) {
case 'aws-redshift': {
if (!producer.settings.direct)
plan.push({ type: 'create-view', producer: producer });
break;
}
}
return plan;
};
}
}
const DeploymentPlanner = new DeploymentPlannerClass();
exports.default = DeploymentPlanner;