@jmm-devkit/ngx-form-generator
v1.6.0
Published
Generates an Angular ReactiveForm from a Swagger or OpenAPI definition
Downloads
438
Maintainers
Readme
Changes and Improvements over the Original
Fixes
- Fixed the handling of the
propertiesproperty when generating fields from the OpenAPI definition. Now, ifpropertiesisundefined, an empty array is returned, allowing the rest of the code to execute correctly. - Added JSON parser for handling big integers.
Improvements
- The form constant is now an arrow function. This allows the form to be reused without persisting its state between uses, as previously, being an object, the form state was retained.
Angular Form Generator
Generates an Angular ReactiveForm from a Swagger or OpenAPI definition.
Validation rules should have a single source of truth. These rules should be exposed to consumers to apply them. By doing this we can be sure that the same rules for UI validation are enforced at the API layer.
Install
# install locally in project
npm install @jmm-devkit/ngx-form-generator --save-dev
# install globally
npm install @jmm-devkit/ngx-form-generator -gCLI Usage
ngx-form-generator -f swagger.json -o projects/forms/src/lib/
# when installed locally in project run with npx
npx ngx-form-generator -f swagger.yaml -o projects/forms/src/lib/| Option | Alias | Comment | Required | | ------------ | ---------------- | ------------------------------------------------ | -------- | | --version | | Show version number | | | --input-spec | -i, --swaggerUrl | Location of the OpenAPI spec as URL or file path | ✓ | | --output | -o, --outDir | Where to write the generated files | | | --file-name | -f, --outFile | Generated file name | | | --help | -h | Show help | |
Example CLI Usage
ngx-form-generator -i https://petstore.swagger.io/v2/swagger.json -o petstore-forms
ngx-form-generator -i https://petstore.swagger.io/v2/swagger.yaml -o petstore-forms
npx ngx-form-generator -i swagger.json -o project/form/src/libLibrary Usage
import { loadSpec, makeForm, saveFile } from '@verizonconnect/ngx-form-generator';
async function main() {
const spec = await loadSpec('swagger.json');
const form = makeForm(spec);
await saveFile(form, 'projects/forms/src/lib/index.ts');
}
await main();Examples Generated Form
import { FormGroup, FormControl, Validators } from '@angular/forms';
export const addressModelForm = () => new FormGroup({
firstName: new FormControl(null, [
Validators.required,
Validators.pattern(/^[a-zA-Z\'\s]+$/),
Validators.minLength(1),
Validators.maxLength(100)
]),
lastName: new FormControl(null, [
Validators.required,
Validators.pattern(/^[a-zA-Z\'\s]+$/),
Validators.minLength(1),
Validators.maxLength(100)
]),
address: new FormControl(null, [
Validators.required,
Validators.pattern(/^[\w\'\s]+$/),
Validators.minLength(1),
Validators.maxLength(100)
]),
address2: new FormControl(null, [
Validators.pattern(/^[\w\'\s]+$/),
Validators.minLength(1),
Validators.maxLength(100)
]),
city: new FormControl(null, [
Validators.required,
Validators.pattern(/^[\w\'\s]+$/),
Validators.minLength(1),
Validators.maxLength(100)
]),
postalCode: new FormControl(null, [
Validators.required,
Validators.pattern(/^[\w\s]+$/),
Validators.minLength(4),
Validators.maxLength(8)
]),
emailAddress: new FormControl(null, [
Validators.required,
Validators.pattern(/^[\w\@\!\#\%\&\'\*\+\-\/\=\?\`\{\|\}\~\.]+$/),
Validators.email
])
});