ts-sql-codegen
Version:
Generates ts-sql-query table mappings from tbls schema output
79 lines • 3.76 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileRemover = void 0;
const promises_1 = __importDefault(require("node:fs/promises"));
const glob_1 = require("glob");
const posix_1 = __importDefault(require("path/posix"));
const prompts_1 = __importDefault(require("prompts"));
class FileRemover {
constructor(opts, writtenFiles, logger) {
this.opts = opts;
this.writtenFiles = writtenFiles;
this.logger = logger;
}
removeExtraneousFiles() {
return __awaiter(this, void 0, void 0, function* () {
if (!this.opts.removeExtraneous || this.opts.removeExtraneous === 'never') {
return;
}
const paths = yield (0, glob_1.glob)('*', {
cwd: posix_1.default.resolve(this.opts.outputDirPath)
});
const extraneousPaths = paths.filter(p => !this.writtenFiles.has(p));
if (!extraneousPaths.length) {
return;
}
let pathsToDelete = [];
if (this.opts.removeExtraneous === 'all') {
pathsToDelete = extraneousPaths;
}
else if (this.opts.removeExtraneous === 'interactively') {
const { selection } = yield (0, prompts_1.default)({
type: 'select',
name: 'selection',
message: `${extraneousPaths.length} extraneous files found after code generation. Select ones to delete:`,
choices: [
{ title: 'All', value: '$all' },
{ title: 'None', value: '$none' },
{ title: 'Select Individually', value: '$pick' }
]
});
switch (selection) {
case '$all': {
pathsToDelete = extraneousPaths;
break;
}
case '$pick': {
const { candidates } = yield (0, prompts_1.default)({
type: 'multiselect',
name: 'candidates',
message: `Select files to delete:`,
choices: extraneousPaths.map(value => ({ title: value, value })),
hint: '- Space to select. Return to submit'
});
pathsToDelete.push(...candidates);
break;
}
}
}
this.logger.info(`Deleting ${pathsToDelete.length} files: `, pathsToDelete.join(', '));
yield Promise.all(pathsToDelete.map((p) => promises_1.default.rm(posix_1.default.join(this.opts.outputDirPath, p), {
recursive: true
})));
});
}
}
exports.FileRemover = FileRemover;
//# sourceMappingURL=file-remover.js.map