UNPKG

@softkit/i18n

Version:

This library is a simple wrapper based on [nestjs-i18n](https://nestjs-i18n.com/)

44 lines (43 loc) 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.annotateSourceCode = exports.createTypesFile = exports.convertObjectToTypeDefinition = void 0; const tslib_1 = require("tslib"); const typescript_1 = tslib_1.__importDefault(require("typescript")); const convertObjectToTypeDefinition = async (object) => { if (typeof object === 'object') { return Promise.all(Object.keys(object).map(async (key) => { if (typeof object[key] === '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(object[key])) { const elements = Array.from({ length: object[key].length }).map(() => typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword)); return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createStringLiteral(key), undefined, typescript_1.default.factory.createTupleTypeNode(elements)); } return typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createStringLiteral(key), undefined, typescript_1.default.factory.createTypeLiteralNode(await (0, exports.convertObjectToTypeDefinition)(object[key]))); })); } 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(false, undefined, typescript_1.default.factory.createNamedImports([ typescript_1.default.factory.createImportSpecifier(false, undefined, typescript_1.default.factory.createIdentifier('Path')), ])), typescript_1.default.factory.createStringLiteral('@softkit/i18n')), 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')), ])), ]); return printer.printList(typescript_1.default.ListFormat.MultiLine, nodes, sourceFile); }; exports.createTypesFile = createTypesFile; const annotateSourceCode = (code) => { return `/* DO NOT EDIT, file generated by @softkit/i18n */ ${code}`; }; exports.annotateSourceCode = annotateSourceCode; //# sourceMappingURL=typescript.js.map