diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index f2e3d685c..4d668eb24 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -61,6 +61,17 @@ jobs: shell: bash run: pnpm test + - name: Initialize Terraform CDK configuration + shell: bash + run: | + cd infra + pnpm cdktf get + pnpm build:tsc + + - name: Typecheck source code + shell: bash + run: pnpm typecheck + #- name: Vitest Coverage Report # if: always() # uses: davelosert/vitest-coverage-report-action@v2.2.0 diff --git a/.gitignore b/.gitignore index 2b85bee3f..5a9bd3ae3 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,4 @@ html/ node_modules/ NOTES.md tsconfig.tsbuildinfo - -*storybook.log \ No newline at end of file +*storybook.log diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index 1b7de7bb2..a165fb869 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -1,12 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "module": "CommonJS", "outDir": "./dist", "emitDeclarationOnly": true }, - "include": [ - "./src" - ], + "include": ["./src"], "references": [] } diff --git a/apps/doj-demo/tsconfig.json b/apps/doj-demo/tsconfig.json index 5ce2532ec..f2044fb5b 100644 --- a/apps/doj-demo/tsconfig.json +++ b/apps/doj-demo/tsconfig.json @@ -1,17 +1,12 @@ { // For reference, the base Astro tsconfig: // https://github.com/withastro/astro/blob/main/packages/astro/tsconfigs/base.json - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "module": "ESNext", - "noEmit": true, "jsx": "react", "resolveJsonModule": true }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "src/components/**" - ] + "include": ["src/**/*.ts"], + "exclude": ["src/components/**"] } diff --git a/apps/rest-api/tsconfig.json b/apps/rest-api/tsconfig.json index 23707a42d..ce4cbc37d 100644 --- a/apps/rest-api/tsconfig.json +++ b/apps/rest-api/tsconfig.json @@ -1,16 +1,10 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", "emitDeclarationOnly": true, "rootDir": "src" }, - "include": [ - "src/**/*" - ], - "references": [ - { - "path": "../../packages/interviews" - } - ] + "include": ["src/**/*"], + "references": [] } diff --git a/apps/spotlight/tsconfig.json b/apps/spotlight/tsconfig.json index 5ce2532ec..f2044fb5b 100644 --- a/apps/spotlight/tsconfig.json +++ b/apps/spotlight/tsconfig.json @@ -1,17 +1,12 @@ { // For reference, the base Astro tsconfig: // https://github.com/withastro/astro/blob/main/packages/astro/tsconfigs/base.json - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "module": "ESNext", - "noEmit": true, "jsx": "react", "resolveJsonModule": true }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "src/components/**" - ] + "include": ["src/**/*.ts"], + "exclude": ["src/components/**"] } diff --git a/infra/tsconfig.json b/infra/tsconfig.json index cf39f0d9c..ea41be078 100644 --- a/infra/tsconfig.json +++ b/infra/tsconfig.json @@ -5,9 +5,7 @@ "experimentalDecorators": true, "inlineSourceMap": true, "inlineSources": true, - "lib": [ - "es2018" - ], + "lib": ["es2018"], "module": "CommonJS", "noEmitOnError": true, "noFallthroughCasesInSwitch": true, @@ -25,11 +23,6 @@ "incremental": true, "skipLibCheck": true }, - "include": [ - "**/*.ts" - ], - "exclude": [ - "node_modules", - "cdktf.out" - ] + "include": [".gen/**/*.ts", "src/**/*.ts"], + "exclude": ["node_modules", "cdktf.out"] } diff --git a/package.json b/package.json index 95f2e1c83..02fe14253 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "lint": "turbo run lint", "pages": "rm -rf node_modules && npm i -g pnpm turbo && pnpm i && pnpm build && ln -sf ./apps/spotlight/dist _site", "test": "vitest run --coverage.enabled --coverage.reporter=text --coverage.reporter=json-summary --coverage.reporter=json --coverage.reportOnFailure --reporter vitest-github-actions-reporter", - "test:infra": "turbo run --filter=infra test" + "test:infra": "turbo run --filter=infra test", + "typecheck": "tsc --build" }, "hooks": { "pre-commit": "pnpm format" diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 83270eb7d..ad6f40165 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -3,3 +3,6 @@ export type VoidSuccess = { success: true }; export type Failure = { success: false; error: E }; export type Result = Success | Failure; export type VoidResult = VoidSuccess | Failure; + +export const success = (data: T): Success => ({ success: true, data }); +export const failure = (error: E): Failure => ({ success: false, error }); diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index c4e898619..a7c173536 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,11 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "emitDeclarationOnly": true }, - "include": [ - "./src" - ], + "include": ["./src"], "references": [] } diff --git a/packages/dependency-graph/tsconfig.json b/packages/dependency-graph/tsconfig.json index 1d4b6ecc5..a7c173536 100644 --- a/packages/dependency-graph/tsconfig.json +++ b/packages/dependency-graph/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "emitDeclarationOnly": true diff --git a/packages/design/src/Form/Form.stories.tsx b/packages/design/src/Form/Form.stories.tsx index 1be46163a..b4b31951f 100644 --- a/packages/design/src/Form/Form.stories.tsx +++ b/packages/design/src/Form/Form.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import Form from '.'; import { createTestFormContext, createTestSession } from '../test-form'; -export default { +const meta: Meta = { title: 'Form', component: Form, decorators: [(Story, args) => ], @@ -13,6 +13,7 @@ export default { session: createTestSession(), }, tags: ['autodocs'], -} satisfies Meta; +}; +export default meta; export const FormTest = {} satisfies StoryObj; diff --git a/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx b/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx index b136856b5..d667ba543 100644 --- a/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx +++ b/packages/design/src/Form/components/FormSummary/FormSummary.stories.tsx @@ -1,7 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react'; import FormSummary from '.'; -import { type FormSummaryProps } from '@atj/forms'; export default { title: 'patterns/FormSummary', @@ -11,13 +10,11 @@ export default { export const FormSummaryWithLongDescription = { args: { - pattern: { - _patternId: 'test-id', - type: 'form-summary', - title: 'Form title', - description: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', - } as FormSummaryProps, + _patternId: 'test-id', + type: 'form-summary', + title: 'Form title', + description: + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, } satisfies StoryObj; diff --git a/packages/design/src/Form/components/RadioGroup/RadioGroup.stories.tsx b/packages/design/src/Form/components/RadioGroup/RadioGroup.stories.tsx index 5262c6e3c..3a33cbc0c 100644 --- a/packages/design/src/Form/components/RadioGroup/RadioGroup.stories.tsx +++ b/packages/design/src/Form/components/RadioGroup/RadioGroup.stories.tsx @@ -1,36 +1,34 @@ -import { Meta, Story } from '@storybook/react'; +import { Meta, StoryFn } from '@storybook/react'; import RadioGroup, { RadioInput } from './RadioGroup'; import React from 'react'; -export default { +const meta: Meta = { title: 'Components/RadioGroup', component: RadioGroup, tags: ['autodocs'], -} as Meta; +}; +export default meta; -const Template: Story = () => ( +export const Default: StoryFn = () => ( ); - -export const Default = Template.bind({}); -Default.args = {}; diff --git a/packages/design/src/Form/components/RadioGroup/RadioGroup.tsx b/packages/design/src/Form/components/RadioGroup/RadioGroup.tsx index ae7062d84..1f04bf71d 100644 --- a/packages/design/src/Form/components/RadioGroup/RadioGroup.tsx +++ b/packages/design/src/Form/components/RadioGroup/RadioGroup.tsx @@ -1,6 +1,6 @@ import React, { type ReactElement } from 'react'; -type RadioGroupProps = { +export type RadioGroupProps = { legend: string; children: ReactElement | ReactElement[]; }; diff --git a/packages/design/src/Form/components/TextInput/TestInput.stories.tsx b/packages/design/src/Form/components/TextInput/TestInput.stories.tsx index dd40362cc..8ae4280b1 100644 --- a/packages/design/src/Form/components/TextInput/TestInput.stories.tsx +++ b/packages/design/src/Form/components/TextInput/TestInput.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import TextInput from '.'; -export default { +const meta: Meta = { title: 'patterns/TextInput', component: TextInput, decorators: [ @@ -21,8 +21,9 @@ export default { }, ], tags: ['autodocs'], -} satisfies Meta; +}; +export default meta; export const Required = { args: { _patternId: '', diff --git a/packages/design/src/Form/components/TextInput/index.tsx b/packages/design/src/Form/components/TextInput/index.tsx index a595a7822..154b166d4 100644 --- a/packages/design/src/Form/components/TextInput/index.tsx +++ b/packages/design/src/Form/components/TextInput/index.tsx @@ -29,7 +29,7 @@ const TextInput: PatternComponent = props => { id={`input-error-message-${props.inputId}`} role="alert" > - {props.error} + {props.error.message} )} = { title: 'FormManager/FormDelete', component: FormDelete, decorators: [ @@ -24,6 +24,7 @@ export default { }), }, tags: ['autodocs'], -} satisfies Meta; +}; +export default meta; export const FormDeleteTest = {} satisfies StoryObj; diff --git a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx index 7fce8cc90..dd7df1ec9 100644 --- a/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx +++ b/packages/design/src/FormManager/FormDocumentImport/DocumentImporter/DocumentImporter.stories.tsx @@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import DocumentImporter from '.'; import { createTestForm } from '../../../test-form'; -export default { +const meta: Meta = { title: 'FormManager/DocumentImporter', component: DocumentImporter, decorators: [ @@ -20,6 +20,7 @@ export default { form: createTestForm(), }, tags: ['autodocs'], -} as Meta; +}; +export default meta; export const TestForm = {} satisfies StoryObj; diff --git a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx index 10b31f631..e33730df5 100644 --- a/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx +++ b/packages/design/src/FormManager/FormEdit/FormEdit.stories.tsx @@ -8,7 +8,7 @@ import { FormManagerProvider } from '../store'; import FormEdit from '.'; import { createTestForm, createTestFormManagerContext } from '../../test-form'; -export default { +const meta: Meta = { title: 'FormManager/FormEdit', component: FormEdit, decorators: [ @@ -27,8 +27,9 @@ export default { formId: 'test-form', }, tags: ['autodocs'], -} satisfies Meta; +}; +export default meta; export const FormEditTest: StoryObj = { play: async ({ canvasElement }) => { await editFieldLabel(canvasElement, 'Pattern 1', 'Pattern 1 (updated)'); diff --git a/packages/design/src/FormManager/FormEdit/components/InputPatternEdit.tsx b/packages/design/src/FormManager/FormEdit/components/InputPatternEdit.tsx index f34f7a6b8..268dbc38f 100644 --- a/packages/design/src/FormManager/FormEdit/components/InputPatternEdit.tsx +++ b/packages/design/src/FormManager/FormEdit/components/InputPatternEdit.tsx @@ -108,6 +108,7 @@ const EditComponent = ({ patternId }: { patternId: PatternId }) => { type="checkbox" id={fieldId('required')} {...register('required')} + defaultChecked={pattern.data.required} />