nestjs-i18n
Version:
The i18n module for Nest.
62 lines (61 loc) • 4.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.annotateSourceCode = exports.createTypesFile = exports.convertObjectToTypeDefinition = void 0;
const typescript_1 = __importDefault(require("typescript"));
const convertArrayItemToType = async (item) => {
if (Array.isArray(item)) {
const nestedArrayItemTypes = await Promise.all(item.map((nestedItem) => convertArrayItemToType(nestedItem)));
return typescript_1.default.factory.createTupleTypeNode(nestedArrayItemTypes);
}
if (typeof item === 'object') {
return typescript_1.default.factory.createTypeLiteralNode(await (0, exports.convertObjectToTypeDefinition)(item));
}
return typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword);
};
const convertObjectToTypeDefinition = async (object) => {
switch (typeof object) {
case 'object':
return Promise.all(Object.keys(object).map(async (key) => {
const value = object[key];
if (typeof value === 'string') {
return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createStringLiteral(key), undefined, typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword));
}
if (Array.isArray(value)) {
const arrayItemTypes = await Promise.all(value.map((item) => convertArrayItemToType(item)));
return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createStringLiteral(key), undefined, typescript_1.default.factory.createTupleTypeNode(arrayItemTypes));
}
return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createStringLiteral(key), undefined, typescript_1.default.factory.createTypeLiteralNode(await (0, exports.convertObjectToTypeDefinition)(value)));
}));
}
return [];
};
exports.convertObjectToTypeDefinition = convertObjectToTypeDefinition;
const printer = typescript_1.default.createPrinter({ newLine: typescript_1.default.NewLineKind.LineFeed });
const createTypesFile = async (object) => {
const sourceFile = typescript_1.default.createSourceFile('placeholder.ts', '', typescript_1.default.ScriptTarget.ESNext, true, typescript_1.default.ScriptKind.TS);
const i18nTranslationsType = typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier('I18nTranslations'), undefined, typescript_1.default.factory.createTypeLiteralNode(await (0, exports.convertObjectToTypeDefinition)(object)));
const nodes = typescript_1.default.factory.createNodeArray([
typescript_1.default.factory.createImportDeclaration(undefined, typescript_1.default.factory.createImportClause(true, undefined, typescript_1.default.factory.createNamedImports([
typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier('Path')),
])), typescript_1.default.factory.createStringLiteral('nestjs-i18n'), undefined),
i18nTranslationsType,
typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier('I18nPath'), undefined, typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Path'), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('I18nTranslations'), undefined),
])),
]);
nodes.forEach((node) => {
typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, ' prettier-ignore ', true);
});
return printer.printList(typescript_1.default.ListFormat.MultiLine, nodes, sourceFile);
};
exports.createTypesFile = createTypesFile;
const annotateSourceCode = (code) => {
return `/* DO NOT EDIT, file generated by nestjs-i18n */
/* eslint-disable */
${code}`;
};
exports.annotateSourceCode = annotateSourceCode;
//# sourceMappingURL=typescript.js.map