UNPKG

nestjs-i18n

Version:
62 lines (61 loc) 4.52 kB
"use strict"; 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