@defer/redwood
Version:
Setup Defer in RedwoodJS
52 lines (51 loc) • 2.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCronTask = exports.tasks = void 0;
const tslib_1 = require("tslib");
const path_1 = tslib_1.__importDefault(require("path"));
const listr2_1 = require("listr2");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const cli_helpers_1 = require("@redwoodjs/cli-helpers");
const humanize_string_1 = tslib_1.__importDefault(require("humanize-string"));
const tasks = (options) => {
const PACKAGE_JSON_PATH = path_1.default.join((0, cli_helpers_1.getPaths)().api.base, "package.json");
const SRC_DEFER_PATH = path_1.default.join((0, cli_helpers_1.getPaths)().api.src, "jobs", "defer");
const SRC_DEFER_CLIENT_PATH_FILE = path_1.default.join((0, cli_helpers_1.getPaths)().api.src, "jobs", "clients", "defer.ts");
const commandPaths = {
PACKAGE_JSON_PATH,
SRC_DEFER_PATH,
SRC_DEFER_CLIENT_PATH_FILE,
};
const existingFiles = options.force ? "OVERWRITE" : "FAIL";
return new listr2_1.Listr([
{
title: "Check Defer is properly configured ...",
task: () => {
const pkg = JSON.parse(fs_extra_1.default.readFileSync(PACKAGE_JSON_PATH, "utf-8"));
if (!Object.keys(pkg.dependencies || {}).includes("@defer/client") ||
!fs_extra_1.default.existsSync(SRC_DEFER_CLIENT_PATH_FILE)) {
throw new Error("Please setup Defer before creating a background function.");
}
},
},
{
title: `Create ${(0, humanize_string_1.default)(options.name)} CRON ...`,
task: () => {
(0, exports.createCronTask)({
commandPaths,
existingFiles,
name: options.name,
});
},
},
], { rendererOptions: {} });
};
exports.tasks = tasks;
const createCronTask = ({ commandPaths, existingFiles, name, }) => {
fs_extra_1.default.ensureDirSync(commandPaths["SRC_DEFER_PATH"]);
const deferCronTemplate = fs_extra_1.default.readFileSync(path_1.default.resolve(__dirname, "..", "..", "templates", "cron", "sendMondayNewsletter.template"), "utf-8");
return (0, cli_helpers_1.writeFile)(path_1.default.join(commandPaths["SRC_DEFER_PATH"], `${(0, humanize_string_1.default)(name)}.ts`), deferCronTemplate.replace(/sendMondayNewsletter/g, (0, humanize_string_1.default)(name)), {
existingFiles,
});
};
exports.createCronTask = createCronTask;