MCPcopy Create free account
hub / github.com/HelloCSV/HelloCSV / validateSheet

Function validateSheet

src/validators/index.ts:77–139  ·  view source on GitHub ↗
(
  sheetDefinition: SheetDefinition,
  sheetData: SheetState,
  allData: SheetState[]
)

Source from the content-addressed store, hash-verified

75}
76
77async function validateSheet(
78 sheetDefinition: SheetDefinition,
79 sheetData: SheetState,
80 allData: SheetState[]
81) {
82 const validationErrors: ImporterValidationError[] = [];
83 const validationPromises: Promise<void>[] = [];
84
85 const validatorsByColumnId = eachWithObject<
86 SheetColumnDefinition,
87 Validator[]
88 >(sheetDefinition.columns, (columnDefinition, obj) => {
89 obj[columnDefinition.id] = [];
90
91 const validatorDefinitions = [
92 ...(columnDefinition.validators ?? []),
93 ...automaticFieldValidators(columnDefinition, allData),
94 ];
95
96 validatorDefinitions.forEach((validatorDefinition) => {
97 obj[columnDefinition.id].push(
98 buildValidatorFromDefinition(validatorDefinition)
99 );
100 });
101 });
102
103 sheetDefinition.columns.forEach((columnDefinition) => {
104 sheetData.rows.forEach((row, rowIndex) => {
105 if (!hasData(row)) {
106 return;
107 }
108
109 if (
110 !(columnDefinition.id in row) &&
111 !fieldIsRequired(columnDefinition, { skipConditionCheck: true })
112 ) {
113 return;
114 }
115
116 const value = row[columnDefinition.id];
117 const validators = validatorsByColumnId[columnDefinition.id];
118
119 validators.forEach((v) => {
120 const promise = Promise.resolve(v.isValid(value, row)).then(
121 (result) => {
122 if (result != null) {
123 validationErrors.push({
124 sheetId: sheetDefinition.id,
125 columnId: columnDefinition.id,
126 rowIndex,
127 message: result,
128 });
129 }
130 }
131 );
132 validationPromises.push(promise);
133 });
134 });

Callers 1

applyValidationsFunction · 0.85

Calls 7

eachWithObjectFunction · 0.90
hasDataFunction · 0.90
automaticFieldValidatorsFunction · 0.85
fieldIsRequiredFunction · 0.85
pushMethod · 0.80
isValidMethod · 0.45

Tested by

no test coverage detected