@tsed/cli
Version:
CLI to bootstrap your Ts.ED project
37 lines (36 loc) • 1.69 kB
JavaScript
import { __decorate } from "tslib";
import { basename } from "node:path";
import { ProjectPackageJson } from "@tsed/cli-core";
import { inject, Injectable } from "@tsed/di";
import { kebabCase, pascalCase } from "change-case";
import { ProjectConvention } from "../interfaces/ProjectConvention.js";
import { ProvidersInfoService } from "../services/ProvidersInfoService.js";
let ClassNamePipe = class ClassNamePipe {
constructor() {
this.providers = inject(ProvidersInfoService);
this.projectPackageJson = inject(ProjectPackageJson);
}
transform(options) {
const format = options.format || this.projectPackageJson.preferences.convention || ProjectConvention.DEFAULT;
const meta = this.providers.get(options.type)?.model || "{{symbolName}}.{{symbolType}}?";
const type = options.type.split(":").at(-1);
const symbolName = kebabCase(basename(options.name)).replace(`-${type}`, "");
const names = meta.split(".").reduce((acc, key) => {
return key
.replace(/{{symbolName}}/gi, symbolName)
.replace(/{{symbolType}}/gi, type)
.split(".")
.filter((value) => (format === ProjectConvention.DEFAULT ? !value.endsWith("?") : true))
.map((value) => value.replace(/\?$/, "").toLowerCase())
.reduce((acc, value) => acc.add(value), acc);
}, new Set());
if (format === ProjectConvention.DEFAULT) {
return pascalCase([...names].join("."));
}
return [...names].join(".").toLowerCase();
}
};
ClassNamePipe = __decorate([
Injectable()
], ClassNamePipe);
export { ClassNamePipe };