From e9e3ce3f8e14a8fbb934cfc3390d64155cf0d139 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Thu, 9 Oct 2025 00:34:10 -0500 Subject: [PATCH 1/3] Increase heap size in validation workflow in attempt to fix CI failure --- .github/workflows/_validate.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/_validate.yml b/.github/workflows/_validate.yml index 638daf9..a7c9532 100644 --- a/.github/workflows/_validate.yml +++ b/.github/workflows/_validate.yml @@ -99,6 +99,8 @@ jobs: - name: Initialize Terraform CDK configuration shell: bash working-directory: infra/cdktf + env: + NODE_OPTIONS: --max-old-space-size=4096 run: | pnpm cdktf get pnpm build:tsc From 8b502bb75f4a4afbe005a4418563a9689f70ba4c Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Thu, 9 Oct 2025 00:50:59 -0500 Subject: [PATCH 2/3] Fix type errors --- packages/forms/src/blueprint.ts | 16 ++++++++-------- packages/forms/src/builder/parse-form.ts | 4 ++-- packages/forms/src/documents/pdf/generate.ts | 3 ++- packages/forms/src/pattern.ts | 4 +++- packages/forms/src/patterns/attachment/config.ts | 2 +- packages/forms/src/patterns/attachment/index.ts | 2 +- packages/forms/src/patterns/name/name.test.ts | 2 +- .../src/patterns/package-download/submit.ts | 10 +++++----- packages/forms/src/patterns/page-set/submit.ts | 8 ++++---- packages/forms/src/patterns/repeater/submit.ts | 12 ++++++------ packages/forms/src/repository/add-document.ts | 8 ++++---- packages/forms/src/repository/delete-form.ts | 8 ++++---- packages/forms/src/repository/get-document.ts | 10 +++++----- packages/forms/src/repository/get-form-list.ts | 4 ++-- .../forms/src/repository/get-form-session.ts | 8 ++++---- .../forms/src/repository/upsert-form-session.ts | 8 ++++---- packages/forms/src/services/submit-form.ts | 10 +++++----- packages/forms/src/session.ts | 2 +- packages/forms/src/submission.ts | 6 +++--- packages/forms/src/types.ts | 4 ++-- 20 files changed, 67 insertions(+), 64 deletions(-) diff --git a/packages/forms/src/blueprint.ts b/packages/forms/src/blueprint.ts index 5de67c9..c4b8ecc 100644 --- a/packages/forms/src/blueprint.ts +++ b/packages/forms/src/blueprint.ts @@ -6,7 +6,7 @@ import { generatePatternId, getPatternMap, removeChildPattern, -} from './pattern'; +} from './pattern.js'; import { type FieldsetPattern, type FormSummaryPattern, @@ -14,8 +14,8 @@ import { type PageSetPattern, type RepeaterPattern, type SequencePattern, -} from './patterns'; -import { type Blueprint, type FormOutput, type FormSummary } from './types'; +} from './patterns/index.js'; +import { type Blueprint, type FormOutput, type FormSummary } from './types.js'; export const nullBlueprint: Blueprint = { summary: { @@ -357,7 +357,7 @@ export const copyPage = ( } newPage.data.patterns = pagePattern.data.patterns.map( - id => idMap.get(id) || id + (id: PatternId) => idMap.get(id) || id ); updatedBp.patterns[newPageId] = newPage; @@ -440,7 +440,7 @@ export const copyPattern = ( bp: Blueprint, childId: PatternId ): PatternId | null => { - for (const [id, pattern] of Object.entries(bp.patterns)) { + for (const [id, pattern] of Object.entries(bp.patterns) as [string, Pattern][]) { if ( pattern.type === 'fieldset' && pattern.data.patterns.includes(childId) @@ -487,7 +487,7 @@ export const copyPattern = ( } newFieldset.data.patterns = originalFieldset.data.patterns.map( - id => idMap.get(id) || id + (id: PatternId) => idMap.get(id) || id ); updatedBp = { @@ -688,7 +688,7 @@ export const updatePatterns = ( const patternConfig = config.patterns[root.type]; const children = patternConfig.getChildren(root, newPatterns); targetPatterns[root.id] = root; - children.forEach(child => (targetPatterns[child.id] = child)); + children.forEach((child: Pattern) => (targetPatterns[child.id] = child)); return { ...form, patterns: targetPatterns, @@ -717,7 +717,7 @@ export const updateFormSummary = ( summary: FormSummary ): Blueprint => { // Find the form-summary pattern and update it - const formSummaryPatternEntry = Object.entries(form.patterns).find( + const formSummaryPatternEntry = (Object.entries(form.patterns) as [string, Pattern][]).find( ([_, pattern]) => pattern.type === 'form-summary' ); diff --git a/packages/forms/src/builder/parse-form.ts b/packages/forms/src/builder/parse-form.ts index df0c497..96a300d 100644 --- a/packages/forms/src/builder/parse-form.ts +++ b/packages/forms/src/builder/parse-form.ts @@ -1,8 +1,8 @@ import * as z from 'zod'; import { failure, success, type Result } from '@flexion/forms-common'; -import type { FormConfig } from '../pattern'; -import type { Blueprint } from '../types'; +import type { FormConfig } from '../pattern.js'; +import type { Blueprint } from '../types.js'; /** * Parses and validates an object against a form schema defined by the given configuration. diff --git a/packages/forms/src/documents/pdf/generate.ts b/packages/forms/src/documents/pdf/generate.ts index d41f6f3..cbd5499 100644 --- a/packages/forms/src/documents/pdf/generate.ts +++ b/packages/forms/src/documents/pdf/generate.ts @@ -2,6 +2,7 @@ import { PDFDocument } from 'pdf-lib'; import { Result } from '@flexion/forms-common'; import { type FormOutput } from '../../index.js'; +import { type DocumentFieldValue } from '../types.js'; import { type PDFFieldType } from './index.js'; import { fillPdfField } from './patterns/index.js'; @@ -10,7 +11,7 @@ export const createFormOutputFieldData = ( formData: Record ): Record => { const results = {} as Record; - Object.entries(output.fields).forEach(([patternId, docField]) => { + (Object.entries(output.fields) as [string, DocumentFieldValue][]).forEach(([patternId, docField]) => { if (docField.type === 'not-supported') { console.error(`unsupported field: ${patternId}: ${docField}`); return; diff --git a/packages/forms/src/pattern.ts b/packages/forms/src/pattern.ts index 319b909..606ee8f 100644 --- a/packages/forms/src/pattern.ts +++ b/packages/forms/src/pattern.ts @@ -1,5 +1,4 @@ import * as r from '@flexion/forms-common'; -import set from 'set-value'; import { type CreatePrompt } from './components.js'; import { type FormError, type FormErrors } from './error.js'; @@ -249,6 +248,9 @@ export const getFirstPattern = ( ): Pattern => { if (!pattern) { pattern = form.patterns[form.root]; + if (!pattern) { + throw new Error(`Root pattern with id ${form.root} not found`); + } } const elemConfig = getPatternConfig(config, pattern.type); const children = elemConfig.getChildren(pattern, form.patterns); diff --git a/packages/forms/src/patterns/attachment/config.ts b/packages/forms/src/patterns/attachment/config.ts index 2d8486a..29d6140 100644 --- a/packages/forms/src/patterns/attachment/config.ts +++ b/packages/forms/src/patterns/attachment/config.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; import { enLocale as message } from '@flexion/forms-common'; import { ParsePatternConfigData, type Pattern } from '../../pattern.js'; import { safeZodParseFormErrors } from '../../util/zod.js'; -import { attachmentFileTypeMimes } from './file-type-options'; +import { attachmentFileTypeMimes } from './file-type-options.js'; export type AttachmentPattern = Pattern; diff --git a/packages/forms/src/patterns/attachment/index.ts b/packages/forms/src/patterns/attachment/index.ts index 70d122e..f1c887b 100644 --- a/packages/forms/src/patterns/attachment/index.ts +++ b/packages/forms/src/patterns/attachment/index.ts @@ -5,7 +5,7 @@ import { type PatternConfig } from '../../pattern.js'; import { parseConfigData, type AttachmentPattern } from './config.js'; import { createPrompt } from './prompt.js'; import { type AttachmentPatternOutput, parseUserInput } from './response.js'; -import { attachmentFileTypeMimes } from './file-type-options'; +import { attachmentFileTypeMimes } from './file-type-options.js'; export const attachmentConfig: PatternConfig< AttachmentPattern, diff --git a/packages/forms/src/patterns/name/name.test.ts b/packages/forms/src/patterns/name/name.test.ts index 75ac92d..856c62e 100644 --- a/packages/forms/src/patterns/name/name.test.ts +++ b/packages/forms/src/patterns/name/name.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { createNameSchema, nameConfig, type NamePattern } from './index'; +import { createNameSchema, nameConfig, type NamePattern } from './index.js'; describe('NamePattern tests', () => { describe('createNameSchema', () => { diff --git a/packages/forms/src/patterns/package-download/submit.ts b/packages/forms/src/patterns/package-download/submit.ts index d17800f..2db6040 100644 --- a/packages/forms/src/patterns/package-download/submit.ts +++ b/packages/forms/src/patterns/package-download/submit.ts @@ -1,11 +1,11 @@ import { failure, success, type Result } from '@flexion/forms-common'; -import { type Blueprint, type FormOutput } from '../..'; -import { createFormOutputFieldData, fillPDF } from '../../documents'; -import { sessionIsComplete } from '../../session'; -import { type SubmitHandler } from '../../submission'; +import { type FormOutput } from '../../index.js'; +import { createFormOutputFieldData, fillPDF } from '../../documents/index.js'; +import { sessionIsComplete } from '../../session.js'; +import { type SubmitHandler } from '../../submission.js'; -import { type PackageDownloadPattern } from './index'; +import { type PackageDownloadPattern } from './index.js'; export const downloadPackageHandler: SubmitHandler< PackageDownloadPattern diff --git a/packages/forms/src/patterns/page-set/submit.ts b/packages/forms/src/patterns/page-set/submit.ts index 15456ad..dad1eb6 100644 --- a/packages/forms/src/patterns/page-set/submit.ts +++ b/packages/forms/src/patterns/page-set/submit.ts @@ -5,10 +5,10 @@ import { getPatternSafely, aggregatePatternSessionValues, } from '../../pattern.js'; -import { type FormSession } from '../../session'; -import { type SubmitHandler } from '../../submission'; -import { type PagePattern } from '../page/config'; -import { type PageSetPattern } from './config'; +import { type FormSession } from '../../session.js'; +import { type SubmitHandler } from '../../submission.js'; +import { type PagePattern } from '../page/config.js'; +import { type PageSetPattern } from './config.js'; const getPage = (formSession: FormSession) => { const page = formSession.route?.params.page?.toString(); diff --git a/packages/forms/src/patterns/repeater/submit.ts b/packages/forms/src/patterns/repeater/submit.ts index b28c7b0..f658f98 100644 --- a/packages/forms/src/patterns/repeater/submit.ts +++ b/packages/forms/src/patterns/repeater/submit.ts @@ -1,7 +1,7 @@ import { success } from '@flexion/forms-common'; -import { type RepeaterPattern } from '../..'; -import { type SubmitHandler } from '../../submission'; +import { type RepeaterPattern } from '../../index.js'; +import { type SubmitHandler } from '../../submission.js'; export const repeaterAddRowHandler: SubmitHandler = async ( context, @@ -15,7 +15,7 @@ export const repeaterAddRowHandler: SubmitHandler = async ( : []; const initialRepeaterRowData = opts.pattern.data.patterns.reduce( - (acc, patternId: string) => { + (acc: Record, patternId: string) => { // THIS requires all the patterns to have object not string input values // acc[patternId] = {}; @@ -70,14 +70,14 @@ export const repeaterDeleteRowHandler: SubmitHandler = async ( ); const childPatternIds = opts.pattern.data.patterns.map( - patternId => `${opts.pattern.id}.${indexToDelete}` + (patternId: string) => `${opts.pattern.id}.${indexToDelete}` ); const newValues = { ...opts.session.data.values }; // Only delete keys that actually exist - const keysToDelete = Object.keys(newValues).filter(key => - childPatternIds.some(prefix => key.startsWith(prefix)) + const keysToDelete = Object.keys(newValues).filter((key: string) => + childPatternIds.some((prefix: string) => key.startsWith(prefix)) ); if (keysToDelete.length > 0) { diff --git a/packages/forms/src/repository/add-document.ts b/packages/forms/src/repository/add-document.ts index ec1af5e..3d5acdd 100644 --- a/packages/forms/src/repository/add-document.ts +++ b/packages/forms/src/repository/add-document.ts @@ -1,8 +1,8 @@ import { type Result, failure, success } from '@flexion/forms-common'; -import type { ParsedPdf } from '../documents/pdf/parsing-api'; -import type { DocumentFieldMap } from '../documents/types'; -import type { FormRepositoryContext } from '.'; +import type { ParsedPdf } from '../documents/pdf/parsing-api.js'; +import type { DocumentFieldMap } from '../documents/types.js'; +import type { FormRepositoryContext } from './index.js'; export type AddDocument = ( ctx: FormRepositoryContext, @@ -38,5 +38,5 @@ export const addDocument: AddDocument = async (ctx, document) => { id: uuid, }) ) - .catch(err => failure(err.message)); + .catch((err: Error) => failure(err.message)); }; diff --git a/packages/forms/src/repository/delete-form.ts b/packages/forms/src/repository/delete-form.ts index eb20b11..68efa05 100644 --- a/packages/forms/src/repository/delete-form.ts +++ b/packages/forms/src/repository/delete-form.ts @@ -1,7 +1,7 @@ import { type VoidResult, failure, voidSuccess } from '@flexion/forms-common'; -import type { FormOutput } from '../types'; -import type { FormRepositoryContext } from '.'; +import type { FormOutput } from '../types.js'; +import type { FormRepositoryContext } from './index.js'; export type DeleteForm = ( ctx: FormRepositoryContext, @@ -14,7 +14,7 @@ export type DeleteForm = ( export const deleteForm: DeleteForm = async (ctx, formId) => { const db = await ctx.db.getKysely(); - const result = await db.transaction().execute(async trx => { + const result = await db.transaction().execute(async (trx) => { const deleteResult = await trx .deleteFrom('forms') .where('id', '=', formId) @@ -38,7 +38,7 @@ export const deleteForm: DeleteForm = async (ctx, formId) => { .deleteFrom('form_documents') .where('id', 'in', documentIds) .execute() - .then(_ => voidSuccess) + .then((_) => voidSuccess) .catch((error: Error) => { return failure({ message: error.message, code: 'unknown' as const }); }); diff --git a/packages/forms/src/repository/get-document.ts b/packages/forms/src/repository/get-document.ts index 63d199c..4776775 100644 --- a/packages/forms/src/repository/get-document.ts +++ b/packages/forms/src/repository/get-document.ts @@ -1,8 +1,8 @@ import { type Result, failure, success } from '@flexion/forms-common'; -import type { ParsedPdf } from '../documents/pdf/parsing-api'; -import type { DocumentFieldMap } from '../documents/types'; -import type { FormRepositoryContext } from '.'; +import type { ParsedPdf } from '../documents/pdf/parsing-api.js'; +import type { DocumentFieldMap } from '../documents/types.js'; +import type { FormRepositoryContext } from './index.js'; export type GetDocument = ( ctx: FormRepositoryContext, @@ -28,7 +28,7 @@ export const getDocument: GetDocument = async (ctx, id) => { .select(['id', 'type', 'file_name', 'data', 'extract']) .where('id', '=', id) .executeTakeFirstOrThrow() - .then(data => { + .then((data) => { // Handle documents without extract (stored during async processing initialization) const extract: { parsedPdf: ParsedPdf; fields: DocumentFieldMap } = data.extract && data.extract !== '' @@ -41,5 +41,5 @@ export const getDocument: GetDocument = async (ctx, id) => { fields: extract.fields, }); }) - .catch(err => failure(err.message)); + .catch((err: Error) => failure(err.message)); }; diff --git a/packages/forms/src/repository/get-form-list.ts b/packages/forms/src/repository/get-form-list.ts index 4f7d1aa..fb139c8 100644 --- a/packages/forms/src/repository/get-form-list.ts +++ b/packages/forms/src/repository/get-form-list.ts @@ -1,4 +1,4 @@ -import type { FormRepositoryContext } from '.'; +import type { FormRepositoryContext } from './index.js'; import type { JobStatus } from './jobs/types.js'; export type FormListItem = { @@ -30,7 +30,7 @@ export const getFormList: GetFormList = async ctx => { // For each form, get the latest import-pdf job const formList = await Promise.all( - forms.map(async row => { + forms.map(async (row) => { const form = JSON.parse(row.data); // Get latest import-pdf job for this form diff --git a/packages/forms/src/repository/get-form-session.ts b/packages/forms/src/repository/get-form-session.ts index b36693b..e2a9cc5 100644 --- a/packages/forms/src/repository/get-form-session.ts +++ b/packages/forms/src/repository/get-form-session.ts @@ -1,6 +1,6 @@ import { type Result, failure, success } from '@flexion/forms-common'; -import { type FormSession, type FormSessionId } from '../session'; -import type { FormRepositoryContext } from '.'; +import { type FormSession, type FormSessionId } from '../session.js'; +import type { FormRepositoryContext } from './index.js'; export type GetFormSession = ( ctx: FormRepositoryContext, @@ -26,14 +26,14 @@ export const getFormSession: GetFormSession = async ( .where('id', '=', id) .select(['id', 'form_id', 'data']) .executeTakeFirstOrThrow() - .then(result => { + .then((result) => { return success({ id: result.id, formId: result.form_id, data: JSON.parse(result.data), }); }) - .catch(err => { + .catch((err: Error) => { return failure(err.message); }); }; diff --git a/packages/forms/src/repository/upsert-form-session.ts b/packages/forms/src/repository/upsert-form-session.ts index a99fe29..da246ac 100644 --- a/packages/forms/src/repository/upsert-form-session.ts +++ b/packages/forms/src/repository/upsert-form-session.ts @@ -1,6 +1,6 @@ import { type Result, failure, success } from '@flexion/forms-common'; -import { type FormSession } from '../session'; -import type { FormRepositoryContext } from '.'; +import { type FormSession } from '../session.js'; +import type { FormRepositoryContext } from './index.js'; export type UpsertFormSession = ( ctx: FormRepositoryContext, @@ -25,7 +25,7 @@ export const upsertFormSession: UpsertFormSession = async (ctx, opts) => { form_id: opts.formId, data: strData, }) - .onConflict(oc => + .onConflict((oc) => oc.columns(['id', 'form_id']).doUpdateSet({ data: strData, }) @@ -37,7 +37,7 @@ export const upsertFormSession: UpsertFormSession = async (ctx, opts) => { id, }); }) - .catch(err => { + .catch((err: Error) => { return failure(err.message); }); }; diff --git a/packages/forms/src/services/submit-form.ts b/packages/forms/src/services/submit-form.ts index 8724ae0..87bb183 100644 --- a/packages/forms/src/services/submit-form.ts +++ b/packages/forms/src/services/submit-form.ts @@ -1,14 +1,14 @@ import { failure, success, type Result } from '@flexion/forms-common'; import { type FormServiceContext } from '../context/index.js'; -import { submitPage } from '../patterns/page-set/submit'; -import { downloadPackageHandler } from '../patterns/package-download/submit'; +import { submitPage } from '../patterns/page-set/submit.js'; +import { downloadPackageHandler } from '../patterns/package-download/submit.js'; import { repeaterAddRowHandler, repeaterDeleteRowHandler, -} from '../patterns/repeater/submit'; +} from '../patterns/repeater/submit.js'; import { type FormRoute } from '../route-data.js'; -import { SubmissionRegistry } from '../submission'; +import { SubmissionRegistry } from '../submission.js'; import { createFormSession, type FormSession, @@ -107,7 +107,7 @@ export const submitForm: SubmitForm = async ( const newSessionResult = await handler( { config: ctx.config, - getDocument: id => { + getDocument: (id: string) => { return ctx.repository.getDocument(id); }, }, diff --git a/packages/forms/src/session.ts b/packages/forms/src/session.ts index 2800096..e765753 100644 --- a/packages/forms/src/session.ts +++ b/packages/forms/src/session.ts @@ -167,7 +167,7 @@ export const sessionIsComplete = (config: FormConfig, session: FormSession) => { * each field of the repeater based on the validation rules for the individual field type. */ - return Object.values(session.form.patterns).every(pattern => { + return (Object.values(session.form.patterns) as Pattern[]).every(pattern => { const patternConfig = getPatternConfig(config, pattern.type); const value = getFormSessionValue(session, pattern.id); const isValidResult = validatePattern(patternConfig, pattern, value); diff --git a/packages/forms/src/submission.ts b/packages/forms/src/submission.ts index 8a83922..1a81f2f 100644 --- a/packages/forms/src/submission.ts +++ b/packages/forms/src/submission.ts @@ -7,9 +7,9 @@ import { type Pattern, type PatternId, getPattern, -} from './pattern'; -import { type FormSession } from './session'; -import { type Blueprint, type DocumentFieldMap } from '.'; +} from './pattern.js'; +import { type FormSession } from './session.js'; +import { type Blueprint, type DocumentFieldMap } from './index.js'; export type SubmitHandlerContext = { config: FormConfig; diff --git a/packages/forms/src/types.ts b/packages/forms/src/types.ts index d27d6bc..1a06bdc 100644 --- a/packages/forms/src/types.ts +++ b/packages/forms/src/types.ts @@ -1,5 +1,5 @@ -import { type DocumentFieldMap } from './documents/types'; -import { type PatternId, type PatternMap } from './pattern'; +import { type DocumentFieldMap } from './documents/types.js'; +import { type PatternId, type PatternMap } from './pattern.js'; export type Blueprint = { summary: FormSummary; From 27f1c97cc58c9cdf3e93e44724c80233a7eb4a78 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Thu, 9 Oct 2025 21:29:08 -0500 Subject: [PATCH 3/3] Remove duplicative typings --- e2e/package.json | 1 + infra/aws-cdk/package.json | 1 + packages/design/package.json | 2 +- packages/forms/src/blueprint.ts | 10 +++++----- packages/forms/src/documents/pdf/generate.ts | 3 +-- packages/forms/src/patterns/repeater/submit.ts | 8 ++++---- packages/forms/src/repository/add-document.ts | 2 +- packages/forms/src/repository/delete-form.ts | 6 +++--- packages/forms/src/repository/get-document.ts | 4 ++-- packages/forms/src/repository/get-form-list.ts | 2 +- packages/forms/src/repository/get-form-session.ts | 4 ++-- packages/forms/src/repository/upsert-form-session.ts | 4 ++-- packages/forms/src/services/submit-form.ts | 2 +- packages/forms/src/session.ts | 2 +- 14 files changed, 26 insertions(+), 25 deletions(-) diff --git a/e2e/package.json b/e2e/package.json index b041e75..82e617e 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "auth": "pnpm --filter=@flexion/forms-cli cli e2e create-test-session -p ../../packages/server/src/main.db -o ../../e2e/.env", + "clean": "rimraf coverage test-results playwright-report", "dev": "tsc -w", "test:e2e:ci": "pnpm auth && pnpm playwright test --headed", "test:e2e:dev": "pnpm auth && pnpm playwright test --ui-port=8080 --ui-host=0.0.0.0" diff --git a/infra/aws-cdk/package.json b/infra/aws-cdk/package.json index 160cd38..f156ff3 100644 --- a/infra/aws-cdk/package.json +++ b/infra/aws-cdk/package.json @@ -22,6 +22,7 @@ "build:typescript": "tsc", "build:synth": "cdk synth", "cdk": "cdk", + "clean": "rimraf dist cdk.out tsconfig.tsbuildinfo coverage", "test": "echo 'no tests'", "watch": "tsc -w" }, diff --git a/packages/design/package.json b/packages/design/package.json index 223ddd2..0386b52 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -25,7 +25,7 @@ "build:storybook": "storybook build", "build:styles": "gulp update", "clean": "pnpm clean:lib && pnpm clean:styles", - "clean:lib": "rimraf dist", + "clean:lib": "rimraf dist tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo coverage storybook-static", "clean:styles": "rimraf static", "dev": "run-p dev:*", "dev:lib": "vite", diff --git a/packages/forms/src/blueprint.ts b/packages/forms/src/blueprint.ts index c4b8ecc..d2d7182 100644 --- a/packages/forms/src/blueprint.ts +++ b/packages/forms/src/blueprint.ts @@ -357,7 +357,7 @@ export const copyPage = ( } newPage.data.patterns = pagePattern.data.patterns.map( - (id: PatternId) => idMap.get(id) || id + id => idMap.get(id) || id ); updatedBp.patterns[newPageId] = newPage; @@ -440,7 +440,7 @@ export const copyPattern = ( bp: Blueprint, childId: PatternId ): PatternId | null => { - for (const [id, pattern] of Object.entries(bp.patterns) as [string, Pattern][]) { + for (const [id, pattern] of Object.entries(bp.patterns)) { if ( pattern.type === 'fieldset' && pattern.data.patterns.includes(childId) @@ -487,7 +487,7 @@ export const copyPattern = ( } newFieldset.data.patterns = originalFieldset.data.patterns.map( - (id: PatternId) => idMap.get(id) || id + id => idMap.get(id) || id ); updatedBp = { @@ -688,7 +688,7 @@ export const updatePatterns = ( const patternConfig = config.patterns[root.type]; const children = patternConfig.getChildren(root, newPatterns); targetPatterns[root.id] = root; - children.forEach((child: Pattern) => (targetPatterns[child.id] = child)); + children.forEach(child => (targetPatterns[child.id] = child)); return { ...form, patterns: targetPatterns, @@ -717,7 +717,7 @@ export const updateFormSummary = ( summary: FormSummary ): Blueprint => { // Find the form-summary pattern and update it - const formSummaryPatternEntry = (Object.entries(form.patterns) as [string, Pattern][]).find( + const formSummaryPatternEntry = Object.entries(form.patterns).find( ([_, pattern]) => pattern.type === 'form-summary' ); diff --git a/packages/forms/src/documents/pdf/generate.ts b/packages/forms/src/documents/pdf/generate.ts index cbd5499..d41f6f3 100644 --- a/packages/forms/src/documents/pdf/generate.ts +++ b/packages/forms/src/documents/pdf/generate.ts @@ -2,7 +2,6 @@ import { PDFDocument } from 'pdf-lib'; import { Result } from '@flexion/forms-common'; import { type FormOutput } from '../../index.js'; -import { type DocumentFieldValue } from '../types.js'; import { type PDFFieldType } from './index.js'; import { fillPdfField } from './patterns/index.js'; @@ -11,7 +10,7 @@ export const createFormOutputFieldData = ( formData: Record ): Record => { const results = {} as Record; - (Object.entries(output.fields) as [string, DocumentFieldValue][]).forEach(([patternId, docField]) => { + Object.entries(output.fields).forEach(([patternId, docField]) => { if (docField.type === 'not-supported') { console.error(`unsupported field: ${patternId}: ${docField}`); return; diff --git a/packages/forms/src/patterns/repeater/submit.ts b/packages/forms/src/patterns/repeater/submit.ts index f658f98..18fd875 100644 --- a/packages/forms/src/patterns/repeater/submit.ts +++ b/packages/forms/src/patterns/repeater/submit.ts @@ -15,7 +15,7 @@ export const repeaterAddRowHandler: SubmitHandler = async ( : []; const initialRepeaterRowData = opts.pattern.data.patterns.reduce( - (acc: Record, patternId: string) => { + (acc, patternId) => { // THIS requires all the patterns to have object not string input values // acc[patternId] = {}; @@ -70,14 +70,14 @@ export const repeaterDeleteRowHandler: SubmitHandler = async ( ); const childPatternIds = opts.pattern.data.patterns.map( - (patternId: string) => `${opts.pattern.id}.${indexToDelete}` + patternId => `${opts.pattern.id}.${indexToDelete}` ); const newValues = { ...opts.session.data.values }; // Only delete keys that actually exist - const keysToDelete = Object.keys(newValues).filter((key: string) => - childPatternIds.some((prefix: string) => key.startsWith(prefix)) + const keysToDelete = Object.keys(newValues).filter(key => + childPatternIds.some(prefix => key.startsWith(prefix)) ); if (keysToDelete.length > 0) { diff --git a/packages/forms/src/repository/add-document.ts b/packages/forms/src/repository/add-document.ts index 3d5acdd..b7ad684 100644 --- a/packages/forms/src/repository/add-document.ts +++ b/packages/forms/src/repository/add-document.ts @@ -38,5 +38,5 @@ export const addDocument: AddDocument = async (ctx, document) => { id: uuid, }) ) - .catch((err: Error) => failure(err.message)); + .catch(err => failure(err.message)); }; diff --git a/packages/forms/src/repository/delete-form.ts b/packages/forms/src/repository/delete-form.ts index 68efa05..a28243a 100644 --- a/packages/forms/src/repository/delete-form.ts +++ b/packages/forms/src/repository/delete-form.ts @@ -14,7 +14,7 @@ export type DeleteForm = ( export const deleteForm: DeleteForm = async (ctx, formId) => { const db = await ctx.db.getKysely(); - const result = await db.transaction().execute(async (trx) => { + const result = await db.transaction().execute(async trx => { const deleteResult = await trx .deleteFrom('forms') .where('id', '=', formId) @@ -38,8 +38,8 @@ export const deleteForm: DeleteForm = async (ctx, formId) => { .deleteFrom('form_documents') .where('id', 'in', documentIds) .execute() - .then((_) => voidSuccess) - .catch((error: Error) => { + .then(_ => voidSuccess) + .catch(error => { return failure({ message: error.message, code: 'unknown' as const }); }); }); diff --git a/packages/forms/src/repository/get-document.ts b/packages/forms/src/repository/get-document.ts index 4776775..f614ae9 100644 --- a/packages/forms/src/repository/get-document.ts +++ b/packages/forms/src/repository/get-document.ts @@ -28,7 +28,7 @@ export const getDocument: GetDocument = async (ctx, id) => { .select(['id', 'type', 'file_name', 'data', 'extract']) .where('id', '=', id) .executeTakeFirstOrThrow() - .then((data) => { + .then(data => { // Handle documents without extract (stored during async processing initialization) const extract: { parsedPdf: ParsedPdf; fields: DocumentFieldMap } = data.extract && data.extract !== '' @@ -41,5 +41,5 @@ export const getDocument: GetDocument = async (ctx, id) => { fields: extract.fields, }); }) - .catch((err: Error) => failure(err.message)); + .catch(err => failure(err.message)); }; diff --git a/packages/forms/src/repository/get-form-list.ts b/packages/forms/src/repository/get-form-list.ts index fb139c8..fa95d2a 100644 --- a/packages/forms/src/repository/get-form-list.ts +++ b/packages/forms/src/repository/get-form-list.ts @@ -30,7 +30,7 @@ export const getFormList: GetFormList = async ctx => { // For each form, get the latest import-pdf job const formList = await Promise.all( - forms.map(async (row) => { + forms.map(async row => { const form = JSON.parse(row.data); // Get latest import-pdf job for this form diff --git a/packages/forms/src/repository/get-form-session.ts b/packages/forms/src/repository/get-form-session.ts index e2a9cc5..a2dfef3 100644 --- a/packages/forms/src/repository/get-form-session.ts +++ b/packages/forms/src/repository/get-form-session.ts @@ -26,14 +26,14 @@ export const getFormSession: GetFormSession = async ( .where('id', '=', id) .select(['id', 'form_id', 'data']) .executeTakeFirstOrThrow() - .then((result) => { + .then(result => { return success({ id: result.id, formId: result.form_id, data: JSON.parse(result.data), }); }) - .catch((err: Error) => { + .catch(err => { return failure(err.message); }); }; diff --git a/packages/forms/src/repository/upsert-form-session.ts b/packages/forms/src/repository/upsert-form-session.ts index da246ac..7693020 100644 --- a/packages/forms/src/repository/upsert-form-session.ts +++ b/packages/forms/src/repository/upsert-form-session.ts @@ -25,7 +25,7 @@ export const upsertFormSession: UpsertFormSession = async (ctx, opts) => { form_id: opts.formId, data: strData, }) - .onConflict((oc) => + .onConflict(oc => oc.columns(['id', 'form_id']).doUpdateSet({ data: strData, }) @@ -37,7 +37,7 @@ export const upsertFormSession: UpsertFormSession = async (ctx, opts) => { id, }); }) - .catch((err: Error) => { + .catch(err => { return failure(err.message); }); }; diff --git a/packages/forms/src/services/submit-form.ts b/packages/forms/src/services/submit-form.ts index 87bb183..009a2cd 100644 --- a/packages/forms/src/services/submit-form.ts +++ b/packages/forms/src/services/submit-form.ts @@ -107,7 +107,7 @@ export const submitForm: SubmitForm = async ( const newSessionResult = await handler( { config: ctx.config, - getDocument: (id: string) => { + getDocument: id => { return ctx.repository.getDocument(id); }, }, diff --git a/packages/forms/src/session.ts b/packages/forms/src/session.ts index e765753..2800096 100644 --- a/packages/forms/src/session.ts +++ b/packages/forms/src/session.ts @@ -167,7 +167,7 @@ export const sessionIsComplete = (config: FormConfig, session: FormSession) => { * each field of the repeater based on the validation rules for the individual field type. */ - return (Object.values(session.form.patterns) as Pattern[]).every(pattern => { + return Object.values(session.form.patterns).every(pattern => { const patternConfig = getPatternConfig(config, pattern.type); const value = getFormSessionValue(session, pattern.id); const isValidResult = validatePattern(patternConfig, pattern, value);