Forms
Audit-grade questionnaire and form primitive — versioned definitions, append-only submissions, role-sliced rendering.
Found by static analysis of the 0.9.0 source. Links that only appear at runtime are not visible here.
Everything forms needs outside the starter set is declared. 1 link into a starter module is not, and every app has it.
Before you enable forms in 0.9.0
3 modules its code requires
✓ 2 declared1 not declared, in every app
Enable these yourself, they are not in every starter app
Already enabled in every starter app: 2 modules.
1 call could not be resolved. See Couldn't resolve.
Before you disable forms in 0.9.0
0 modules require it in code
No module requires forms in code.
35 calls in this release could not be resolved, so this is not a guarantee.
requires ⚠ Gap into a module every starter app has (lower risk) Optional Collaboration In requires only, not seen in code In every starter appA dot takes its module's area colour. Each side lists the areas in the order of the map.Reads left to right: what uses it → forms → what it needs. Select a module to go to its row.Needs
| Module | In code | requires | package.json |
|---|---|---|---|
Module: customer_accounts | In code: Required · api, lib | requires: ✓ Declared | package.json: Same package |
8 places
| |||
In every app (2)
| Module | In code | requires | package.json |
|---|---|---|---|
Module: attachments | In code: Required · api | requires: ✓ Declared | package.json: Same package |
4 places
| |||
Module: directory | In code: Required · api | requires: ⚠ Gap in every app | package.json: Same package |
1 place
| |||
Used by
No module uses forms in code or declares it in requires.
35 calls elsewhere could not be resolved, so this is not a guarantee.
Couldn't resolve (1)
These calls pick a service by a variable, so static analysis can't tell which module they need. Check them in the code.
packages/core/src/modules/forms/subscribers/forms-webhook-bridge.ts:41·container.resolve(key)
Facts
Registers in DI (17)
fieldTypeRegistry·packages/core/src/modules/forms/di.ts:78formVersionCompiler·packages/core/src/modules/forms/di.ts:79formVersionDiffer·packages/core/src/modules/forms/di.ts:80formsRolePolicyService·packages/core/src/modules/forms/di.ts:81formsAccessAuditLogger·packages/core/src/modules/forms/di.ts:82formsEncryptionService·packages/core/src/modules/forms/di.ts:83formsSubmissionService·packages/core/src/modules/forms/di.ts:93formsDistributionService·packages/core/src/modules/forms/di.ts:122formsAnonymizeService·packages/core/src/modules/forms/di.ts:133formsAnalyticsService·packages/core/src/modules/forms/di.ts:143formsConsentRecordService·packages/core/src/modules/forms/di.ts:155formsExportService·packages/core/src/modules/forms/di.ts:182formsUploadScanner·packages/core/src/modules/forms/di.ts:191formsPrefillResolver·packages/core/src/modules/forms/di.ts:196formsCaptchaVerifier·packages/core/src/modules/forms/di.ts:203formsAttachmentService·packages/core/src/modules/forms/di.ts:206formsPdfSnapshotService·packages/core/src/modules/forms/di.ts:226
Emits events (4)
forms.submission.anonymized·packages/core/src/modules/forms/api/submissions/[submissionId]/anonymize/route.ts:95forms.attachment.uploaded·packages/core/src/modules/forms/services/pdf-snapshot-service.ts:285forms.consent.recorded·packages/core/src/modules/forms/subscribers/forms-consent-projector.ts:84forms.submission.anonymized·packages/core/src/modules/forms/workers/retention-purge.ts:145
Subscribes to events (5)
forms.submission.submitted·packages/core/src/modules/forms/subscribers/forms-consent-projector.ts:26forms.submission.submitted·packages/core/src/modules/forms/subscribers/forms-pdf-snapshot.ts:28forms.submission.anonymized·packages/core/src/modules/forms/subscribers/forms-webhook-bridge-anonymized.ts:7forms.submission.submitted·packages/core/src/modules/forms/subscribers/forms-webhook-bridge.ts:13forms.invitation.sent·packages/core/src/modules/forms/subscribers/invitation-email.ts:33
Hosts widget spots (4)
submission-drawer:header-actions·packages/core/src/modules/forms/extension-points.ts:14submission-drawer:anonymize-action·packages/core/src/modules/forms/extension-points.ts:20submission-drawer:access-audit·packages/core/src/modules/forms/extension-points.ts:26submission-drawer:footer·packages/core/src/modules/forms/extension-points.ts:32
Fills widget spots (4)
submission-drawer:header-actions·packages/core/src/modules/forms/widgets/injection-table.ts:28submission-drawer:anonymize-action·packages/core/src/modules/forms/widgets/injection-table.ts:34submission-drawer:access-audit·packages/core/src/modules/forms/widgets/injection-table.ts:40submission-drawer:footer·packages/core/src/modules/forms/widgets/injection-table.ts:46
Entities (11)
Form·packages/core/src/modules/forms/data/entities.ts:12FormVersion·packages/core/src/modules/forms/data/entities.ts:75FormSubmission·packages/core/src/modules/forms/data/entities.ts:141FormSubmissionActor·packages/core/src/modules/forms/data/entities.ts:206FormSubmissionRevision·packages/core/src/modules/forms/data/entities.ts:254FormsEncryptionKey·packages/core/src/modules/forms/data/entities.ts:303FormAccessAudit·packages/core/src/modules/forms/data/entities.ts:337FormAttachment·packages/core/src/modules/forms/data/entities.ts:382FormDistribution·packages/core/src/modules/forms/data/entities.ts:447FormConsentRecord·packages/core/src/modules/forms/data/entities.ts:538FormInvitation·packages/core/src/modules/forms/data/entities.ts:617