@forwardslashns/taskit-validation-messages 1.0.25 → 1.0.26
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/.prettierrc +8 -0
- package/README.md +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/validation/validation-message.formatter.d.ts.map +1 -1
- package/dist/validation/validation-message.formatter.js +1 -3
- package/dist/validation/validation-messages.d.ts +80 -0
- package/dist/validation/validation-messages.d.ts.map +1 -1
- package/dist/validation/validation-messages.js +85 -11
- package/package.json +5 -3
- package/src/index.ts +2 -2
- package/src/validation/validation-message.formatter.ts +7 -24
- package/src/validation/validation-messages.ts +87 -12
package/.prettierrc
ADDED
package/README.md
CHANGED
|
@@ -8,4 +8,4 @@ The package exposes validation messages that can be retrieved using specific ali
|
|
|
8
8
|
|
|
9
9
|
# getValidationMessage
|
|
10
10
|
|
|
11
|
-
This mechanism allows for the retrieval and dynamic creation of validation messages by passing their aliases and any required parameters. Parameters are optional and passed as objects, following the structure defined within each validation message itself.
|
|
11
|
+
This mechanism allows for the retrieval and dynamic creation of validation messages by passing their aliases and any required parameters. Parameters are optional and passed as objects, following the structure defined within each validation message itself.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getValidationMessage } from
|
|
2
|
-
import { VALIDATION_MESSAGES } from
|
|
1
|
+
import { getValidationMessage } from './validation/validation-message.formatter';
|
|
2
|
+
import { VALIDATION_MESSAGES } from './validation/validation-messages';
|
|
3
3
|
export { VALIDATION_MESSAGES, getValidationMessage };
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-message.formatter.d.ts","sourceRoot":"","sources":["../../src/validation/validation-message.formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,QAAQ,GAAG,MAAM,OAAO,mBAAmB,CAAC;AACjD,KAAK,SAAS,CAAC,CAAC,SAAS,QAAQ,IAAI,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"validation-message.formatter.d.ts","sourceRoot":"","sources":["../../src/validation/validation-message.formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,QAAQ,GAAG,MAAM,OAAO,mBAAmB,CAAC;AACjD,KAAK,SAAS,CAAC,CAAC,SAAS,QAAQ,IAAI,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IAC/G,MAAM,EAAE,MAAM,CAAC,SAAS,SAAS,MAAM,EAAE,CAAC;CAC3C,GACG,CAAC,GACD,EAAE,CAAC;AACP,KAAK,aAAa,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;CAAE,CAAC;AAM/E,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS,QAAQ,EAAE,gBAAgB,SAAS,SAAS,CAAC,WAAW,CAAC,EAChH,SAAS,WAAW,EACpB,cAAc,gBAAgB,EAC9B,SAAS,aAAa,CAAC,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,KACxE,MA4CF,CAAC"}
|
|
@@ -10,9 +10,7 @@ const getValidationMessage = (feature, featureError, params) => {
|
|
|
10
10
|
const inputParams = params || {};
|
|
11
11
|
const errorSuffix = `for feature: ${String(feature)}, error: ${String(featureError)}`;
|
|
12
12
|
let message = messageConfig.message;
|
|
13
|
-
const expectedParams = messageConfig.params?.length
|
|
14
|
-
? messageConfig.params
|
|
15
|
-
: [];
|
|
13
|
+
const expectedParams = messageConfig.params?.length ? messageConfig.params : [];
|
|
16
14
|
if (!message) {
|
|
17
15
|
throw new Error(`Validation error message is not defined properly in configuration ${errorSuffix}`);
|
|
18
16
|
}
|
|
@@ -243,6 +243,86 @@ export declare const VALIDATION_MESSAGES: {
|
|
|
243
243
|
readonly ALL_NON_LAST_DOMESTIC_STATES_REQUIRE_ENDING_DATE: {
|
|
244
244
|
readonly message: "Only the last domestic state can be open without an end date. Add an ending date to the existing state before adding a start date for a new state.";
|
|
245
245
|
};
|
|
246
|
+
readonly ENTITY_TYPES_IDS_DOES_NOT_EXIST: {
|
|
247
|
+
readonly message: "Entity types with ids '{ids}' do not exist";
|
|
248
|
+
readonly params: readonly ["ids"];
|
|
249
|
+
};
|
|
250
|
+
readonly AT_LEAST_ONE_ENTITY_TYPE_SHOULD_EXIST: {
|
|
251
|
+
readonly message: "At least one entity type should exist";
|
|
252
|
+
};
|
|
253
|
+
readonly ENTITY_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
254
|
+
readonly message: "Entity Type Starting Date cannot be Empty";
|
|
255
|
+
};
|
|
256
|
+
readonly NOT_ALIGNED_ENTITY_TYPES_STARTING_ENDING_DATE: {
|
|
257
|
+
readonly message: "Entity type starting date needs to be before the ending date";
|
|
258
|
+
};
|
|
259
|
+
readonly NOT_ALIGNED_DATE_ESTABLISHED_ENTITY_TYPES_STARTING_DATE: {
|
|
260
|
+
readonly message: "Adjust the start date to be on or after the client's date established, {clientStartDate}.";
|
|
261
|
+
readonly params: readonly ["clientStartDate"];
|
|
262
|
+
};
|
|
263
|
+
readonly NOT_ALIGNED_CLOSE_DATE_ENTITY_TYPES_STARTING_DATE: {
|
|
264
|
+
readonly message: "Adjust the start date to be before the client's close date, {clientCloseDate}.";
|
|
265
|
+
readonly params: readonly ["clientCloseDate"];
|
|
266
|
+
};
|
|
267
|
+
readonly ENTITY_TYPES_DATE_GAP_DETECTED: {
|
|
268
|
+
readonly message: "There is a gap in the timeframes between {currentEntityType}, ending {currentEntityTypeEndDate}, and {nextEntityType}, starting {nextEntityTypeStartDate}. Please adjust the dates to fill this gap.";
|
|
269
|
+
readonly params: readonly ["currentEntityType", "currentEntityTypeEndDate", "nextEntityType", "nextEntityTypeStartDate"];
|
|
270
|
+
};
|
|
271
|
+
readonly ENTITY_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
272
|
+
readonly message: "There are two entries for {entityType} with timeframes that immediately follow each other. {entityType} ending {firstPeriodEnd}, and {entityType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {entityType}. ";
|
|
273
|
+
readonly params: readonly ["entityType", "firstPeriodStart", "firstPeriodEnd", "secondPeriodStart"];
|
|
274
|
+
};
|
|
275
|
+
readonly ENTITY_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
276
|
+
readonly message: "There is a gap between the client's date established ({dateEstablished}) and the start of its first entity type ({earliestEntityType} starting {earliestEntityTypeStartDate}). There must be an entity type that begins on {dateEstablished}.";
|
|
277
|
+
readonly params: readonly ["dateEstablished", "earliestEntityType", "earliestEntityTypeStartDate"];
|
|
278
|
+
};
|
|
279
|
+
readonly ENTITY_TYPES_DATES_OVERLAP: {
|
|
280
|
+
readonly message: "There are multiple entries for {entityType} with overlapping timeframes: {entityType} from {startDate1} to {endDate1}, {entityType} from {startDate2} to {endDate2}. An entity type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {entityType} entries to remove the overlap.";
|
|
281
|
+
readonly params: readonly ["entityType", "startDate1", "endDate1", "startDate2", "endDate2"];
|
|
282
|
+
};
|
|
283
|
+
readonly ALL_NON_LAST_ENTITY_TYPES_REQUIRE_ENDING_DATE: {
|
|
284
|
+
readonly message: "Only the last entity type can be open without an end date. Add an ending date to the existing entity type before adding a start date for a new entity type.";
|
|
285
|
+
};
|
|
286
|
+
readonly FILING_TYPES_IDS_DOES_NOT_EXIST: {
|
|
287
|
+
readonly message: "Filing types with ids '{ids}' do not exist";
|
|
288
|
+
readonly params: readonly ["ids"];
|
|
289
|
+
};
|
|
290
|
+
readonly AT_LEAST_ONE_FILING_TYPE_SHOULD_EXIST: {
|
|
291
|
+
readonly message: "At least one filing type should exist";
|
|
292
|
+
};
|
|
293
|
+
readonly FILING_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
294
|
+
readonly message: "Filing Type Starting Date cannot be Empty";
|
|
295
|
+
};
|
|
296
|
+
readonly NOT_ALIGNED_FILING_TYPES_STARTING_ENDING_DATE: {
|
|
297
|
+
readonly message: "Filing type starting date needs to be before the ending date";
|
|
298
|
+
};
|
|
299
|
+
readonly NOT_ALIGNED_DATE_ESTABLISHED_FILING_TYPES_STARTING_DATE: {
|
|
300
|
+
readonly message: "Adjust the start date to be on or after the client's date established, {clientStartDate}.";
|
|
301
|
+
readonly params: readonly ["clientStartDate"];
|
|
302
|
+
};
|
|
303
|
+
readonly NOT_ALIGNED_CLOSE_DATE_FILING_TYPES_STARTING_DATE: {
|
|
304
|
+
readonly message: "Adjust the start date to be before the client's close date, {clientCloseDate}.";
|
|
305
|
+
readonly params: readonly ["clientCloseDate"];
|
|
306
|
+
};
|
|
307
|
+
readonly FILING_TYPES_DATE_GAP_DETECTED: {
|
|
308
|
+
readonly message: "There is a gap in the timeframes between {currentFilingType}, ending {currentFilingTypeEndDate}, and {nextFilingType}, starting {nextFilingTypeStartDate}. Please adjust the dates to fill this gap.";
|
|
309
|
+
readonly params: readonly ["currentFilingType", "currentFilingTypeEndDate", "nextFilingType", "nextFilingTypeStartDate"];
|
|
310
|
+
};
|
|
311
|
+
readonly FILING_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
312
|
+
readonly message: "There are two entries for {filingType} with timeframes that immediately follow each other. {filingType} ending {firstPeriodEnd}, and {filingType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {filingType}. ";
|
|
313
|
+
readonly params: readonly ["filingType", "firstPeriodStart", "firstPeriodEnd", "secondPeriodStart"];
|
|
314
|
+
};
|
|
315
|
+
readonly FILING_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
316
|
+
readonly message: "There is a gap between the client's date established ({dateEstablished}) and the start of its first filing type ({earliestFilingType} starting {earliestFilingTypeStartDate}). There must be a filing type that begins on {dateEstablished}.";
|
|
317
|
+
readonly params: readonly ["dateEstablished", "earliestFilingType", "earliestFilingTypeStartDate"];
|
|
318
|
+
};
|
|
319
|
+
readonly FILING_TYPES_DATES_OVERLAP: {
|
|
320
|
+
readonly message: "There are multiple entries for {filingType} with overlapping timeframes: {filingType} from {startDate1} to {endDate1}, {filingType} from {startDate2} to {endDate2}. A filing type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {filingType} entries to remove the overlap.";
|
|
321
|
+
readonly params: readonly ["filingType", "startDate1", "endDate1", "startDate2", "endDate2"];
|
|
322
|
+
};
|
|
323
|
+
readonly ALL_NON_LAST_FILING_TYPES_REQUIRE_ENDING_DATE: {
|
|
324
|
+
readonly message: "Only the last filing type can be open without an end date. Add an ending date to the existing filing type before adding a start date for a new filing type.";
|
|
325
|
+
};
|
|
246
326
|
};
|
|
247
327
|
readonly FILING_CATEGORY: {
|
|
248
328
|
readonly INVALID_REQUEST: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-messages.d.ts","sourceRoot":"","sources":["../../src/validation/validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"validation-messages.d.ts","sourceRoot":"","sources":["../../src/validation/validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2atB,CAAC"}
|
|
@@ -114,11 +114,7 @@ exports.VALIDATION_MESSAGES = {
|
|
|
114
114
|
},
|
|
115
115
|
NOT_ALIGNED_DATE_ESTABLISHED_DOMESTIC_STATE_STARTING_DATE: {
|
|
116
116
|
message: `The state, {domesticState}, starts on {domesticStateStartingDate}, which is earlier than the client's date established, {clientDateEstablished}. Please adjust the start date of the state or the client's date established.`,
|
|
117
|
-
params: [
|
|
118
|
-
'clientDateEstablished',
|
|
119
|
-
'domesticState',
|
|
120
|
-
'domesticStateStartingDate',
|
|
121
|
-
],
|
|
117
|
+
params: ['clientDateEstablished', 'domesticState', 'domesticStateStartingDate'],
|
|
122
118
|
},
|
|
123
119
|
NOT_ALIGNED_DATE_ESTABLISHED_CLOSE_DATE: {
|
|
124
120
|
message: `Adjust the close date to be after the date established.`,
|
|
@@ -226,15 +222,11 @@ exports.VALIDATION_MESSAGES = {
|
|
|
226
222
|
},
|
|
227
223
|
NOT_ALIGNED_DATE_ESTABLISHED_STATES_STARTING_DATE: {
|
|
228
224
|
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
229
|
-
params: [
|
|
230
|
-
'clientStartDate',
|
|
231
|
-
],
|
|
225
|
+
params: ['clientStartDate'],
|
|
232
226
|
},
|
|
233
227
|
NOT_ALIGNED_CLOSE_DATE_STATES_STARTING_DATE: {
|
|
234
228
|
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
235
|
-
params: [
|
|
236
|
-
'clientCloseDate',
|
|
237
|
-
],
|
|
229
|
+
params: ['clientCloseDate'],
|
|
238
230
|
},
|
|
239
231
|
DOMESTIC_STATES_DATE_GAP_DETECTED: {
|
|
240
232
|
message: `There is a gap in the timeframes between {currentState}, ending {currentStateEndDate}, and {nextState}, starting {nextStateStartDate}. Please adjust the dates to fill this gap.`,
|
|
@@ -255,6 +247,88 @@ exports.VALIDATION_MESSAGES = {
|
|
|
255
247
|
ALL_NON_LAST_DOMESTIC_STATES_REQUIRE_ENDING_DATE: {
|
|
256
248
|
message: `Only the last domestic state can be open without an end date. Add an ending date to the existing state before adding a start date for a new state.`,
|
|
257
249
|
},
|
|
250
|
+
//UPDATE-ENTITY-TYPES-VALIDATIONS
|
|
251
|
+
ENTITY_TYPES_IDS_DOES_NOT_EXIST: {
|
|
252
|
+
message: `Entity types with ids '{ids}' do not exist`,
|
|
253
|
+
params: ['ids'],
|
|
254
|
+
},
|
|
255
|
+
AT_LEAST_ONE_ENTITY_TYPE_SHOULD_EXIST: {
|
|
256
|
+
message: `At least one entity type should exist`,
|
|
257
|
+
},
|
|
258
|
+
ENTITY_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
259
|
+
message: `Entity Type Starting Date cannot be Empty`,
|
|
260
|
+
},
|
|
261
|
+
NOT_ALIGNED_ENTITY_TYPES_STARTING_ENDING_DATE: {
|
|
262
|
+
message: `Entity type starting date needs to be before the ending date`,
|
|
263
|
+
},
|
|
264
|
+
NOT_ALIGNED_DATE_ESTABLISHED_ENTITY_TYPES_STARTING_DATE: {
|
|
265
|
+
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
266
|
+
params: ['clientStartDate'],
|
|
267
|
+
},
|
|
268
|
+
NOT_ALIGNED_CLOSE_DATE_ENTITY_TYPES_STARTING_DATE: {
|
|
269
|
+
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
270
|
+
params: ['clientCloseDate'],
|
|
271
|
+
},
|
|
272
|
+
ENTITY_TYPES_DATE_GAP_DETECTED: {
|
|
273
|
+
message: `There is a gap in the timeframes between {currentEntityType}, ending {currentEntityTypeEndDate}, and {nextEntityType}, starting {nextEntityTypeStartDate}. Please adjust the dates to fill this gap.`,
|
|
274
|
+
params: ['currentEntityType', 'currentEntityTypeEndDate', 'nextEntityType', 'nextEntityTypeStartDate'],
|
|
275
|
+
},
|
|
276
|
+
ENTITY_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
277
|
+
message: `There are two entries for {entityType} with timeframes that immediately follow each other. {entityType} ending {firstPeriodEnd}, and {entityType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {entityType}. `,
|
|
278
|
+
params: ['entityType', 'firstPeriodStart', 'firstPeriodEnd', 'secondPeriodStart'],
|
|
279
|
+
},
|
|
280
|
+
ENTITY_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
281
|
+
message: `There is a gap between the client's date established ({dateEstablished}) and the start of its first entity type ({earliestEntityType} starting {earliestEntityTypeStartDate}). There must be an entity type that begins on {dateEstablished}.`,
|
|
282
|
+
params: ['dateEstablished', 'earliestEntityType', 'earliestEntityTypeStartDate'],
|
|
283
|
+
},
|
|
284
|
+
ENTITY_TYPES_DATES_OVERLAP: {
|
|
285
|
+
message: `There are multiple entries for {entityType} with overlapping timeframes: {entityType} from {startDate1} to {endDate1}, {entityType} from {startDate2} to {endDate2}. An entity type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {entityType} entries to remove the overlap.`,
|
|
286
|
+
params: ['entityType', 'startDate1', 'endDate1', 'startDate2', 'endDate2'],
|
|
287
|
+
},
|
|
288
|
+
ALL_NON_LAST_ENTITY_TYPES_REQUIRE_ENDING_DATE: {
|
|
289
|
+
message: `Only the last entity type can be open without an end date. Add an ending date to the existing entity type before adding a start date for a new entity type.`,
|
|
290
|
+
},
|
|
291
|
+
//UPDATE-FILING-TYPES-VALIDATIONS
|
|
292
|
+
FILING_TYPES_IDS_DOES_NOT_EXIST: {
|
|
293
|
+
message: `Filing types with ids '{ids}' do not exist`,
|
|
294
|
+
params: ['ids'],
|
|
295
|
+
},
|
|
296
|
+
AT_LEAST_ONE_FILING_TYPE_SHOULD_EXIST: {
|
|
297
|
+
message: `At least one filing type should exist`,
|
|
298
|
+
},
|
|
299
|
+
FILING_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
300
|
+
message: `Filing Type Starting Date cannot be Empty`,
|
|
301
|
+
},
|
|
302
|
+
NOT_ALIGNED_FILING_TYPES_STARTING_ENDING_DATE: {
|
|
303
|
+
message: `Filing type starting date needs to be before the ending date`,
|
|
304
|
+
},
|
|
305
|
+
NOT_ALIGNED_DATE_ESTABLISHED_FILING_TYPES_STARTING_DATE: {
|
|
306
|
+
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
307
|
+
params: ['clientStartDate'],
|
|
308
|
+
},
|
|
309
|
+
NOT_ALIGNED_CLOSE_DATE_FILING_TYPES_STARTING_DATE: {
|
|
310
|
+
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
311
|
+
params: ['clientCloseDate'],
|
|
312
|
+
},
|
|
313
|
+
FILING_TYPES_DATE_GAP_DETECTED: {
|
|
314
|
+
message: `There is a gap in the timeframes between {currentFilingType}, ending {currentFilingTypeEndDate}, and {nextFilingType}, starting {nextFilingTypeStartDate}. Please adjust the dates to fill this gap.`,
|
|
315
|
+
params: ['currentFilingType', 'currentFilingTypeEndDate', 'nextFilingType', 'nextFilingTypeStartDate'],
|
|
316
|
+
},
|
|
317
|
+
FILING_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
318
|
+
message: `There are two entries for {filingType} with timeframes that immediately follow each other. {filingType} ending {firstPeriodEnd}, and {filingType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {filingType}. `,
|
|
319
|
+
params: ['filingType', 'firstPeriodStart', 'firstPeriodEnd', 'secondPeriodStart'],
|
|
320
|
+
},
|
|
321
|
+
FILING_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
322
|
+
message: `There is a gap between the client's date established ({dateEstablished}) and the start of its first filing type ({earliestFilingType} starting {earliestFilingTypeStartDate}). There must be a filing type that begins on {dateEstablished}.`,
|
|
323
|
+
params: ['dateEstablished', 'earliestFilingType', 'earliestFilingTypeStartDate'],
|
|
324
|
+
},
|
|
325
|
+
FILING_TYPES_DATES_OVERLAP: {
|
|
326
|
+
message: `There are multiple entries for {filingType} with overlapping timeframes: {filingType} from {startDate1} to {endDate1}, {filingType} from {startDate2} to {endDate2}. A filing type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {filingType} entries to remove the overlap.`,
|
|
327
|
+
params: ['filingType', 'startDate1', 'endDate1', 'startDate2', 'endDate2'],
|
|
328
|
+
},
|
|
329
|
+
ALL_NON_LAST_FILING_TYPES_REQUIRE_ENDING_DATE: {
|
|
330
|
+
message: `Only the last filing type can be open without an end date. Add an ending date to the existing filing type before adding a start date for a new filing type.`,
|
|
331
|
+
},
|
|
258
332
|
},
|
|
259
333
|
FILING_CATEGORY: {
|
|
260
334
|
INVALID_REQUEST: {
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forwardslashns/taskit-validation-messages",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.26",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "rimraf ./dist && tsc",
|
|
9
|
-
"prepublishOnly": "npm run build"
|
|
9
|
+
"prepublishOnly": "npm run build",
|
|
10
|
+
"format:fix": "prettier --write --ignore-path .gitignore ."
|
|
10
11
|
},
|
|
11
12
|
"engines": {
|
|
12
13
|
"node": ">=22.0.0"
|
|
@@ -20,7 +21,8 @@
|
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@types/node": "^22.9.1",
|
|
22
23
|
"rimraf": "^6.0.1",
|
|
23
|
-
"typescript": "^5.8.2"
|
|
24
|
+
"typescript": "^5.8.2",
|
|
25
|
+
"prettier": "^3.5.3"
|
|
24
26
|
},
|
|
25
27
|
"repository": {
|
|
26
28
|
"type": "git",
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getValidationMessage } from
|
|
2
|
-
import { VALIDATION_MESSAGES } from
|
|
1
|
+
import { getValidationMessage } from './validation/validation-message.formatter';
|
|
2
|
+
import { VALIDATION_MESSAGES } from './validation/validation-messages';
|
|
3
3
|
|
|
4
4
|
export { VALIDATION_MESSAGES, getValidationMessage };
|
|
@@ -2,10 +2,7 @@ import { VALIDATION_MESSAGES } from './validation-messages';
|
|
|
2
2
|
|
|
3
3
|
type Features = keyof typeof VALIDATION_MESSAGES;
|
|
4
4
|
type ErrorType<F extends Features> = keyof (typeof VALIDATION_MESSAGES)[F];
|
|
5
|
-
type ErrorMessageParams<
|
|
6
|
-
F extends Features,
|
|
7
|
-
E extends ErrorType<F>,
|
|
8
|
-
> = (typeof VALIDATION_MESSAGES)[F][E] extends {
|
|
5
|
+
type ErrorMessageParams<F extends Features, E extends ErrorType<F>> = (typeof VALIDATION_MESSAGES)[F][E] extends {
|
|
9
6
|
params: infer P extends readonly string[];
|
|
10
7
|
}
|
|
11
8
|
? P
|
|
@@ -16,17 +13,12 @@ type MessageConfig = {
|
|
|
16
13
|
params?: readonly string[];
|
|
17
14
|
};
|
|
18
15
|
|
|
19
|
-
export const getValidationMessage = <
|
|
20
|
-
FeatureType extends Features,
|
|
21
|
-
FeatureErrorType extends ErrorType<FeatureType>,
|
|
22
|
-
>(
|
|
16
|
+
export const getValidationMessage = <FeatureType extends Features, FeatureErrorType extends ErrorType<FeatureType>>(
|
|
23
17
|
feature: FeatureType,
|
|
24
18
|
featureError: FeatureErrorType,
|
|
25
19
|
params?: MessageParams<ErrorMessageParams<FeatureType, FeatureErrorType>>
|
|
26
20
|
): string => {
|
|
27
|
-
const messageConfig = VALIDATION_MESSAGES[feature][
|
|
28
|
-
featureError
|
|
29
|
-
] as MessageConfig;
|
|
21
|
+
const messageConfig = VALIDATION_MESSAGES[feature][featureError] as MessageConfig;
|
|
30
22
|
|
|
31
23
|
if (!messageConfig) {
|
|
32
24
|
throw new Error(
|
|
@@ -37,20 +29,14 @@ export const getValidationMessage = <
|
|
|
37
29
|
const inputParams = params || {};
|
|
38
30
|
const errorSuffix = `for feature: ${String(feature)}, error: ${String(featureError)}`;
|
|
39
31
|
let message = messageConfig.message;
|
|
40
|
-
const expectedParams = messageConfig.params?.length
|
|
41
|
-
? messageConfig.params
|
|
42
|
-
: [];
|
|
32
|
+
const expectedParams = messageConfig.params?.length ? messageConfig.params : [];
|
|
43
33
|
|
|
44
34
|
if (!message) {
|
|
45
|
-
throw new Error(
|
|
46
|
-
`Validation error message is not defined properly in configuration ${errorSuffix}`
|
|
47
|
-
);
|
|
35
|
+
throw new Error(`Validation error message is not defined properly in configuration ${errorSuffix}`);
|
|
48
36
|
}
|
|
49
37
|
|
|
50
38
|
if (params && !expectedParams.length) {
|
|
51
|
-
throw new Error(
|
|
52
|
-
`Validation error params are not defined properly in configuration ${errorSuffix}`
|
|
53
|
-
);
|
|
39
|
+
throw new Error(`Validation error params are not defined properly in configuration ${errorSuffix}`);
|
|
54
40
|
}
|
|
55
41
|
|
|
56
42
|
expectedParams.forEach((param) => {
|
|
@@ -71,10 +57,7 @@ export const getValidationMessage = <
|
|
|
71
57
|
}
|
|
72
58
|
|
|
73
59
|
expectedParams.forEach((param) => {
|
|
74
|
-
message = message.replaceAll(
|
|
75
|
-
`{${param}}`,
|
|
76
|
-
(inputParams as Record<string, string>)[param]
|
|
77
|
-
);
|
|
60
|
+
message = message.replaceAll(`{${param}}`, (inputParams as Record<string, string>)[param]);
|
|
78
61
|
});
|
|
79
62
|
|
|
80
63
|
return message;
|
|
@@ -111,11 +111,7 @@ export const VALIDATION_MESSAGES = {
|
|
|
111
111
|
},
|
|
112
112
|
NOT_ALIGNED_DATE_ESTABLISHED_DOMESTIC_STATE_STARTING_DATE: {
|
|
113
113
|
message: `The state, {domesticState}, starts on {domesticStateStartingDate}, which is earlier than the client's date established, {clientDateEstablished}. Please adjust the start date of the state or the client's date established.`,
|
|
114
|
-
params: [
|
|
115
|
-
'clientDateEstablished',
|
|
116
|
-
'domesticState',
|
|
117
|
-
'domesticStateStartingDate',
|
|
118
|
-
],
|
|
114
|
+
params: ['clientDateEstablished', 'domesticState', 'domesticStateStartingDate'],
|
|
119
115
|
},
|
|
120
116
|
NOT_ALIGNED_DATE_ESTABLISHED_CLOSE_DATE: {
|
|
121
117
|
message: `Adjust the close date to be after the date established.`,
|
|
@@ -223,15 +219,11 @@ export const VALIDATION_MESSAGES = {
|
|
|
223
219
|
},
|
|
224
220
|
NOT_ALIGNED_DATE_ESTABLISHED_STATES_STARTING_DATE: {
|
|
225
221
|
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
226
|
-
params: [
|
|
227
|
-
'clientStartDate',
|
|
228
|
-
],
|
|
222
|
+
params: ['clientStartDate'],
|
|
229
223
|
},
|
|
230
224
|
NOT_ALIGNED_CLOSE_DATE_STATES_STARTING_DATE: {
|
|
231
225
|
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
232
|
-
params: [
|
|
233
|
-
'clientCloseDate',
|
|
234
|
-
],
|
|
226
|
+
params: ['clientCloseDate'],
|
|
235
227
|
},
|
|
236
228
|
DOMESTIC_STATES_DATE_GAP_DETECTED: {
|
|
237
229
|
message: `There is a gap in the timeframes between {currentState}, ending {currentStateEndDate}, and {nextState}, starting {nextStateStartDate}. Please adjust the dates to fill this gap.`,
|
|
@@ -252,6 +244,90 @@ export const VALIDATION_MESSAGES = {
|
|
|
252
244
|
ALL_NON_LAST_DOMESTIC_STATES_REQUIRE_ENDING_DATE: {
|
|
253
245
|
message: `Only the last domestic state can be open without an end date. Add an ending date to the existing state before adding a start date for a new state.`,
|
|
254
246
|
},
|
|
247
|
+
|
|
248
|
+
//UPDATE-ENTITY-TYPES-VALIDATIONS
|
|
249
|
+
ENTITY_TYPES_IDS_DOES_NOT_EXIST: {
|
|
250
|
+
message: `Entity types with ids '{ids}' do not exist`,
|
|
251
|
+
params: ['ids'],
|
|
252
|
+
},
|
|
253
|
+
AT_LEAST_ONE_ENTITY_TYPE_SHOULD_EXIST: {
|
|
254
|
+
message: `At least one entity type should exist`,
|
|
255
|
+
},
|
|
256
|
+
ENTITY_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
257
|
+
message: `Entity Type Starting Date cannot be Empty`,
|
|
258
|
+
},
|
|
259
|
+
NOT_ALIGNED_ENTITY_TYPES_STARTING_ENDING_DATE: {
|
|
260
|
+
message: `Entity type starting date needs to be before the ending date`,
|
|
261
|
+
},
|
|
262
|
+
NOT_ALIGNED_DATE_ESTABLISHED_ENTITY_TYPES_STARTING_DATE: {
|
|
263
|
+
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
264
|
+
params: ['clientStartDate'],
|
|
265
|
+
},
|
|
266
|
+
NOT_ALIGNED_CLOSE_DATE_ENTITY_TYPES_STARTING_DATE: {
|
|
267
|
+
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
268
|
+
params: ['clientCloseDate'],
|
|
269
|
+
},
|
|
270
|
+
ENTITY_TYPES_DATE_GAP_DETECTED: {
|
|
271
|
+
message: `There is a gap in the timeframes between {currentEntityType}, ending {currentEntityTypeEndDate}, and {nextEntityType}, starting {nextEntityTypeStartDate}. Please adjust the dates to fill this gap.`,
|
|
272
|
+
params: ['currentEntityType', 'currentEntityTypeEndDate', 'nextEntityType', 'nextEntityTypeStartDate'],
|
|
273
|
+
},
|
|
274
|
+
ENTITY_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
275
|
+
message: `There are two entries for {entityType} with timeframes that immediately follow each other. {entityType} ending {firstPeriodEnd}, and {entityType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {entityType}. `,
|
|
276
|
+
params: ['entityType', 'firstPeriodStart', 'firstPeriodEnd', 'secondPeriodStart'],
|
|
277
|
+
},
|
|
278
|
+
ENTITY_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
279
|
+
message: `There is a gap between the client's date established ({dateEstablished}) and the start of its first entity type ({earliestEntityType} starting {earliestEntityTypeStartDate}). There must be an entity type that begins on {dateEstablished}.`,
|
|
280
|
+
params: ['dateEstablished', 'earliestEntityType', 'earliestEntityTypeStartDate'],
|
|
281
|
+
},
|
|
282
|
+
ENTITY_TYPES_DATES_OVERLAP: {
|
|
283
|
+
message: `There are multiple entries for {entityType} with overlapping timeframes: {entityType} from {startDate1} to {endDate1}, {entityType} from {startDate2} to {endDate2}. An entity type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {entityType} entries to remove the overlap.`,
|
|
284
|
+
params: ['entityType', 'startDate1', 'endDate1', 'startDate2', 'endDate2'],
|
|
285
|
+
},
|
|
286
|
+
ALL_NON_LAST_ENTITY_TYPES_REQUIRE_ENDING_DATE: {
|
|
287
|
+
message: `Only the last entity type can be open without an end date. Add an ending date to the existing entity type before adding a start date for a new entity type.`,
|
|
288
|
+
},
|
|
289
|
+
|
|
290
|
+
//UPDATE-FILING-TYPES-VALIDATIONS
|
|
291
|
+
FILING_TYPES_IDS_DOES_NOT_EXIST: {
|
|
292
|
+
message: `Filing types with ids '{ids}' do not exist`,
|
|
293
|
+
params: ['ids'],
|
|
294
|
+
},
|
|
295
|
+
AT_LEAST_ONE_FILING_TYPE_SHOULD_EXIST: {
|
|
296
|
+
message: `At least one filing type should exist`,
|
|
297
|
+
},
|
|
298
|
+
FILING_TYPES_STARTING_DATE_NOT_POPULATED: {
|
|
299
|
+
message: `Filing Type Starting Date cannot be Empty`,
|
|
300
|
+
},
|
|
301
|
+
NOT_ALIGNED_FILING_TYPES_STARTING_ENDING_DATE: {
|
|
302
|
+
message: `Filing type starting date needs to be before the ending date`,
|
|
303
|
+
},
|
|
304
|
+
NOT_ALIGNED_DATE_ESTABLISHED_FILING_TYPES_STARTING_DATE: {
|
|
305
|
+
message: `Adjust the start date to be on or after the client's date established, {clientStartDate}.`,
|
|
306
|
+
params: ['clientStartDate'],
|
|
307
|
+
},
|
|
308
|
+
NOT_ALIGNED_CLOSE_DATE_FILING_TYPES_STARTING_DATE: {
|
|
309
|
+
message: `Adjust the start date to be before the client's close date, {clientCloseDate}.`,
|
|
310
|
+
params: ['clientCloseDate'],
|
|
311
|
+
},
|
|
312
|
+
FILING_TYPES_DATE_GAP_DETECTED: {
|
|
313
|
+
message: `There is a gap in the timeframes between {currentFilingType}, ending {currentFilingTypeEndDate}, and {nextFilingType}, starting {nextFilingTypeStartDate}. Please adjust the dates to fill this gap.`,
|
|
314
|
+
params: ['currentFilingType', 'currentFilingTypeEndDate', 'nextFilingType', 'nextFilingTypeStartDate'],
|
|
315
|
+
},
|
|
316
|
+
FILING_TYPES_CONSECUTIVE_DUPLICATES_DETECTED: {
|
|
317
|
+
message: `There are two entries for {filingType} with timeframes that immediately follow each other. {filingType} ending {firstPeriodEnd}, and {filingType} starting {secondPeriodStart}. Please update one entry to include the entire timeframe for {filingType}. `,
|
|
318
|
+
params: ['filingType', 'firstPeriodStart', 'firstPeriodEnd', 'secondPeriodStart'],
|
|
319
|
+
},
|
|
320
|
+
FILING_TYPE_EARLIEST_AND_DATE_ESTABLISHED_GAP_DETECTED: {
|
|
321
|
+
message: `There is a gap between the client's date established ({dateEstablished}) and the start of its first filing type ({earliestFilingType} starting {earliestFilingTypeStartDate}). There must be a filing type that begins on {dateEstablished}.`,
|
|
322
|
+
params: ['dateEstablished', 'earliestFilingType', 'earliestFilingTypeStartDate'],
|
|
323
|
+
},
|
|
324
|
+
FILING_TYPES_DATES_OVERLAP: {
|
|
325
|
+
message: `There are multiple entries for {filingType} with overlapping timeframes: {filingType} from {startDate1} to {endDate1}, {filingType} from {startDate2} to {endDate2}. A filing type cannot appear more than once with overlapping dates. Please adjust the dates on the new or existing {filingType} entries to remove the overlap.`,
|
|
326
|
+
params: ['filingType', 'startDate1', 'endDate1', 'startDate2', 'endDate2'],
|
|
327
|
+
},
|
|
328
|
+
ALL_NON_LAST_FILING_TYPES_REQUIRE_ENDING_DATE: {
|
|
329
|
+
message: `Only the last filing type can be open without an end date. Add an ending date to the existing filing type before adding a start date for a new filing type.`,
|
|
330
|
+
},
|
|
255
331
|
},
|
|
256
332
|
FILING_CATEGORY: {
|
|
257
333
|
INVALID_REQUEST: {
|
|
@@ -319,7 +395,6 @@ export const VALIDATION_MESSAGES = {
|
|
|
319
395
|
message: `Reset password link is no longer valid. Please use the most recent one.`,
|
|
320
396
|
},
|
|
321
397
|
},
|
|
322
|
-
|
|
323
398
|
//BACKEND ONLY VALIDATION FEATURES
|
|
324
399
|
DATA_FILTER: {
|
|
325
400
|
MISSING_PAGE_SIZE: {
|