@purpleschool/rugpt-lib-common 0.0.67 → 0.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.githooks/pre-commit +3 -0
- package/build/errors/errors.js +0 -60
- package/errors/errors.ts +0 -67
- package/package.json +2 -1
- package/scripts/check-errors-structure.js +149 -0
package/build/errors/errors.js
CHANGED
|
@@ -5305,66 +5305,6 @@ exports.ERRORS = {
|
|
|
5305
5305
|
httpCode: 500,
|
|
5306
5306
|
},
|
|
5307
5307
|
},
|
|
5308
|
-
INTERIOR_DESIGN_CONFIG_ERROR: {
|
|
5309
|
-
code: "A569",
|
|
5310
|
-
message: "Произошла ошибка при получении конфигурации инструмента для редактирования дизайна интерьера",
|
|
5311
|
-
httpCode: 500,
|
|
5312
|
-
},
|
|
5313
|
-
INTERIOR_DESIGN_SEND_REQUEST_ERROR: {
|
|
5314
|
-
code: "A570",
|
|
5315
|
-
message: "Произошла ошибка при отправке запроса на редактирование дизайна интерьера",
|
|
5316
|
-
httpCode: 500,
|
|
5317
|
-
},
|
|
5318
|
-
INTERIOR_DESIGN_MODEL_NOT_FOUND: {
|
|
5319
|
-
code: "A571",
|
|
5320
|
-
message: "Не удалось найти указанную модель для редактирования дизайна интерьера",
|
|
5321
|
-
httpCode: 400,
|
|
5322
|
-
},
|
|
5323
|
-
INTERIOR_DESIGN_MAX_SYMBOLS_EXCEEDED: {
|
|
5324
|
-
code: "A572",
|
|
5325
|
-
message: "Превышена максимальная количество символов",
|
|
5326
|
-
httpCode: 400,
|
|
5327
|
-
},
|
|
5328
|
-
INTERIOR_DESIGN_SET_REACTION_ERROR: {
|
|
5329
|
-
code: "A573",
|
|
5330
|
-
message: "Произошла ошибка при установке оценке сообщения",
|
|
5331
|
-
httpCode: 500,
|
|
5332
|
-
},
|
|
5333
|
-
INTERIOR_DESIGN_UPDATE_TITLE_ERROR: {
|
|
5334
|
-
code: "A574",
|
|
5335
|
-
message: "Произошла ошибка при обновлении названия чата",
|
|
5336
|
-
httpCode: 500,
|
|
5337
|
-
},
|
|
5338
|
-
INTERIOR_DESIGN_JOB_DELETE_ERROR: {
|
|
5339
|
-
code: "A575",
|
|
5340
|
-
message: "Произошла ошибка при удалении сообщения",
|
|
5341
|
-
httpCode: 500,
|
|
5342
|
-
},
|
|
5343
|
-
INTERIOR_DESIGN_RETRY_REQUEST_ERROR: {
|
|
5344
|
-
code: "A576",
|
|
5345
|
-
message: "Произошла ошибка при повторном запросе на редактирование дизайна интерьера",
|
|
5346
|
-
httpCode: 500,
|
|
5347
|
-
},
|
|
5348
|
-
INTERIOR_DESIGN_MODEL_NOT_AVAILABLE: {
|
|
5349
|
-
code: "A577",
|
|
5350
|
-
message: "Данная модель для редактирования дизайна интерьера недоступна",
|
|
5351
|
-
httpCode: 401,
|
|
5352
|
-
},
|
|
5353
|
-
INTERIOR_DESIGN_MODEL_INACTIVE: {
|
|
5354
|
-
code: "A578",
|
|
5355
|
-
message: "Модель редактирования дизайна интерьера архивирована и недоступна для пользования",
|
|
5356
|
-
httpCode: 403,
|
|
5357
|
-
},
|
|
5358
|
-
INTERIOR_DESIGN_MODEL_FIND_ERROR: {
|
|
5359
|
-
code: "A579",
|
|
5360
|
-
message: "Произошла ошибка при получении модели для редактирования дизайна интерьера",
|
|
5361
|
-
httpCode: 500,
|
|
5362
|
-
},
|
|
5363
|
-
INTERIOR_DESIGN_PRICE_ERROR: {
|
|
5364
|
-
code: "A580",
|
|
5365
|
-
message: "Произошла ошибка при получении цены для редактирования дизайна интерьера",
|
|
5366
|
-
httpCode: 500,
|
|
5367
|
-
},
|
|
5368
5308
|
WATERMARK: {
|
|
5369
5309
|
APPLY_ERROR: {
|
|
5370
5310
|
code: "WATERMARK.APPLY_ERROR",
|
package/errors/errors.ts
CHANGED
|
@@ -5455,73 +5455,6 @@ export const ERRORS = {
|
|
|
5455
5455
|
httpCode: 500,
|
|
5456
5456
|
},
|
|
5457
5457
|
},
|
|
5458
|
-
INTERIOR_DESIGN_CONFIG_ERROR: {
|
|
5459
|
-
code: "A569",
|
|
5460
|
-
message:
|
|
5461
|
-
"Произошла ошибка при получении конфигурации инструмента для редактирования дизайна интерьера",
|
|
5462
|
-
httpCode: 500,
|
|
5463
|
-
},
|
|
5464
|
-
INTERIOR_DESIGN_SEND_REQUEST_ERROR: {
|
|
5465
|
-
code: "A570",
|
|
5466
|
-
message:
|
|
5467
|
-
"Произошла ошибка при отправке запроса на редактирование дизайна интерьера",
|
|
5468
|
-
httpCode: 500,
|
|
5469
|
-
},
|
|
5470
|
-
INTERIOR_DESIGN_MODEL_NOT_FOUND: {
|
|
5471
|
-
code: "A571",
|
|
5472
|
-
message:
|
|
5473
|
-
"Не удалось найти указанную модель для редактирования дизайна интерьера",
|
|
5474
|
-
httpCode: 400,
|
|
5475
|
-
},
|
|
5476
|
-
INTERIOR_DESIGN_MAX_SYMBOLS_EXCEEDED: {
|
|
5477
|
-
code: "A572",
|
|
5478
|
-
message: "Превышена максимальная количество символов",
|
|
5479
|
-
httpCode: 400,
|
|
5480
|
-
},
|
|
5481
|
-
INTERIOR_DESIGN_SET_REACTION_ERROR: {
|
|
5482
|
-
code: "A573",
|
|
5483
|
-
message: "Произошла ошибка при установке оценке сообщения",
|
|
5484
|
-
httpCode: 500,
|
|
5485
|
-
},
|
|
5486
|
-
INTERIOR_DESIGN_UPDATE_TITLE_ERROR: {
|
|
5487
|
-
code: "A574",
|
|
5488
|
-
message: "Произошла ошибка при обновлении названия чата",
|
|
5489
|
-
httpCode: 500,
|
|
5490
|
-
},
|
|
5491
|
-
INTERIOR_DESIGN_JOB_DELETE_ERROR: {
|
|
5492
|
-
code: "A575",
|
|
5493
|
-
message: "Произошла ошибка при удалении сообщения",
|
|
5494
|
-
httpCode: 500,
|
|
5495
|
-
},
|
|
5496
|
-
INTERIOR_DESIGN_RETRY_REQUEST_ERROR: {
|
|
5497
|
-
code: "A576",
|
|
5498
|
-
message:
|
|
5499
|
-
"Произошла ошибка при повторном запросе на редактирование дизайна интерьера",
|
|
5500
|
-
httpCode: 500,
|
|
5501
|
-
},
|
|
5502
|
-
INTERIOR_DESIGN_MODEL_NOT_AVAILABLE: {
|
|
5503
|
-
code: "A577",
|
|
5504
|
-
message: "Данная модель для редактирования дизайна интерьера недоступна",
|
|
5505
|
-
httpCode: 401,
|
|
5506
|
-
},
|
|
5507
|
-
INTERIOR_DESIGN_MODEL_INACTIVE: {
|
|
5508
|
-
code: "A578",
|
|
5509
|
-
message:
|
|
5510
|
-
"Модель редактирования дизайна интерьера архивирована и недоступна для пользования",
|
|
5511
|
-
httpCode: 403,
|
|
5512
|
-
},
|
|
5513
|
-
INTERIOR_DESIGN_MODEL_FIND_ERROR: {
|
|
5514
|
-
code: "A579",
|
|
5515
|
-
message:
|
|
5516
|
-
"Произошла ошибка при получении модели для редактирования дизайна интерьера",
|
|
5517
|
-
httpCode: 500,
|
|
5518
|
-
},
|
|
5519
|
-
INTERIOR_DESIGN_PRICE_ERROR: {
|
|
5520
|
-
code: "A580",
|
|
5521
|
-
message:
|
|
5522
|
-
"Произошла ошибка при получении цены для редактирования дизайна интерьера",
|
|
5523
|
-
httpCode: 500,
|
|
5524
|
-
},
|
|
5525
5458
|
WATERMARK: {
|
|
5526
5459
|
APPLY_ERROR: {
|
|
5527
5460
|
code: "WATERMARK.APPLY_ERROR",
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@purpleschool/rugpt-lib-common",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.68",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
+
"check:errors": "node scripts/check-errors-structure.js",
|
|
8
9
|
"prepublish": "rm -rf build && tsc",
|
|
9
10
|
"build": "tsc"
|
|
10
11
|
},
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
const { execFileSync } = require("child_process");
|
|
4
|
+
const ts = require("typescript");
|
|
5
|
+
|
|
6
|
+
const repoRoot = path.resolve(__dirname, "..");
|
|
7
|
+
const errorsPath = path.join(repoRoot, "errors", "errors.ts");
|
|
8
|
+
const relativeErrorsPath = "errors/errors.ts";
|
|
9
|
+
const useStaged = process.argv.includes("--staged");
|
|
10
|
+
|
|
11
|
+
function hasStagedErrorsFile() {
|
|
12
|
+
try {
|
|
13
|
+
const stagedFiles = execFileSync(
|
|
14
|
+
"git",
|
|
15
|
+
["diff", "--cached", "--name-only", "--diff-filter=ACMR", "--", relativeErrorsPath],
|
|
16
|
+
{ cwd: repoRoot, encoding: "utf8" }
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
return stagedFiles
|
|
20
|
+
.split(/\r?\n/)
|
|
21
|
+
.map((file) => file.trim())
|
|
22
|
+
.includes(relativeErrorsPath);
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function readErrorsSource() {
|
|
29
|
+
if (useStaged) {
|
|
30
|
+
if (!hasStagedErrorsFile()) {
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return execFileSync("git", ["show", `:${relativeErrorsPath}`], {
|
|
35
|
+
cwd: repoRoot,
|
|
36
|
+
encoding: "utf8",
|
|
37
|
+
maxBuffer: 20 * 1024 * 1024,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return fs.readFileSync(errorsPath, "utf8");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getPropertyName(name) {
|
|
45
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {
|
|
46
|
+
return name.text;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return name.getText();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getObjectPropertyNames(objectLiteral) {
|
|
53
|
+
return new Set(
|
|
54
|
+
objectLiteral.properties
|
|
55
|
+
.filter(ts.isPropertyAssignment)
|
|
56
|
+
.map((property) => getPropertyName(property.name))
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function isErrorObject(objectLiteral) {
|
|
61
|
+
const propertyNames = getObjectPropertyNames(objectLiteral);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
propertyNames.has("code") &&
|
|
65
|
+
propertyNames.has("message") &&
|
|
66
|
+
propertyNames.has("httpCode")
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function findErrorsObject(sourceFile) {
|
|
71
|
+
let errorsObject = null;
|
|
72
|
+
|
|
73
|
+
function visit(node) {
|
|
74
|
+
if (
|
|
75
|
+
ts.isVariableDeclaration(node) &&
|
|
76
|
+
ts.isIdentifier(node.name) &&
|
|
77
|
+
node.name.text === "ERRORS" &&
|
|
78
|
+
node.initializer &&
|
|
79
|
+
ts.isObjectLiteralExpression(node.initializer)
|
|
80
|
+
) {
|
|
81
|
+
errorsObject = node.initializer;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ts.forEachChild(node, visit);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
visit(sourceFile);
|
|
89
|
+
return errorsObject;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const sourceText = readErrorsSource();
|
|
93
|
+
const sourceFile = ts.createSourceFile(
|
|
94
|
+
relativeErrorsPath,
|
|
95
|
+
sourceText,
|
|
96
|
+
ts.ScriptTarget.Latest,
|
|
97
|
+
true,
|
|
98
|
+
ts.ScriptKind.TS
|
|
99
|
+
);
|
|
100
|
+
const errorsObject = findErrorsObject(sourceFile);
|
|
101
|
+
|
|
102
|
+
if (!errorsObject) {
|
|
103
|
+
console.error("Cannot find top-level ERRORS object in errors/errors.ts");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const topLevelErrors = errorsObject.properties
|
|
108
|
+
.filter(ts.isPropertyAssignment)
|
|
109
|
+
.filter((property) => ts.isObjectLiteralExpression(property.initializer))
|
|
110
|
+
.filter((property) => isErrorObject(property.initializer))
|
|
111
|
+
.map((property) => {
|
|
112
|
+
const position = sourceFile.getLineAndCharacterOfPosition(property.name.getStart(sourceFile));
|
|
113
|
+
const name = getPropertyName(property.name);
|
|
114
|
+
const codeProperty = property.initializer.properties.find(
|
|
115
|
+
(nestedProperty) =>
|
|
116
|
+
ts.isPropertyAssignment(nestedProperty) &&
|
|
117
|
+
getPropertyName(nestedProperty.name) === "code"
|
|
118
|
+
);
|
|
119
|
+
const code =
|
|
120
|
+
codeProperty &&
|
|
121
|
+
ts.isPropertyAssignment(codeProperty) &&
|
|
122
|
+
ts.isStringLiteralLike(codeProperty.initializer)
|
|
123
|
+
? codeProperty.initializer.text
|
|
124
|
+
: null;
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
name,
|
|
128
|
+
code,
|
|
129
|
+
line: position.line + 1,
|
|
130
|
+
character: position.character + 1,
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
if (topLevelErrors.length > 0) {
|
|
135
|
+
console.error("Top-level errors are not allowed in errors/errors.ts.");
|
|
136
|
+
console.error("Put every error object inside a group, for example ERRORS.SPELL_CORRECTOR_JOB.NOT_FOUND.");
|
|
137
|
+
console.error("");
|
|
138
|
+
|
|
139
|
+
for (const error of topLevelErrors) {
|
|
140
|
+
const codeSuffix = error.code ? `, code: ${error.code}` : "";
|
|
141
|
+
console.error(
|
|
142
|
+
`- ${relativeErrorsPath}:${error.line}:${error.character} ${error.name}${codeSuffix}`
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
console.log("errors/errors.ts structure is valid.");
|