@safeticsinc/dra 0.0.1
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/dist/algorithm/formulas.d.ts +165 -0
- package/dist/algorithm/formulas.d.ts.map +1 -0
- package/dist/algorithm/formulas.js +385 -0
- package/dist/algorithm/formulas.js.map +1 -0
- package/dist/algorithm/index.d.ts +2 -0
- package/dist/algorithm/index.d.ts.map +1 -0
- package/dist/algorithm/index.js +18 -0
- package/dist/algorithm/index.js.map +1 -0
- package/dist/cli/algorithm/formulas.js +382 -0
- package/dist/cli/algorithm/formulas.js.map +1 -0
- package/dist/cli/cli/index.js +133 -0
- package/dist/cli/cli/index.js.map +1 -0
- package/dist/cli/core/error.js +252 -0
- package/dist/cli/core/error.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +133 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/error.d.ts +131 -0
- package/dist/core/error.d.ts.map +1 -0
- package/dist/core/error.js +264 -0
- package/dist/core/error.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.cjs +19 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/robot.d.ts +1 -0
- package/dist/schema/robot.d.ts.map +1 -0
- package/dist/schema/robot.js +2 -0
- package/dist/schema/robot.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRA (Danger Risk Assessment) 에러 처리 시스템
|
|
3
|
+
* 안전거리 계산 중 발생하는 다양한 에러를 구분하여 처리
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* DRA 기본 에러 클래스
|
|
7
|
+
* 모든 DRA 특화 에러는 이 클래스를 상속받음
|
|
8
|
+
*/
|
|
9
|
+
export class DRAError extends Error {
|
|
10
|
+
constructor(message, code = 'DRA_ERROR', context) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'DRAError';
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.context = context;
|
|
15
|
+
this.timestamp = new Date();
|
|
16
|
+
// 프로토타입 체인 설정 (TypeScript에서 클래스 상속 시 필요)
|
|
17
|
+
Object.setPrototypeOf(this, DRAError.prototype);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 에러 정보를 객체로 반환
|
|
21
|
+
*/
|
|
22
|
+
toJSON() {
|
|
23
|
+
return {
|
|
24
|
+
name: this.name,
|
|
25
|
+
code: this.code,
|
|
26
|
+
message: this.message,
|
|
27
|
+
context: this.context,
|
|
28
|
+
timestamp: this.timestamp,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 에러 정보를 문자열로 반환
|
|
33
|
+
*/
|
|
34
|
+
toString() {
|
|
35
|
+
const contextStr = this.context
|
|
36
|
+
? `\n컨텍스트: ${JSON.stringify(this.context, null, 2)}`
|
|
37
|
+
: '';
|
|
38
|
+
return `[${this.code}] ${this.message}${contextStr}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export default DRAError;
|
|
42
|
+
/**
|
|
43
|
+
* 입력 파라미터 검증 에러
|
|
44
|
+
* 필수 파라미터가 누락되었거나 잘못된 형식일 때 발생
|
|
45
|
+
*/
|
|
46
|
+
export class ValidationError extends DRAError {
|
|
47
|
+
constructor(message, context) {
|
|
48
|
+
super(message, 'VALIDATION_ERROR', context);
|
|
49
|
+
this.name = 'ValidationError';
|
|
50
|
+
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 파라미터 범위 벗어남 에러
|
|
55
|
+
* 입력값이 허용된 범위를 벗어났을 때 발생
|
|
56
|
+
*/
|
|
57
|
+
export class OutOfRangeError extends DRAError {
|
|
58
|
+
constructor(paramName, value, minValue, maxValue) {
|
|
59
|
+
const message = minValue !== undefined && maxValue !== undefined
|
|
60
|
+
? `파라미터 '${paramName}'은(는) ${minValue}~${maxValue} 범위여야 합니다. (현재값: ${value})`
|
|
61
|
+
: minValue !== undefined
|
|
62
|
+
? `파라미터 '${paramName}'은(는) ${minValue} 이상이어야 합니다. (현재값: ${value})`
|
|
63
|
+
: `파라미터 '${paramName}'은(는) ${maxValue} 이하여야 합니다. (현재값: ${value})`;
|
|
64
|
+
super(message, 'OUT_OF_RANGE_ERROR', {
|
|
65
|
+
paramName,
|
|
66
|
+
value,
|
|
67
|
+
minValue,
|
|
68
|
+
maxValue,
|
|
69
|
+
});
|
|
70
|
+
this.name = 'OutOfRangeError';
|
|
71
|
+
this.paramName = paramName;
|
|
72
|
+
this.value = value;
|
|
73
|
+
this.minValue = minValue;
|
|
74
|
+
this.maxValue = maxValue;
|
|
75
|
+
Object.setPrototypeOf(this, OutOfRangeError.prototype);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 필수 파라미터 누락 에러
|
|
80
|
+
* 필수 파라미터가 제공되지 않았을 때 발생
|
|
81
|
+
*/
|
|
82
|
+
export class MissingParameterError extends DRAError {
|
|
83
|
+
constructor(requiredParams) {
|
|
84
|
+
const paramList = requiredParams.join(', ');
|
|
85
|
+
const message = `필수 파라미터가 누락되었습니다: ${paramList}`;
|
|
86
|
+
super(message, 'MISSING_PARAMETER_ERROR', { requiredParams });
|
|
87
|
+
this.name = 'MissingParameterError';
|
|
88
|
+
this.requiredParams = requiredParams;
|
|
89
|
+
Object.setPrototypeOf(this, MissingParameterError.prototype);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 계산 에러
|
|
94
|
+
* 계산 과정에서 수학적 오류 또는 불가능한 연산이 발생했을 때
|
|
95
|
+
*/
|
|
96
|
+
export class CalculationError extends DRAError {
|
|
97
|
+
constructor(message, formulaCode, params) {
|
|
98
|
+
super(message, 'CALCULATION_ERROR', { formulaCode, params });
|
|
99
|
+
this.name = 'CalculationError';
|
|
100
|
+
this.formulaCode = formulaCode;
|
|
101
|
+
this.params = params;
|
|
102
|
+
Object.setPrototypeOf(this, CalculationError.prototype);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 불가능한 상태 에러
|
|
107
|
+
* 현재 상태에서 요청된 작업을 수행할 수 없을 때 발생
|
|
108
|
+
*/
|
|
109
|
+
export class InvalidStateError extends DRAError {
|
|
110
|
+
constructor(message, currentState, requiredState) {
|
|
111
|
+
super(message, 'INVALID_STATE_ERROR', {
|
|
112
|
+
currentState,
|
|
113
|
+
requiredState,
|
|
114
|
+
});
|
|
115
|
+
this.name = 'InvalidStateError';
|
|
116
|
+
this.currentState = currentState;
|
|
117
|
+
this.requiredState = requiredState || '';
|
|
118
|
+
Object.setPrototypeOf(this, InvalidStateError.prototype);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 타입 에러
|
|
123
|
+
* 예상과 다른 타입의 값이 제공되었을 때 발생
|
|
124
|
+
*/
|
|
125
|
+
export class TypeError extends DRAError {
|
|
126
|
+
constructor(paramName, expectedType, actualType) {
|
|
127
|
+
const message = `파라미터 '${paramName}'의 타입이 잘못되었습니다. (예상: ${expectedType}, 실제: ${actualType})`;
|
|
128
|
+
super(message, 'TYPE_ERROR', {
|
|
129
|
+
paramName,
|
|
130
|
+
expectedType,
|
|
131
|
+
actualType,
|
|
132
|
+
});
|
|
133
|
+
this.name = 'TypeError';
|
|
134
|
+
this.paramName = paramName;
|
|
135
|
+
this.expectedType = expectedType;
|
|
136
|
+
this.actualType = actualType;
|
|
137
|
+
Object.setPrototypeOf(this, TypeError.prototype);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 안전 기준 미만 에러
|
|
142
|
+
* 계산된 안전거리가 최소 안전거리 기준을 만족하지 못할 때 발생
|
|
143
|
+
*/
|
|
144
|
+
export class SafetyThresholdError extends DRAError {
|
|
145
|
+
constructor(calculatedValue, minimumRequired) {
|
|
146
|
+
const safetyMargin = minimumRequired - calculatedValue;
|
|
147
|
+
const message = `안전거리가 기준을 충족하지 못했습니다. (계산값: ${calculatedValue}mm, 필요값: ${minimumRequired}mm, 부족: ${safetyMargin}mm)`;
|
|
148
|
+
super(message, 'SAFETY_THRESHOLD_ERROR', {
|
|
149
|
+
calculatedValue,
|
|
150
|
+
minimumRequired,
|
|
151
|
+
safetyMargin,
|
|
152
|
+
});
|
|
153
|
+
this.name = 'SafetyThresholdError';
|
|
154
|
+
this.calculatedValue = calculatedValue;
|
|
155
|
+
this.minimumRequired = minimumRequired;
|
|
156
|
+
this.safetyMargin = safetyMargin;
|
|
157
|
+
Object.setPrototypeOf(this, SafetyThresholdError.prototype);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 에러 검증 및 처리 유틸리티
|
|
162
|
+
*/
|
|
163
|
+
export class ErrorHandler {
|
|
164
|
+
/**
|
|
165
|
+
* 값이 범위 내에 있는지 검증
|
|
166
|
+
*/
|
|
167
|
+
static validateRange(paramName, value, minValue, maxValue) {
|
|
168
|
+
if (minValue !== undefined &&
|
|
169
|
+
maxValue !== undefined &&
|
|
170
|
+
(value < minValue || value > maxValue)) {
|
|
171
|
+
throw new OutOfRangeError(paramName, value, minValue, maxValue);
|
|
172
|
+
}
|
|
173
|
+
if (minValue !== undefined && value < minValue) {
|
|
174
|
+
throw new OutOfRangeError(paramName, value, minValue, undefined);
|
|
175
|
+
}
|
|
176
|
+
if (maxValue !== undefined && value > maxValue) {
|
|
177
|
+
throw new OutOfRangeError(paramName, value, undefined, maxValue);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 필수 파라미터 검증
|
|
182
|
+
*/
|
|
183
|
+
static validateRequired(params, requiredKeys) {
|
|
184
|
+
const missingKeys = requiredKeys.filter((key) => !(key in params));
|
|
185
|
+
if (missingKeys.length > 0) {
|
|
186
|
+
throw new MissingParameterError(missingKeys);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 타입 검증
|
|
191
|
+
*/
|
|
192
|
+
static validateType(paramName, value, expectedType) {
|
|
193
|
+
const actualType = typeof value;
|
|
194
|
+
if (actualType !== expectedType) {
|
|
195
|
+
throw new TypeError(paramName, expectedType, actualType);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* 값이 0이 아닌지 검증 (나눗셈 방지)
|
|
200
|
+
*/
|
|
201
|
+
static validateNonZero(paramName, value) {
|
|
202
|
+
if (value === 0) {
|
|
203
|
+
throw new ValidationError(`파라미터 '${paramName}'은(는) 0이 될 수 없습니다.`, { paramName, value });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 배열이 최소 길이 이상인지 검증
|
|
208
|
+
*/
|
|
209
|
+
static validateArrayLength(paramName, array, minLength) {
|
|
210
|
+
if (array.length < minLength) {
|
|
211
|
+
throw new ValidationError(`파라미터 '${paramName}'은(는) 최소 ${minLength}개 이상의 요소를 가져야 합니다. (현재: ${array.length}개)`, { paramName, minLength, actualLength: array.length });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* 안전거리 기준 검증
|
|
216
|
+
*/
|
|
217
|
+
static validateSafetyThreshold(calculatedValue, minimumRequired) {
|
|
218
|
+
if (calculatedValue < minimumRequired) {
|
|
219
|
+
throw new SafetyThresholdError(calculatedValue, minimumRequired);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* 에러를 캐치하고 로깅
|
|
224
|
+
*/
|
|
225
|
+
static catch(error, fallbackMessage = '알 수 없는 에러가 발생했습니다') {
|
|
226
|
+
if (error instanceof DRAError) {
|
|
227
|
+
console.error(`[${error.code}] ${error.message}`);
|
|
228
|
+
return error;
|
|
229
|
+
}
|
|
230
|
+
if (error instanceof Error) {
|
|
231
|
+
console.error(`[ERROR] ${error.message}`);
|
|
232
|
+
return new DRAError(error.message);
|
|
233
|
+
}
|
|
234
|
+
console.error(`[ERROR] ${fallbackMessage}`);
|
|
235
|
+
return new DRAError(fallbackMessage);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 에러 정보를 상세히 출력
|
|
239
|
+
*/
|
|
240
|
+
static log(error) {
|
|
241
|
+
console.error(`
|
|
242
|
+
═══════════════════════════════════════════════════════════
|
|
243
|
+
[${error.code}] ${error.name}
|
|
244
|
+
═══════════════════════════════════════════════════════════
|
|
245
|
+
메시지: ${error.message}
|
|
246
|
+
시간: ${error.timestamp.toISOString()}
|
|
247
|
+
${error.context ? ` 상세정보:\n${JSON.stringify(error.context, null, 4)}` : ''}
|
|
248
|
+
═══════════════════════════════════════════════════════════
|
|
249
|
+
`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/core/error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as readline from 'readline';
|
|
2
|
+
import { ISO13855 } from '../algorithm/formulas';
|
|
3
|
+
import { DRAError } from '../core/error';
|
|
4
|
+
class InteractiveCLI {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.rl = readline.createInterface({
|
|
7
|
+
input: process.stdin,
|
|
8
|
+
output: process.stdout,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
start() {
|
|
12
|
+
this.showWelcome();
|
|
13
|
+
this.showMenu();
|
|
14
|
+
}
|
|
15
|
+
showWelcome() {
|
|
16
|
+
console.log(`
|
|
17
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
18
|
+
║ 🛡️ DRA 안전거리 계산기 (대화형) ║
|
|
19
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
20
|
+
`);
|
|
21
|
+
}
|
|
22
|
+
showMenu() {
|
|
23
|
+
const menu = `
|
|
24
|
+
📋 선택할 계산 유형:
|
|
25
|
+
1. A1 - 반응 시간 계산
|
|
26
|
+
2. A17 - 열림 거리/속도 계산
|
|
27
|
+
3. B1 - 통계 분석
|
|
28
|
+
4. B6 - 최대값 선택
|
|
29
|
+
5. 종료
|
|
30
|
+
|
|
31
|
+
`;
|
|
32
|
+
console.log(menu);
|
|
33
|
+
this.prompt('선택 (1-5): ', this.handleMenuChoice.bind(this));
|
|
34
|
+
}
|
|
35
|
+
handleMenuChoice(choice) {
|
|
36
|
+
switch (choice.trim()) {
|
|
37
|
+
case '1':
|
|
38
|
+
this.inputA1();
|
|
39
|
+
break;
|
|
40
|
+
case '2':
|
|
41
|
+
this.inputA17();
|
|
42
|
+
break;
|
|
43
|
+
case '3':
|
|
44
|
+
this.inputB1();
|
|
45
|
+
break;
|
|
46
|
+
case '4':
|
|
47
|
+
this.inputB6();
|
|
48
|
+
break;
|
|
49
|
+
case '5':
|
|
50
|
+
this.exit();
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
console.error('❌ 잘못된 선택');
|
|
54
|
+
this.showMenu();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
inputA1() {
|
|
58
|
+
this.prompt('K 값: ', (K) => {
|
|
59
|
+
this.prompt('T 값: ', (T) => {
|
|
60
|
+
this.prompt('C 값: ', (C) => {
|
|
61
|
+
try {
|
|
62
|
+
const result = ISO13855.A1(parseFloat(K), parseFloat(T), parseFloat(C));
|
|
63
|
+
console.log(`\n✅ 결과: ${result}\n`);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.handleError(error);
|
|
67
|
+
}
|
|
68
|
+
this.showMenu();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
inputA17() {
|
|
74
|
+
this.prompt('e 값: ', (e) => {
|
|
75
|
+
this.prompt('v 값: ', (v) => {
|
|
76
|
+
try {
|
|
77
|
+
const result = ISO13855.A17(parseFloat(e), parseFloat(v));
|
|
78
|
+
console.log(`\n✅ 결과: ${result}\n`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.handleError(error);
|
|
82
|
+
}
|
|
83
|
+
this.showMenu();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
inputB1() {
|
|
88
|
+
this.prompt('측정값을 쉼표로 분리해서 입력 (최소 10개): ', (input) => {
|
|
89
|
+
try {
|
|
90
|
+
const measurements = input.split(',').map((v) => parseFloat(v.trim()));
|
|
91
|
+
const result = ISO13855.B1(measurements);
|
|
92
|
+
console.log(`\n✅ 결과: ${result}\n`);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this.handleError(error);
|
|
96
|
+
}
|
|
97
|
+
this.showMenu();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
inputB6() {
|
|
101
|
+
this.prompt('S_RT 값: ', (S_RT) => {
|
|
102
|
+
this.prompt('S_RO 값: ', (S_RO) => {
|
|
103
|
+
try {
|
|
104
|
+
const result = ISO13855.B6(parseFloat(S_RT), parseFloat(S_RO));
|
|
105
|
+
console.log(`\n✅ 결과: ${result}\n`);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
this.handleError(error);
|
|
109
|
+
}
|
|
110
|
+
this.showMenu();
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
handleError(error) {
|
|
115
|
+
if (error instanceof DRAError) {
|
|
116
|
+
console.error(`\n❌ [${error.code}] ${error.message}`);
|
|
117
|
+
}
|
|
118
|
+
else if (error instanceof Error) {
|
|
119
|
+
console.error(`\n❌ 에러: ${error.message}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
prompt(question, callback) {
|
|
123
|
+
this.rl.question(question, callback);
|
|
124
|
+
}
|
|
125
|
+
exit() {
|
|
126
|
+
console.log('\n👋 프로그램을 종료합니다.');
|
|
127
|
+
this.rl.close();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// 실행
|
|
131
|
+
const cli = new InteractiveCLI();
|
|
132
|
+
cli.start();
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRA (Danger Risk Assessment) 에러 처리 시스템
|
|
3
|
+
* 안전거리 계산 중 발생하는 다양한 에러를 구분하여 처리
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* DRA 기본 에러 클래스
|
|
7
|
+
* 모든 DRA 특화 에러는 이 클래스를 상속받음
|
|
8
|
+
*/
|
|
9
|
+
export declare class DRAError extends Error {
|
|
10
|
+
readonly code: string;
|
|
11
|
+
readonly context?: Record<string, any>;
|
|
12
|
+
readonly timestamp: Date;
|
|
13
|
+
constructor(message: string, code?: string, context?: Record<string, any>);
|
|
14
|
+
/**
|
|
15
|
+
* 에러 정보를 객체로 반환
|
|
16
|
+
*/
|
|
17
|
+
toJSON(): {
|
|
18
|
+
name: string;
|
|
19
|
+
code: string;
|
|
20
|
+
message: string;
|
|
21
|
+
context: Record<string, any> | undefined;
|
|
22
|
+
timestamp: Date;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 에러 정보를 문자열로 반환
|
|
26
|
+
*/
|
|
27
|
+
toString(): string;
|
|
28
|
+
}
|
|
29
|
+
export default DRAError;
|
|
30
|
+
/**
|
|
31
|
+
* 입력 파라미터 검증 에러
|
|
32
|
+
* 필수 파라미터가 누락되었거나 잘못된 형식일 때 발생
|
|
33
|
+
*/
|
|
34
|
+
export declare class ValidationError extends DRAError {
|
|
35
|
+
constructor(message: string, context?: Record<string, any>);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 파라미터 범위 벗어남 에러
|
|
39
|
+
* 입력값이 허용된 범위를 벗어났을 때 발생
|
|
40
|
+
*/
|
|
41
|
+
export declare class OutOfRangeError extends DRAError {
|
|
42
|
+
readonly paramName: string;
|
|
43
|
+
readonly value: number;
|
|
44
|
+
readonly minValue?: number;
|
|
45
|
+
readonly maxValue?: number;
|
|
46
|
+
constructor(paramName: string, value: number, minValue?: number, maxValue?: number);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 필수 파라미터 누락 에러
|
|
50
|
+
* 필수 파라미터가 제공되지 않았을 때 발생
|
|
51
|
+
*/
|
|
52
|
+
export declare class MissingParameterError extends DRAError {
|
|
53
|
+
readonly requiredParams: string[];
|
|
54
|
+
constructor(requiredParams: string[]);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 계산 에러
|
|
58
|
+
* 계산 과정에서 수학적 오류 또는 불가능한 연산이 발생했을 때
|
|
59
|
+
*/
|
|
60
|
+
export declare class CalculationError extends DRAError {
|
|
61
|
+
readonly formulaCode: string;
|
|
62
|
+
readonly params: Record<string, any>;
|
|
63
|
+
constructor(message: string, formulaCode: string, params: Record<string, any>);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 불가능한 상태 에러
|
|
67
|
+
* 현재 상태에서 요청된 작업을 수행할 수 없을 때 발생
|
|
68
|
+
*/
|
|
69
|
+
export declare class InvalidStateError extends DRAError {
|
|
70
|
+
readonly currentState: string;
|
|
71
|
+
readonly requiredState: string;
|
|
72
|
+
constructor(message: string, currentState: string, requiredState?: string);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 타입 에러
|
|
76
|
+
* 예상과 다른 타입의 값이 제공되었을 때 발생
|
|
77
|
+
*/
|
|
78
|
+
export declare class TypeError extends DRAError {
|
|
79
|
+
readonly paramName: string;
|
|
80
|
+
readonly expectedType: string;
|
|
81
|
+
readonly actualType: string;
|
|
82
|
+
constructor(paramName: string, expectedType: string, actualType: string);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 안전 기준 미만 에러
|
|
86
|
+
* 계산된 안전거리가 최소 안전거리 기준을 만족하지 못할 때 발생
|
|
87
|
+
*/
|
|
88
|
+
export declare class SafetyThresholdError extends DRAError {
|
|
89
|
+
readonly calculatedValue: number;
|
|
90
|
+
readonly minimumRequired: number;
|
|
91
|
+
readonly safetyMargin: number;
|
|
92
|
+
constructor(calculatedValue: number, minimumRequired: number);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 에러 검증 및 처리 유틸리티
|
|
96
|
+
*/
|
|
97
|
+
export declare class ErrorHandler {
|
|
98
|
+
/**
|
|
99
|
+
* 값이 범위 내에 있는지 검증
|
|
100
|
+
*/
|
|
101
|
+
static validateRange(paramName: string, value: number, minValue?: number, maxValue?: number): void;
|
|
102
|
+
/**
|
|
103
|
+
* 필수 파라미터 검증
|
|
104
|
+
*/
|
|
105
|
+
static validateRequired(params: Record<string, any>, requiredKeys: string[]): void;
|
|
106
|
+
/**
|
|
107
|
+
* 타입 검증
|
|
108
|
+
*/
|
|
109
|
+
static validateType(paramName: string, value: any, expectedType: string): void;
|
|
110
|
+
/**
|
|
111
|
+
* 값이 0이 아닌지 검증 (나눗셈 방지)
|
|
112
|
+
*/
|
|
113
|
+
static validateNonZero(paramName: string, value: number): void;
|
|
114
|
+
/**
|
|
115
|
+
* 배열이 최소 길이 이상인지 검증
|
|
116
|
+
*/
|
|
117
|
+
static validateArrayLength(paramName: string, array: any[], minLength: number): void;
|
|
118
|
+
/**
|
|
119
|
+
* 안전거리 기준 검증
|
|
120
|
+
*/
|
|
121
|
+
static validateSafetyThreshold(calculatedValue: number, minimumRequired: number): void;
|
|
122
|
+
/**
|
|
123
|
+
* 에러를 캐치하고 로깅
|
|
124
|
+
*/
|
|
125
|
+
static catch(error: unknown, fallbackMessage?: string): DRAError;
|
|
126
|
+
/**
|
|
127
|
+
* 에러 정보를 상세히 출력
|
|
128
|
+
*/
|
|
129
|
+
static log(error: DRAError): void;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/core/error.ts"],"names":[],"mappings":"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"}
|