3.0.476 • Published 9 months ago

@defra/forms-model v3.0.476

Weekly downloads
-
License
OGL-UK-3.0
Repository
github
Last release
9 months ago

Defra forms model

A model and validation library for Defra forms, providing the foundation for form definitions, components, validation, and data handling.

Features

  • Form Definition - Core structures for forms, pages, components, and conditions
  • Component Library - Pre-defined form components with validation
  • JSON Schema - Ready-to-use JSON schema files for cross-platform validation
  • Conditions Engine - Logic for determining form flow and visibility
  • Type Definitions - Complete TypeScript type safety
  • Metadata Handling - Support for form metadata, versioning, and state management

Installation

npm install @defra/forms-model

Usage

Form Definition

import { createForm } from '@defra/forms-model';

const form = createForm({
  name: 'my-form',
  pages: [
    {
      path: '/start',
      title: 'Start page',
      components: [/* components */]
    }
  ],
  sections: [/* sections */]
});

Component Usage

import { ComponentType } from '@defra/forms-model';

const textField = {
  type: ComponentType.TextField,
  name: 'fullName',
  title: 'Full name',
  schema: {
    min: 2,
    max: 100
  }
};

Form Validation

JSON Schema Files

This package includes pre-generated JSON schema files for use with external JSON Schema validators/ IDEs linting etc:

import formSchema from '@defra/forms-model/schemas/form-definition-schema.json';

Available schema files include:

Form Definition Schemas
  • form-definition-schema.json - Full form definition validation
  • form-definition-v2-schema.json - Full form definition V2 validation
Component Schemas
  • component-schema.json - Component validation
  • component-schema-v2.json - Component validation (v2)
Page Schemas
  • page-schema.json - Page validation
  • page-schema-v2.json - Page validation (v2)
List Schemas
  • list-schema.json - List validation
  • list-schema-v2.json - List validation (v2)
Form Metadata Schemas
  • form-metadata-schema.json - Form metadata validation
  • form-metadata-author-schema.json - Form metadata author validation
  • form-metadata-input-schema.json - Form metadata input validation
  • form-metadata-state-schema.json - Form metadata state validation
Form Metadata Field Schemas
  • form-metadata-contact-schema.json - Contact information validation
  • form-metadata-email-schema.json - Email validation
  • form-metadata-online-schema.json - Online form metadata validation
Form Editor Schemas
  • form-editor-input-page-schema.json - Form editor input page validation
  • form-editor-input-check-answers-setting-schema.json - Check answers setting validation
  • form-editor-input-question-schema.json - Question input validation
  • form-editor-input-page-settings-schema.json - Page settings validation
Form Editor Field Schemas
  • page-type-schema.json - Page type validation
  • question-type-schema.json - Question type validation
  • question-type-full-schema.json - Full question type validation
  • written-answer-sub-schema.json - Written answer sub-schema validation
  • date-sub-schema.json - Date sub-schema validation
Form Submission Schemas
  • form-submit-payload-schema.json - Form submission payload validation
  • form-submit-record-schema.json - Form submission record validation
  • form-submit-recordset-schema.json - Form submission recordset validation
Form Manager Schemas
  • patch-page-schema.json - Patch page validation
Section Schemas
  • question-schema.json - Question validation
Validation Schemas
  • min-schema.json - Minimum value validation
  • max-schema.json - Maximum value validation
  • min-length-schema.json - Minimum length validation
  • max-length-schema.json - Maximum length validation
  • max-future-schema.json - Maximum future date validation
  • max-past-schema.json - Maximum past date validation
Common Schemas
  • search-options-schema.json - Search options validation
  • query-options-schema.json - Query options validation
  • pagination-options-schema.json - Pagination options validation
  • sorting-options-schema.json - Sorting options validation

Development

Test Coverage

Unit test coverage threshold, code coverage below which build will fail is set by using jest config, at the moment line coverage threshold is set as 92%, see jest.config.js

JSON Schema Generation and Publishing

This package generates JSON Schema files from Joi validation schemas during the build process. These schemas are included in the published npm package and are available at runtime.

How It Works

When you run npm run build, the script scripts/generate-schemas.js is executed which:

  1. Converts Joi validation schemas to JSON Schema format
  2. Enhances schemas with titles and descriptions
  3. Writes schema files to the schemas/ directory

Known Quirks

  1. First Build Required: After a fresh clone, you must run npm run build before the schema files will be available locally.

License

THIS INFORMATION IS LICENSED UNDER THE CONDITIONS OF THE OPEN GOVERNMENT LICENCE found at:

http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3

The following attribution statement MUST be cited in your products and applications when using this information. `

Contains public sector information licensed under the Open Government license v3

About the license

The Open Government Licence (OGL) was developed by the Controller of Her Majesty's Stationery Office (HMSO) to enable information providers in the public sector to license the use and re-use of their information under a common open licence.

It is designed to encourage use and re-use of information freely and flexibly, with only a few conditions.

3.0.400

1 year ago

3.0.402

1 year ago

3.0.401

1 year ago

3.0.404

12 months ago

3.0.403

1 year ago

3.0.475

9 months ago

3.0.474

9 months ago

3.0.476

9 months ago

3.0.471

9 months ago

3.0.470

9 months ago

3.0.473

9 months ago

3.0.472

9 months ago

3.0.464

9 months ago

3.0.463

9 months ago

3.0.466

9 months ago

3.0.465

9 months ago

3.0.468

9 months ago

3.0.467

9 months ago

3.0.469

9 months ago

3.0.460

9 months ago

3.0.462

9 months ago

3.0.461

9 months ago

3.0.449

10 months ago

3.0.453

9 months ago

3.0.452

9 months ago

3.0.455

9 months ago

3.0.454

9 months ago

3.0.457

9 months ago

3.0.456

9 months ago

3.0.459

9 months ago

3.0.458

9 months ago

3.0.451

9 months ago

3.0.450

9 months ago

3.0.439

11 months ago

3.0.438

11 months ago

3.0.442

10 months ago

3.0.441

10 months ago

3.0.444

10 months ago

3.0.443

10 months ago

3.0.446

10 months ago

3.0.445

10 months ago

3.0.448

10 months ago

3.0.447

10 months ago

3.0.440

11 months ago

3.0.428

11 months ago

3.0.427

11 months ago

3.0.429

11 months ago

3.0.431

11 months ago

3.0.430

11 months ago

3.0.433

11 months ago

3.0.432

11 months ago

3.0.435

11 months ago

3.0.434

11 months ago

3.0.437

11 months ago

3.0.436

11 months ago

3.0.417

12 months ago

3.0.416

12 months ago

3.0.419

12 months ago

3.0.418

12 months ago

3.0.420

12 months ago

3.0.422

11 months ago

3.0.421

11 months ago

3.0.424

11 months ago

3.0.423

11 months ago

3.0.426

11 months ago

3.0.425

11 months ago

3.0.406

12 months ago

3.0.405

12 months ago

3.0.408

12 months ago

3.0.407

12 months ago

3.0.409

12 months ago

3.0.411

12 months ago

3.0.410

12 months ago

3.0.413

12 months ago

3.0.412

12 months ago

3.0.415

12 months ago

3.0.414

12 months ago

3.0.398

1 year ago

3.0.397

1 year ago

3.0.399

1 year ago

3.0.390

1 year ago

3.0.392

1 year ago

3.0.391

1 year ago

3.0.394

1 year ago

3.0.393

1 year ago

3.0.396

1 year ago

3.0.395

1 year ago

3.0.387

1 year ago

3.0.386

1 year ago

3.0.389

1 year ago

3.0.388

1 year ago

3.0.381

1 year ago

3.0.383

1 year ago

3.0.382

1 year ago

3.0.385

1 year ago

3.0.384

1 year ago

3.0.380

1 year ago

3.0.379

1 year ago

3.0.376

1 year ago

3.0.375

1 year ago

3.0.378

1 year ago

3.0.377

1 year ago

3.0.370

1 year ago

3.0.371

1 year ago

3.0.374

1 year ago

3.0.373

1 year ago

3.0.365

1 year ago

3.0.364

1 year ago

3.0.367

1 year ago

3.0.366

1 year ago

3.0.369

1 year ago

3.0.368

1 year ago

3.0.361

1 year ago

3.0.360

1 year ago

3.0.363

1 year ago

3.0.362

1 year ago

3.0.354

1 year ago

3.0.353

1 year ago

3.0.356

1 year ago

3.0.355

1 year ago

3.0.358

1 year ago

3.0.357

1 year ago

3.0.359

1 year ago

3.0.352

1 year ago

3.0.350

1 year ago

3.0.351

1 year ago

3.0.345

1 year ago

3.0.344

1 year ago

3.0.347

1 year ago

3.0.346

1 year ago

3.0.349

1 year ago

3.0.348

1 year ago

3.0.339

1 year ago

3.0.343

1 year ago

3.0.342

1 year ago

3.0.341

1 year ago

3.0.340

1 year ago

3.0.334

1 year ago

3.0.333

1 year ago

3.0.336

1 year ago

3.0.335

1 year ago

3.0.338

1 year ago

3.0.337

1 year ago

3.0.329

1 year ago

3.0.328

1 year ago

3.0.332

1 year ago

3.0.331

1 year ago

3.0.330

1 year ago

3.0.321

1 year ago

3.0.323

1 year ago

3.0.322

1 year ago

3.0.325

1 year ago

3.0.324

1 year ago

3.0.327

1 year ago

3.0.326

1 year ago

3.0.318

1 year ago

3.0.319

1 year ago

3.0.320

1 year ago

3.0.317

1 year ago

3.0.316

1 year ago

3.0.315

1 year ago

3.0.312

1 year ago

3.0.311

1 year ago

3.0.314

1 year ago

3.0.313

1 year ago

3.0.307

1 year ago

3.0.306

1 year ago

3.0.309

1 year ago

3.0.308

1 year ago

3.0.310

1 year ago

3.0.305

1 year ago

3.0.304

1 year ago

3.0.301

1 year ago

3.0.300

1 year ago

3.0.303

1 year ago

3.0.302

1 year ago

3.0.299

1 year ago

3.0.298

1 year ago

3.0.291

1 year ago

3.0.290

1 year ago

3.0.293

1 year ago

3.0.292

1 year ago

3.0.295

1 year ago

3.0.294

1 year ago

3.0.297

1 year ago

3.0.296

1 year ago

3.0.288

1 year ago

3.0.287

1 year ago

3.0.289

1 year ago

3.0.286

1 year ago

3.0.285

1 year ago

3.0.280

1 year ago

3.0.282

1 year ago

3.0.281

1 year ago

3.0.284

1 year ago

3.0.283

1 year ago

3.0.190

2 years ago

3.0.199

2 years ago

3.0.192

2 years ago

3.0.191

2 years ago

3.0.194

2 years ago

3.0.193

2 years ago

3.0.196

2 years ago

3.0.195

2 years ago

3.0.198

2 years ago

3.0.197

2 years ago

3.0.189

2 years ago

3.0.188

2 years ago

3.0.181

2 years ago

3.0.180

2 years ago

3.0.183

2 years ago

3.0.182

2 years ago

3.0.185

2 years ago

3.0.184

2 years ago

3.0.187

2 years ago

3.0.186

2 years ago

3.0.178

2 years ago

3.0.177

2 years ago

3.0.179

2 years ago

3.0.170

2 years ago

3.0.172

2 years ago

3.0.171

2 years ago

3.0.174

2 years ago

3.0.173

2 years ago

3.0.176

2 years ago

3.0.175

2 years ago

3.0.167

2 years ago

3.0.166

2 years ago

3.0.169

2 years ago

3.0.168

2 years ago

3.0.161

2 years ago

3.0.160

2 years ago

3.0.163

2 years ago

3.0.162

2 years ago

3.0.165

2 years ago

3.0.164

2 years ago

3.0.277

2 years ago

3.0.156

2 years ago

3.0.276

2 years ago

3.0.155

2 years ago

3.0.279

2 years ago

3.0.158

2 years ago

3.0.278

2 years ago

3.0.157

2 years ago

3.0.159

2 years ago

3.0.271

2 years ago

3.0.150

2 years ago

3.0.270

2 years ago

3.0.273

2 years ago

3.0.152

2 years ago

3.0.272

2 years ago

3.0.151

2 years ago

3.0.275

2 years ago

3.0.154

2 years ago

3.0.274

2 years ago

3.0.153

2 years ago

3.0.266

2 years ago

3.0.145

2 years ago

3.0.265

2 years ago

3.0.144

2 years ago

3.0.268

2 years ago

3.0.147

2 years ago

3.0.267

2 years ago

3.0.146

2 years ago

3.0.149

2 years ago

3.0.269

2 years ago

3.0.148

2 years ago

3.0.260

2 years ago

3.0.262

2 years ago

3.0.141

2 years ago

3.0.261

2 years ago

3.0.140

2 years ago

3.0.264

2 years ago

3.0.143

2 years ago

3.0.263

2 years ago

3.0.142

2 years ago

3.0.255

2 years ago

3.0.134

2 years ago

3.0.254

2 years ago

3.0.133

2 years ago

3.0.257

2 years ago

3.0.136

2 years ago

3.0.256

2 years ago

3.0.135

2 years ago

3.0.259

2 years ago

3.0.138

2 years ago

3.0.258

2 years ago

3.0.137

2 years ago

3.0.139

2 years ago

3.0.251

2 years ago

3.0.130

2 years ago

3.0.250

2 years ago

3.0.253

2 years ago

3.0.132

2 years ago

3.0.252

2 years ago

3.0.131

2 years ago

3.0.244

2 years ago

3.0.123

2 years ago

3.0.243

2 years ago

3.0.122

2 years ago

3.0.246

2 years ago

3.0.125

2 years ago

3.0.245

2 years ago

3.0.124

2 years ago

3.0.248

2 years ago

3.0.127

2 years ago

3.0.247

2 years ago

3.0.126

2 years ago

3.0.129

2 years ago

3.0.249

2 years ago

3.0.128

2 years ago

3.0.240

2 years ago

3.0.242

2 years ago

3.0.241

2 years ago

3.0.229

2 years ago

3.0.233

2 years ago

3.0.232

2 years ago

3.0.235

2 years ago

3.0.234

2 years ago

3.0.237

2 years ago

3.0.236

2 years ago

3.0.239

2 years ago

3.0.238

2 years ago

3.0.231

2 years ago

3.0.230

2 years ago

3.0.219

2 years ago

3.0.218

2 years ago

3.0.222

2 years ago

3.0.221

2 years ago

3.0.224

2 years ago

3.0.223

2 years ago

3.0.226

2 years ago

3.0.225

2 years ago

3.0.228

2 years ago

3.0.227

2 years ago

3.0.220

2 years ago

3.0.208

2 years ago

3.0.207

2 years ago

3.0.209

2 years ago

3.0.211

2 years ago

3.0.210

2 years ago

3.0.213

2 years ago

3.0.212

2 years ago

3.0.215

2 years ago

3.0.214

2 years ago

3.0.217

2 years ago

3.0.216

2 years ago

3.0.200

2 years ago

3.0.202

2 years ago

3.0.201

2 years ago

3.0.204

2 years ago

3.0.203

2 years ago

3.0.206

2 years ago

3.0.205

2 years ago

3.0.119

2 years ago

3.0.121

2 years ago

3.0.120

2 years ago

3.0.116

2 years ago

3.0.118

2 years ago

3.0.117

2 years ago

3.0.112

2 years ago

3.0.111

2 years ago

3.0.114

2 years ago

3.0.113

2 years ago

3.0.115

2 years ago

3.0.109

2 years ago

3.0.108

2 years ago

3.0.110

2 years ago

3.0.105

2 years ago

3.0.107

2 years ago

3.0.106

2 years ago

3.0.101

2 years ago

3.0.100

2 years ago

3.0.103

2 years ago

3.0.102

2 years ago

3.0.104

2 years ago

3.0.98

2 years ago

3.0.99

2 years ago

3.0.96

2 years ago

3.0.97

2 years ago

3.0.95

2 years ago

3.0.93

2 years ago

3.0.94

2 years ago

3.0.89

2 years ago

3.0.87

2 years ago

3.0.88

2 years ago

3.0.85

2 years ago

3.0.86

2 years ago

3.0.92

2 years ago

3.0.90

2 years ago

3.0.91

2 years ago

3.0.81

2 years ago

3.0.82

2 years ago

3.0.80

2 years ago

3.0.83

2 years ago

3.0.84

2 years ago

3.0.78

2 years ago

3.0.79

2 years ago

3.0.76

2 years ago

3.0.77

2 years ago

3.0.74

2 years ago

3.0.75

2 years ago

3.0.73

2 years ago

3.0.70

2 years ago

3.0.71

2 years ago

3.0.72

2 years ago

3.0.67

2 years ago

3.0.68

2 years ago

3.0.65

2 years ago

3.0.66

2 years ago

3.0.69

2 years ago

3.0.59

2 years ago

3.0.60

2 years ago

3.0.63

2 years ago

3.0.64

2 years ago

3.0.61

2 years ago

3.0.62

2 years ago

3.0.56

2 years ago

3.0.57

2 years ago

3.0.55

2 years ago

3.0.58

2 years ago

3.0.54

2 years ago

3.0.53

2 years ago

3.0.49

2 years ago

3.0.48

2 years ago

3.0.52

2 years ago

3.0.50

2 years ago

3.0.51

2 years ago

3.0.45

2 years ago

3.0.46

2 years ago

3.0.44

2 years ago

3.0.47

2 years ago

3.0.43

2 years ago

3.0.41

2 years ago

3.0.42

2 years ago

3.0.40

2 years ago

3.0.38

2 years ago

3.0.39

2 years ago

3.0.34

2 years ago

3.0.35

2 years ago

3.0.32

2 years ago

3.0.33

2 years ago

3.0.36

2 years ago

3.0.37

2 years ago

3.0.30

2 years ago

3.0.31

2 years ago

3.0.29

2 years ago

3.0.28

2 years ago

3.0.27

2 years ago

3.0.25

2 years ago

3.0.26

2 years ago

3.0.23

2 years ago

3.0.24

2 years ago

3.0.22

2 years ago

3.0.21

2 years ago

3.0.20

2 years ago

3.0.19

2 years ago

3.0.16

2 years ago

3.0.17

2 years ago

3.0.18

2 years ago

3.0.12

2 years ago

3.0.13

2 years ago

3.0.14

2 years ago

3.0.15

2 years ago

3.0.10

2 years ago

3.0.11

2 years ago

3.0.9

2 years ago

3.0.8

2 years ago

3.0.7

2 years ago

3.0.6

2 years ago

3.0.4

2 years ago

3.0.5

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago