@nestia/sdk
Version:
Nestia SDK and Swagger generator
117 lines • 5.73 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypedHttpRouteAnalyzer = void 0;
const MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
const Metadata_1 = require("typia/lib/schemas/metadata/Metadata");
const MetadataComponents_1 = require("typia/lib/schemas/metadata/MetadataComponents");
const Escaper_1 = require("typia/lib/utils/Escaper");
const PathUtil_1 = require("../utils/PathUtil");
var TypedHttpRouteAnalyzer;
(function (TypedHttpRouteAnalyzer) {
TypedHttpRouteAnalyzer.dictionary = (controllers) => {
const individual = [];
for (const c of controllers)
for (const o of c.operations) {
if (o.protocol !== "http")
continue;
if (o.success)
individual.push(o.success.components);
for (const p of o.parameters)
individual.push(p.components);
for (const e of Object.values(o.exceptions))
individual.push(e.components);
}
const components = MetadataComponents_1.MetadataComponents.from({
objects: Object.values(Object.fromEntries(individual.map((c) => c.objects.map((o) => [o.name, o])).flat())),
arrays: Object.values(Object.fromEntries(individual.map((c) => c.arrays.map((a) => [a.name, a])).flat())),
tuples: Object.values(Object.fromEntries(individual.map((c) => c.tuples.map((t) => [t.name, t])).flat())),
aliases: Object.values(Object.fromEntries(individual.map((c) => c.aliases.map((a) => [a.name, a])).flat())),
});
return components.dictionary;
};
TypedHttpRouteAnalyzer.analyze = (props) => {
const errors = [];
const cast = (next, from, escape) => {
const metadata = Metadata_1.Metadata.from(next.metadata, props.dictionary);
const metaErrors = MetadataFactory_1.MetadataFactory.validate({
options: {
escape,
constant: true,
absorb: true,
validate: next.validate, // @todo -> CHECK IN TYPIA
},
functor: next.validate, // @todo -> CHECK IN TYPIA
metadata,
});
if (metaErrors.length)
errors.push({
file: props.controller.file,
class: props.controller.class.name,
function: props.operation.name,
from,
contents: metaErrors.map((e) => ({
name: e.name,
accessor: e.explore.object !== null
? join({
object: e.explore.object,
key: e.explore.property,
})
: null,
messages: e.messages,
})),
});
return metadata;
};
const exceptions = Object.fromEntries(Object.entries(props.operation.exceptions).map(([key, value]) => [
key,
{
status: value.status,
description: value.description,
example: value.example,
examples: value.examples,
type: value.type,
metadata: cast(value, `exception (status: ${key})`, true),
},
]));
const parameters = props.operation.parameters.map((p) => (Object.assign(Object.assign({}, p), { metadata: cast(p, `parameter (name: ${JSON.stringify(p.name)})`, p.category === "body" &&
(p.contentType === "application/json" || p.encrypted === true)) })));
const success = Object.assign(Object.assign({}, props.operation.success), { metadata: cast(props.operation.success, "success", props.operation.success.encrypted ||
props.operation.success.contentType === "application/json"), setHeaders: props.operation.jsDocTags
.filter((t) => {
var _a;
return ((_a = t.text) === null || _a === void 0 ? void 0 : _a.length) &&
t.text[0].text &&
(t.name === "setHeader" || t.name === "assignHeaders");
})
.map((t) => {
var _a;
return t.name === "setHeader"
? {
type: "setter",
source: t.text[0].text.split(" ")[0].trim(),
target: (_a = t.text[0].text.split(" ")[1]) === null || _a === void 0 ? void 0 : _a.trim(),
}
: {
type: "assigner",
source: t.text[0].text,
};
}) });
if (errors.length) {
props.errors.push(...errors);
return [];
}
return props.paths.map((path) => (Object.assign(Object.assign({}, props.operation), { controller: props.controller, path, accessor: [...PathUtil_1.PathUtil.accessors(path), props.operation.name], exceptions,
parameters,
success, extensions: props.operation.extensions })));
};
})(TypedHttpRouteAnalyzer || (exports.TypedHttpRouteAnalyzer = TypedHttpRouteAnalyzer = {}));
const join = ({ object, key, }) => {
if (key === null)
return object.name;
else if (typeof key === "object")
return `${object.name}[key]`;
else if (Escaper_1.Escaper.variable(key))
return `${object.name}.${key}`;
return `${object.name}[${JSON.stringify(key)}]`;
};
//# sourceMappingURL=TypedHttpRouteAnalyzer.js.map
;