Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require('fs');
- const path = require('path');
- const args = process.argv.slice(2);
- const schemaInputPath = args[0];
- const schemaOutputPath = args[1];
- if (!schemaInputPath) throw new Error('Schema input path is required');
- if (!schemaOutputPath) throw new Error('Schema output path is required');
- // eslint-disable-next-line import/no-dynamic-require
- const schema = require(path.resolve(process.cwd(), schemaInputPath));
- /**
- * Выпиливаем Public api, мы им не пользуемся, а они ломают генерацию
- */
- for (const key in schema.components.schemas) {
- if (key.includes('.Public.')) {
- delete schema.components.schemas[key];
- }
- }
- /**
- * Делаем все поля required, чтобы они не были optional
- * Было: field?: string | null
- * Стало: field: string | null
- */
- for (const key in schema.components.schemas) {
- const subSchema = schema.components.schemas[key];
- if (subSchema.type !== 'object' || !subSchema.properties) continue;
- const properties = Object.keys(subSchema.properties);
- subSchema.required = properties;
- }
- const schemaText = JSON.stringify(schema, null, 2);
- /**
- * Выпиливаю артефакты вида:
- * [[...]]
- * `1
- * @param text
- */
- const removeBadSymbols = text => text.replace(/(\[\[.*\]\]|`1)/g, '');
- /**
- * Выпиливаю дубликаты:
- *
- * Monq.Sm.Service.GatewayApi.ViewModels.WebUi.v1.Rsm.GateConfigItemEdgePutViewModel
- * Monq.Sm.Service.GatewayApi.ViewModels.WebUi.v2.Rsm.GateConfigItemEdgePutViewModel
- *
- * Проблема в том, что генератор берёт лишь последнюю часть, отсюда дубликаты
- */
- const removeDuplicates = text => text.replace(/"(.*\.)(v)([2-9])(\..*)"/g, '"$1$2$3$4V$3"');
- /**
- * Делаем читаемое имя моделей
- *
- * Было: "Monq.Sm.Service.GatewayApi.ViewModels.WebUi.v1.AutomatonRules.GateAutomatonRuleScriptValidatePostViewModel"
- * Стало: "GateAutomatonRuleScriptValidatePostViewModel"
- *
- * Было: "#/components/schemas/Monq.Sm.Service.GatewayApi.ViewModels.WebUi.v1.AutomatonRules.GateAutomatonRuleScriptValidatePostViewModel"
- * Стало: "#/components/schemas/Monq.Sm.Service.GatewayApi.ViewModels.WebUi.v1.AutomatonRules.GateAutomatonRuleScriptValidatePostViewModel"
- */
- const extractModelNames = text => text.replace(/"(#\/components\/schemas\/)?(Monq\.)(.*)(\.)(.*)"/g, '"$1$5"');
- Promise.resolve(schemaText)
- .then(removeBadSymbols)
- .then(removeDuplicates)
- .then(extractModelNames)
- .then(fixedSchemaText => {
- fs.writeFile(path.resolve(process.cwd(), schemaOutputPath), fixedSchemaText, (err) => {
- if (err) {
- console.error(err);
- process.exit(1);
- }
- console.log(`Fixed schema: ${schemaInputPath} > ${schemaOutputPath}`);
- process.exit(0);
- });
- })
- .catch(err => {
- console.error(err);
- process.exit(1);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement