UNPKG

@vkontakte/api-schema-typescript-generator

Version:

VK API TypeScript generator

216 lines (215 loc) 8.35 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolvePrimitiveTypesArray = exports.formatArrayDepth = exports.joinOneOfValues = exports.joinCommentLines = exports.transformPatternPropertyName = exports.areQuotesNeededForProperty = exports.isPatternProperty = exports.getSectionFromObjectName = exports.getObjectNameByRef = exports.getEnumPropertyName = exports.getInterfaceName = exports.getMethodSection = exports.isMethodNeeded = exports.prepareMethodsPattern = exports.writeFile = exports.prepareBuildDirectory = exports.readJSONFile = void 0; const fs_1 = __importStar(require("fs")); const path_1 = __importDefault(require("path")); const utils_1 = require("./utils"); const constants_1 = require("./constants"); const log_1 = require("./log"); const prettier_1 = __importDefault(require("prettier")); async function readJSONFile(path) { const content = await fs_1.promises.readFile(path, 'utf-8'); return JSON.parse(content); } exports.readJSONFile = readJSONFile; function deleteDirectoryRecursive(directoryPath) { if (fs_1.default.existsSync(directoryPath)) { fs_1.default.readdirSync(directoryPath).forEach((file) => { const currentPath = path_1.default.join(directoryPath, file); if (fs_1.default.lstatSync(currentPath).isDirectory()) { deleteDirectoryRecursive(currentPath); } else { fs_1.default.unlinkSync(currentPath); } }); fs_1.default.rmdirSync(directoryPath); } } function prepareBuildDirectory(directoryPath) { deleteDirectoryRecursive(directoryPath); fs_1.default.mkdirSync(directoryPath, { recursive: true }); } exports.prepareBuildDirectory = prepareBuildDirectory; function writeFile(filePath, code, insertAutoGeneratedNote = true) { if (insertAutoGeneratedNote) { code = [ '/**', " * This is auto-generated file, don't modify this file manually", ' */', // '/* eslint-disable max-len */', // '/* eslint-disable @typescript-eslint/no-empty-interface */', ].join(constants_1.newLineChar) + constants_1.newLineChar.repeat(2) + code.trim(); } code = prettier_1.default.format(code, { semi: true, singleQuote: true, trailingComma: 'all', quoteProps: 'consistent', parser: 'typescript', }); fs_1.default.mkdirSync(filePath.replace(path_1.default.basename(filePath), ''), { recursive: true, }); fs_1.default.writeFileSync(filePath, code.trim() + constants_1.newLineChar); } exports.writeFile = writeFile; function prepareMethodsPattern(methodsPattern) { if (!methodsPattern) { (0, log_1.consoleLogErrorAndExit)('methodsPattern is empty. Pass "*" to generate all methods'); } return methodsPattern .replace(/\s+/g, '') .split(',') .reduce((acc, pattern) => { acc[pattern] = true; return acc; }, {}); } exports.prepareMethodsPattern = prepareMethodsPattern; function isMethodNeeded(methodsPattern, method) { const [methodSection, methodName] = method.split('.'); return Object.keys(methodsPattern).some((pattern) => { const [patternSection, patternMethod] = pattern.split('.'); if (patternSection === '*') { return true; } if (patternSection === methodSection) { return patternMethod === '*' || patternMethod === methodName; } return false; }); } exports.isMethodNeeded = isMethodNeeded; function getMethodSection(methodName) { return methodName.split('.')[0]; } exports.getMethodSection = getMethodSection; function getInterfaceName(name) { name = name .replace(/\.|(\s+)|_/g, ' ') .split(' ') .map((v) => (0, utils_1.capitalizeFirstLetter)(v)) .join(''); return (0, utils_1.capitalizeFirstLetter)(name); } exports.getInterfaceName = getInterfaceName; function getEnumPropertyName(name) { return name.toUpperCase().replace(/\s+/g, '_').replace(/-/g, '_').replace(/\./g, '_'); } exports.getEnumPropertyName = getEnumPropertyName; function getObjectNameByRef(ref) { const parts = ref.split('/'); return parts[parts.length - 1]; } exports.getObjectNameByRef = getObjectNameByRef; function getSectionFromObjectName(name) { return name.split('_')[0]; } exports.getSectionFromObjectName = getSectionFromObjectName; function isPatternProperty(name) { return name.startsWith('[key: '); } exports.isPatternProperty = isPatternProperty; function areQuotesNeededForProperty(name) { name = String(name); if (isPatternProperty(name)) { return false; } if (/[&-]/.test(name)) { return true; } return !(/^[a-z_]([a-z0-9_])+$/i.test(name) || /^[a-z_]/i.test(name)); } exports.areQuotesNeededForProperty = areQuotesNeededForProperty; function transformPatternPropertyName(name) { if (name === '^[0-9]+$') { return '[key: number]'; } return '[key: string] /* default pattern property name */'; } exports.transformPatternPropertyName = transformPatternPropertyName; function joinCommentLines(indent = 2, ...description) { let descriptionLines = []; description.forEach((entry) => { if (typeof entry === 'string') { descriptionLines = [ ...descriptionLines, ...(0, utils_1.trimArray)((entry || '').trim().split(constants_1.newLineChar)), ]; } else if (Array.isArray(entry)) { descriptionLines = [...descriptionLines, ...entry]; } }); descriptionLines = (0, utils_1.trimArray)(descriptionLines); if (!descriptionLines.length) { return []; } const indentSpaces = constants_1.spaceChar.repeat(indent); return [ `${indentSpaces}/**`, ...descriptionLines.map((line) => { return indentSpaces + ' ' + `* ${line}`.trim(); }), `${indentSpaces} */`, ]; } exports.joinCommentLines = joinCommentLines; function joinOneOfValues(values, primitive) { const joined = values.join(' | '); if (joined.length > 120) { const spacesCount = primitive ? 2 : 4; return values.join(` |${constants_1.newLineChar}${constants_1.spaceChar.repeat(spacesCount)}`); } else { return joined; } } exports.joinOneOfValues = joinOneOfValues; function formatArrayDepth(value, depth) { if (value.endsWith("'") || value.includes('|')) { return `Array<${value}>` + '[]'.repeat(depth - 1); // Need decrement depth value because of Array<T> has its own depth } else { return value + '[]'.repeat(depth); } } exports.formatArrayDepth = formatArrayDepth; function resolvePrimitiveTypesArray(types) { const isEveryTypePrimitive = types.every((type) => !!constants_1.primitiveTypes[type]); if (isEveryTypePrimitive) { return types.map((type) => constants_1.primitiveTypes[type]).join(' | '); } return null; } exports.resolvePrimitiveTypesArray = resolvePrimitiveTypesArray;