@cristianmpx/react-import-sheet-headless 1.0.0

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.
Files changed (41) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +148 -0
  3. package/dist/chunk-3O6T2NOG.js +2 -0
  4. package/dist/chunk-3O6T2NOG.js.map +1 -0
  5. package/dist/chunk-77DDFTT3.js +2 -0
  6. package/dist/chunk-77DDFTT3.js.map +1 -0
  7. package/dist/chunk-BCDDC5UG.js +2 -0
  8. package/dist/chunk-BCDDC5UG.js.map +1 -0
  9. package/dist/chunk-J2IHY56K.js +2 -0
  10. package/dist/chunk-J2IHY56K.js.map +1 -0
  11. package/dist/chunk-UCBBDF6X.js +2 -0
  12. package/dist/chunk-UCBBDF6X.js.map +1 -0
  13. package/dist/chunk-WLNB3X2R.js +2 -0
  14. package/dist/chunk-WLNB3X2R.js.map +1 -0
  15. package/dist/chunk-XTSACACJ.js +2 -0
  16. package/dist/chunk-XTSACACJ.js.map +1 -0
  17. package/dist/chunk-YETPLYYC.js +2 -0
  18. package/dist/chunk-YETPLYYC.js.map +1 -0
  19. package/dist/csv-parser-3IGEDABE.js +2 -0
  20. package/dist/csv-parser-3IGEDABE.js.map +1 -0
  21. package/dist/csv-parser-ML7A4LF4.js +2 -0
  22. package/dist/csv-parser-ML7A4LF4.js.map +1 -0
  23. package/dist/edit.worker.d.ts +5 -0
  24. package/dist/edit.worker.js +2 -0
  25. package/dist/edit.worker.js.map +1 -0
  26. package/dist/index.d.ts +403 -0
  27. package/dist/index.js +5 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/parser.worker.d.ts +2 -0
  30. package/dist/parser.worker.js +2 -0
  31. package/dist/parser.worker.js.map +1 -0
  32. package/dist/sanitizer.worker.d.ts +2 -0
  33. package/dist/sanitizer.worker.js +2 -0
  34. package/dist/sanitizer.worker.js.map +1 -0
  35. package/dist/transform.worker.d.ts +5 -0
  36. package/dist/transform.worker.js +2 -0
  37. package/dist/transform.worker.js.map +1 -0
  38. package/dist/validator.worker.d.ts +5 -0
  39. package/dist/validator.worker.js +2 -0
  40. package/dist/validator.worker.js.map +1 -0
  41. package/package.json +86 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/controller/required/cell-required-validator.ts","../src/utils/controller/string/cell-string-byregex-validator.ts","../src/utils/controller/string/cell-string-max-length-validator.ts","../src/utils/controller/string/cell-string-min-length-validator.ts","../src/utils/controller/string/cell-string-email-validator.ts","../src/utils/controller/string/cell-string-phone-validator.ts","../src/utils/controller/string/cell-string-phone-international-validator.ts","../src/utils/controller/string/cell-string-phone-local-validator.ts","../src/utils/controller/string/cell-string-only-numbers-validator.ts","../src/utils/controller/string/cell-string-only-letters-validator.ts","../src/utils/controller/number/cell-number-min-validator.ts","../src/utils/controller/number/cell-number-max-validator.ts","../src/utils/controller/number/cell-number-float-validator.ts","../src/utils/controller/number/cell-number-integer-validator.ts","../src/utils/controller/number/cell-number-non-negative-validator.ts","../src/utils/controller/number/cell-number-non-positive-validator.ts","../src/utils/controller/number/cell-number-non-zero-validator.ts","../src/utils/controller/date/cell-date-min-validator.ts","../src/utils/controller/date/cell-date-max-validator.ts","../src/utils/controller/date/cell-date-only-year-validator.ts","../src/utils/controller/date/cell-date-only-time-validator.ts","../src/utils/controller/date/cell-date-datetime-validator.ts","../src/utils/controller/date/cell-date-timestamp-validator.ts","../src/utils/controller/date/cell-date-utc-validator.ts","../src/utils/controller/bool/cell-bool-only-true-validator.ts","../src/utils/controller/bool/cell-bool-only-false-validator.ts","../src/core/validator/worker/worker-registry.ts","../src/core/validator/runner/resolve-validator-ref.ts","../src/core/validator/runner/cell-validators.ts","../src/core/validator/runner/row-validators.ts","../src/core/validator/runner/run-table-validation.ts"],"sourcesContent":["import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const REQUIRED_VALIDATOR_ID = 'required';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>,\n) => readonly SheetError[] | null;\n\nexport function cellRequiredValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>,\n): readonly SheetError[] | null {\n const isEmpty =\n value === null ||\n value === undefined ||\n (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n return [{ code: 'REQUIRED', level: 'error', params: { value } }];\n }\n return null;\n}\n\nexport function registerRequiredValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void,\n): void {\n register(REQUIRED_VALIDATOR_ID, cellRequiredValidator, { type: 'cell' });\n}\n\nexport const CellRequiredValidator = {\n id: REQUIRED_VALIDATOR_ID,\n validate: cellRequiredValidator,\n Register(registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void): string {\n if (registerFn) registerRequiredValidator(registerFn);\n return REQUIRED_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_BYREGEX_VALIDATOR_ID = 'string:byregex';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { pattern?: string; flags?: string };\n\nexport function cellStringByregexValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { pattern = '', flags = '' } = (params ?? {}) as Params;\n if (!pattern) {\n return [\n {\n code: 'STRING_BYREGEX_INVALID_PARAMS',\n level: 'error',\n params: { reason: 'missing pattern' },\n },\n ];\n }\n const s = value === null || value === undefined ? '' : String(value);\n try {\n const re = new RegExp(pattern, flags);\n if (!re.test(s)) {\n return [{ code: 'STRING_BYREGEX_MISMATCH', level: 'error', params: { value: s, pattern } }];\n }\n } catch {\n return [{ code: 'STRING_BYREGEX_INVALID_PATTERN', level: 'error', params: { pattern } }];\n }\n return null;\n}\n\nexport function registerStringByregexValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_BYREGEX_VALIDATOR_ID, cellStringByregexValidator, { type: 'cell' });\n}\n\nexport const CellStringByregexValidator = {\n id: STRING_BYREGEX_VALIDATOR_ID,\n validate: cellStringByregexValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringByregexValidator(registerFn);\n return STRING_BYREGEX_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_MAX_LENGTH_VALIDATOR_ID = 'string:maxLength';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { maxLength?: number };\n\nexport function cellStringMaxLengthValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { maxLength } = (params ?? {}) as Params;\n const max = typeof maxLength === 'number' && Number.isFinite(maxLength) ? maxLength : undefined;\n if (max === undefined || max < 0) {\n return [{ code: 'STRING_MAX_LENGTH_INVALID_PARAMS', level: 'error', params: { maxLength } }];\n }\n const s = value === null || value === undefined ? '' : String(value);\n if (s.length > max) {\n return [\n {\n code: 'STRING_MAX_LENGTH',\n level: 'error',\n params: { value: s, maxLength: max, length: s.length },\n },\n ];\n }\n return null;\n}\n\nexport function registerStringMaxLengthValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_MAX_LENGTH_VALIDATOR_ID, cellStringMaxLengthValidator, { type: 'cell' });\n}\n\nexport const CellStringMaxLengthValidator = {\n id: STRING_MAX_LENGTH_VALIDATOR_ID,\n validate: cellStringMaxLengthValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringMaxLengthValidator(registerFn);\n return STRING_MAX_LENGTH_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_MIN_LENGTH_VALIDATOR_ID = 'string:minLength';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { minLength?: number };\n\nexport function cellStringMinLengthValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { minLength } = (params ?? {}) as Params;\n const min =\n typeof minLength === 'number' && Number.isFinite(minLength) && minLength >= 0\n ? minLength\n : undefined;\n if (min === undefined) {\n return [{ code: 'STRING_MIN_LENGTH_INVALID_PARAMS', level: 'error', params: { minLength } }];\n }\n const s = value === null || value === undefined ? '' : String(value);\n if (s.length < min) {\n return [\n {\n code: 'STRING_MIN_LENGTH',\n level: 'error',\n params: { value: s, minLength: min, length: s.length },\n },\n ];\n }\n return null;\n}\n\nexport function registerStringMinLengthValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_MIN_LENGTH_VALIDATOR_ID, cellStringMinLengthValidator, { type: 'cell' });\n}\n\nexport const CellStringMinLengthValidator = {\n id: STRING_MIN_LENGTH_VALIDATOR_ID,\n validate: cellStringMinLengthValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringMinLengthValidator(registerFn);\n return STRING_MIN_LENGTH_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_EMAIL_VALIDATOR_ID = 'string:email';\n\nconst EMAIL_REGEX =\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringEmailValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const s = value === null || value === undefined ? '' : String(value).trim();\n if (!s) return null;\n if (!EMAIL_REGEX.test(s)) {\n return [{ code: 'STRING_EMAIL_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerStringEmailValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_EMAIL_VALIDATOR_ID, cellStringEmailValidator, { type: 'cell' });\n}\n\nexport const CellStringEmailValidator = {\n id: STRING_EMAIL_VALIDATOR_ID,\n validate: cellStringEmailValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringEmailValidator(registerFn);\n return STRING_EMAIL_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_PHONE_VALIDATOR_ID = 'string:phone';\n\nconst PHONE_REGEX = /^[\\d\\s\\-+.()]{7,20}$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringPhoneValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const s = value === null || value === undefined ? '' : String(value).trim();\n if (!s) return null;\n const digitsOnly = s.replace(/\\D/g, '');\n if (digitsOnly.length < 7 || digitsOnly.length > 15 || !PHONE_REGEX.test(s)) {\n return [{ code: 'STRING_PHONE_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerStringPhoneValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_PHONE_VALIDATOR_ID, cellStringPhoneValidator, { type: 'cell' });\n}\n\nexport const CellStringPhoneValidator = {\n id: STRING_PHONE_VALIDATOR_ID,\n validate: cellStringPhoneValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringPhoneValidator(registerFn);\n return STRING_PHONE_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_PHONE_INTERNATIONAL_VALIDATOR_ID = 'string:phoneInternational';\n\nconst E164_PREFIX = /^\\+?[1-9]\\d{0,3}/;\nconst MIN_DIGITS = 10;\nconst MAX_DIGITS = 15;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringPhoneInternationalValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const s = value === null || value === undefined ? '' : String(value).trim().replace(/\\s/g, '');\n if (!s) return null;\n const digits = s.replace(/\\D/g, '');\n const withPlus = s.startsWith('+') ? s : `+${s}`;\n if (digits.length < MIN_DIGITS || digits.length > MAX_DIGITS || !E164_PREFIX.test(withPlus)) {\n return [{ code: 'STRING_PHONE_INTERNATIONAL_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerStringPhoneInternationalValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_PHONE_INTERNATIONAL_VALIDATOR_ID, cellStringPhoneInternationalValidator, {\n type: 'cell',\n });\n}\n\nexport const CellStringPhoneInternationalValidator = {\n id: STRING_PHONE_INTERNATIONAL_VALIDATOR_ID,\n validate: cellStringPhoneInternationalValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringPhoneInternationalValidator(registerFn);\n return STRING_PHONE_INTERNATIONAL_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_PHONE_LOCAL_VALIDATOR_ID = 'string:phoneLocal';\n\ntype Params = { minDigits?: number; maxDigits?: number };\n\nconst DEFAULT_MIN = 6;\nconst DEFAULT_MAX = 11;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringPhoneLocalValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { minDigits = DEFAULT_MIN, maxDigits = DEFAULT_MAX } = (params ?? {}) as Params;\n const min = typeof minDigits === 'number' && minDigits >= 0 ? minDigits : DEFAULT_MIN;\n const max = typeof maxDigits === 'number' && maxDigits >= min ? maxDigits : DEFAULT_MAX;\n const s = value === null || value === undefined ? '' : String(value).trim();\n if (!s) return null;\n const digits = s.replace(/\\D/g, '');\n if (s.startsWith('+') && digits.length > 3) {\n return [\n {\n code: 'STRING_PHONE_LOCAL_INVALID',\n level: 'error',\n params: { value: s, reason: 'international' },\n },\n ];\n }\n if (digits.length < min || digits.length > max) {\n return [\n {\n code: 'STRING_PHONE_LOCAL_INVALID',\n level: 'error',\n params: { value: s, minDigits: min, maxDigits: max },\n },\n ];\n }\n return null;\n}\n\nexport function registerStringPhoneLocalValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_PHONE_LOCAL_VALIDATOR_ID, cellStringPhoneLocalValidator, { type: 'cell' });\n}\n\nexport const CellStringPhoneLocalValidator = {\n id: STRING_PHONE_LOCAL_VALIDATOR_ID,\n validate: cellStringPhoneLocalValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringPhoneLocalValidator(registerFn);\n return STRING_PHONE_LOCAL_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_ONLY_NUMBERS_VALIDATOR_ID = 'string:onlyNumbers';\n\nconst ONLY_DIGITS = /^\\d+$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringOnlyNumbersValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n if (!ONLY_DIGITS.test(s)) {\n return [{ code: 'STRING_ONLY_NUMBERS_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerStringOnlyNumbersValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_ONLY_NUMBERS_VALIDATOR_ID, cellStringOnlyNumbersValidator, { type: 'cell' });\n}\n\nexport const CellStringOnlyNumbersValidator = {\n id: STRING_ONLY_NUMBERS_VALIDATOR_ID,\n validate: cellStringOnlyNumbersValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringOnlyNumbersValidator(registerFn);\n return STRING_ONLY_NUMBERS_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const STRING_ONLY_LETTERS_VALIDATOR_ID = 'string:onlyLetters';\n\ntype Params = { allowSpaces?: boolean };\n\nconst ONLY_LETTERS = /^[a-zA-Z\\u00C0-\\u024F\\u1E00-\\u1EFF]+$/;\nconst ONLY_LETTERS_AND_SPACES = /^[a-zA-Z\\u00C0-\\u024F\\u1E00-\\u1EFF\\s]+$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellStringOnlyLettersValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { allowSpaces = false } = (params ?? {}) as Params;\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n const re = allowSpaces ? ONLY_LETTERS_AND_SPACES : ONLY_LETTERS;\n if (!re.test(s)) {\n return [{ code: 'STRING_ONLY_LETTERS_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerStringOnlyLettersValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(STRING_ONLY_LETTERS_VALIDATOR_ID, cellStringOnlyLettersValidator, { type: 'cell' });\n}\n\nexport const CellStringOnlyLettersValidator = {\n id: STRING_ONLY_LETTERS_VALIDATOR_ID,\n validate: cellStringOnlyLettersValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerStringOnlyLettersValidator(registerFn);\n return STRING_ONLY_LETTERS_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_MIN_VALIDATOR_ID = 'number:min';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { min?: number };\n\nfunction toNumber(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function cellNumberMinValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { min } = (params ?? {}) as Params;\n const minVal = typeof min === 'number' && Number.isFinite(min) ? min : undefined;\n if (minVal === undefined) {\n return [{ code: 'NUMBER_MIN_INVALID_PARAMS', level: 'error', params: { min } }];\n }\n const n = toNumber(value);\n if (n === null) return [{ code: 'NUMBER_MIN_NOT_A_NUMBER', level: 'error', params: { value } }];\n if (n < minVal) {\n return [{ code: 'NUMBER_MIN', level: 'error', params: { value: n, min: minVal } }];\n }\n return null;\n}\n\nexport function registerNumberMinValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_MIN_VALIDATOR_ID, cellNumberMinValidator, { type: 'cell' });\n}\n\nexport const CellNumberMinValidator = {\n id: NUMBER_MIN_VALIDATOR_ID,\n validate: cellNumberMinValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberMinValidator(registerFn);\n return NUMBER_MIN_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_MAX_VALIDATOR_ID = 'number:max';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { max?: number };\n\nfunction toNumber(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function cellNumberMaxValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { max } = (params ?? {}) as Params;\n const maxVal = typeof max === 'number' && Number.isFinite(max) ? max : undefined;\n if (maxVal === undefined) {\n return [{ code: 'NUMBER_MAX_INVALID_PARAMS', level: 'error', params: { max } }];\n }\n const n = toNumber(value);\n if (n === null) return [{ code: 'NUMBER_MAX_NOT_A_NUMBER', level: 'error', params: { value } }];\n if (n > maxVal) {\n return [{ code: 'NUMBER_MAX', level: 'error', params: { value: n, max: maxVal } }];\n }\n return null;\n}\n\nexport function registerNumberMaxValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_MAX_VALIDATOR_ID, cellNumberMaxValidator, { type: 'cell' });\n}\n\nexport const CellNumberMaxValidator = {\n id: NUMBER_MAX_VALIDATOR_ID,\n validate: cellNumberMaxValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberMaxValidator(registerFn);\n return NUMBER_MAX_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_FLOAT_VALIDATOR_ID = 'number:float';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nfunction isFiniteFloat(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'number') return Number.isFinite(value);\n const s = String(value).trim();\n if (!s) return false;\n const n = parseFloat(s);\n return Number.isFinite(n);\n}\n\nexport function cellNumberFloatValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n if (!isFiniteFloat(value)) {\n return [{ code: 'NUMBER_FLOAT_INVALID', level: 'error', params: { value } }];\n }\n return null;\n}\n\nexport function registerNumberFloatValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_FLOAT_VALIDATOR_ID, cellNumberFloatValidator, { type: 'cell' });\n}\n\nexport const CellNumberFloatValidator = {\n id: NUMBER_FLOAT_VALIDATOR_ID,\n validate: cellNumberFloatValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberFloatValidator(registerFn);\n return NUMBER_FLOAT_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_INTEGER_VALIDATOR_ID = 'number:integer';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nfunction toInteger(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value) && Number.isInteger(value)) return value;\n const n = Number(value);\n if (!Number.isFinite(n)) return null;\n return Number.isInteger(n) ? n : null;\n}\n\nexport function cellNumberIntegerValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n const n = toInteger(value);\n if (n === null) {\n return [{ code: 'NUMBER_INTEGER_INVALID', level: 'error', params: { value } }];\n }\n return null;\n}\n\nexport function registerNumberIntegerValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_INTEGER_VALIDATOR_ID, cellNumberIntegerValidator, { type: 'cell' });\n}\n\nexport const CellNumberIntegerValidator = {\n id: NUMBER_INTEGER_VALIDATOR_ID,\n validate: cellNumberIntegerValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberIntegerValidator(registerFn);\n return NUMBER_INTEGER_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_NON_NEGATIVE_VALIDATOR_ID = 'number:nonNegative';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nfunction toNumber(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function cellNumberNonNegativeValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n const n = toNumber(value);\n if (n === null)\n return [{ code: 'NUMBER_NON_NEGATIVE_NOT_A_NUMBER', level: 'error', params: { value } }];\n if (n < 0) return [{ code: 'NUMBER_NON_NEGATIVE', level: 'error', params: { value: n } }];\n return null;\n}\n\nexport function registerNumberNonNegativeValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_NON_NEGATIVE_VALIDATOR_ID, cellNumberNonNegativeValidator, { type: 'cell' });\n}\n\nexport const CellNumberNonNegativeValidator = {\n id: NUMBER_NON_NEGATIVE_VALIDATOR_ID,\n validate: cellNumberNonNegativeValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberNonNegativeValidator(registerFn);\n return NUMBER_NON_NEGATIVE_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_NON_POSITIVE_VALIDATOR_ID = 'number:nonPositive';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nfunction toNumber(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function cellNumberNonPositiveValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n const n = toNumber(value);\n if (n === null)\n return [{ code: 'NUMBER_NON_POSITIVE_NOT_A_NUMBER', level: 'error', params: { value } }];\n if (n > 0) return [{ code: 'NUMBER_NON_POSITIVE', level: 'error', params: { value: n } }];\n return null;\n}\n\nexport function registerNumberNonPositiveValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_NON_POSITIVE_VALIDATOR_ID, cellNumberNonPositiveValidator, { type: 'cell' });\n}\n\nexport const CellNumberNonPositiveValidator = {\n id: NUMBER_NON_POSITIVE_VALIDATOR_ID,\n validate: cellNumberNonPositiveValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberNonPositiveValidator(registerFn);\n return NUMBER_NON_POSITIVE_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const NUMBER_NON_ZERO_VALIDATOR_ID = 'number:nonZero';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nfunction toNumber(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nexport function cellNumberNonZeroValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n const n = toNumber(value);\n if (n === null)\n return [{ code: 'NUMBER_NON_ZERO_NOT_A_NUMBER', level: 'error', params: { value } }];\n if (n === 0) return [{ code: 'NUMBER_NON_ZERO', level: 'error', params: { value: n } }];\n return null;\n}\n\nexport function registerNumberNonZeroValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(NUMBER_NON_ZERO_VALIDATOR_ID, cellNumberNonZeroValidator, { type: 'cell' });\n}\n\nexport const CellNumberNonZeroValidator = {\n id: NUMBER_NON_ZERO_VALIDATOR_ID,\n validate: cellNumberNonZeroValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerNumberNonZeroValidator(registerFn);\n return NUMBER_NON_ZERO_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_MIN_VALIDATOR_ID = 'date:min';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { min?: string | number };\n\nfunction toTime(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value.getTime();\n const ms = Date.parse(String(value).trim());\n return Number.isNaN(ms) ? null : ms;\n}\n\nexport function cellDateMinValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { min } = (params ?? {}) as Params;\n const minMs = min !== undefined ? toTime(min) : undefined;\n if (minMs === undefined || minMs === null) {\n return [{ code: 'DATE_MIN_INVALID_PARAMS', level: 'error', params: { min } }];\n }\n const v = toTime(value);\n if (v === null) return [{ code: 'DATE_MIN_NOT_A_DATE', level: 'error', params: { value } }];\n if (v < minMs) return [{ code: 'DATE_MIN', level: 'error', params: { value: v, min: minMs } }];\n return null;\n}\n\nexport function registerDateMinValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_MIN_VALIDATOR_ID, cellDateMinValidator, { type: 'cell' });\n}\n\nexport const CellDateMinValidator = {\n id: DATE_MIN_VALIDATOR_ID,\n validate: cellDateMinValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateMinValidator(registerFn);\n return DATE_MIN_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_MAX_VALIDATOR_ID = 'date:max';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype Params = { max?: string | number };\n\nfunction toTime(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value.getTime();\n const ms = Date.parse(String(value).trim());\n return Number.isNaN(ms) ? null : ms;\n}\n\nexport function cellDateMaxValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n const { max } = (params ?? {}) as Params;\n const maxMs = max !== undefined ? toTime(max) : undefined;\n if (maxMs === undefined || maxMs === null) {\n return [{ code: 'DATE_MAX_INVALID_PARAMS', level: 'error', params: { max } }];\n }\n const v = toTime(value);\n if (v === null) return [{ code: 'DATE_MAX_NOT_A_DATE', level: 'error', params: { value } }];\n if (v > maxMs) return [{ code: 'DATE_MAX', level: 'error', params: { value: v, max: maxMs } }];\n return null;\n}\n\nexport function registerDateMaxValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_MAX_VALIDATOR_ID, cellDateMaxValidator, { type: 'cell' });\n}\n\nexport const CellDateMaxValidator = {\n id: DATE_MAX_VALIDATOR_ID,\n validate: cellDateMaxValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateMaxValidator(registerFn);\n return DATE_MAX_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_ONLY_YEAR_VALIDATOR_ID = 'date:onlyYear';\n\nconst YEAR_REGEX = /^(?:19|20)\\d{2}$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellDateOnlyYearValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n const n = Number(s);\n const strMatch = YEAR_REGEX.test(s);\n const numMatch = Number.isInteger(n) && n >= 1900 && n <= 2099;\n if (!strMatch && !numMatch) {\n return [{ code: 'DATE_ONLY_YEAR_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerDateOnlyYearValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_ONLY_YEAR_VALIDATOR_ID, cellDateOnlyYearValidator, { type: 'cell' });\n}\n\nexport const CellDateOnlyYearValidator = {\n id: DATE_ONLY_YEAR_VALIDATOR_ID,\n validate: cellDateOnlyYearValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateOnlyYearValidator(registerFn);\n return DATE_ONLY_YEAR_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_ONLY_TIME_VALIDATOR_ID = 'date:onlyTime';\n\nconst TIME_REGEX = /^([01]?\\d|2[0-3]):([0-5]\\d)(?::([0-5]\\d))?(?:\\.\\d+)?$/;\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellDateOnlyTimeValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n if (!TIME_REGEX.test(s)) {\n return [{ code: 'DATE_ONLY_TIME_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerDateOnlyTimeValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_ONLY_TIME_VALIDATOR_ID, cellDateOnlyTimeValidator, { type: 'cell' });\n}\n\nexport const CellDateOnlyTimeValidator = {\n id: DATE_ONLY_TIME_VALIDATOR_ID,\n validate: cellDateOnlyTimeValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateOnlyTimeValidator(registerFn);\n return DATE_ONLY_TIME_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_DATETIME_VALIDATOR_ID = 'date:datetime';\n\nfunction toTime(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value.getTime();\n const ms = Date.parse(String(value).trim());\n return Number.isNaN(ms) ? null : ms;\n}\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellDateDatetimeValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n const ms = toTime(value);\n if (ms === null) {\n return [{ code: 'DATE_DATETIME_INVALID', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerDateDatetimeValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_DATETIME_VALIDATOR_ID, cellDateDatetimeValidator, { type: 'cell' });\n}\n\nexport const CellDateDatetimeValidator = {\n id: DATE_DATETIME_VALIDATOR_ID,\n validate: cellDateDatetimeValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateDatetimeValidator(registerFn);\n return DATE_DATETIME_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_TIMESTAMP_VALIDATOR_ID = 'date:timestamp';\n\nconst MAX_MS = 8640000000000;\nconst MIN_MS = -8640000000000;\n\nfunction toTimestamp(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value.getTime();\n const s = String(value).trim();\n if (/^\\d+$/.test(s)) {\n const n = Number(s);\n return Number.isFinite(n) ? n : null;\n }\n const ms = Date.parse(s);\n return Number.isNaN(ms) ? null : ms;\n}\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellDateTimestampValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n const ms = toTimestamp(value);\n if (ms === null) {\n return [{ code: 'DATE_TIMESTAMP_INVALID', level: 'error', params: { value: s } }];\n }\n if (ms < MIN_MS || ms > MAX_MS) {\n return [{ code: 'DATE_TIMESTAMP_OUT_OF_RANGE', level: 'error', params: { value: ms } }];\n }\n return null;\n}\n\nexport function registerDateTimestampValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_TIMESTAMP_VALIDATOR_ID, cellDateTimestampValidator, { type: 'cell' });\n}\n\nexport const CellDateTimestampValidator = {\n id: DATE_TIMESTAMP_VALIDATOR_ID,\n validate: cellDateTimestampValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateTimestampValidator(registerFn);\n return DATE_TIMESTAMP_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const DATE_UTC_VALIDATOR_ID = 'date:utc';\n\nfunction toTime(value: unknown): number | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value.getTime();\n const ms = Date.parse(String(value).trim());\n return Number.isNaN(ms) ? null : ms;\n}\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellDateUtcValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined) return null;\n const s = String(value).trim();\n if (!s) return null;\n const ms = toTime(value);\n if (ms === null) {\n return [{ code: 'DATE_UTC_NOT_A_DATE', level: 'error', params: { value: s } }];\n }\n const isUtc =\n typeof value === 'number' || s.endsWith('Z') || /[+-]00:00$/.test(s) || /^\\d+$/.test(s);\n if (!isUtc) {\n return [{ code: 'DATE_UTC_REQUIRED', level: 'error', params: { value: s } }];\n }\n return null;\n}\n\nexport function registerDateUtcValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(DATE_UTC_VALIDATOR_ID, cellDateUtcValidator, { type: 'cell' });\n}\n\nexport const CellDateUtcValidator = {\n id: DATE_UTC_VALIDATOR_ID,\n validate: cellDateUtcValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerDateUtcValidator(registerFn);\n return DATE_UTC_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const BOOL_ONLY_TRUE_VALIDATOR_ID = 'bool:onlyTrue';\n\nfunction isTrue(value: unknown): boolean {\n if (value === true) return true;\n if (typeof value === 'string') {\n const t = value.trim().toLowerCase();\n return t === 'true' || t === '1' || t === 'yes';\n }\n return value === 1;\n}\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellBoolOnlyTrueValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n if (!isTrue(value)) {\n return [{ code: 'BOOL_ONLY_TRUE', level: 'error', params: { value } }];\n }\n return null;\n}\n\nexport function registerBoolOnlyTrueValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(BOOL_ONLY_TRUE_VALIDATOR_ID, cellBoolOnlyTrueValidator, { type: 'cell' });\n}\n\nexport const CellBoolOnlyTrueValidator = {\n id: BOOL_ONLY_TRUE_VALIDATOR_ID,\n validate: cellBoolOnlyTrueValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerBoolOnlyTrueValidator(registerFn);\n return BOOL_ONLY_TRUE_VALIDATOR_ID;\n },\n};\n","import type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../../core/sanitizer/types/sanitized-sheet.js';\n\nexport const BOOL_ONLY_FALSE_VALIDATOR_ID = 'bool:onlyFalse';\n\nfunction isFalse(value: unknown): boolean {\n if (value === false) return true;\n if (typeof value === 'string') {\n const t = value.trim().toLowerCase();\n return t === 'false' || t === '0' || t === 'no';\n }\n return value === 0;\n}\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\nexport function cellBoolOnlyFalseValidator(\n value: unknown,\n _row: SanitizedSheetRow,\n _params?: Readonly<Record<string, unknown>>\n): readonly SheetError[] | null {\n if (value === null || value === undefined || value === '') return null;\n if (!isFalse(value)) {\n return [{ code: 'BOOL_ONLY_FALSE', level: 'error', params: { value } }];\n }\n return null;\n}\n\nexport function registerBoolOnlyFalseValidator(\n register: (name: string, fn: CellValidatorFn, options: { type: 'cell' }) => void\n): void {\n register(BOOL_ONLY_FALSE_VALIDATOR_ID, cellBoolOnlyFalseValidator, { type: 'cell' });\n}\n\nexport const CellBoolOnlyFalseValidator = {\n id: BOOL_ONLY_FALSE_VALIDATOR_ID,\n validate: cellBoolOnlyFalseValidator,\n Register(\n registerFn?: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n ): string {\n if (registerFn) registerBoolOnlyFalseValidator(registerFn);\n return BOOL_ONLY_FALSE_VALIDATOR_ID;\n },\n};\n","import { Registry } from '../../../shared/registry/index.js';\nimport { registerRequiredValidator } from '../../../utils/controller/required/cell-required-validator.js';\nimport { registerStringByregexValidator } from '../../../utils/controller/string/cell-string-byregex-validator.js';\nimport { registerStringMaxLengthValidator } from '../../../utils/controller/string/cell-string-max-length-validator.js';\nimport { registerStringMinLengthValidator } from '../../../utils/controller/string/cell-string-min-length-validator.js';\nimport { registerStringEmailValidator } from '../../../utils/controller/string/cell-string-email-validator.js';\nimport { registerStringPhoneValidator } from '../../../utils/controller/string/cell-string-phone-validator.js';\nimport { registerStringPhoneInternationalValidator } from '../../../utils/controller/string/cell-string-phone-international-validator.js';\nimport { registerStringPhoneLocalValidator } from '../../../utils/controller/string/cell-string-phone-local-validator.js';\nimport { registerStringOnlyNumbersValidator } from '../../../utils/controller/string/cell-string-only-numbers-validator.js';\nimport { registerStringOnlyLettersValidator } from '../../../utils/controller/string/cell-string-only-letters-validator.js';\nimport { registerNumberMinValidator } from '../../../utils/controller/number/cell-number-min-validator.js';\nimport { registerNumberMaxValidator } from '../../../utils/controller/number/cell-number-max-validator.js';\nimport { registerNumberFloatValidator } from '../../../utils/controller/number/cell-number-float-validator.js';\nimport { registerNumberIntegerValidator } from '../../../utils/controller/number/cell-number-integer-validator.js';\nimport { registerNumberNonNegativeValidator } from '../../../utils/controller/number/cell-number-non-negative-validator.js';\nimport { registerNumberNonPositiveValidator } from '../../../utils/controller/number/cell-number-non-positive-validator.js';\nimport { registerNumberNonZeroValidator } from '../../../utils/controller/number/cell-number-non-zero-validator.js';\nimport { registerDateMinValidator } from '../../../utils/controller/date/cell-date-min-validator.js';\nimport { registerDateMaxValidator } from '../../../utils/controller/date/cell-date-max-validator.js';\nimport { registerDateOnlyYearValidator } from '../../../utils/controller/date/cell-date-only-year-validator.js';\nimport { registerDateOnlyTimeValidator } from '../../../utils/controller/date/cell-date-only-time-validator.js';\nimport { registerDateDatetimeValidator } from '../../../utils/controller/date/cell-date-datetime-validator.js';\nimport { registerDateTimestampValidator } from '../../../utils/controller/date/cell-date-timestamp-validator.js';\nimport { registerDateUtcValidator } from '../../../utils/controller/date/cell-date-utc-validator.js';\nimport { registerBoolOnlyTrueValidator } from '../../../utils/controller/bool/cell-bool-only-true-validator.js';\nimport { registerBoolOnlyFalseValidator } from '../../../utils/controller/bool/cell-bool-only-false-validator.js';\nimport type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheet, SanitizedSheetRow } from '../../sanitizer/types/sanitized-sheet.js';\n\ntype CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n p?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype RowValidatorFn = (\n row: SanitizedSheetRow,\n p?: Readonly<Record<string, unknown>>\n) => readonly SheetError[] | null;\n\ntype TableValidatorFn = (\n sheet: SanitizedSheet,\n p?: Readonly<Record<string, unknown>>,\n signal?: AbortSignal\n) => readonly SheetError[] | null | Promise<readonly SheetError[] | null>;\n\nconst registry = new Registry<(...args: unknown[]) => unknown>();\n\nfunction registerAll(\n register: (name: string, fn: CellValidatorFn, opts: { type: 'cell' }) => void\n): void {\n registerRequiredValidator(register);\n registerStringByregexValidator(register);\n registerStringMaxLengthValidator(register);\n registerStringMinLengthValidator(register);\n registerStringEmailValidator(register);\n registerStringPhoneValidator(register);\n registerStringPhoneInternationalValidator(register);\n registerStringPhoneLocalValidator(register);\n registerStringOnlyNumbersValidator(register);\n registerStringOnlyLettersValidator(register);\n registerNumberMinValidator(register);\n registerNumberMaxValidator(register);\n registerNumberFloatValidator(register);\n registerNumberIntegerValidator(register);\n registerNumberNonNegativeValidator(register);\n registerNumberNonPositiveValidator(register);\n registerNumberNonZeroValidator(register);\n registerDateMinValidator(register);\n registerDateMaxValidator(register);\n registerDateOnlyYearValidator(register);\n registerDateOnlyTimeValidator(register);\n registerDateDatetimeValidator(register);\n registerDateTimestampValidator(register);\n registerDateUtcValidator(register);\n registerBoolOnlyTrueValidator(register);\n registerBoolOnlyFalseValidator(register);\n}\n\nregisterAll((name, fn, opts) => {\n registry.register(name, fn, opts);\n});\n\nfunction getCellValidator(name: string): CellValidatorFn | undefined {\n const entry = registry.get(name);\n if (!entry || entry.type !== 'cell') return undefined;\n return entry.fn as CellValidatorFn;\n}\n\nfunction getRowValidator(_name: string): RowValidatorFn | undefined {\n return undefined;\n}\n\nfunction getTableValidator(_name: string): TableValidatorFn | undefined {\n return undefined;\n}\n\nexport function getValidatorGetters(): {\n getCellValidator: (name: string) => CellValidatorFn | undefined;\n getRowValidator: (name: string) => RowValidatorFn | undefined;\n getTableValidator: (name: string) => TableValidatorFn | undefined;\n} {\n return { getCellValidator, getRowValidator, getTableValidator };\n}\n","import type { ValidatorOrWithParams } from '../../../types/sheet-layout.js';\n\nexport interface ResolvedValidatorRef {\n readonly name: string;\n readonly params?: Readonly<Record<string, unknown>>;\n}\n\nexport function resolveValidatorRef(ref: ValidatorOrWithParams): ResolvedValidatorRef {\n if (typeof ref === 'string') return { name: ref };\n return { name: ref.name, params: ref.params };\n}\n","import type { SheetLayoutField } from '../../../types/sheet-layout.js';\nimport type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetCell, SanitizedSheetRow } from '../../sanitizer/types/sanitized-sheet.js';\nimport { resolveValidatorRef } from './resolve-validator-ref.js';\n\nexport type CellValidatorFn = (\n value: unknown,\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>,\n) => readonly SheetError[] | null;\n\nexport type GetCellValidator = (name: string) => CellValidatorFn | undefined;\n\nexport function runCellValidators(\n cell: SanitizedSheetCell,\n row: SanitizedSheetRow,\n field: SheetLayoutField,\n getValidator: GetCellValidator,\n): readonly SheetError[] {\n const list = field.validators;\n if (!list?.length) return [];\n const errors: SheetError[] = [];\n for (const ref of list) {\n const { name, params } = resolveValidatorRef(ref);\n const fn = getValidator(name);\n if (fn) {\n const result = fn(cell.value, row, params);\n if (result?.length) {\n errors.push(...result);\n const hasFatal = result.some((e) => e.level === 'fatal');\n if (hasFatal) break;\n }\n }\n }\n return errors;\n}\n","import type { SheetLayout } from '../../../types/sheet-layout.js';\nimport type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheetRow } from '../../sanitizer/types/sanitized-sheet.js';\nimport { resolveValidatorRef } from './resolve-validator-ref.js';\n\nexport type RowValidatorFn = (\n row: SanitizedSheetRow,\n params?: Readonly<Record<string, unknown>>,\n) => readonly SheetError[] | null;\n\nexport type GetRowValidator = (name: string) => RowValidatorFn | undefined;\n\nexport function runRowValidators(\n row: SanitizedSheetRow,\n sheetLayout: SheetLayout,\n getValidator: GetRowValidator,\n): readonly SheetError[] {\n const list = sheetLayout.rowValidators;\n if (!list?.length) return [];\n const errors: SheetError[] = [];\n for (const ref of list) {\n const { name, params } = resolveValidatorRef(ref);\n const fn = getValidator(name);\n if (fn) {\n const result = fn(row, params);\n if (result?.length) {\n errors.push(...result);\n const hasFatal = result.some((e) => e.level === 'fatal');\n if (hasFatal) break;\n }\n }\n }\n return errors;\n}\n","import type { SheetLayout } from '../../../types/sheet-layout.js';\nimport type { SheetError } from '../../../types/error.js';\nimport type { SanitizedSheet } from '../../sanitizer/types/sanitized-sheet.js';\nimport type { ValidatorErrorDeltaItem } from '../types/validator-delta.js';\nimport { resolveValidatorRef } from './resolve-validator-ref.js';\n\nexport const EXTERNAL_VALIDATION_FAILED = 'EXTERNAL_VALIDATION_FAILED';\n\nexport type TableValidatorFn = (\n sheet: SanitizedSheet,\n params?: Readonly<Record<string, unknown>>,\n signal?: AbortSignal,\n) => readonly SheetError[] | null | Promise<readonly SheetError[] | null>;\n\nexport type GetTableValidator = (name: string) => TableValidatorFn | undefined;\n\nfunction toSheetLevelItems(errors: readonly SheetError[]): ValidatorErrorDeltaItem[] {\n return errors.map((error) => ({ error }));\n}\n\nexport async function runTableValidation(\n sheet: SanitizedSheet,\n sheetLayout: SheetLayout,\n getValidator: GetTableValidator,\n signal?: AbortSignal,\n): Promise<ValidatorErrorDeltaItem[]> {\n const list = sheetLayout.sheetValidators;\n if (!list?.length) return [];\n const collected: ValidatorErrorDeltaItem[] = [];\n for (const ref of list) {\n const { name, params } = resolveValidatorRef(ref);\n const fn = getValidator(name);\n if (!fn) continue;\n try {\n const result = await Promise.resolve(fn(sheet, params, signal));\n if (result?.length) collected.push(...toSheetLevelItems(result));\n } catch {\n collected.push({\n error: {\n code: EXTERNAL_VALIDATION_FAILED,\n level: 'fatal',\n params: { reason: 'network' },\n },\n });\n }\n }\n return collected;\n}\n"],"mappings":"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","names":["REQUIRED_VALIDATOR_ID","cellRequiredValidator","value","_row","_params","registerRequiredValidator","register","STRING_BYREGEX_VALIDATOR_ID","cellStringByregexValidator","value","_row","params","pattern","flags","s","registerStringByregexValidator","register","STRING_MAX_LENGTH_VALIDATOR_ID","cellStringMaxLengthValidator","value","_row","params","maxLength","max","s","registerStringMaxLengthValidator","register","STRING_MIN_LENGTH_VALIDATOR_ID","cellStringMinLengthValidator","value","_row","params","minLength","min","s","registerStringMinLengthValidator","register","STRING_EMAIL_VALIDATOR_ID","EMAIL_REGEX","cellStringEmailValidator","value","_row","_params","s","registerStringEmailValidator","register","STRING_PHONE_VALIDATOR_ID","PHONE_REGEX","cellStringPhoneValidator","value","_row","_params","s","digitsOnly","registerStringPhoneValidator","register","STRING_PHONE_INTERNATIONAL_VALIDATOR_ID","E164_PREFIX","cellStringPhoneInternationalValidator","value","_row","_params","s","digits","withPlus","E164_PREFIX","registerStringPhoneInternationalValidator","register","STRING_PHONE_INTERNATIONAL_VALIDATOR_ID","STRING_PHONE_LOCAL_VALIDATOR_ID","cellStringPhoneLocalValidator","value","_row","params","minDigits","maxDigits","min","max","s","digits","registerStringPhoneLocalValidator","register","STRING_PHONE_LOCAL_VALIDATOR_ID","STRING_ONLY_NUMBERS_VALIDATOR_ID","ONLY_DIGITS","cellStringOnlyNumbersValidator","value","_row","_params","s","registerStringOnlyNumbersValidator","register","STRING_ONLY_LETTERS_VALIDATOR_ID","ONLY_LETTERS","ONLY_LETTERS_AND_SPACES","cellStringOnlyLettersValidator","value","_row","params","allowSpaces","s","registerStringOnlyLettersValidator","register","NUMBER_MIN_VALIDATOR_ID","toNumber","value","n","cellNumberMinValidator","_row","params","min","minVal","registerNumberMinValidator","register","NUMBER_MAX_VALIDATOR_ID","toNumber","value","n","cellNumberMaxValidator","_row","params","max","maxVal","registerNumberMaxValidator","register","NUMBER_FLOAT_VALIDATOR_ID","isFiniteFloat","value","s","n","cellNumberFloatValidator","_row","_params","registerNumberFloatValidator","register","NUMBER_INTEGER_VALIDATOR_ID","toInteger","value","n","cellNumberIntegerValidator","_row","_params","registerNumberIntegerValidator","register","NUMBER_NON_NEGATIVE_VALIDATOR_ID","toNumber","value","n","cellNumberNonNegativeValidator","_row","_params","registerNumberNonNegativeValidator","register","NUMBER_NON_POSITIVE_VALIDATOR_ID","toNumber","value","n","cellNumberNonPositiveValidator","_row","_params","registerNumberNonPositiveValidator","register","NUMBER_NON_ZERO_VALIDATOR_ID","toNumber","value","n","cellNumberNonZeroValidator","_row","_params","registerNumberNonZeroValidator","register","DATE_MIN_VALIDATOR_ID","toTime","value","ms","cellDateMinValidator","_row","params","min","minMs","v","registerDateMinValidator","register","DATE_MAX_VALIDATOR_ID","toTime","value","ms","cellDateMaxValidator","_row","params","max","maxMs","v","registerDateMaxValidator","register","DATE_ONLY_YEAR_VALIDATOR_ID","YEAR_REGEX","cellDateOnlyYearValidator","value","_row","_params","s","strMatch","numMatch","registerDateOnlyYearValidator","register","DATE_ONLY_TIME_VALIDATOR_ID","TIME_REGEX","cellDateOnlyTimeValidator","value","_row","_params","s","registerDateOnlyTimeValidator","register","DATE_DATETIME_VALIDATOR_ID","toTime","value","ms","cellDateDatetimeValidator","_row","_params","s","registerDateDatetimeValidator","register","DATE_TIMESTAMP_VALIDATOR_ID","toTimestamp","value","s","n","ms","cellDateTimestampValidator","_row","_params","registerDateTimestampValidator","register","DATE_TIMESTAMP_VALIDATOR_ID","DATE_UTC_VALIDATOR_ID","toTime","value","ms","cellDateUtcValidator","_row","_params","s","registerDateUtcValidator","register","BOOL_ONLY_TRUE_VALIDATOR_ID","isTrue","value","cellBoolOnlyTrueValidator","_row","_params","registerBoolOnlyTrueValidator","register","BOOL_ONLY_FALSE_VALIDATOR_ID","isFalse","value","cellBoolOnlyFalseValidator","_row","_params","registerBoolOnlyFalseValidator","register","registry","Registry","registerAll","register","registerRequiredValidator","registerStringByregexValidator","registerStringMaxLengthValidator","registerStringMinLengthValidator","registerStringEmailValidator","registerStringPhoneValidator","registerStringPhoneInternationalValidator","registerStringPhoneLocalValidator","registerStringOnlyNumbersValidator","registerStringOnlyLettersValidator","registerNumberMinValidator","registerNumberMaxValidator","registerNumberFloatValidator","registerNumberIntegerValidator","registerNumberNonNegativeValidator","registerNumberNonPositiveValidator","registerNumberNonZeroValidator","registerDateMinValidator","registerDateMaxValidator","registerDateOnlyYearValidator","registerDateOnlyTimeValidator","registerDateDatetimeValidator","registerDateTimestampValidator","registerDateUtcValidator","registerBoolOnlyTrueValidator","registerBoolOnlyFalseValidator","name","fn","opts","getCellValidator","entry","getRowValidator","_name","getTableValidator","getValidatorGetters","resolveValidatorRef","ref","runCellValidators","cell","row","field","getValidator","list","errors","ref","name","params","resolveValidatorRef","fn","result","e","runRowValidators","row","sheetLayout","getValidator","list","errors","ref","name","params","resolveValidatorRef","fn","result","e","EXTERNAL_VALIDATION_FAILED","toSheetLevelItems","errors","error","runTableValidation","sheet","sheetLayout","getValidator","signal","list","collected","ref","name","params","resolveValidatorRef","fn","result"]}
@@ -0,0 +1,2 @@
1
+ var s=class{entries=new Map;register(e,t,r){this.entries.set(e,{fn:t,type:r.type})}get(e){return this.entries.get(e)}getByType(e){return[...this.entries.entries()].filter(([,t])=>t.type===e).map(([t,r])=>({name:t,entry:r}))}has(e){return this.entries.has(e)}clear(){this.entries.clear()}};export{s as a};
2
+ //# sourceMappingURL=chunk-YETPLYYC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/registry/Registry.ts"],"sourcesContent":["import type { RegistryEntry, RegistryLevel } from './types.js';\n\nexport class Registry<T extends (...args: unknown[]) => unknown> {\n private entries = new Map<string, RegistryEntry<T>>();\n\n register(name: string, fn: T, options: { type: RegistryLevel }): void {\n this.entries.set(name, { fn, type: options.type });\n }\n\n get(name: string): RegistryEntry<T> | undefined {\n return this.entries.get(name);\n }\n\n getByType(type: RegistryLevel): Array<{ name: string; entry: RegistryEntry<T> }> {\n return [...this.entries.entries()]\n .filter(([, e]) => e.type === type)\n .map(([name, entry]) => ({ name, entry }));\n }\n\n has(name: string): boolean {\n return this.entries.has(name);\n }\n\n clear(): void {\n this.entries.clear();\n }\n}\n"],"mappings":"AAEO,IAAMA,EAAN,KAA0D,CACvD,QAAU,IAAI,IAEtB,SAASC,EAAcC,EAAOC,EAAwC,CACpE,KAAK,QAAQ,IAAIF,EAAM,CAAE,GAAAC,EAAI,KAAMC,EAAQ,IAAK,CAAC,CACnD,CAEA,IAAIF,EAA4C,CAC9C,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAC9B,CAEA,UAAUG,EAAuE,CAC/E,MAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CAAC,EAC9B,OAAO,CAAC,CAAC,CAAEC,CAAC,IAAMA,EAAE,OAASD,CAAI,EACjC,IAAI,CAAC,CAACH,EAAMK,CAAK,KAAO,CAAE,KAAAL,EAAM,MAAAK,CAAM,EAAE,CAC7C,CAEA,IAAIL,EAAuB,CACzB,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAC9B,CAEA,OAAc,CACZ,KAAK,QAAQ,MAAM,CACrB,CACF","names":["Registry","name","fn","options","type","e","entry"]}
@@ -0,0 +1,2 @@
1
+ import{a as d}from"./chunk-BCDDC5UG.js";import g from"papaparse";var C="UTF-8";async function P(a,t){if(t&&t.toUpperCase()!=="UTF-8"){let s=await a.arrayBuffer();return new TextDecoder(t).decode(s)}return a.text()}async function T(a,t,s,o,r={}){let c=await P(a,r.encodingOverride),l=r.encodingOverride??C,m={header:!0,delimiter:r.delimiterOverride,delimitersToGuess:[",",";"],preview:r.maxRows??void 0},e=g.parse(c,m),u=e.meta.delimiter??r.delimiterOverride??",",n=e.meta.fields??(e.data[0]?Object.keys(e.data[0]):[]),w=(e.data??[]).map((p,f)=>{let h=n.map(i=>({key:i,value:d(p?.[i])}));return{index:f,cells:h}}),R={name:o,filesize:t,documentHash:s,headersCount:n.length,rowsCount:e.data?.length??0,headers:n,rows:w};return{sheets:{[o]:R},parserMeta:{encoding:l,delimiter:u}}}export{T as parseCsv};
2
+ //# sourceMappingURL=csv-parser-3IGEDABE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/parser/engines/csv-parser.ts"],"sourcesContent":["import Papa from 'papaparse';\nimport type { ParseOptions } from '../types/index.js';\nimport { toRawSheetCellValue } from './normalize-cell.js';\nimport { RawParseResult, RawSheetRow, RawSheetCell, RawSheet } from '../../../types/raw-sheet.js';\n\nconst DEFAULT_ENCODING = 'UTF-8';\n\nasync function blobToText(blob: Blob, encodingOverride?: string): Promise<string> {\n if (encodingOverride && encodingOverride.toUpperCase() !== 'UTF-8') {\n const buffer = await blob.arrayBuffer();\n return new TextDecoder(encodingOverride).decode(buffer);\n }\n return blob.text();\n}\n\nexport async function parseCsv(\n blob: Blob,\n filesize: number,\n documentHash: string,\n sheetName: string,\n options: ParseOptions = {},\n): Promise<RawParseResult> {\n const text = await blobToText(blob, options.encodingOverride);\n const encoding = options.encodingOverride ?? DEFAULT_ENCODING;\n\n const parseConfig: Papa.ParseConfig<Record<string, unknown>> = {\n header: true,\n delimiter: options.delimiterOverride,\n delimitersToGuess: [',', ';'],\n preview: options.maxRows ?? undefined,\n };\n const result = Papa.parse<Record<string, unknown>>(text, parseConfig);\n const delimiter = result.meta.delimiter ?? options.delimiterOverride ?? ',';\n\n const headers = result.meta.fields ?? (result.data[0] ? Object.keys(result.data[0] as object) : []);\n const rows: RawSheetRow[] = (result.data ?? []).map((rowObj, i) => {\n const cells: RawSheetCell[] = headers.map((key) => ({\n key,\n value: toRawSheetCellValue((rowObj as Record<string, unknown>)?.[key]),\n }));\n return { index: i, cells };\n });\n\n const sheet: RawSheet = {\n name: sheetName,\n filesize,\n documentHash,\n headersCount: headers.length,\n rowsCount: result.data?.length ?? 0,\n headers,\n rows,\n };\n\n return {\n sheets: { [sheetName]: sheet },\n parserMeta: { encoding, delimiter },\n };\n}\n"],"mappings":"wCAAA,OAAOA,MAAU,YAKjB,IAAMC,EAAmB,QAEzB,eAAeC,EAAWC,EAAYC,EAA4C,CAChF,GAAIA,GAAoBA,EAAiB,YAAY,IAAM,QAAS,CAClE,IAAMC,EAAS,MAAMF,EAAK,YAAY,EACtC,OAAO,IAAI,YAAYC,CAAgB,EAAE,OAAOC,CAAM,CACxD,CACA,OAAOF,EAAK,KAAK,CACnB,CAEA,eAAsBG,EACpBH,EACAI,EACAC,EACAC,EACAC,EAAwB,CAAC,EACA,CACzB,IAAMC,EAAO,MAAMT,EAAWC,EAAMO,EAAQ,gBAAgB,EACtDE,EAAWF,EAAQ,kBAAoBT,EAEvCY,EAAyD,CAC7D,OAAQ,GACR,UAAWH,EAAQ,kBACnB,kBAAmB,CAAC,IAAK,GAAG,EAC5B,QAASA,EAAQ,SAAW,MAC9B,EACMI,EAASC,EAAK,MAA+BJ,EAAME,CAAW,EAC9DG,EAAYF,EAAO,KAAK,WAAaJ,EAAQ,mBAAqB,IAElEO,EAAUH,EAAO,KAAK,SAAWA,EAAO,KAAK,CAAC,EAAI,OAAO,KAAKA,EAAO,KAAK,CAAC,CAAW,EAAI,CAAC,GAC3FI,GAAuBJ,EAAO,MAAQ,CAAC,GAAG,IAAI,CAACK,EAAQC,IAAM,CACjE,IAAMC,EAAwBJ,EAAQ,IAAKK,IAAS,CAClD,IAAAA,EACA,MAAOC,EAAqBJ,IAAqCG,CAAG,CAAC,CACvE,EAAE,EACF,MAAO,CAAE,MAAOF,EAAG,MAAAC,CAAM,CAC3B,CAAC,EAEKG,EAAkB,CACtB,KAAMf,EACN,SAAAF,EACA,aAAAC,EACA,aAAcS,EAAQ,OACtB,UAAWH,EAAO,MAAM,QAAU,EAClC,QAAAG,EACA,KAAAC,CACF,EAEA,MAAO,CACL,OAAQ,CAAE,CAACT,CAAS,EAAGe,CAAM,EAC7B,WAAY,CAAE,SAAAZ,EAAU,UAAAI,CAAU,CACpC,CACF","names":["Papa","DEFAULT_ENCODING","blobToText","blob","encodingOverride","buffer","parseCsv","filesize","documentHash","sheetName","options","text","encoding","parseConfig","result","Papa","delimiter","headers","rows","rowObj","i","cells","key","toRawSheetCellValue","sheet"]}
@@ -0,0 +1,2 @@
1
+ import{a as d}from"./chunk-J2IHY56K.js";import g from"papaparse";var C="UTF-8";async function P(a,t){if(t&&t.toUpperCase()!=="UTF-8"){let s=await a.arrayBuffer();return new TextDecoder(t).decode(s)}return a.text()}async function T(a,t,s,o,r={}){let c=await P(a,r.encodingOverride),l=r.encodingOverride??C,m={header:!0,delimiter:r.delimiterOverride,delimitersToGuess:[",",";"],preview:r.maxRows??void 0},e=g.parse(c,m),u=e.meta.delimiter??r.delimiterOverride??",",n=e.meta.fields??(e.data[0]?Object.keys(e.data[0]):[]),w=(e.data??[]).map((p,f)=>{let h=n.map(i=>({key:i,value:d(p?.[i])}));return{index:f,cells:h}}),R={name:o,filesize:t,documentHash:s,headersCount:n.length,rowsCount:e.data?.length??0,headers:n,rows:w};return{sheets:{[o]:R},parserMeta:{encoding:l,delimiter:u}}}export{T as parseCsv};
2
+ //# sourceMappingURL=csv-parser-ML7A4LF4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/parser/engines/csv-parser.ts"],"sourcesContent":["import Papa from 'papaparse';\nimport type { ParseOptions } from '../types/index.js';\nimport { toRawSheetCellValue } from './normalize-cell.js';\nimport { RawParseResult, RawSheetRow, RawSheetCell, RawSheet } from '../../../types/raw-sheet.js';\n\nconst DEFAULT_ENCODING = 'UTF-8';\n\nasync function blobToText(blob: Blob, encodingOverride?: string): Promise<string> {\n if (encodingOverride && encodingOverride.toUpperCase() !== 'UTF-8') {\n const buffer = await blob.arrayBuffer();\n return new TextDecoder(encodingOverride).decode(buffer);\n }\n return blob.text();\n}\n\nexport async function parseCsv(\n blob: Blob,\n filesize: number,\n documentHash: string,\n sheetName: string,\n options: ParseOptions = {},\n): Promise<RawParseResult> {\n const text = await blobToText(blob, options.encodingOverride);\n const encoding = options.encodingOverride ?? DEFAULT_ENCODING;\n\n const parseConfig: Papa.ParseConfig<Record<string, unknown>> = {\n header: true,\n delimiter: options.delimiterOverride,\n delimitersToGuess: [',', ';'],\n preview: options.maxRows ?? undefined,\n };\n const result = Papa.parse<Record<string, unknown>>(text, parseConfig);\n const delimiter = result.meta.delimiter ?? options.delimiterOverride ?? ',';\n\n const headers = result.meta.fields ?? (result.data[0] ? Object.keys(result.data[0] as object) : []);\n const rows: RawSheetRow[] = (result.data ?? []).map((rowObj, i) => {\n const cells: RawSheetCell[] = headers.map((key) => ({\n key,\n value: toRawSheetCellValue((rowObj as Record<string, unknown>)?.[key]),\n }));\n return { index: i, cells };\n });\n\n const sheet: RawSheet = {\n name: sheetName,\n filesize,\n documentHash,\n headersCount: headers.length,\n rowsCount: result.data?.length ?? 0,\n headers,\n rows,\n };\n\n return {\n sheets: { [sheetName]: sheet },\n parserMeta: { encoding, delimiter },\n };\n}\n"],"mappings":"wCAAA,OAAOA,MAAU,YAKjB,IAAMC,EAAmB,QAEzB,eAAeC,EAAWC,EAAYC,EAA4C,CAChF,GAAIA,GAAoBA,EAAiB,YAAY,IAAM,QAAS,CAClE,IAAMC,EAAS,MAAMF,EAAK,YAAY,EACtC,OAAO,IAAI,YAAYC,CAAgB,EAAE,OAAOC,CAAM,CACxD,CACA,OAAOF,EAAK,KAAK,CACnB,CAEA,eAAsBG,EACpBH,EACAI,EACAC,EACAC,EACAC,EAAwB,CAAC,EACA,CACzB,IAAMC,EAAO,MAAMT,EAAWC,EAAMO,EAAQ,gBAAgB,EACtDE,EAAWF,EAAQ,kBAAoBT,EAEvCY,EAAyD,CAC7D,OAAQ,GACR,UAAWH,EAAQ,kBACnB,kBAAmB,CAAC,IAAK,GAAG,EAC5B,QAASA,EAAQ,SAAW,MAC9B,EACMI,EAASC,EAAK,MAA+BJ,EAAME,CAAW,EAC9DG,EAAYF,EAAO,KAAK,WAAaJ,EAAQ,mBAAqB,IAElEO,EAAUH,EAAO,KAAK,SAAWA,EAAO,KAAK,CAAC,EAAI,OAAO,KAAKA,EAAO,KAAK,CAAC,CAAW,EAAI,CAAC,GAC3FI,GAAuBJ,EAAO,MAAQ,CAAC,GAAG,IAAI,CAACK,EAAQC,IAAM,CACjE,IAAMC,EAAwBJ,EAAQ,IAAKK,IAAS,CAClD,IAAAA,EACA,MAAOC,EAAqBJ,IAAqCG,CAAG,CAAC,CACvE,EAAE,EACF,MAAO,CAAE,MAAOF,EAAG,MAAAC,CAAM,CAC3B,CAAC,EAEKG,EAAkB,CACtB,KAAMf,EACN,SAAAF,EACA,aAAAC,EACA,aAAcS,EAAQ,OACtB,UAAWH,EAAO,MAAM,QAAU,EAClC,QAAAG,EACA,KAAAC,CACF,EAEA,MAAO,CACL,OAAQ,CAAE,CAACT,CAAS,EAAGe,CAAM,EAC7B,WAAY,CAAE,SAAAZ,EAAU,UAAAI,CAAU,CACpC,CACF","names":["Papa","DEFAULT_ENCODING","blobToText","blob","encodingOverride","buffer","parseCsv","filesize","documentHash","sheetName","options","text","encoding","parseConfig","result","Papa","delimiter","headers","rows","rowObj","i","cells","key","toRawSheetCellValue","sheet"]}
@@ -0,0 +1,5 @@
1
+ interface EditWorkerOptions {
2
+ signal?: AbortSignal;
3
+ }
4
+
5
+ export type { EditWorkerOptions };
@@ -0,0 +1,2 @@
1
+ import{a as C,b as R,d as T}from"./chunk-UCBBDF6X.js";import{a as g,b as G,c as x,d as j}from"./chunk-XTSACACJ.js";import{a as b,b as v,c as z,d as k,e as I}from"./chunk-WLNB3X2R.js";import"./chunk-YETPLYYC.js";import*as O from"comlink";function D(i){return!("rowIndex"in i)&&!("cellKey"in i)}async function P(i,o,n,a,p,e,d){let t=T(i,n,a,p),l=C(t,n);if(!l)return t;let u=R(l,a);if(!u)return t;let w=o.fields[a];if(!w)return t;let W=g(u,l,w,e.validator.getCellValidator),s={...u,errors:W},E={...l,cells:l.cells.map(r=>r.key===a?s:r),errors:[]},A=G(E,o,e.validator.getRowValidator),m={...E,errors:A},B=t.rows.map(r=>r.index===n?m:r),V={...t,rows:B},K=(await x(V,o,e.validator.getTableValidator,d)).filter(D).map(r=>r.error),f={...V,errors:[...V.errors,...K]};if(f.errors.length>0)return f;let q=s.errors.length===0?b(s,m,w,e.transform.getCellTransform):s.value,F={...s,value:q},y={...m,cells:m.cells.map(r=>r.key===a?F:r)},H=m.errors.length===0?v(y,o,e.transform.getRowTransform):y,S={...f,rows:f.rows.map(r=>r.index===n?H:r)},h=await z(S,o,e.transform.getSheetTransform,d),c=k(S,{deltas:h.deltas});return h.errors.length>0?{...c,errors:[...c.errors,...h.errors]}:c}var J={async runEdit(i,o,n,a,p,e){let d=j(),t=I();return P(i,o,n,a,p,{validator:d,transform:t},e?.signal)}};O.expose(J);
2
+ //# sourceMappingURL=edit.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/editor/worker/edit.worker.ts","../src/core/validator/types/validator-delta.ts","../src/core/editor/run-edit-pipeline.ts"],"sourcesContent":["import * as Comlink from 'comlink';\nimport type { SheetLayout } from '../../../types/sheet-layout.js';\nimport type { Sheet } from '../../../types/sheet.js';\nimport { runEditPipeline } from '../run-edit-pipeline.js';\nimport { getValidatorGetters } from '../../validator/worker/worker-registry.js';\nimport { getTransformGetters } from '../../transform/worker/worker-registry.js';\n\nexport interface EditWorkerOptions {\n signal?: AbortSignal;\n}\n\nconst api = {\n async runEdit(\n sheet: Sheet,\n sheetLayout: SheetLayout,\n rowIndex: number,\n cellKey: string,\n value: unknown,\n options?: EditWorkerOptions,\n ): Promise<Sheet> {\n const validator = getValidatorGetters();\n const transform = getTransformGetters();\n return runEditPipeline(\n sheet,\n sheetLayout,\n rowIndex,\n cellKey,\n value,\n { validator, transform },\n options?.signal,\n );\n },\n};\n\nComlink.expose(api);\n","import type { SheetError } from '../../../types/error.js';\n\nexport interface ValidatorErrorCell {\n readonly rowIndex: number;\n readonly cellKey: string;\n readonly error: SheetError;\n}\n\nexport interface ValidatorErrorRow {\n readonly rowIndex: number;\n readonly error: SheetError;\n}\n\nexport interface ValidatorErrorSheet {\n readonly error: SheetError;\n}\n\nexport type ValidatorErrorDeltaItem =\n | ValidatorErrorCell\n | ValidatorErrorRow\n | ValidatorErrorSheet;\n\nexport interface ValidatorDelta {\n readonly errors: readonly ValidatorErrorDeltaItem[];\n}\n\nfunction isCellError(item: ValidatorErrorDeltaItem): item is ValidatorErrorCell {\n return 'cellKey' in item && 'rowIndex' in item;\n}\n\nfunction isRowError(item: ValidatorErrorDeltaItem): item is ValidatorErrorRow {\n return 'rowIndex' in item && !('cellKey' in item);\n}\n\nexport function isValidatorErrorCell(\n item: ValidatorErrorDeltaItem,\n): item is ValidatorErrorCell {\n return isCellError(item);\n}\n\nexport function isValidatorErrorRow(\n item: ValidatorErrorDeltaItem,\n): item is ValidatorErrorRow {\n return isRowError(item);\n}\n\nexport function isValidatorErrorSheet(\n item: ValidatorErrorDeltaItem,\n): item is ValidatorErrorSheet {\n return !('rowIndex' in item) && !('cellKey' in item);\n}\n","import type { SheetLayout } from '../../types/sheet-layout.js';\nimport type { Sheet, ValidatedCell, ValidatedRow } from '../../types/sheet.js';\nimport type { SanitizedSheet } from '../sanitizer/types/sanitized-sheet.js';\nimport { runCellValidators } from '../validator/runner/cell-validators.js';\nimport { runRowValidators } from '../validator/runner/row-validators.js';\nimport { runTableValidation } from '../validator/runner/run-table-validation.js';\nimport { isValidatorErrorSheet } from '../validator/types/validator-delta.js';\nimport type { GetCellValidator } from '../validator/runner/cell-validators.js';\nimport type { GetRowValidator } from '../validator/runner/row-validators.js';\nimport type { GetTableValidator } from '../validator/runner/run-table-validation.js';\nimport { runCellTransforms } from '../transform/runner/cell-transforms.js';\nimport { runRowTransforms } from '../transform/runner/row-transforms.js';\nimport { runSheetTransforms } from '../transform/runner/sheet-transforms.js';\nimport type { GetCellTransform } from '../transform/runner/cell-transforms.js';\nimport type { GetRowTransform } from '../transform/runner/row-transforms.js';\nimport type { GetSheetTransform } from '../transform/runner/sheet-transforms.js';\nimport { applyTransformDelta } from '../transform/delta-applier.js';\nimport { setCellValue } from './immutable-update.js';\nimport { getRowByIndex, getCellByKey } from './resolve.js';\n\nexport interface EditValidatorGetters {\n getCellValidator: GetCellValidator;\n getRowValidator: GetRowValidator;\n getTableValidator: GetTableValidator;\n}\n\nexport interface EditTransformGetters {\n getCellTransform: GetCellTransform;\n getRowTransform: GetRowTransform;\n getSheetTransform: GetSheetTransform;\n}\n\nexport interface EditPipelineGetters {\n validator: EditValidatorGetters;\n transform: EditTransformGetters;\n}\n\nexport async function runEditPipeline(\n sheet: Sheet,\n sheetLayout: SheetLayout,\n rowIndex: number,\n cellKey: string,\n value: unknown,\n getters: EditPipelineGetters,\n signal?: AbortSignal,\n): Promise<Sheet> {\n const sheet1 = setCellValue(sheet, rowIndex, cellKey, value);\n const row = getRowByIndex(sheet1, rowIndex);\n if (!row) return sheet1;\n const cell = getCellByKey(row, cellKey);\n if (!cell) return sheet1;\n const field = sheetLayout.fields[cellKey];\n if (!field) return sheet1;\n\n const cellErrors = runCellValidators(\n cell as unknown as import('../sanitizer/types/sanitized-sheet.js').SanitizedSheetCell,\n row as unknown as import('../sanitizer/types/sanitized-sheet.js').SanitizedSheetRow,\n field,\n getters.validator.getCellValidator,\n );\n const newCell: ValidatedCell = { ...cell, errors: cellErrors };\n const newRow: ValidatedRow = {\n ...row,\n cells: row.cells.map((c) => (c.key === cellKey ? newCell : c)),\n errors: [],\n };\n const rowErrors = runRowValidators(\n newRow as unknown as import('../sanitizer/types/sanitized-sheet.js').SanitizedSheetRow,\n sheetLayout,\n getters.validator.getRowValidator,\n );\n const newRow2: ValidatedRow = { ...newRow, errors: rowErrors };\n const newRows = sheet1.rows.map((r) => (r.index === rowIndex ? newRow2 : r));\n const sheet2: Sheet = { ...sheet1, rows: newRows };\n\n const tableErrors = await runTableValidation(\n sheet2 as unknown as SanitizedSheet,\n sheetLayout,\n getters.validator.getTableValidator,\n signal,\n );\n const sheetErrors = tableErrors\n .filter(isValidatorErrorSheet)\n .map((i) => i.error);\n const sheet3: Sheet = { ...sheet2, errors: [...sheet2.errors, ...sheetErrors] };\n\n if (sheet3.errors.length > 0) return sheet3;\n\n const cellValue =\n newCell.errors.length === 0\n ? runCellTransforms(\n newCell,\n newRow2,\n field,\n getters.transform.getCellTransform,\n )\n : newCell.value;\n const updatedCell: ValidatedCell = { ...newCell, value: cellValue };\n const rowWithCellTransform: ValidatedRow = {\n ...newRow2,\n cells: newRow2.cells.map((c) => (c.key === cellKey ? updatedCell : c)),\n };\n const transformedRow =\n newRow2.errors.length === 0\n ? runRowTransforms(\n rowWithCellTransform,\n sheetLayout,\n getters.transform.getRowTransform,\n )\n : rowWithCellTransform;\n const sheet4: Sheet = {\n ...sheet3,\n rows: sheet3.rows.map((r) => (r.index === rowIndex ? transformedRow : r)),\n };\n const sheetOut = await runSheetTransforms(\n sheet4,\n sheetLayout,\n getters.transform.getSheetTransform,\n signal,\n );\n const sheet5 = applyTransformDelta(sheet4, { deltas: sheetOut.deltas });\n if (sheetOut.errors.length > 0) {\n return { ...sheet5, errors: [...sheet5.errors, ...sheetOut.errors] };\n }\n return sheet5;\n}\n"],"mappings":"mNAAA,UAAYA,MAAa,UC8ClB,SAASC,EACdC,EAC6B,CAC7B,MAAO,EAAE,aAAcA,IAAS,EAAE,YAAaA,EACjD,CCbA,eAAsBC,EACpBC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,IAAMC,EAASC,EAAaR,EAAOE,EAAUC,EAASC,CAAK,EACrDK,EAAMC,EAAcH,EAAQL,CAAQ,EAC1C,GAAI,CAACO,EAAK,OAAOF,EACjB,IAAMI,EAAOC,EAAaH,EAAKN,CAAO,EACtC,GAAI,CAACQ,EAAM,OAAOJ,EAClB,IAAMM,EAAQZ,EAAY,OAAOE,CAAO,EACxC,GAAI,CAACU,EAAO,OAAON,EAEnB,IAAMO,EAAaC,EACjBJ,EACAF,EACAI,EACAR,EAAQ,UAAU,gBACpB,EACMW,EAAyB,CAAE,GAAGL,EAAM,OAAQG,CAAW,EACvDG,EAAuB,CAC3B,GAAGR,EACH,MAAOA,EAAI,MAAM,IAAKS,GAAOA,EAAE,MAAQf,EAAUa,EAAUE,CAAE,EAC7D,OAAQ,CAAC,CACX,EACMC,EAAYC,EAChBH,EACAhB,EACAI,EAAQ,UAAU,eACpB,EACMgB,EAAwB,CAAE,GAAGJ,EAAQ,OAAQE,CAAU,EACvDG,EAAUf,EAAO,KAAK,IAAK,GAAO,EAAE,QAAUL,EAAWmB,EAAU,CAAE,EACrEE,EAAgB,CAAE,GAAGhB,EAAQ,KAAMe,CAAQ,EAQ3CE,GANc,MAAMC,EACxBF,EACAtB,EACAI,EAAQ,UAAU,kBAClBC,CACF,GAEG,OAAOoB,CAAqB,EAC5B,IAAKC,GAAMA,EAAE,KAAK,EACfC,EAAgB,CAAE,GAAGL,EAAQ,OAAQ,CAAC,GAAGA,EAAO,OAAQ,GAAGC,CAAW,CAAE,EAE9E,GAAII,EAAO,OAAO,OAAS,EAAG,OAAOA,EAErC,IAAMC,EACJb,EAAQ,OAAO,SAAW,EACtBc,EACEd,EACAK,EACAR,EACAR,EAAQ,UAAU,gBACpB,EACAW,EAAQ,MACRe,EAA6B,CAAE,GAAGf,EAAS,MAAOa,CAAU,EAC5DG,EAAqC,CACzC,GAAGX,EACH,MAAOA,EAAQ,MAAM,IAAKH,GAAOA,EAAE,MAAQf,EAAU4B,EAAcb,CAAE,CACvE,EACMe,EACJZ,EAAQ,OAAO,SAAW,EACtBa,EACEF,EACA/B,EACAI,EAAQ,UAAU,eACpB,EACA2B,EACAG,EAAgB,CACpB,GAAGP,EACH,KAAMA,EAAO,KAAK,IAAK,GAAO,EAAE,QAAU1B,EAAW+B,EAAiB,CAAE,CAC1E,EACMG,EAAW,MAAMC,EACrBF,EACAlC,EACAI,EAAQ,UAAU,kBAClBC,CACF,EACMgC,EAASC,EAAoBJ,EAAQ,CAAE,OAAQC,EAAS,MAAO,CAAC,EACtE,OAAIA,EAAS,OAAO,OAAS,EACpB,CAAE,GAAGE,EAAQ,OAAQ,CAAC,GAAGA,EAAO,OAAQ,GAAGF,EAAS,MAAM,CAAE,EAE9DE,CACT,CFlHA,IAAME,EAAM,CACV,MAAM,QACJC,EACAC,EACAC,EACAC,EACAC,EACAC,EACgB,CAChB,IAAMC,EAAYC,EAAoB,EAChCC,EAAYC,EAAoB,EACtC,OAAOC,EACLV,EACAC,EACAC,EACAC,EACAC,EACA,CAAE,UAAAE,EAAW,UAAAE,CAAU,EACvBH,GAAS,MACX,CACF,CACF,EAEQ,SAAON,CAAG","names":["Comlink","isValidatorErrorSheet","item","runEditPipeline","sheet","sheetLayout","rowIndex","cellKey","value","getters","signal","sheet1","setCellValue","row","getRowByIndex","cell","getCellByKey","field","cellErrors","runCellValidators","newCell","newRow","c","rowErrors","runRowValidators","newRow2","newRows","sheet2","sheetErrors","runTableValidation","isValidatorErrorSheet","i","sheet3","cellValue","runCellTransforms","updatedCell","rowWithCellTransform","transformedRow","runRowTransforms","sheet4","sheetOut","runSheetTransforms","sheet5","applyTransformDelta","api","sheet","sheetLayout","rowIndex","cellKey","value","options","validator","getValidatorGetters","transform","getTransformGetters","runEditPipeline"]}