@berenddeboer/nx-sst
Version:
Nx plugin for Serverless Stack apps
113 lines • 4.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addLint = void 0;
const devkit_1 = require("@nx/devkit");
const versions_1 = require("../../utils/versions");
const path = require("path");
const init_1 = require("../init/init");
const path_1 = require("path");
const linter_1 = require("@nx/linter");
function normalizeOptions(host, options) {
const name = (0, devkit_1.names)(options.name).fileName;
const projectDirectory = options.directory
? `${(0, devkit_1.names)(options.directory).fileName}/${name}`
: name;
const projectName = projectDirectory.replace(new RegExp("/", "g"), "-");
const projectRoot = `${(0, devkit_1.getWorkspaceLayout)(host).appsDir}/${projectDirectory}`;
const parsedTags = options.tags ? options.tags.split(",").map((s) => s.trim()) : [];
return {
...options,
projectName,
projectRoot,
projectDirectory,
parsedTags,
};
}
function addFiles(host, options) {
const templateOptions = {
...options,
...(0, devkit_1.names)(options.name),
offsetFromRoot: (0, devkit_1.offsetFromRoot)(options.projectRoot),
template: "",
dot: ".",
};
const packageJsonPath = (0, path_1.join)(options.projectRoot, "package.json");
(0, devkit_1.writeJson)(host, packageJsonPath, {
name: options.name,
scripts: {
sst: "sst",
},
});
(0, devkit_1.generateFiles)(host, path.join(__dirname, "files"), options.projectRoot, templateOptions);
}
async function default_1(tree, schema) {
const tasks = [];
tasks.push(await (0, init_1.default)(tree, {
...schema,
skipFormat: true,
}));
const options = normalizeOptions(tree, schema);
const runTarget = (options) => ({
executor: "@berenddeboer/nx-sst:sst",
options,
});
(0, devkit_1.addProjectConfiguration)(tree, options.projectName, {
root: options.projectRoot,
projectType: "application",
targets: {
dev: runTarget({ command: "dev" }),
diff: runTarget({ command: "diff" }),
build: {
...runTarget({ command: "build" }),
outputs: [`${options.projectRoot}/.sst`],
},
deploy: runTarget({ command: "deploy" }),
remove: runTarget({ command: "remove" }),
},
tags: options.parsedTags,
});
addFiles(tree, options);
if (options.linter !== linter_1.Linter.None) {
const lintCallback = await addLint(tree, options);
tasks.push(lintCallback);
}
if (options.unitTestRunner === "jest") {
const { jestProjectGenerator } = (0, devkit_1.ensurePackage)("@nx/jest", versions_1.nxVersion);
const jestTask = await jestProjectGenerator(tree, {
project: options.name,
supportTsx: true,
skipSerializers: true,
setupFile: "none",
babelJest: true,
});
tasks.push(jestTask);
}
else if (options.unitTestRunner === "vitest") {
const { vitestGenerator } = (0, devkit_1.ensurePackage)("@nx/vite", versions_1.nxVersion);
const vitestTask = await vitestGenerator(tree, {
project: options.name,
uiFramework: "none",
coverageProvider: "v8",
skipFormat: true,
});
tasks.push(vitestTask);
}
if (!options.skipFormat) {
await (0, devkit_1.formatFiles)(tree);
}
return (0, devkit_1.runTasksInSerial)(...tasks);
}
exports.default = default_1;
async function addLint(tree, options) {
return (0, linter_1.lintProjectGenerator)(tree, {
project: options.projectName,
linter: options.linter,
skipFormat: true,
tsConfigPaths: [(0, devkit_1.joinPathFragments)(options.projectRoot, "tsconfig.lib.json")],
unitTestRunner: options.unitTestRunner,
eslintFilePatterns: [`${options.projectRoot}/**/*.ts`],
setParserOptionsProject: options.setParserOptionsProject,
});
}
exports.addLint = addLint;
//# sourceMappingURL=generator.js.map