diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index 7fe57b3..214ccbe 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [10.x, 12.x, 14.x, 15.x] + node-version: [20.x, 21.x, 22.x] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/npmjs-release.yml b/.github/workflows/npmjs-release.yml index 2adee8a..6fbf07c 100644 --- a/.github/workflows/npmjs-release.yml +++ b/.github/workflows/npmjs-release.yml @@ -11,7 +11,7 @@ jobs: # Setup .npmrc file to publish to npm - uses: actions/setup-node@v2 with: - node-version: '15.x' + node-version: '20.x' registry-url: 'https://registry.npmjs.org' - run: npm ci - run: npm test diff --git a/MAINTAINERS.md b/MAINTAINERS.md index b0a266b..1127b64 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,4 +1,11 @@ -# Serverless Workflow Typescript SDK Maintainers +# Serverless Workflow Org Maintainers +* [Jean-Baptiste Bianchi](https://github.com/JBBianchi) +* [Charles d'Avernas](https://github.com/cdavernas) +* [Ricardo Zanini](https://github.com/ricardozanini) + +# Serverless Workflow Org Emeritus Maintainers * [Antonio Mendoza PĂ©rez](https://github.com/antmendoza) -* [Tihomir Surdilovic](https://github.com/tsurdilo) + +# Maintainers Mailing list +[cncf-serverlessws-maintainers](mailto:cncf-serverlessws-maintainers@lists.cncf.io) \ No newline at end of file diff --git a/README.md b/README.md index 0381af1..530e79a 100644 --- a/README.md +++ b/README.md @@ -1,215 +1,250 @@ ![Node CI](https://github.com/serverlessworkflow/sdk-typescript/workflows/Node%20CI/badge.svg) [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/serverlessworkflow/sdk-typescript) -# Serverless Workflow Specification - Typescript SDK +# Serverless Workflow Specification - TypeScript SDK -Provides the Typescript API/SPI for the [Serverless Workflow Specification](https://github.com/serverlessworkflow/specification) +This SDK provides a TypeScript API for working with the [Serverless Workflow Specification](https://github.com/serverlessworkflow/specification). -With the SDK you can: -* Parse workflow JSON and YAML definitions +With this SDK, you can: +* Parse workflow definitions in JSON and YAML formats * Programmatically build workflow definitions * Validate workflow definitions +## Status +The npm [`@serverlessworkflow/sdk`](https://www.npmjs.com/package/@serverlessworkflow/sdk) package versioning aligns with the versioning of the [specification](https://github.com/serverlessworkflow/specification): -### Status +| Latest Releases | Conformance to Spec Version | +| :---: | :---: | +| [v1.0.0-alpha5.\*](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v1.0.0-alpha5](https://github.com/serverlessworkflow/specification) | + +> [!WARNING] +> Previous versions of the SDK were published with a typo in the scope: +> @severlessworkflow/sdk-typescript instead of +> @se**r**verlessworkflow/sdk-typescript -| Latest Releases | Conformance to spec version | +| Latest Releases | Conformance to Spec Version | | :---: | :---: | | [v1.0.0](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v0.6](https://github.com/serverlessworkflow/specification/tree/0.6.x) | | [v2.0.0](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v0.7](https://github.com/serverlessworkflow/specification/tree/0.7.x) | | [v3.0.0](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v0.8](https://github.com/serverlessworkflow/specification/tree/0.8.x) | +## SDK Structure +This SDK includes the following key components: +### Types and Interfaces +The SDK provides various TypeScript types and interfaces that ensure type safety and enhance the development experience by catching type errors during compile time. -## Getting Started +To avoid confusion with classes, these types and interfaces are exported under the **`Specification`** object, e.g., `Specification.Workflow`. -### Building locally +### Classes +The SDK includes classes that correspond to the aforementioned types and interfaces. These classes offer: -To build the project and run tests locally: +- **Instance Checking**: Easily verify if an object is an instance of a specific class. +- **Self-Validation**: Validate the internal state of an object to ensure it adheres to the expected structure. +- **Normalization**: Methods to normalize object data, ensuring consistent formatting and values. -```sh -git clone https://github.com/serverlessworkflow/sdk-typescript.git -cd sdk-typescript -npm install && npm run build && npm run test -``` +To avoid confusion with type definitions, these classes are exported under the **`Classes`** object, e.g., `Classes.Workflow`. +### Fluent Builders +The fluent builders wrap the core classes and provide a fluent API for constructing objects. This API allows you to chain method calls and configure objects in a more readable and convenient manner. -### How to use +The fluent builders are directly exported as `**Builder`, e.g., `workflowBuilder`. -#### Install +By default, built objects are self-validated and self-normalized. `BuildOptions` can be passed to the `build()` method to disable validation or normalization. +### Validation Function +The SDK includes a validation function to check if objects conform to the expected schema. This function ensures that your workflow objects are correctly structured and meet the required specifications. -##### Version >= 4.0.0 -Note: Version 4.0.0 has not been released yet. -```sh -npm i @serverlessworkflow/sdk-typescript -``` +The `validate` function is directly exported and can be used as `validate('Workflow', workflowObject)`. +## Getting Started + +### Installation +> [!NOTE] +> Version v1.0.0-alpha5.\* has not been released yet. -##### Version < 4.0.0 ```sh -npm i @severlessworkflow/sdk-typescript +npm install @serverlessworkflow/sdk ``` - - -#### Create Workflow using builder API +### Usage +#### Create a Workflow Definition from YAML or JSON +You can deserialize a YAML or JSON representation of the workflow using the static method `Classes.Workflow.deserialize`: ```typescript -import { workflowBuilder, injectstateBuilder, Specification } from '@serverlessworkflow/sdk-typescript'; - -const workflow: Specification.Workflow = workflowBuilder() - .id("helloworld") - .specVersion("0.8") - .version("1.0") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([ - injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .build() - ]) - .build(); +import { Classes } from '@serverlessworkflow/sdk'; + +// const text = await readFile('/some/path/my-workflow-definition.yaml', { encoding: 'utf8' }); +// const text = await fetch('https://myserver.com/my-workflow-definition.json'); +const text = ` +document: + dsl: 1.0.0-alpha5 + name: test + version: 1.0.0 + namespace: default +do: +- step1: + set: + variable: 'my first workflow' +`; +const workflowDefinition = Classes.Workflow.deserialize(text); ``` -#### Create Workflow from JSON/YAML source +#### Create a Workflow Definition by Casting an Object +You can type-cast an object to match the structure of a workflow definition: ```typescript -import { Specification, Workflow } from '@serverlessworkflow/sdk-typescript'; - -const source = `id: helloworld -version: '1.0' -specVerion: '0.8' -name: Hello World Workflow -description: Inject Hello World -start: Hello State -states: - - type: inject - name: Hello State - data: - result: Hello World! - end: true` - -const workflow: Specification.Workflow = Workflow.fromSource(source); +import { Classes, Specification, validate } from '@serverlessworkflow/sdk'; + +// Simply cast an object: +const workflowDefinition = { + document: { + dsl: '1.0.0-alpha5', + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [ + { + step1: { + set: { + variable: 'my first workflow', + }, + }, + }, + ], +} as Specification.Workflow; + +// Validate it +try { + validate('Workflow', workflowDefinition); + // Serialize it + const definitionTxt = Classes.Workflow.serialize(workflowDefinition); +} +catch (ex) { + // Invalid workflow definition +} ``` -Where `source` can be in both JSON or YAML format. - -#### Parse a Workflow instance to JSON/YAML -Having the following workflow instance: +#### Create a Workflow Definition Using a Class Constructor +You can create a workflow definition by calling a constructor: ```typescript -import { workflowBuilder, injectstateBuilder, Specification } from '@serverlessworkflow/sdk-typescript'; - -const workflow: Specification.Workflow = workflowBuilder() - .id("helloworld") - .version("1.0") - .specVersion("0.8") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([ - injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .end(true) - .build() - ]) - .build(); +import { Classes, validate } from '@serverlessworkflow/sdk'; + +// Simply use the constructor +const workflowDefinition = new Classes.Workflow({ + document: { + dsl: '1.0.0-alpha5', + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [/* + { + step1: { + set: { + variable: 'my first workflow', + }, + }, + }, + */], +}); +workflowDefinition.do.push({ + step1: new Classes.SetTask({ + set: { + variable: 'my first workflow', + } + }) +}); + +// Validate it +try { + workflowDefinition.validate(); + // Serialize it + const definitionTxt = workflowDefinition.serialize(); +} +catch (ex) { + // Invalid workflow definition +} ``` -You can convert it to its string representation in JSON or YAML format -by using the static methods `Workflow.toJson` or `Workflow.toYaml` respectively: +#### Create a Workflow Definition Using the Builder API +You can use the fluent API to build a validated and normalized workflow definition: ```typescript -import {Specification, workflowBuilder} from "@severlessworkflow/sdk-typescript"; - -const workflow: Specification.Workflow = workflowBuilder() - //... +import { documentBuilder, setTaskBuilder, taskListBuilder, workflowBuilder } from '@serverlessworkflow/sdk'; + +const workflowDefinition = workflowBuilder(/*workflowDefinitionObject*/) + .document( + documentBuilder() + .dsl('1.0.0-alpha5') + .name('test') + .version('1.0.0') + .namespace('default') .build() - -const workflowAsJson: string = Specification.Workflow.toJson(workflow); -``` - -```typescript -import {Specification, workflowBuilder} from "@severlessworkflow/sdk-typescript"; - -const workflow: Specification.Workflow = workflowBuilder() - //... - .build() - -const workflowAsYaml: string = Specification.Workflow.toYaml(workflow); + ) + .do( + taskListBuilder() + .push({ + step1: setTaskBuilder() + .set({ + variable: 'my first workflow' + }) + .build() + }) + .build() + ) + .build(/*{ + validate: false, + normalize: false + }*/); ``` - -#### Validate workflow definitions - -The sdk provides a way to validate if a workflow object is compliant with the serverlessworkflow specification. - -`WorkflowValidator` class provides a validation method: - -- `validate(): boolean` +#### Serialize a Workflow Definition to YAML or JSON +You can serialize a workflow definition either by using its `serialize` method if it's an instance or the static method with the same name: ```typescript -import {WorkflowValidator, Specification} from '@serverlessworkflow/sdk-typescript'; -import {Workflow} from "./workflow"; - -const workflow = { - id: 'helloworld', - version: '1.0', - specVersion: '0.3', - name: 'Hello World Workflow', - description: 'Inject Hello World', - start: 'Hello State', - states: [ - { - type: 'inject', - name: 'Hello State', - end: true, - data: { - result: "Hello World!" - } - } - ] -}; - -const workflowValidator: WorkflowValidator = new WorkflowValidator(Workflow.fromSource(JSON.stringify(workflow))); -if (!workflowValidator.isValid) { - workflowValidator.errors.forEach(error => console.error((error as ValidationError).message)); +import { Classes } from '@serverlessworkflow/sdk'; + +// const workflowDefinition = ; +if (workflowDefinition instanceof Classes.Workflow) { + const yaml = workflowDefinition.serialize(/*'yaml' | 'json' */); +} +else { + const json = Classes.Workflow.serialize(workflowDefinition, 'json'); } ``` +> [!NOTE] +> The default serialization format is YAML. -You can also validate parts of a workflow using `validators`: +#### Validate Workflow Definitions +Validation can be achieved in two ways: via the `validate` function or the instance `validate` method: ```typescript -import { ValidateFunction } from 'ajv'; -import { validators, Specification } from '@serverlessworkflow/sdk-typescript'; - -const injectionState: Specification.Injectstate = workflow.states[0]; -const injectionStateValidator: ValidateFunction = validators.get('Injectstate'); -if (!injectionStateValidator(injectionState)) { - injectionStateValidator.errors.forEach(error => console.error(error.message)); +import { Classes, validate } from '@serverlessworkflow/sdk'; + +// const workflowDefinition = ; +try { + if (workflowDefinition instanceof Classes.Workflow) { + workflowDefinition.validate(); + } + else { + validate('Workflow', workflowDefinition); + } +} +catch (ex) { + // Workflow definition is invalid } ``` +### Building Locally -#### Generate workflow diagram - -It is possible to generate the workflow diagram with [Mermaid](https://github.com/mermaid-js/mermaid) - +To build the project and run tests locally, use the following commands: -``` -const workflow = workflowBuilder() - .id("helloworld") - .... - .build(); - -const mermaidSourceCode = new MermaidDiagram(workflow).sourceCode(); +```sh +git clone https://github.com/serverlessworkflow/sdk-typescript.git +cd sdk-typescript +npm install && npm run build && npm run test ``` -[Here](./examples/browser/mermaid.html) you can see a full example that uses mermaid in the browser to generate the workflow diagram. +If you're interested in contributing, reading the [Tooling Architecture](/tools/README.md) is a good place to start. \ No newline at end of file diff --git a/examples/browser/index.html b/examples/browser/index.html deleted file mode 100644 index 717fdb2..0000000 --- a/examples/browser/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Serveless Workflow JS SDK - - - - - -
- - - - diff --git a/examples/browser/mermaid.html b/examples/browser/mermaid.html deleted file mode 100644 index 95c1249..0000000 --- a/examples/browser/mermaid.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - Serveless Workflow JS SDK - - - - - -
- - - - - - - - diff --git a/examples/browser/using-class.html b/examples/browser/using-class.html new file mode 100644 index 0000000..ba0ee64 --- /dev/null +++ b/examples/browser/using-class.html @@ -0,0 +1,44 @@ + + + + + + Serveless Workflow + + + + + +

+  
+  
+
+
+
\ No newline at end of file
diff --git a/examples/browser/using-fluent-api.html b/examples/browser/using-fluent-api.html
new file mode 100644
index 0000000..89ac64f
--- /dev/null
+++ b/examples/browser/using-fluent-api.html
@@ -0,0 +1,36 @@
+
+
+
+
+  
+  Serveless Workflow
+  
+  
+
+
+
+  

+  
+  
+
+
+
\ No newline at end of file
diff --git a/examples/browser/using-json.html b/examples/browser/using-json.html
new file mode 100644
index 0000000..c5aebca
--- /dev/null
+++ b/examples/browser/using-json.html
@@ -0,0 +1,40 @@
+
+
+
+
+  
+  Serveless Workflow
+  
+  
+
+
+
+  

+  
+  
+
+
+
\ No newline at end of file
diff --git a/examples/browser/using-plain-object.html b/examples/browser/using-plain-object.html
new file mode 100644
index 0000000..f22b62c
--- /dev/null
+++ b/examples/browser/using-plain-object.html
@@ -0,0 +1,45 @@
+
+
+
+
+  
+  Serveless Workflow
+  
+  
+
+
+
+  

+  
+  
+
+
+
\ No newline at end of file
diff --git a/examples/node/index.js b/examples/node/index.js
deleted file mode 100644
index d4bfb80..0000000
--- a/examples/node/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const { workflowBuilder, injectstateBuilder } = require('../../dist');
-const workflow = workflowBuilder()
-                  .id("helloworld")
-                  .version("1.0")
-                  .name("Hello World Workflow")
-                  .description("Inject Hello World")
-                  .start("Hello State")
-                  .states([
-                    injectstateBuilder()
-                      .name("Hello State")
-                      .data({
-                          "result": "Hello World!"
-                      })
-                      .end(true)
-                      .build()
-                  ])
-                  .build();
-console.log(workflow.id);
\ No newline at end of file
diff --git a/examples/node/index.ts b/examples/node/index.ts
deleted file mode 100644
index 2425e1a..0000000
--- a/examples/node/index.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { injectstateBuilder, Specification, workflowBuilder } from '../../dist';
-
-const workflow: Specification.Workflow = workflowBuilder()
-  .id('helloworld')
-  .version('1.0')
-  .name('Hello World Workflow')
-  .description('Inject Hello World')
-  .start('Hello State')
-  .states([
-    injectstateBuilder()
-      .name('Hello State')
-      .data({
-        result: 'Hello World!',
-      })
-      .end(true)
-      .build(),
-  ])
-  .build();
-console.log(workflow.id);
diff --git a/examples/node/tsconfig.json b/examples/node/tsconfig.json
index a86f07e..4280ce7 100644
--- a/examples/node/tsconfig.json
+++ b/examples/node/tsconfig.json
@@ -1,3 +1,3 @@
-{
-  "extends": "../../tsconfig.base.json"
-}
+{
+  "extends": "../../tsconfig.base.json"
+}
\ No newline at end of file
diff --git a/tests/lib/definitions/branch.spec.ts b/examples/node/using-class.ts
similarity index 53%
rename from tests/lib/definitions/branch.spec.ts
rename to examples/node/using-class.ts
index 976113b..8537eaa 100644
--- a/tests/lib/definitions/branch.spec.ts
+++ b/examples/node/using-class.ts
@@ -12,19 +12,31 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
+import { Classes } from /*'@serverlessworkflow/sdk';*/ '../../dist';
+const { Workflow } = Classes;
 
-import { Branch } from '../../../src/lib/definitions/branch';
-
-describe('Branch ', () => {
-  it('should convert non-primitive properties to the desired class', () => {
-    const data = {
-      actions: [{}],
-    };
-
-    const model = new Branch(data);
-
-    expect(model.actions![0].constructor.name).toBe('Action');
-  });
+const workflow = new Workflow({
+  document: {
+    dsl: '1.0.0-alpha5',
+    name: 'using-class',
+    version: '1.0.0',
+    namespace: 'default',
+  },
+  do: [
+    {
+      step1: {
+        set: {
+          variable: 'my first workflow',
+        },
+      },
+    },
+  ],
 });
+
+try {
+  workflow.validate();
+  console.log(`--- YAML ---\n${workflow.serialize()}\n\n--- JSON ---\n${workflow.serialize('json')}`);
+} catch (ex) {
+  console.error('Invalid workflow', ex);
+}
diff --git a/src/lib/diagram/mermaidDiagram.ts b/examples/node/using-fluent-api.ts
similarity index 50%
rename from src/lib/diagram/mermaidDiagram.ts
rename to examples/node/using-fluent-api.ts
index a8ef7ea..7020897 100644
--- a/src/lib/diagram/mermaidDiagram.ts
+++ b/examples/node/using-fluent-api.ts
@@ -13,23 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Specification } from '../definitions';
-import { MermaidState } from './mermaidState';
+import {
+  documentBuilder,
+  setTaskBuilder,
+  taskListBuilder,
+  workflowBuilder,
+} from /*'@serverlessworkflow/sdk';*/ '../../dist';
 
-export class MermaidDiagram {
-  constructor(private workflow: Specification.Workflow) {}
-
-  sourceCode() {
-    const mermaidStateDiagramVersion = 'stateDiagram-v2';
-    return (
-      mermaidStateDiagramVersion +
-      '\n' +
-      this.workflow.states
-        .map((state, index) => {
-          const isFirstState = index === 0;
-          return new MermaidState(state, isFirstState).sourceCode();
+try {
+  const workflow = workflowBuilder()
+    .document(
+      documentBuilder().dsl('1.0.0-alpha5').name('using-fluent-api').version('1.0.0').namespace('default').build(),
+    )
+    .do(
+      taskListBuilder()
+        .push({
+          step1: setTaskBuilder().set({ foo: 'bar' }).build(),
         })
-        .join('\n\n')
-    );
-  }
+        .build(),
+    )
+    .build();
+  console.log(`--- YAML ---\n${workflow.serialize()}\n\n--- JSON ---\n${workflow.serialize('json')}`);
+} catch (ex) {
+  console.error('Invalid workflow', ex);
 }
diff --git a/examples/node/using-json.ts b/examples/node/using-json.ts
new file mode 100644
index 0000000..cad31c3
--- /dev/null
+++ b/examples/node/using-json.ts
@@ -0,0 +1,22 @@
+import { Classes } from /*'@serverlessworkflow/sdk';*/ '../../dist';
+
+const myJsonWorkflow = `
+{
+  "document": {
+    "dsl": "1.0.0-alpha5",
+    "name": "using-json",
+    "version": "1.0.0",
+    "namespace": "default"
+  },
+  "do": [
+    {
+      "step1": {
+        "set": {
+          "variable": "my first workflow"
+        }
+      }
+    }
+  ]
+}`;
+const workflow = Classes.Workflow.deserialize(myJsonWorkflow);
+console.log(`--- YAML ---\n${workflow.serialize()}\n\n--- JSON ---\n${workflow.serialize('json')}`);
diff --git a/examples/node/using-plain-object.ts b/examples/node/using-plain-object.ts
new file mode 100644
index 0000000..449171c
--- /dev/null
+++ b/examples/node/using-plain-object.ts
@@ -0,0 +1,27 @@
+import { Classes, Specification, validate } from /*'@serverlessworkflow/sdk';*/ '../../dist';
+
+const workflowDefinition = {
+  document: {
+    dsl: '1.0.0-alpha5',
+    name: 'using-plain-object',
+    version: '1.0.0',
+    namespace: 'default',
+  },
+  do: [
+    {
+      step1: {
+        set: {
+          variable: 'my first workflow',
+        },
+      },
+    },
+  ],
+} as Specification.Workflow;
+try {
+  validate('Workflow', workflowDefinition);
+  console.log(
+    `--- YAML ---\n${Classes.Workflow.serialize(workflowDefinition)}\n\n--- JSON ---\n${Classes.Workflow.serialize(workflowDefinition, 'json')}`,
+  );
+} catch (ex) {
+  console.error('Invalid workflow', ex);
+}
diff --git a/jest.config.js b/jest.config.js
index d605f1c..8b7fb4d 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,6 +1,7 @@
-/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
+/** @type {import('ts-jest/dist/types').JestConfigWithTsJest} */
 module.exports = {
   preset: 'ts-jest',
   testEnvironment: 'node',
-  testPathIgnorePatterns: [".d.ts", ".js"]
+  testPathIgnorePatterns: [".d.ts", ".js"],
+  modulePathIgnorePatterns: ['/dist/', '/out-tsc/'],
 };
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index cd3ae34..325da6b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,106 +1,130 @@
 {
-  "name": "@serverlessworkflow/sdk-typescript",
-  "version": "4.0.0",
-  "lockfileVersion": 2,
+  "name": "@serverlessworkflow/sdk",
+  "version": "1.0.0-alpha5.0",
+  "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "@serverlessworkflow/sdk-typescript",
-      "version": "4.0.0",
+      "name": "@serverlessworkflow/sdk",
+      "version": "1.0.0-alpha5.0",
       "license": "http://www.apache.org/licenses/LICENSE-2.0.txt",
       "dependencies": {
-        "ajv": "^8.1.0",
+        "ajv": "^8.17.1",
+        "ajv-formats": "^3.0.1",
         "js-yaml": "^4.1.0"
       },
       "devDependencies": {
-        "@apidevtools/json-schema-ref-parser": "^9.0.7",
-        "@dtsgenerator/replace-namespace": "^1.4.1",
-        "@rollup/plugin-commonjs": "^19.0.0",
-        "@rollup/plugin-json": "^4.1.0",
-        "@rollup/plugin-node-resolve": "^13.0.0",
-        "@types/jest": "^27.0.3",
-        "@types/js-yaml": "^4.0.1",
-        "@types/node-fetch": "^2.5.10",
-        "@types/rimraf": "^3.0.0",
-        "@types/yargs": "^16.0.1",
-        "@typescript-eslint/eslint-plugin": "^4.23.0",
-        "@typescript-eslint/parser": "^4.23.0",
-        "dtsgenerator": "^3.10.0",
-        "eslint": "^7.26.0",
-        "eslint-config-prettier": "^8.3.0",
-        "eslint-plugin-prettier": "^3.4.0",
-        "husky": "6.0.0",
-        "jest": "^27.4.3",
-        "lint-staged": "11.0.0",
-        "node-fetch": "^2.6.1",
-        "prettier": "^2.3.0",
-        "rimraf": "^3.0.2",
-        "rollup": "^2.47.0",
+        "@apidevtools/json-schema-ref-parser": "^11.6.4",
+        "@rollup/plugin-commonjs": "^26.0.1",
+        "@rollup/plugin-json": "^6.1.0",
+        "@rollup/plugin-node-resolve": "^15.2.3",
+        "@types/jest": "^29.5.12",
+        "@types/js-yaml": "^4.0.9",
+        "@types/node-fetch": "^2.6.11",
+        "@types/rimraf": "^4.0.5",
+        "@types/yargs": "^17.0.32",
+        "@typescript-eslint/eslint-plugin": "^7.16.1",
+        "@typescript-eslint/parser": "^7.16.1",
+        "eslint": "^8.57.0",
+        "eslint-config-prettier": "^9.1.0",
+        "eslint-plugin-prettier": "^5.1.3",
+        "husky": "^9.0.11",
+        "jest": "^29.7.0",
+        "json-schema-to-typescript": "^15.0.2",
+        "lint-staged": "^15.2.7",
+        "node-fetch": "^3.3.2",
+        "prettier": "^3.3.3",
+        "rimraf": "^6.0.1",
+        "rollup": "^2.79.1",
         "rollup-plugin-sourcemaps": "^0.6.3",
         "rollup-plugin-terser": "^7.0.2",
-        "rollup-plugin-typescript2": "^0.31.0",
+        "rollup-plugin-typescript2": "^0.36.0",
         "shx": "^0.3.4",
-        "ts-jest": "^27.1.0",
-        "ts-node": "^9.1.1",
-        "typescript": "^4.2.4",
-        "yargs": "^17.0.1"
+        "ts-inference-check": "^0.3.0",
+        "ts-jest": "^29.2.2",
+        "ts-morph": "^23.0.0",
+        "ts-node": "^10.9.2",
+        "typescript": "^5.5.3",
+        "yargs": "^17.7.2"
+      },
+      "engines": {
+        "node": ">=20.0",
+        "npm": ">=10.0.0"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
       },
       "engines": {
-        "node": ">=15.0",
-        "npm": ">=7.0.0"
+        "node": ">=6.0.0"
       }
     },
     "node_modules/@apidevtools/json-schema-ref-parser": {
-      "version": "9.0.9",
-      "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
-      "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
+      "version": "11.6.4",
+      "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.6.4.tgz",
+      "integrity": "sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==",
       "dev": true,
       "dependencies": {
         "@jsdevtools/ono": "^7.1.3",
-        "@types/json-schema": "^7.0.6",
-        "call-me-maybe": "^1.0.1",
+        "@types/json-schema": "^7.0.15",
         "js-yaml": "^4.1.0"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/philsturgeon"
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.12.11",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
-      "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.10.4"
+        "@babel/highlight": "^7.24.7",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.16.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
-      "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
+      "version": "7.24.9",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz",
+      "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
-      "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.16.0",
-        "@babel/generator": "^7.16.0",
-        "@babel/helper-compilation-targets": "^7.16.0",
-        "@babel/helper-module-transforms": "^7.16.0",
-        "@babel/helpers": "^7.16.0",
-        "@babel/parser": "^7.16.0",
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0",
-        "convert-source-map": "^1.7.0",
+      "version": "7.24.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz",
+      "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.24.9",
+        "@babel/helper-compilation-targets": "^7.24.8",
+        "@babel/helper-module-transforms": "^7.24.9",
+        "@babel/helpers": "^7.24.8",
+        "@babel/parser": "^7.24.8",
+        "@babel/template": "^7.24.7",
+        "@babel/traverse": "^7.24.8",
+        "@babel/types": "^7.24.9",
+        "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
-        "json5": "^2.1.2",
-        "semver": "^6.3.0",
-        "source-map": "^0.5.0"
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -110,18 +134,6 @@
         "url": "https://opencollective.com/babel"
       }
     },
-    "node_modules/@babel/core/node_modules/@babel/code-frame": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
-      "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.16.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/core/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -131,24 +143,15 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/core/node_modules/source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/@babel/generator": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
-      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+      "version": "7.24.10",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz",
+      "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.23.6",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
+        "@babel/types": "^7.24.9",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
       },
       "engines": {
@@ -156,21 +159,19 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.16.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
-      "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz",
+      "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.16.0",
-        "@babel/helper-validator-option": "^7.14.5",
-        "browserslist": "^4.17.5",
-        "semver": "^6.3.0"
+        "@babel/compat-data": "^7.24.8",
+        "@babel/helper-validator-option": "^7.24.8",
+        "browserslist": "^4.23.1",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
@@ -183,192 +184,158 @@
       }
     },
     "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+      "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+    "node_modules/@babel/helper-function-name": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+      "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/template": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
-      "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+      "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.0"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
-      "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.0"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
-      "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
+      "version": "7.24.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz",
+      "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-imports": "^7.16.0",
-        "@babel/helper-replace-supers": "^7.16.0",
-        "@babel/helper-simple-access": "^7.16.0",
-        "@babel/helper-split-export-declaration": "^7.16.0",
-        "@babel/helper-validator-identifier": "^7.15.7",
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0"
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
-      "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
-      "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-replace-supers": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
-      "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
       "dev": true,
-      "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.16.0",
-        "@babel/helper-optimise-call-expression": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0"
-      },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
-      "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.0"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+      "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
-      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
-      "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.16.3",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz",
-      "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz",
+      "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.3",
-        "@babel/types": "^7.16.0"
+        "@babel/template": "^7.24.7",
+        "@babel/types": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
-      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -412,13 +379,13 @@
     "node_modules/@babel/highlight/node_modules/color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
       "dev": true
     },
     "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
       "engines": {
         "node": ">=0.8.0"
@@ -427,7 +394,7 @@
     "node_modules/@babel/highlight/node_modules/has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -446,9 +413,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
-      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+      "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -517,6 +484,21 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
     "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
       "version": "7.10.4",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -605,12 +587,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
-      "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
+      "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -620,331 +602,292 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+      "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/parser": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/template/node_modules/@babel/code-frame": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.23.4",
-        "chalk": "^2.4.2"
+    "node_modules/@babel/traverse": {
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz",
+      "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.24.8",
+        "@babel/helper-environment-visitor": "^7.24.7",
+        "@babel/helper-function-name": "^7.24.7",
+        "@babel/helper-hoist-variables": "^7.24.7",
+        "@babel/helper-split-export-declaration": "^7.24.7",
+        "@babel/parser": "^7.24.8",
+        "@babel/types": "^7.24.8",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/template/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+    "node_modules/@babel/traverse/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
       "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
       "engines": {
         "node": ">=4"
       }
     },
-    "node_modules/@babel/template/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+    "node_modules/@babel/types": {
+      "version": "7.24.9",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz",
+      "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==",
       "dev": true,
       "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "to-fast-properties": "^2.0.0"
       },
       "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/template/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
+        "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/template/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+    "node_modules/@bcoe/v8-coverage": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
       "dev": true
     },
-    "node_modules/@babel/template/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+    "node_modules/@cspotcode/source-map-support": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+      "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
       "dev": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "0.3.9"
+      },
       "engines": {
-        "node": ">=0.8.0"
+        "node": ">=12"
       }
     },
-    "node_modules/@babel/template/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+    "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+      "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
       "dev": true,
-      "engines": {
-        "node": ">=4"
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.0.3",
+        "@jridgewell/sourcemap-codec": "^1.4.10"
       }
     },
-    "node_modules/@babel/template/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
       "dev": true,
       "dependencies": {
-        "has-flag": "^3.0.0"
+        "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
-      "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/generator": "^7.23.6",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0",
-        "debug": "^4.3.1",
-        "globals": "^11.1.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+      "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
       "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.23.4",
-        "chalk": "^2.4.2"
-      },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+    "node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
       "dependencies": {
-        "color-convert": "^1.9.0"
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@babel/traverse/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+    "node_modules/@eslint/eslintrc/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
-      "engines": {
-        "node": ">=4"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/@babel/traverse/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "dependencies": {
-        "color-name": "1.1.3"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@babel/traverse/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "dev": true
     },
-    "node_modules/@babel/traverse/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
       "engines": {
-        "node": ">=0.8.0"
+        "node": "*"
       }
     },
-    "node_modules/@babel/traverse/node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+    "node_modules/@eslint/js": {
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
       "dev": true,
       "engines": {
-        "node": ">=4"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.11.14",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
       "engines": {
-        "node": ">=4"
+        "node": ">=10.10.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@babel/types": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
-      "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-string-parser": "^7.23.4",
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "to-fast-properties": "^2.0.0"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "*"
       }
     },
-    "node_modules/@bcoe/v8-coverage": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
-      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
-      "dev": true
-    },
-    "node_modules/@dtsgenerator/replace-namespace": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.5.1.tgz",
-      "integrity": "sha512-euoDqrH2obSzuNQBDxMcIvXluQVgbxH2wUkJeDo36hQBTwSiZaT5FBEz3YmC5uZBwJGDGsHPYCpicuuNYnTHRQ==",
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
       "dev": true,
-      "peerDependencies": {
-        "dtsgenerator": "^3.12.1",
-        "tslib": "^2.3.1"
+      "engines": {
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@eslint/eslintrc": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
-      "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
+      "dev": true
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
       "dev": true,
       "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.1.1",
-        "espree": "^7.3.0",
-        "globals": "^13.9.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^3.13.1",
-        "minimatch": "^3.0.4",
-        "strip-json-comments": "^3.1.1"
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=12"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
+      "engines": {
+        "node": ">=12"
       },
       "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-      "dev": true,
-      "dependencies": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
-      "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
       "dependencies": {
-        "@humanwhocodes/object-schema": "^1.2.0",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
+        "ansi-regex": "^6.0.1"
       },
       "engines": {
-        "node": ">=10.10.0"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
-      "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
-      "dev": true
-    },
     "node_modules/@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -970,6 +913,19 @@
         "sprintf-js": "~1.0.2"
       }
     },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
       "version": "3.14.1",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
@@ -983,6 +939,45 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -1002,59 +997,59 @@
       }
     },
     "node_modules/@jest/console": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz",
-      "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+      "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
       "dev": true,
       "dependencies": {
-        "@jest/types": "^27.4.2",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "chalk": "^4.0.0",
-        "jest-message-util": "^27.4.2",
-        "jest-util": "^27.4.2",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
         "slash": "^3.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/core": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.3.tgz",
-      "integrity": "sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+      "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.4.2",
-        "@jest/reporters": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
+        "@jest/console": "^29.7.0",
+        "@jest/reporters": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
         "chalk": "^4.0.0",
-        "emittery": "^0.8.1",
+        "ci-info": "^3.2.0",
         "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "jest-changed-files": "^27.4.2",
-        "jest-config": "^27.4.3",
-        "jest-haste-map": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-resolve-dependencies": "^27.4.2",
-        "jest-runner": "^27.4.3",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "jest-watcher": "^27.4.2",
+        "graceful-fs": "^4.2.9",
+        "jest-changed-files": "^29.7.0",
+        "jest-config": "^29.7.0",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-resolve-dependencies": "^29.7.0",
+        "jest-runner": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "jest-watcher": "^29.7.0",
         "micromatch": "^4.0.4",
-        "rimraf": "^3.0.0",
+        "pretty-format": "^29.7.0",
         "slash": "^3.0.0",
         "strip-ansi": "^6.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       },
       "peerDependencies": {
         "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -1066,85 +1061,110 @@
       }
     },
     "node_modules/@jest/environment": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.2.tgz",
-      "integrity": "sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+      "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
       "dev": true,
       "dependencies": {
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
-        "jest-mock": "^27.4.2"
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@jest/expect": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+      "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
+      "dev": true,
+      "dependencies": {
+        "expect": "^29.7.0",
+        "jest-snapshot": "^29.7.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+      "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
+      "dev": true,
+      "dependencies": {
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/fake-timers": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz",
-      "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+      "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
       "dev": true,
       "dependencies": {
-        "@jest/types": "^27.4.2",
-        "@sinonjs/fake-timers": "^8.0.1",
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
         "@types/node": "*",
-        "jest-message-util": "^27.4.2",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2"
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/globals": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.2.tgz",
-      "integrity": "sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+      "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "expect": "^27.4.2"
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "jest-mock": "^29.7.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/reporters": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.2.tgz",
-      "integrity": "sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+      "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
       "dev": true,
       "dependencies": {
         "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
+        "@jest/console": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "collect-v8-coverage": "^1.0.0",
         "exit": "^0.1.2",
-        "glob": "^7.1.2",
-        "graceful-fs": "^4.2.4",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
         "istanbul-lib-coverage": "^3.0.0",
-        "istanbul-lib-instrument": "^4.0.3",
+        "istanbul-lib-instrument": "^6.0.0",
         "istanbul-lib-report": "^3.0.0",
         "istanbul-lib-source-maps": "^4.0.0",
-        "istanbul-reports": "^3.0.2",
-        "jest-haste-map": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
+        "istanbul-reports": "^3.1.3",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
         "slash": "^3.0.0",
-        "source-map": "^0.6.0",
         "string-length": "^4.0.1",
-        "terminal-link": "^2.0.0",
-        "v8-to-istanbul": "^8.1.0"
+        "strip-ansi": "^6.0.0",
+        "v8-to-istanbul": "^9.0.1"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       },
       "peerDependencies": {
         "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -1155,204 +1175,204 @@
         }
       }
     },
-    "node_modules/@jest/reporters/node_modules/jest-worker": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-      "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
+    "node_modules/@jest/reporters/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@jest/reporters/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+    "node_modules/@jest/reporters/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/@jest/reporters/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+    "node_modules/@jest/reporters/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
+        "node": "*"
       }
     },
-    "node_modules/@jest/source-map": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz",
-      "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==",
+    "node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
       "dev": true,
       "dependencies": {
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.2.4",
-        "source-map": "^0.6.0"
+        "@sinclair/typebox": "^0.27.8"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "node_modules/@jest/source-map/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+    "node_modules/@jest/source-map": {
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+      "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
       "dev": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/test-result": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz",
-      "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+      "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.4.2",
-        "@jest/types": "^27.4.2",
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "collect-v8-coverage": "^1.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/test-sequencer": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz",
-      "integrity": "sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+      "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
       "dev": true,
       "dependencies": {
-        "@jest/test-result": "^27.4.2",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-runtime": "^27.4.2"
+        "@jest/test-result": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "slash": "^3.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/transform": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.2.tgz",
-      "integrity": "sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+      "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
       "dev": true,
       "dependencies": {
-        "@babel/core": "^7.1.0",
-        "@jest/types": "^27.4.2",
-        "babel-plugin-istanbul": "^6.0.0",
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
         "chalk": "^4.0.0",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-util": "^27.4.2",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
         "micromatch": "^4.0.4",
-        "pirates": "^4.0.1",
+        "pirates": "^4.0.4",
         "slash": "^3.0.0",
-        "source-map": "^0.6.1",
-        "write-file-atomic": "^3.0.0"
+        "write-file-atomic": "^4.0.2"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/@jest/transform/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jest/types": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz",
-      "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==",
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+      "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
       "dev": true,
       "dependencies": {
+        "@jest/schemas": "^29.6.3",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "@types/istanbul-reports": "^3.0.0",
         "@types/node": "*",
-        "@types/yargs": "^16.0.0",
+        "@types/yargs": "^17.0.8",
         "chalk": "^4.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/set-array": "^1.2.1",
         "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
+        "@jridgewell/trace-mapping": "^0.3.24"
       },
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
       "dev": true,
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
       "dev": true,
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/source-map": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
-      "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
       }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.17",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
-      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
     "node_modules/@jsdevtools/ono": {
@@ -1396,135 +1416,206 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unts"
+      }
+    },
     "node_modules/@rollup/plugin-commonjs": {
-      "version": "19.0.2",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz",
-      "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==",
+      "version": "26.0.1",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz",
+      "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==",
       "dev": true,
       "dependencies": {
-        "@rollup/pluginutils": "^3.1.0",
+        "@rollup/pluginutils": "^5.0.1",
         "commondir": "^1.0.1",
-        "estree-walker": "^2.0.1",
-        "glob": "^7.1.6",
-        "is-reference": "^1.2.1",
-        "magic-string": "^0.25.7",
-        "resolve": "^1.17.0"
+        "estree-walker": "^2.0.2",
+        "glob": "^10.4.1",
+        "is-reference": "1.2.1",
+        "magic-string": "^0.30.3"
       },
       "engines": {
-        "node": ">= 8.0.0"
+        "node": ">=16.0.0 || 14 >= 14.17"
       },
       "peerDependencies": {
-        "rollup": "^2.38.3"
+        "rollup": "^2.68.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
     "node_modules/@rollup/plugin-json": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz",
-      "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
+      "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
       "dev": true,
       "dependencies": {
-        "@rollup/pluginutils": "^3.0.8"
+        "@rollup/pluginutils": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
       },
       "peerDependencies": {
-        "rollup": "^1.20.0 || ^2.0.0"
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
     "node_modules/@rollup/plugin-node-resolve": {
-      "version": "13.0.4",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz",
-      "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==",
+      "version": "15.2.3",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz",
+      "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==",
       "dev": true,
       "dependencies": {
-        "@rollup/pluginutils": "^3.1.0",
-        "@types/resolve": "1.17.1",
-        "builtin-modules": "^3.1.0",
+        "@rollup/pluginutils": "^5.0.1",
+        "@types/resolve": "1.20.2",
         "deepmerge": "^4.2.2",
+        "is-builtin-module": "^3.2.1",
         "is-module": "^1.0.0",
-        "resolve": "^1.19.0"
+        "resolve": "^1.22.1"
       },
       "engines": {
-        "node": ">= 10.0.0"
+        "node": ">=14.0.0"
       },
       "peerDependencies": {
-        "rollup": "^2.42.0"
+        "rollup": "^2.78.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
     "node_modules/@rollup/pluginutils": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
-      "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
       "dev": true,
       "dependencies": {
-        "@types/estree": "0.0.39",
-        "estree-walker": "^1.0.1",
-        "picomatch": "^2.2.2"
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^2.3.1"
       },
       "engines": {
-        "node": ">= 8.0.0"
+        "node": ">=14.0.0"
       },
       "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0"
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
-      "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
+    "node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
       "dev": true
     },
     "node_modules/@sinonjs/commons": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
-      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+      "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
       "dev": true,
       "dependencies": {
         "type-detect": "4.0.8"
       }
     },
     "node_modules/@sinonjs/fake-timers": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
-      "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+      "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
       "dev": true,
       "dependencies": {
-        "@sinonjs/commons": "^1.7.0"
+        "@sinonjs/commons": "^3.0.0"
       }
     },
-    "node_modules/@tootallnate/once": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
-      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+    "node_modules/@ts-morph/common": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz",
+      "integrity": "sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==",
       "dev": true,
-      "engines": {
-        "node": ">= 6"
+      "dependencies": {
+        "fast-glob": "^3.3.2",
+        "minimatch": "^9.0.4",
+        "mkdirp": "^3.0.1",
+        "path-browserify": "^1.0.1"
       }
     },
+    "node_modules/@tsconfig/node10": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+      "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+      "dev": true
+    },
+    "node_modules/@tsconfig/node12": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+      "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+      "dev": true
+    },
+    "node_modules/@tsconfig/node14": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+      "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+      "dev": true
+    },
+    "node_modules/@tsconfig/node16": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+      "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+      "dev": true
+    },
     "node_modules/@types/babel__core": {
-      "version": "7.1.16",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
-      "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
+      "version": "7.20.5",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+      "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
       "dev": true,
       "dependencies": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0",
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
         "@types/babel__generator": "*",
         "@types/babel__template": "*",
         "@types/babel__traverse": "*"
       }
     },
     "node_modules/@types/babel__generator": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
-      "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+      "version": "7.6.8",
+      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+      "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.0.0"
       }
     },
     "node_modules/@types/babel__template": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-      "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+      "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
       "dev": true,
       "dependencies": {
         "@babel/parser": "^7.1.0",
@@ -1532,183 +1623,163 @@
       }
     },
     "node_modules/@types/babel__traverse": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
-      "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
+      "version": "7.20.6",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+      "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.3.0"
+        "@babel/types": "^7.20.7"
       }
     },
     "node_modules/@types/estree": {
-      "version": "0.0.39",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
-      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
       "dev": true
     },
-    "node_modules/@types/glob": {
-      "version": "7.1.4",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
-      "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimatch": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/graceful-fs": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
-      "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+    "node_modules/@types/graceful-fs": {
+      "version": "4.1.9",
+      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+      "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
       "dev": true,
       "dependencies": {
         "@types/node": "*"
       }
     },
     "node_modules/@types/istanbul-lib-coverage": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
-      "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+      "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
       "dev": true
     },
     "node_modules/@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+      "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
       "dev": true,
       "dependencies": {
         "@types/istanbul-lib-coverage": "*"
       }
     },
     "node_modules/@types/istanbul-reports": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
-      "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+      "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
       "dev": true,
       "dependencies": {
         "@types/istanbul-lib-report": "*"
       }
     },
     "node_modules/@types/jest": {
-      "version": "27.0.3",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz",
-      "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==",
+      "version": "29.5.12",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
+      "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
       "dev": true,
       "dependencies": {
-        "jest-diff": "^27.0.0",
-        "pretty-format": "^27.0.0"
+        "expect": "^29.0.0",
+        "pretty-format": "^29.0.0"
       }
     },
     "node_modules/@types/js-yaml": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.3.tgz",
-      "integrity": "sha512-5t9BhoORasuF5uCPr+d5/hdB++zRFUTMIZOzbNkr+jZh3yQht4HYbRDyj9fY8n2TZT30iW9huzav73x4NikqWg==",
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
+      "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
       "dev": true
     },
     "node_modules/@types/json-schema": {
-      "version": "7.0.9",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
-      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
-    "node_modules/@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+    "node_modules/@types/lodash": {
+      "version": "4.17.10",
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz",
+      "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==",
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "16.9.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.0.tgz",
-      "integrity": "sha512-nmP+VR4oT0pJUPFbKE4SXj3Yb4Q/kz3M9dSAO1GGMebRKWHQxLfDNmU/yh3xxCJha3N60nQ/JwXWwOE/ZSEVag==",
-      "dev": true
+      "version": "20.14.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+      "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
     },
     "node_modules/@types/node-fetch": {
-      "version": "2.5.12",
-      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
-      "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
+      "version": "2.6.11",
+      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
+      "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
-        "form-data": "^3.0.0"
+        "form-data": "^4.0.0"
       }
     },
-    "node_modules/@types/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
-      "dev": true
-    },
-    "node_modules/@types/prettier": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz",
-      "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==",
-      "dev": true
-    },
     "node_modules/@types/resolve": {
-      "version": "1.17.1",
-      "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
-      "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
+      "version": "1.20.2",
+      "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+      "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+      "dev": true
     },
     "node_modules/@types/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-4.0.5.tgz",
+      "integrity": "sha512-DTCZoIQotB2SUJnYgrEx43cQIUYOlNZz0AZPbKU4PSLYTUdML5Gox0++z4F9kQocxStrCmRNhi4x5x/UlwtKUA==",
+      "deprecated": "This is a stub types definition. rimraf provides its own type definitions, so you do not need this installed.",
       "dev": true,
       "dependencies": {
-        "@types/glob": "*",
-        "@types/node": "*"
+        "rimraf": "*"
       }
     },
     "node_modules/@types/stack-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
-      "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+      "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
       "dev": true
     },
     "node_modules/@types/yargs": {
-      "version": "16.0.4",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
-      "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+      "version": "17.0.32",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+      "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
       "dev": true,
       "dependencies": {
         "@types/yargs-parser": "*"
       }
     },
     "node_modules/@types/yargs-parser": {
-      "version": "20.2.1",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
-      "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
+      "version": "21.0.3",
+      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+      "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz",
-      "integrity": "sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/experimental-utils": "4.31.0",
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "debug": "^4.3.1",
-        "functional-red-black-tree": "^1.0.1",
-        "regexpp": "^3.1.0",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz",
+      "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.10.0",
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/type-utils": "7.16.1",
+        "@typescript-eslint/utils": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.3.1",
+        "natural-compare": "^1.4.0",
+        "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "@typescript-eslint/parser": "^4.0.0",
-        "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+        "@typescript-eslint/parser": "^7.0.0",
+        "eslint": "^8.56.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -1716,50 +1787,27 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/experimental-utils": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz",
-      "integrity": "sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.7",
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/typescript-estree": "4.31.0",
-        "eslint-scope": "^5.1.1",
-        "eslint-utils": "^3.0.0"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "*"
-      }
-    },
     "node_modules/@typescript-eslint/parser": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.0.tgz",
-      "integrity": "sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz",
+      "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/typescript-estree": "4.31.0",
-        "debug": "^4.3.1"
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/typescript-estree": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
+        "debug": "^4.3.4"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+        "eslint": "^8.56.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -1768,173 +1816,139 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz",
-      "integrity": "sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg==",
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz",
+      "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/visitor-keys": "4.31.0"
-      },
-      "engines": {
-        "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.0.tgz",
-      "integrity": "sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ==",
-      "dev": true,
       "engines": {
-        "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz",
-      "integrity": "sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg==",
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz",
+      "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/visitor-keys": "4.31.0",
-        "debug": "^4.3.1",
-        "globby": "^11.0.3",
-        "is-glob": "^4.0.1",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
+        "@typescript-eslint/typescript-estree": "7.16.1",
+        "@typescript-eslint/utils": "7.16.1",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
+      },
       "peerDependenciesMeta": {
         "typescript": {
           "optional": true
         }
       }
     },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz",
-      "integrity": "sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w==",
+    "node_modules/@typescript-eslint/types": {
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz",
+      "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==",
       "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "4.31.0",
-        "eslint-visitor-keys": "^2.0.0"
-      },
       "engines": {
-        "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@yarn-tool/resolve-package": {
-      "version": "1.0.47",
-      "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz",
-      "integrity": "sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==",
-      "dev": true,
-      "dependencies": {
-        "pkg-dir": "< 6 >= 5",
-        "tslib": "^2",
-        "upath2": "^3.1.13"
-      }
-    },
-    "node_modules/@yarn-tool/resolve-package/node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz",
+      "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==",
       "dev": true,
       "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/visitor-keys": "7.16.1",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@yarn-tool/resolve-package/node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@yarn-tool/resolve-package/node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+    "node_modules/@typescript-eslint/utils": {
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz",
+      "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==",
       "dev": true,
       "dependencies": {
-        "yocto-queue": "^0.1.0"
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@typescript-eslint/scope-manager": "7.16.1",
+        "@typescript-eslint/types": "7.16.1",
+        "@typescript-eslint/typescript-estree": "7.16.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
       }
     },
-    "node_modules/@yarn-tool/resolve-package/node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "7.16.1",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz",
+      "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==",
       "dev": true,
       "dependencies": {
-        "p-limit": "^3.0.2"
+        "@typescript-eslint/types": "7.16.1",
+        "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@yarn-tool/resolve-package/node_modules/pkg-dir": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
-      "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/abab": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
-      "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
       "dev": true
     },
     "node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "version": "8.12.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
       "dev": true,
       "bin": {
         "acorn": "bin/acorn"
@@ -1943,16 +1957,6 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/acorn-globals": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
-      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^7.1.1",
-        "acorn-walk": "^7.1.1"
-      }
-    },
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -1963,61 +1967,46 @@
       }
     },
     "node_modules/acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/agent-base": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
-    "node_modules/aggregate-error": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
-      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "version": "8.3.3",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+      "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
       "dev": true,
       "dependencies": {
-        "clean-stack": "^2.0.0",
-        "indent-string": "^4.0.0"
+        "acorn": "^8.11.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=0.4.0"
       }
     },
     "node_modules/ajv": {
-      "version": "8.6.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
-      "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
         "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "require-from-string": "^2.0.2"
       },
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/ansi-colors": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
+    "node_modules/ajv-formats": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+      "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+      "dependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
       }
     },
     "node_modules/ansi-escapes": {
@@ -2065,16 +2054,16 @@
         "color-convert": "^2.0.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
     "node_modules/anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dev": true,
       "dependencies": {
         "normalize-path": "^3.0.0",
@@ -2104,19 +2093,16 @@
         "node": ">=8"
       }
     },
-    "node_modules/astral-regex": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
-      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
+    "node_modules/async": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+      "dev": true
     },
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
       "dev": true
     },
     "node_modules/atob": {
@@ -2132,22 +2118,21 @@
       }
     },
     "node_modules/babel-jest": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.2.tgz",
-      "integrity": "sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA==",
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+      "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
       "dev": true,
       "dependencies": {
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
+        "@jest/transform": "^29.7.0",
         "@types/babel__core": "^7.1.14",
-        "babel-plugin-istanbul": "^6.0.0",
-        "babel-preset-jest": "^27.4.0",
+        "babel-plugin-istanbul": "^6.1.1",
+        "babel-preset-jest": "^29.6.3",
         "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
+        "graceful-fs": "^4.2.9",
         "slash": "^3.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       },
       "peerDependencies": {
         "@babel/core": "^7.8.0"
@@ -2170,9 +2155,9 @@
       }
     },
     "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
-      "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.12.3",
@@ -2195,18 +2180,18 @@
       }
     },
     "node_modules/babel-plugin-jest-hoist": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz",
-      "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==",
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+      "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.3.3",
         "@babel/types": "^7.3.3",
-        "@types/babel__core": "^7.0.0",
+        "@types/babel__core": "^7.1.14",
         "@types/babel__traverse": "^7.0.6"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/babel-preset-current-node-syntax": {
@@ -2233,16 +2218,16 @@
       }
     },
     "node_modules/babel-preset-jest": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz",
-      "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==",
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+      "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
       "dev": true,
       "dependencies": {
-        "babel-plugin-jest-hoist": "^27.4.0",
+        "babel-plugin-jest-hoist": "^29.6.3",
         "babel-preset-current-node-syntax": "^1.0.0"
       },
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0"
@@ -2255,54 +2240,56 @@
       "dev": true
     },
     "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "balanced-match": "^1.0.0"
       }
     },
     "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dev": true,
       "dependencies": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true
-    },
     "node_modules/browserslist": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
-      "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
+      "version": "4.23.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
+      "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001280",
-        "electron-to-chromium": "^1.3.896",
-        "escalade": "^3.1.1",
-        "node-releases": "^2.0.1",
-        "picocolors": "^1.0.0"
+        "caniuse-lite": "^1.0.30001640",
+        "electron-to-chromium": "^1.4.820",
+        "node-releases": "^2.0.14",
+        "update-browserslist-db": "^1.1.0"
       },
       "bin": {
         "browserslist": "cli.js"
       },
       "engines": {
         "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/browserslist"
       }
     },
     "node_modules/bs-logger": {
@@ -2333,9 +2320,9 @@
       "dev": true
     },
     "node_modules/builtin-modules": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
-      "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+      "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -2344,12 +2331,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/call-me-maybe": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
-      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
-      "dev": true
-    },
     "node_modules/callsites": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -2369,14 +2350,24 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001284",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
-      "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==",
+      "version": "1.0.30001642",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
+      "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
       "dev": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/browserslist"
-      }
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ]
     },
     "node_modules/chalk": {
       "version": "4.1.2",
@@ -2388,7 +2379,7 @@
         "supports-color": "^7.1.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/chalk/chalk?sponsor=1"
@@ -2404,79 +2395,187 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
-      "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
-      "dev": true
-    },
-    "node_modules/cjs-module-lexer": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
-      "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
-      "dev": true
-    },
-    "node_modules/clean-stack": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/sibiraj-s"
+        }
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">=8"
       }
     },
+    "node_modules/cjs-module-lexer": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
+      "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
+      "dev": true
+    },
     "node_modules/cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+      "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
       "dev": true,
       "dependencies": {
-        "restore-cursor": "^3.1.0"
+        "restore-cursor": "^4.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/cli-truncate": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
-      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
+      "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
       "dev": true,
       "dependencies": {
-        "slice-ansi": "^3.0.0",
-        "string-width": "^4.2.0"
+        "slice-ansi": "^5.0.0",
+        "string-width": "^7.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/cliui": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+    "node_modules/cli-truncate/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^7.0.0"
-      }
-    },
-    "node_modules/co": {
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/cli-truncate/node_modules/emoji-regex": {
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+      "dev": true
+    },
+    "node_modules/cli-truncate/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-truncate/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cliui/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
+    "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
       "dev": true,
       "engines": {
         "iojs": ">= 1.0.0",
         "node": ">= 0.12.0"
       }
     },
+    "node_modules/code-block-writer": {
+      "version": "13.0.1",
+      "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.1.tgz",
+      "integrity": "sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==",
+      "dev": true
+    },
     "node_modules/collect-v8-coverage": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
-      "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+      "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
       "dev": true
     },
     "node_modules/color-convert": {
@@ -2486,6 +2585,9 @@
       "dev": true,
       "dependencies": {
         "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
       }
     },
     "node_modules/color-name": {
@@ -2495,9 +2597,9 @@
       "dev": true
     },
     "node_modules/colorette": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
-      "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
+      "version": "2.0.20",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
       "dev": true
     },
     "node_modules/combined-stream": {
@@ -2513,55 +2615,51 @@
       }
     },
     "node_modules/commander": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz",
-      "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==",
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
       "dev": true,
       "engines": {
-        "node": ">= 10"
+        "node": ">=18"
       }
     },
     "node_modules/commondir": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
       "dev": true
     },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
     "node_modules/convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.1"
-      }
-    },
-    "node_modules/convert-source-map/node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
       "dev": true
     },
-    "node_modules/cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+    "node_modules/create-jest": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+      "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
       "dev": true,
       "dependencies": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.2.1",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.10.0"
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "jest-config": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "prompts": "^2.0.1"
+      },
+      "bin": {
+        "create-jest": "bin/create-jest.js"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/create-require": {
@@ -2570,20 +2668,12 @@
       "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
       "dev": true
     },
-    "node_modules/cross-fetch": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
-      "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
-      "dev": true,
-      "dependencies": {
-        "node-fetch": "2.6.7"
-      }
-    },
     "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -2593,48 +2683,19 @@
         "node": ">= 8"
       }
     },
-    "node_modules/cssom": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
-      "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
-      "dev": true
-    },
-    "node_modules/cssstyle": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
-      "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
-      "dev": true,
-      "dependencies": {
-        "cssom": "~0.3.6"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cssstyle/node_modules/cssom": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-      "dev": true
-    },
-    "node_modules/data-urls": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
-      "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+    "node_modules/data-uri-to-buffer": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+      "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
       "dev": true,
-      "dependencies": {
-        "abab": "^2.0.3",
-        "whatwg-mimetype": "^2.3.0",
-        "whatwg-url": "^8.0.0"
-      },
       "engines": {
-        "node": ">=10"
+        "node": ">= 12"
       }
     },
     "node_modules/debug": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+      "version": "4.3.5",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+      "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
       "dev": true,
       "dependencies": {
         "ms": "2.1.2"
@@ -2648,12 +2709,6 @@
         }
       }
     },
-    "node_modules/decimal.js": {
-      "version": "10.3.1",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
-      "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
-      "dev": true
-    },
     "node_modules/decode-uri-component": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
@@ -2664,10 +2719,18 @@
       }
     },
     "node_modules/dedent": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
-      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
-      "dev": true
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+      "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+      "dev": true,
+      "peerDependencies": {
+        "babel-plugin-macros": "^3.1.0"
+      },
+      "peerDependenciesMeta": {
+        "babel-plugin-macros": {
+          "optional": true
+        }
+      }
     },
     "node_modules/deep-is": {
       "version": "0.1.4",
@@ -2676,9 +2739,9 @@
       "dev": true
     },
     "node_modules/deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -2687,7 +2750,7 @@
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
       "dev": true,
       "engines": {
         "node": ">=0.4.0"
@@ -2712,12 +2775,12 @@
       }
     },
     "node_modules/diff-sequences": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
-      "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==",
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+      "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
       "dev": true,
       "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/dir-glob": {
@@ -2744,85 +2807,51 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/domexception": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
-      "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
-      "dev": true,
-      "dependencies": {
-        "webidl-conversions": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/domexception/node_modules/webidl-conversions": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
-      "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
+    "node_modules/eastasianwidth": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+      "dev": true
     },
-    "node_modules/dtsgenerator": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.13.0.tgz",
-      "integrity": "sha512-jGCEbUAr7sUubmuYHLx2MAEaWc62rWNMav7/+ZEMMPdhvAld6RTQ5EyU9b6OhP9kJo/ZH0vMyeY9xpIEcL8dFg==",
+    "node_modules/ejs": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+      "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
       "dev": true,
       "dependencies": {
-        "commander": "^8.1.0",
-        "cross-fetch": "^3.1.4",
-        "debug": "^4.3.2",
-        "glob": "^7.1.7",
-        "https-proxy-agent": "^5.0.0",
-        "js-yaml": "^4.1.0",
-        "tslib": "^2.3.1",
-        "typescript": "^4.4.2"
+        "jake": "^10.8.5"
       },
       "bin": {
-        "dtsgen": "bin/dtsgen"
+        "ejs": "bin/cli.js"
       },
       "engines": {
-        "node": ">= 10.0"
+        "node": ">=0.10.0"
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz",
-      "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==",
+      "version": "1.4.828",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz",
+      "integrity": "sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==",
       "dev": true
     },
     "node_modules/emittery": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
-      "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+      "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/emittery?sponsor=1"
       }
     },
     "node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
       "dev": true
     },
-    "node_modules/enquirer": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
-      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
     "node_modules/error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -2832,6974 +2861,286 @@
         "is-arrayish": "^0.2.1"
       }
     },
-    "node_modules/esbuild": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz",
-      "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==",
-      "dev": true,
-      "hasInstallScript": true,
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "optionalDependencies": {
-        "esbuild-android-arm64": "0.14.2",
-        "esbuild-darwin-64": "0.14.2",
-        "esbuild-darwin-arm64": "0.14.2",
-        "esbuild-freebsd-64": "0.14.2",
-        "esbuild-freebsd-arm64": "0.14.2",
-        "esbuild-linux-32": "0.14.2",
-        "esbuild-linux-64": "0.14.2",
-        "esbuild-linux-arm": "0.14.2",
-        "esbuild-linux-arm64": "0.14.2",
-        "esbuild-linux-mips64le": "0.14.2",
-        "esbuild-linux-ppc64le": "0.14.2",
-        "esbuild-netbsd-64": "0.14.2",
-        "esbuild-openbsd-64": "0.14.2",
-        "esbuild-sunos-64": "0.14.2",
-        "esbuild-windows-32": "0.14.2",
-        "esbuild-windows-64": "0.14.2",
-        "esbuild-windows-arm64": "0.14.2"
-      }
-    },
-    "node_modules/esbuild-android-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz",
-      "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/escalade": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "node_modules/esbuild-darwin-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz",
-      "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "node_modules/esbuild-darwin-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz",
-      "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
+    "node_modules/eslint": {
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.57.0",
+        "@humanwhocodes/config-array": "^0.11.14",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
     },
-    "node_modules/esbuild-freebsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz",
-      "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/eslint-config-prettier": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+      "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
     },
-    "node_modules/esbuild-freebsd-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz",
-      "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/eslint-plugin-prettier": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+      "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
       "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
+      "dependencies": {
+        "prettier-linter-helpers": "^1.0.0",
+        "synckit": "^0.8.6"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint-plugin-prettier"
+      },
+      "peerDependencies": {
+        "@types/eslint": ">=8.0.0",
+        "eslint": ">=8.0.0",
+        "eslint-config-prettier": "*",
+        "prettier": ">=3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/eslint": {
+          "optional": true
+        },
+        "eslint-config-prettier": {
+          "optional": true
+        }
+      }
     },
-    "node_modules/esbuild-linux-32": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz",
-      "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-linux-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz",
-      "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-linux-arm": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz",
-      "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-linux-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz",
-      "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-linux-mips64le": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz",
-      "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-linux-ppc64le": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz",
-      "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/esbuild-netbsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz",
-      "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ]
-    },
-    "node_modules/esbuild-openbsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz",
-      "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ]
-    },
-    "node_modules/esbuild-sunos-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz",
-      "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ]
-    },
-    "node_modules/esbuild-windows-32": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz",
-      "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/esbuild-windows-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz",
-      "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/esbuild-windows-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz",
-      "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/escodegen": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
-      "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+    "node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
       "dev": true,
       "dependencies": {
-        "esprima": "^4.0.1",
-        "estraverse": "^5.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1"
-      },
-      "bin": {
-        "escodegen": "bin/escodegen.js",
-        "esgenerate": "bin/esgenerate.js"
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": ">=6.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "optionalDependencies": {
-        "source-map": "~0.6.1"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/escodegen/node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+    "node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
       "dev": true,
       "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/escodegen/node_modules/levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "engines": {
-        "node": ">= 0.8.0"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/escodegen/node_modules/optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+    "node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "dependencies": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
-      "engines": {
-        "node": ">= 0.8.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/escodegen/node_modules/prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+    "node_modules/eslint/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/escodegen/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
+    "node_modules/eslint/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
     },
-    "node_modules/escodegen/node_modules/type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+    "node_modules/eslint/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "prelude-ls": "~1.1.2"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": "*"
       }
     },
-    "node_modules/eslint": {
-      "version": "7.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
-      "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+    "node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "7.12.11",
-        "@eslint/eslintrc": "^0.4.3",
-        "@humanwhocodes/config-array": "^0.5.0",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.0.1",
-        "doctrine": "^3.0.0",
-        "enquirer": "^2.3.5",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^5.1.1",
-        "eslint-utils": "^2.1.0",
-        "eslint-visitor-keys": "^2.0.0",
-        "espree": "^7.3.1",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.1.2",
-        "globals": "^13.6.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.0.4",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "progress": "^2.0.0",
-        "regexpp": "^3.1.0",
-        "semver": "^7.2.1",
-        "strip-ansi": "^6.0.0",
-        "strip-json-comments": "^3.1.0",
-        "table": "^6.0.9",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint-config-prettier": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
-      "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
       "dev": true,
       "bin": {
-        "eslint-config-prettier": "bin/cli.js"
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
       },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
+      "engines": {
+        "node": ">=4"
       }
     },
-    "node_modules/eslint-plugin-prettier": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz",
-      "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==",
+    "node_modules/esquery": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
       "dev": true,
       "dependencies": {
-        "prettier-linter-helpers": "^1.0.0"
+        "estraverse": "^5.1.0"
       },
       "engines": {
-        "node": ">=6.0.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=5.0.0",
-        "prettier": ">=1.13.0"
-      },
-      "peerDependenciesMeta": {
-        "eslint-config-prettier": {
-          "optional": true
-        }
+        "node": ">=0.10"
       }
     },
-    "node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
       "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
+        "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": ">=8.0.0"
+        "node": ">=4.0"
       }
     },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
       "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
       "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
+        "node": ">=4.0"
       }
     },
-    "node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "dev": true
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/eslint/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+    "node_modules/eventemitter3": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+      "dev": true
+    },
+    "node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
       "dev": true,
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/eslint/node_modules/argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-      "dev": true,
-      "dependencies": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "node_modules/eslint/node_modules/eslint-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint/node_modules/js-yaml": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/eslint/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/espree": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
-      "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^7.4.0",
-        "acorn-jsx": "^5.3.1",
-        "eslint-visitor-keys": "^1.3.0"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/espree/node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true,
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esquery/node_modules/estraverse": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-      "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esrecurse/node_modules/estraverse": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-      "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/expect": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz",
-      "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "ansi-styles": "^5.0.0",
-        "jest-get-type": "^27.4.0",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-regex-util": "^27.4.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/expect/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-    },
-    "node_modules/fast-diff": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
-      "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
-      "dev": true
-    },
-    "node_modules/fast-glob": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "node_modules/fastq": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
-      "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
-      "dev": true,
-      "dependencies": {
-        "bser": "2.1.1"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "dependencies": {
-        "flat-cache": "^3.0.4"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/find-cache-dir": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
-      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
-      "dev": true,
-      "dependencies": {
-        "commondir": "^1.0.1",
-        "make-dir": "^3.0.2",
-        "pkg-dir": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-      "dev": true,
-      "dependencies": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
-      "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
-      "dev": true
-    },
-    "node_modules/form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
-      "dev": true,
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fs-extra": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/fs-extra/node_modules/universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "node_modules/functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
-    },
-    "node_modules/gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true,
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
-    "node_modules/get-own-enumerable-property-symbols": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
-      "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
-      "dev": true
-    },
-    "node_modules/get-package-type": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
-      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/globals": {
-      "version": "13.11.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
-      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.0.4",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
-      "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.1.1",
-        "ignore": "^5.1.4",
-        "merge2": "^1.3.0",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globby/node_modules/ignore": {
-      "version": "5.1.8",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
-      "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.8",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-      "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
-      "dev": true
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/html-encoding-sniffer": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
-      "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
-      "dev": true,
-      "dependencies": {
-        "whatwg-encoding": "^1.0.5"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "node_modules/http-proxy-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
-      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
-      "dev": true,
-      "dependencies": {
-        "@tootallnate/once": "1",
-        "agent-base": "6",
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
-      "dev": true,
-      "dependencies": {
-        "agent-base": "6",
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.17.0"
-      }
-    },
-    "node_modules/husky": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz",
-      "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==",
-      "dev": true,
-      "bin": {
-        "husky": "lib/bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/typicode"
-      }
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/import-local": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
-      "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
-      "dev": true,
-      "dependencies": {
-        "pkg-dir": "^4.2.0",
-        "resolve-cwd": "^3.0.0"
-      },
-      "bin": {
-        "import-local-fixture": "fixtures/cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/indent-string": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "node_modules/interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
-      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "node_modules/is-core-module": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
-      "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
-      "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
-      "dev": true
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
-      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-potential-custom-element-name": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
-      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
-      "dev": true
-    },
-    "node_modules/is-reference": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
-      "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/estree": "*"
-      }
-    },
-    "node_modules/is-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
-      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
-    "node_modules/is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "node_modules/istanbul-lib-coverage": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
-      "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-instrument": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
-      "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.7.5",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.0.0",
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-instrument/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
-      "dev": true,
-      "dependencies": {
-        "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^3.0.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-source-maps": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
-      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^3.0.0",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/istanbul-reports": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz",
-      "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==",
-      "dev": true,
-      "dependencies": {
-        "html-escaper": "^2.0.0",
-        "istanbul-lib-report": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.3.tgz",
-      "integrity": "sha512-jwsfVABBzuN3Atm+6h6vIEpTs9+VApODLt4dk2qv1WMOpb1weI1IIZfuwpMiWZ62qvWj78MvdvMHIYdUfqrFaA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/core": "^27.4.3",
-        "import-local": "^3.0.2",
-        "jest-cli": "^27.4.3"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-changed-files": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
-      "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "execa": "^5.0.0",
-        "throat": "^6.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-circus": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.2.tgz",
-      "integrity": "sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "dedent": "^0.7.0",
-        "expect": "^27.4.2",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3",
-        "throat": "^6.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-cli": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.3.tgz",
-      "integrity": "sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/core": "^27.4.3",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "chalk": "^4.0.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "import-local": "^3.0.2",
-        "jest-config": "^27.4.3",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "prompts": "^2.0.1",
-        "yargs": "^16.2.0"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-cli/node_modules/yargs": {
-      "version": "16.2.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/jest-config": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.3.tgz",
-      "integrity": "sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "babel-jest": "^27.4.2",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "deepmerge": "^4.2.2",
-        "glob": "^7.1.1",
-        "graceful-fs": "^4.2.4",
-        "jest-circus": "^27.4.2",
-        "jest-environment-jsdom": "^27.4.3",
-        "jest-environment-node": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "jest-jasmine2": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-runner": "^27.4.3",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^27.4.2",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      },
-      "peerDependencies": {
-        "ts-node": ">=9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "ts-node": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-diff": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz",
-      "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "diff-sequences": "^27.4.0",
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-docblock": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz",
-      "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==",
-      "dev": true,
-      "dependencies": {
-        "detect-newline": "^3.0.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-each": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz",
-      "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^27.4.0",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-environment-jsdom": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz",
-      "integrity": "sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^27.4.2",
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jsdom": "^16.6.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-environment-node": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.2.tgz",
-      "integrity": "sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^27.4.2",
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-get-type": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz",
-      "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==",
-      "dev": true,
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-haste-map": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.2.tgz",
-      "integrity": "sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "@types/graceful-fs": "^4.1.2",
-        "@types/node": "*",
-        "anymatch": "^3.0.3",
-        "fb-watchman": "^2.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-regex-util": "^27.4.0",
-        "jest-serializer": "^27.4.0",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
-        "micromatch": "^4.0.4",
-        "walker": "^1.0.7"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "^2.3.2"
-      }
-    },
-    "node_modules/jest-haste-map/node_modules/jest-worker": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-      "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      }
-    },
-    "node_modules/jest-haste-map/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/jest-jasmine2": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz",
-      "integrity": "sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^27.4.2",
-        "@jest/source-map": "^27.4.0",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "expect": "^27.4.2",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2",
-        "throat": "^6.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-leak-detector": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz",
-      "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==",
-      "dev": true,
-      "dependencies": {
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-matcher-utils": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz",
-      "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "jest-diff": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-message-util": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz",
-      "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^27.4.2",
-        "@types/stack-utils": "^2.0.0",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^27.4.2",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-message-util/node_modules/@babel/code-frame": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
-      "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.16.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/jest-mock": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz",
-      "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "@types/node": "*"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      },
-      "peerDependencies": {
-        "jest-resolve": "*"
-      },
-      "peerDependenciesMeta": {
-        "jest-resolve": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-regex-util": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz",
-      "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==",
-      "dev": true,
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-resolve": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.2.tgz",
-      "integrity": "sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "resolve": "^1.20.0",
-        "resolve.exports": "^1.1.0",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-resolve-dependencies": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz",
-      "integrity": "sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-snapshot": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-runner": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.3.tgz",
-      "integrity": "sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/console": "^27.4.2",
-        "@jest/environment": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "emittery": "^0.8.1",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "jest-docblock": "^27.4.0",
-        "jest-environment-jsdom": "^27.4.3",
-        "jest-environment-node": "^27.4.2",
-        "jest-haste-map": "^27.4.2",
-        "jest-leak-detector": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
-        "source-map-support": "^0.5.6",
-        "throat": "^6.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-runner/node_modules/jest-worker": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-      "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      }
-    },
-    "node_modules/jest-runner/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/jest-runtime": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.2.tgz",
-      "integrity": "sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/console": "^27.4.2",
-        "@jest/environment": "^27.4.2",
-        "@jest/globals": "^27.4.2",
-        "@jest/source-map": "^27.4.0",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/yargs": "^16.0.0",
-        "chalk": "^4.0.0",
-        "cjs-module-lexer": "^1.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "execa": "^5.0.0",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-mock": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "slash": "^3.0.0",
-        "strip-bom": "^4.0.0",
-        "yargs": "^16.2.0"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-runtime/node_modules/yargs": {
-      "version": "16.2.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/jest-serializer": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz",
-      "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "graceful-fs": "^4.2.4"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-snapshot": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.2.tgz",
-      "integrity": "sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.7.2",
-        "@babel/generator": "^7.7.2",
-        "@babel/parser": "^7.7.2",
-        "@babel/plugin-syntax-typescript": "^7.7.2",
-        "@babel/traverse": "^7.7.2",
-        "@babel/types": "^7.0.0",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/babel__traverse": "^7.0.4",
-        "@types/prettier": "^2.1.5",
-        "babel-preset-current-node-syntax": "^1.0.0",
-        "chalk": "^4.0.0",
-        "expect": "^27.4.2",
-        "graceful-fs": "^4.2.4",
-        "jest-diff": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "jest-haste-map": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^27.4.2",
-        "semver": "^7.3.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-util": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz",
-      "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.4",
-        "picomatch": "^2.2.3"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-validate": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz",
-      "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^27.4.0",
-        "leven": "^3.1.0",
-        "pretty-format": "^27.4.2"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-validate/node_modules/camelcase": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
-      "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jest-watcher": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz",
-      "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "jest-util": "^27.4.2",
-        "string-length": "^4.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/jest-worker": {
-      "version": "26.6.2",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
-      "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^7.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/jsdom": {
-      "version": "16.7.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
-      "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
-      "dev": true,
-      "dependencies": {
-        "abab": "^2.0.5",
-        "acorn": "^8.2.4",
-        "acorn-globals": "^6.0.0",
-        "cssom": "^0.4.4",
-        "cssstyle": "^2.3.0",
-        "data-urls": "^2.0.0",
-        "decimal.js": "^10.2.1",
-        "domexception": "^2.0.1",
-        "escodegen": "^2.0.0",
-        "form-data": "^3.0.0",
-        "html-encoding-sniffer": "^2.0.1",
-        "http-proxy-agent": "^4.0.1",
-        "https-proxy-agent": "^5.0.0",
-        "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.0",
-        "parse5": "6.0.1",
-        "saxes": "^5.0.1",
-        "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.0.0",
-        "w3c-hr-time": "^1.0.2",
-        "w3c-xmlserializer": "^2.0.0",
-        "webidl-conversions": "^6.1.0",
-        "whatwg-encoding": "^1.0.5",
-        "whatwg-mimetype": "^2.3.0",
-        "whatwg-url": "^8.5.0",
-        "ws": "^7.4.6",
-        "xml-name-validator": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "canvas": "^2.5.0"
-      },
-      "peerDependenciesMeta": {
-        "canvas": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jsdom/node_modules/acorn": {
-      "version": "8.6.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz",
-      "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "dev": true
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-      "dev": true,
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
-    "node_modules/jsonfile/node_modules/universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/lines-and-columns": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
-      "dev": true
-    },
-    "node_modules/lint-staged": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz",
-      "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.1.1",
-        "cli-truncate": "^2.1.0",
-        "commander": "^7.2.0",
-        "cosmiconfig": "^7.0.0",
-        "debug": "^4.3.1",
-        "dedent": "^0.7.0",
-        "enquirer": "^2.3.6",
-        "execa": "^5.0.0",
-        "listr2": "^3.8.2",
-        "log-symbols": "^4.1.0",
-        "micromatch": "^4.0.4",
-        "normalize-path": "^3.0.0",
-        "please-upgrade-node": "^3.2.0",
-        "string-argv": "0.3.1",
-        "stringify-object": "^3.3.0"
-      },
-      "bin": {
-        "lint-staged": "bin/lint-staged.js"
-      },
-      "funding": {
-        "url": "https://opencollective.com/lint-staged"
-      }
-    },
-    "node_modules/lint-staged/node_modules/commander": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/listr2": {
-      "version": "3.11.1",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.11.1.tgz",
-      "integrity": "sha512-ZXQvQfmH9iWLlb4n3hh31yicXDxlzB0pE7MM1zu6kgbVL4ivEsO4H8IPh4E682sC8RjnYO9anose+zT52rrpyg==",
-      "dev": true,
-      "dependencies": {
-        "cli-truncate": "^2.1.0",
-        "colorette": "^1.2.2",
-        "log-update": "^4.0.0",
-        "p-map": "^4.0.0",
-        "rxjs": "^6.6.7",
-        "through": "^2.3.8",
-        "wrap-ansi": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "enquirer": ">= 2.3.0 < 3"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
-    },
-    "node_modules/lodash.clonedeep": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
-      "dev": true
-    },
-    "node_modules/lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
-      "dev": true
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "node_modules/lodash.truncate": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-      "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
-      "dev": true
-    },
-    "node_modules/log-symbols": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.1.0",
-        "is-unicode-supported": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/log-update": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
-      "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-escapes": "^4.3.0",
-        "cli-cursor": "^3.1.0",
-        "slice-ansi": "^4.0.0",
-        "wrap-ansi": "^6.2.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/log-update/node_modules/slice-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
-      }
-    },
-    "node_modules/log-update/node_modules/wrap-ansi": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
-      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
-      "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
-      "dev": true,
-      "dependencies": {
-        "sourcemap-codec": "^1.4.4"
-      }
-    },
-    "node_modules/make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/make-dir/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true
-    },
-    "node_modules/makeerror": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
-      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
-      "dev": true,
-      "dependencies": {
-        "tmpl": "1.0.5"
-      }
-    },
-    "node_modules/merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
-      "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.1",
-        "picomatch": "^2.2.3"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.49.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
-      "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.32",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
-      "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.49.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "dev": true
-    },
-    "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
-      "dev": true
-    },
-    "node_modules/node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
-      "dev": true,
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/node-fetch/node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "dev": true
-    },
-    "node_modules/node-fetch/node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "dev": true
-    },
-    "node_modules/node-fetch/node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "dev": true,
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
-    },
-    "node_modules/node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
-      "dev": true
-    },
-    "node_modules/node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/node-releases": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
-      "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
-      "dev": true
-    },
-    "node_modules/normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
-      "dev": true
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-      "dev": true,
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/p-map": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
-      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
-      "dev": true,
-      "dependencies": {
-        "aggregate-error": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-even-better-errors": "^2.3.0",
-        "lines-and-columns": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/parse5": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
-      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
-      "dev": true
-    },
-    "node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-is-network-drive": {
-      "version": "1.0.20",
-      "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.20.tgz",
-      "integrity": "sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^2"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-strip-sep": {
-      "version": "1.0.17",
-      "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.17.tgz",
-      "integrity": "sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^2"
-      }
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-      "dev": true
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
-      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/pirates": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
-      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
-      "dev": true,
-      "dependencies": {
-        "node-modules-regexp": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/pkg-dir": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/please-upgrade-node": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
-      "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
-      "dev": true,
-      "dependencies": {
-        "semver-compare": "^1.0.0"
-      }
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/prettier": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
-      "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
-      "dev": true,
-      "bin": {
-        "prettier": "bin-prettier.js"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
-      "dependencies": {
-        "fast-diff": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/pretty-format": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz",
-      "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^27.4.2",
-        "ansi-regex": "^5.0.1",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^17.0.1"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      }
-    },
-    "node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/prompts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
-      "dev": true,
-      "dependencies": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.5"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
-      "dev": true
-    },
-    "node_modules/punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
-      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
-      "dev": true
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "node_modules/react-is": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
-      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
-      "dev": true
-    },
-    "node_modules/rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "dependencies": {
-        "resolve": "^1.1.6"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-      "dev": true
-    },
-    "node_modules/resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-cwd": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-      "dev": true,
-      "dependencies": {
-        "resolve-from": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/resolve-cwd/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/resolve.exports": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
-      "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "2.56.3",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz",
-      "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==",
-      "dev": true,
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/rollup-plugin-sourcemaps": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz",
-      "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==",
-      "dev": true,
-      "dependencies": {
-        "@rollup/pluginutils": "^3.0.9",
-        "source-map-resolve": "^0.6.0"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "@types/node": ">=10.0.0",
-        "rollup": ">=0.31.2"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/rollup-plugin-terser": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
-      "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.10.4",
-        "jest-worker": "^26.2.1",
-        "serialize-javascript": "^4.0.0",
-        "terser": "^5.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^2.0.0"
-      }
-    },
-    "node_modules/rollup-plugin-typescript2": {
-      "version": "0.31.2",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz",
-      "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==",
-      "dev": true,
-      "dependencies": {
-        "@rollup/pluginutils": "^4.1.2",
-        "@yarn-tool/resolve-package": "^1.0.40",
-        "find-cache-dir": "^3.3.2",
-        "fs-extra": "^10.0.0",
-        "resolve": "^1.20.0",
-        "tslib": "^2.3.1"
-      },
-      "peerDependencies": {
-        "rollup": ">=1.26.3",
-        "typescript": ">=2.4.0"
-      }
-    },
-    "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
-      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
-      "dev": true,
-      "dependencies": {
-        "estree-walker": "^2.0.1",
-        "picomatch": "^2.2.2"
-      },
-      "engines": {
-        "node": ">= 8.0.0"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/rxjs": {
-      "version": "6.6.7",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-      "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.9.0"
-      },
-      "engines": {
-        "npm": ">=2.0.0"
-      }
-    },
-    "node_modules/rxjs/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
-    },
-    "node_modules/saxes": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
-      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
-      "dev": true,
-      "dependencies": {
-        "xmlchars": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/semver-compare": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
-      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
-      "dev": true
-    },
-    "node_modules/serialize-javascript": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
-      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
-      "dev": true,
-      "dependencies": {
-        "randombytes": "^2.1.0"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shelljs": {
-      "version": "0.8.5",
-      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
-      "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.0.0",
-        "interpret": "^1.0.0",
-        "rechoir": "^0.6.2"
-      },
-      "bin": {
-        "shjs": "bin/shjs"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/shx": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
-      "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.3",
-        "shelljs": "^0.8.5"
-      },
-      "bin": {
-        "shx": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
-      "dev": true
-    },
-    "node_modules/sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/slice-ansi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
-      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/source-map-resolve": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
-      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
-      "dev": true,
-      "dependencies": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.20",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
-      "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
-      "dev": true,
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/source-map-support/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
-      "dev": true
-    },
-    "node_modules/sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
-      "dev": true
-    },
-    "node_modules/stack-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
-      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
-      "dev": true,
-      "dependencies": {
-        "escape-string-regexp": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/stack-utils/node_modules/escape-string-regexp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-argv": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
-      "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6.19"
-      }
-    },
-    "node_modules/string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
-      "dev": true,
-      "dependencies": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-      "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/stringify-object": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
-      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
-      "dev": true,
-      "dependencies": {
-        "get-own-enumerable-property-symbols": "^3.0.0",
-        "is-obj": "^1.0.1",
-        "is-regexp": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-final-newline": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0",
-        "supports-color": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
-    },
-    "node_modules/table": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
-      "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^8.0.1",
-        "lodash.clonedeep": "^4.5.0",
-        "lodash.truncate": "^4.4.2",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/table/node_modules/slice-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
-      }
-    },
-    "node_modules/terminal-link": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
-      "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-escapes": "^4.2.1",
-        "supports-hyperlinks": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/terser": {
-      "version": "5.16.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz",
-      "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/source-map": "^0.3.2",
-        "acorn": "^8.5.0",
-        "commander": "^2.20.0",
-        "source-map-support": "~0.5.20"
-      },
-      "bin": {
-        "terser": "bin/terser"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/terser/node_modules/acorn": {
-      "version": "8.8.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-      "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/terser/node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
-    },
-    "node_modules/test-exclude": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
-      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
-      "dev": true,
-      "dependencies": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^7.1.4",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "dev": true
-    },
-    "node_modules/throat": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
-      "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
-      "dev": true
-    },
-    "node_modules/through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-      "dev": true
-    },
-    "node_modules/tmpl": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
-      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
-      "dev": true
-    },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/tough-cookie": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
-      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
-      "dev": true,
-      "dependencies": {
-        "psl": "^1.1.33",
-        "punycode": "^2.1.1",
-        "universalify": "^0.2.0",
-        "url-parse": "^1.5.3"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/tr46": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
-      "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ts-jest": {
-      "version": "27.1.0",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.0.tgz",
-      "integrity": "sha512-ZouWlP03JMtzfNHg0ZeDrxAESYGmVhWyHtIl2/01kBbXaMbTr4Vhv6/GeMxUed6GFg/4ycMo+yU6Eo9gI16xTQ==",
-      "dev": true,
-      "dependencies": {
-        "bs-logger": "0.x",
-        "esbuild": "~0.14.0",
-        "fast-json-stable-stringify": "2.x",
-        "jest-util": "^27.0.0",
-        "json5": "2.x",
-        "lodash.memoize": "4.x",
-        "make-error": "1.x",
-        "semver": "7.x",
-        "yargs-parser": "20.x"
-      },
-      "bin": {
-        "ts-jest": "cli.js"
-      },
-      "engines": {
-        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": ">=7.0.0-beta.0 <8",
-        "@types/jest": "^27.0.0",
-        "babel-jest": ">=27.0.0 <28",
-        "jest": "^27.0.0",
-        "typescript": ">=3.8 <5.0"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        },
-        "@types/jest": {
-          "optional": true
-        },
-        "babel-jest": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/ts-node": {
-      "version": "9.1.1",
-      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
-      "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
-      "dev": true,
-      "dependencies": {
-        "arg": "^4.1.0",
-        "create-require": "^1.1.0",
-        "diff": "^4.0.1",
-        "make-error": "^1.1.1",
-        "source-map-support": "^0.5.17",
-        "yn": "3.1.1"
-      },
-      "bin": {
-        "ts-node": "dist/bin.js",
-        "ts-node-script": "dist/bin-script.js",
-        "ts-node-transpile-only": "dist/bin-transpile.js",
-        "ts-script": "dist/bin-script-deprecated.js"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "typescript": ">=2.7"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
-      "dev": true
-    },
-    "node_modules/tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.8.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      },
-      "peerDependencies": {
-        "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-      }
-    },
-    "node_modules/tsutils/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-detect": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
-      "dev": true,
-      "dependencies": {
-        "is-typedarray": "^1.0.0"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz",
-      "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==",
-      "dev": true,
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=4.2.0"
-      }
-    },
-    "node_modules/universalify": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
-      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/upath2": {
-      "version": "3.1.19",
-      "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.19.tgz",
-      "integrity": "sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "path-is-network-drive": "^1.0.20",
-        "path-strip-sep": "^1.0.17",
-        "tslib": "^2"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
-      "dev": true,
-      "dependencies": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "node_modules/v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
-    "node_modules/v8-to-istanbul": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
-      "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
-      "dev": true,
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "^2.0.1",
-        "convert-source-map": "^1.6.0",
-        "source-map": "^0.7.3"
-      },
-      "engines": {
-        "node": ">=10.12.0"
-      }
-    },
-    "node_modules/w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
-      "dev": true,
-      "dependencies": {
-        "browser-process-hrtime": "^1.0.0"
-      }
-    },
-    "node_modules/w3c-xmlserializer": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
-      "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
-      "dev": true,
-      "dependencies": {
-        "xml-name-validator": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/walker": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
-      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
-      "dev": true,
-      "dependencies": {
-        "makeerror": "1.0.12"
-      }
-    },
-    "node_modules/webidl-conversions": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
-      "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.4"
-      }
-    },
-    "node_modules/whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
-      "dev": true,
-      "dependencies": {
-        "iconv-lite": "0.4.24"
-      }
-    },
-    "node_modules/whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
-    },
-    "node_modules/whatwg-url": {
-      "version": "8.7.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
-      "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.7.0",
-        "tr46": "^2.1.0",
-        "webidl-conversions": "^6.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
-      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "node_modules/write-file-atomic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "is-typedarray": "^1.0.0",
-        "signal-exit": "^3.0.2",
-        "typedarray-to-buffer": "^3.1.5"
-      }
-    },
-    "node_modules/ws": {
-      "version": "7.5.6",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
-      "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.3.0"
-      },
-      "peerDependencies": {
-        "bufferutil": "^4.0.1",
-        "utf-8-validate": "^5.0.2"
-      },
-      "peerDependenciesMeta": {
-        "bufferutil": {
-          "optional": true
-        },
-        "utf-8-validate": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true
-    },
-    "node_modules/xmlchars": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
-      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
-      "dev": true
-    },
-    "node_modules/y18n": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/yargs": {
-      "version": "17.1.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
-      "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yn": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-      "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    }
-  },
-  "dependencies": {
-    "@apidevtools/json-schema-ref-parser": {
-      "version": "9.0.9",
-      "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
-      "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
-      "dev": true,
-      "requires": {
-        "@jsdevtools/ono": "^7.1.3",
-        "@types/json-schema": "^7.0.6",
-        "call-me-maybe": "^1.0.1",
-        "js-yaml": "^4.1.0"
-      }
-    },
-    "@babel/code-frame": {
-      "version": "7.12.11",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
-      "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
-      "dev": true,
-      "requires": {
-        "@babel/highlight": "^7.10.4"
-      }
-    },
-    "@babel/compat-data": {
-      "version": "7.16.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
-      "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
-      "dev": true
-    },
-    "@babel/core": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
-      "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.16.0",
-        "@babel/generator": "^7.16.0",
-        "@babel/helper-compilation-targets": "^7.16.0",
-        "@babel/helper-module-transforms": "^7.16.0",
-        "@babel/helpers": "^7.16.0",
-        "@babel/parser": "^7.16.0",
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.1.2",
-        "semver": "^6.3.0",
-        "source-map": "^0.5.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.0",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
-          "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.0"
-          }
-        },
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-          "dev": true
-        }
-      }
-    },
-    "@babel/generator": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
-      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.23.6",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
-        "jsesc": "^2.5.1"
-      }
-    },
-    "@babel/helper-compilation-targets": {
-      "version": "7.16.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
-      "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
-      "dev": true,
-      "requires": {
-        "@babel/compat-data": "^7.16.0",
-        "@babel/helper-validator-option": "^7.14.5",
-        "browserslist": "^4.17.5",
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
-      }
-    },
-    "@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
-      "dev": true
-    },
-    "@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
-      }
-    },
-    "@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.22.5"
-      }
-    },
-    "@babel/helper-member-expression-to-functions": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
-      "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-module-imports": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
-      "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-module-transforms": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
-      "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.16.0",
-        "@babel/helper-replace-supers": "^7.16.0",
-        "@babel/helper-simple-access": "^7.16.0",
-        "@babel/helper-split-export-declaration": "^7.16.0",
-        "@babel/helper-validator-identifier": "^7.15.7",
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-optimise-call-expression": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
-      "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-plugin-utils": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
-      "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
-      "dev": true
-    },
-    "@babel/helper-replace-supers": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
-      "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.16.0",
-        "@babel/helper-optimise-call-expression": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-simple-access": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
-      "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.22.5"
-      }
-    },
-    "@babel/helper-string-parser": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
-      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
-      "dev": true
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
-      "dev": true
-    },
-    "@babel/helper-validator-option": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
-      "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
-      "dev": true
-    },
-    "@babel/helpers": {
-      "version": "7.16.3",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz",
-      "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.3",
-        "@babel/types": "^7.16.0"
-      }
-    },
-    "@babel/highlight": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
-      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-          "dev": true
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "@babel/parser": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
-      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
-      "dev": true
-    },
-    "@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-bigint": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
-      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-class-properties": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.12.13"
-      }
-    },
-    "@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-logical-assignment-operators": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-top-level-await": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      }
-    },
-    "@babel/plugin-syntax-typescript": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
-      "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      }
-    },
-    "@babel/template": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.23.5",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-          "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.23.4",
-            "chalk": "^2.4.2"
-          }
-        },
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-          "dev": true
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
-      "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/generator": "^7.23.6",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0",
-        "debug": "^4.3.1",
-        "globals": "^11.1.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.23.5",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-          "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.23.4",
-            "chalk": "^2.4.2"
-          }
-        },
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-          "dev": true
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-          "dev": true
-        },
-        "globals": {
-          "version": "11.12.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-          "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "@babel/types": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
-      "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-string-parser": "^7.23.4",
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "to-fast-properties": "^2.0.0"
-      }
-    },
-    "@bcoe/v8-coverage": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
-      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
-      "dev": true
-    },
-    "@dtsgenerator/replace-namespace": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.5.1.tgz",
-      "integrity": "sha512-euoDqrH2obSzuNQBDxMcIvXluQVgbxH2wUkJeDo36hQBTwSiZaT5FBEz3YmC5uZBwJGDGsHPYCpicuuNYnTHRQ==",
-      "dev": true,
-      "requires": {}
-    },
-    "@eslint/eslintrc": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
-      "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.12.4",
-        "debug": "^4.1.1",
-        "espree": "^7.3.0",
-        "globals": "^13.9.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^3.13.1",
-        "minimatch": "^3.0.4",
-        "strip-json-comments": "^3.1.1"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        }
-      }
-    },
-    "@humanwhocodes/config-array": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
-      "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
-      "dev": true,
-      "requires": {
-        "@humanwhocodes/object-schema": "^1.2.0",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
-      }
-    },
-    "@humanwhocodes/object-schema": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
-      "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
-      "dev": true
-    },
-    "@istanbuljs/load-nyc-config": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
-      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
-      "dev": true,
-      "requires": {
-        "camelcase": "^5.3.1",
-        "find-up": "^4.1.0",
-        "get-package-type": "^0.1.0",
-        "js-yaml": "^3.13.1",
-        "resolve-from": "^5.0.0"
-      },
-      "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "resolve-from": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-          "dev": true
-        }
-      }
-    },
-    "@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
-      "dev": true
-    },
-    "@jest/console": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz",
-      "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "jest-message-util": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "slash": "^3.0.0"
-      }
-    },
-    "@jest/core": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.3.tgz",
-      "integrity": "sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^27.4.2",
-        "@jest/reporters": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "emittery": "^0.8.1",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "jest-changed-files": "^27.4.2",
-        "jest-config": "^27.4.3",
-        "jest-haste-map": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-resolve-dependencies": "^27.4.2",
-        "jest-runner": "^27.4.3",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "jest-watcher": "^27.4.2",
-        "micromatch": "^4.0.4",
-        "rimraf": "^3.0.0",
-        "slash": "^3.0.0",
-        "strip-ansi": "^6.0.0"
-      }
-    },
-    "@jest/environment": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.2.tgz",
-      "integrity": "sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw==",
-      "dev": true,
-      "requires": {
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "jest-mock": "^27.4.2"
-      }
-    },
-    "@jest/fake-timers": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz",
-      "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "@sinonjs/fake-timers": "^8.0.1",
-        "@types/node": "*",
-        "jest-message-util": "^27.4.2",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2"
-      }
-    },
-    "@jest/globals": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.2.tgz",
-      "integrity": "sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "expect": "^27.4.2"
-      }
-    },
-    "@jest/reporters": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.2.tgz",
-      "integrity": "sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w==",
-      "dev": true,
-      "requires": {
-        "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "exit": "^0.1.2",
-        "glob": "^7.1.2",
-        "graceful-fs": "^4.2.4",
-        "istanbul-lib-coverage": "^3.0.0",
-        "istanbul-lib-instrument": "^4.0.3",
-        "istanbul-lib-report": "^3.0.0",
-        "istanbul-lib-source-maps": "^4.0.0",
-        "istanbul-reports": "^3.0.2",
-        "jest-haste-map": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
-        "slash": "^3.0.0",
-        "source-map": "^0.6.0",
-        "string-length": "^4.0.1",
-        "terminal-link": "^2.0.0",
-        "v8-to-istanbul": "^8.1.0"
-      },
-      "dependencies": {
-        "jest-worker": {
-          "version": "27.4.2",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-          "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "@jest/source-map": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz",
-      "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==",
-      "dev": true,
-      "requires": {
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.2.4",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/test-result": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz",
-      "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "collect-v8-coverage": "^1.0.0"
-      }
-    },
-    "@jest/test-sequencer": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz",
-      "integrity": "sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^27.4.2",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-runtime": "^27.4.2"
-      }
-    },
-    "@jest/transform": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.2.tgz",
-      "integrity": "sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/types": "^27.4.2",
-        "babel-plugin-istanbul": "^6.0.0",
-        "chalk": "^4.0.0",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-util": "^27.4.2",
-        "micromatch": "^4.0.4",
-        "pirates": "^4.0.1",
-        "slash": "^3.0.0",
-        "source-map": "^0.6.1",
-        "write-file-atomic": "^3.0.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/types": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz",
-      "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^3.0.0",
-        "@types/node": "*",
-        "@types/yargs": "^16.0.0",
-        "chalk": "^4.0.0"
-      }
-    },
-    "@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      }
-    },
-    "@jridgewell/resolve-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-      "dev": true
-    },
-    "@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-      "dev": true
-    },
-    "@jridgewell/source-map": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
-      "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/gen-mapping": "^0.3.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      }
-    },
-    "@jridgewell/sourcemap-codec": {
-      "version": "1.4.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-      "dev": true
-    },
-    "@jridgewell/trace-mapping": {
-      "version": "0.3.17",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
-      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
-      }
-    },
-    "@jsdevtools/ono": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
-      "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
-      "dev": true
-    },
-    "@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      }
-    },
-    "@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true
-    },
-    "@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      }
-    },
-    "@rollup/plugin-commonjs": {
-      "version": "19.0.2",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz",
-      "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==",
-      "dev": true,
-      "requires": {
-        "@rollup/pluginutils": "^3.1.0",
-        "commondir": "^1.0.1",
-        "estree-walker": "^2.0.1",
-        "glob": "^7.1.6",
-        "is-reference": "^1.2.1",
-        "magic-string": "^0.25.7",
-        "resolve": "^1.17.0"
-      }
-    },
-    "@rollup/plugin-json": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz",
-      "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==",
-      "dev": true,
-      "requires": {
-        "@rollup/pluginutils": "^3.0.8"
-      }
-    },
-    "@rollup/plugin-node-resolve": {
-      "version": "13.0.4",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz",
-      "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==",
-      "dev": true,
-      "requires": {
-        "@rollup/pluginutils": "^3.1.0",
-        "@types/resolve": "1.17.1",
-        "builtin-modules": "^3.1.0",
-        "deepmerge": "^4.2.2",
-        "is-module": "^1.0.0",
-        "resolve": "^1.19.0"
-      }
-    },
-    "@rollup/pluginutils": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
-      "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
-      "dev": true,
-      "requires": {
-        "@types/estree": "0.0.39",
-        "estree-walker": "^1.0.1",
-        "picomatch": "^2.2.2"
-      },
-      "dependencies": {
-        "estree-walker": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
-          "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
-          "dev": true
-        }
-      }
-    },
-    "@sinonjs/commons": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
-      "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
-      "dev": true,
-      "requires": {
-        "type-detect": "4.0.8"
-      }
-    },
-    "@sinonjs/fake-timers": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
-      "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.7.0"
-      }
-    },
-    "@tootallnate/once": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
-      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
-      "dev": true
-    },
-    "@types/babel__core": {
-      "version": "7.1.16",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
-      "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
-      }
-    },
-    "@types/babel__generator": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
-      "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__template": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-      "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__traverse": {
-      "version": "7.14.2",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
-      "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.3.0"
-      }
-    },
-    "@types/estree": {
-      "version": "0.0.39",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
-      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
-      "dev": true
-    },
-    "@types/glob": {
-      "version": "7.1.4",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
-      "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
-      "dev": true,
-      "requires": {
-        "@types/minimatch": "*",
-        "@types/node": "*"
-      }
-    },
-    "@types/graceful-fs": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
-      "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "@types/istanbul-lib-coverage": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
-      "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
-      "dev": true
-    },
-    "@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*"
-      }
-    },
-    "@types/istanbul-reports": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
-      "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "@types/jest": {
-      "version": "27.0.3",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz",
-      "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==",
-      "dev": true,
-      "requires": {
-        "jest-diff": "^27.0.0",
-        "pretty-format": "^27.0.0"
-      }
-    },
-    "@types/js-yaml": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.3.tgz",
-      "integrity": "sha512-5t9BhoORasuF5uCPr+d5/hdB++zRFUTMIZOzbNkr+jZh3yQht4HYbRDyj9fY8n2TZT30iW9huzav73x4NikqWg==",
-      "dev": true
-    },
-    "@types/json-schema": {
-      "version": "7.0.9",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
-      "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
-      "dev": true
-    },
-    "@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "16.9.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.0.tgz",
-      "integrity": "sha512-nmP+VR4oT0pJUPFbKE4SXj3Yb4Q/kz3M9dSAO1GGMebRKWHQxLfDNmU/yh3xxCJha3N60nQ/JwXWwOE/ZSEVag==",
-      "dev": true
-    },
-    "@types/node-fetch": {
-      "version": "2.5.12",
-      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
-      "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "form-data": "^3.0.0"
-      }
-    },
-    "@types/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
-      "dev": true
-    },
-    "@types/prettier": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz",
-      "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==",
-      "dev": true
-    },
-    "@types/resolve": {
-      "version": "1.17.1",
-      "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
-      "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "@types/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==",
-      "dev": true,
-      "requires": {
-        "@types/glob": "*",
-        "@types/node": "*"
-      }
-    },
-    "@types/stack-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
-      "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
-      "dev": true
-    },
-    "@types/yargs": {
-      "version": "16.0.4",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
-      "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
-      "dev": true,
-      "requires": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "@types/yargs-parser": {
-      "version": "20.2.1",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
-      "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
-      "dev": true
-    },
-    "@typescript-eslint/eslint-plugin": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz",
-      "integrity": "sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/experimental-utils": "4.31.0",
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "debug": "^4.3.1",
-        "functional-red-black-tree": "^1.0.1",
-        "regexpp": "^3.1.0",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
-      }
-    },
-    "@typescript-eslint/experimental-utils": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz",
-      "integrity": "sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw==",
-      "dev": true,
-      "requires": {
-        "@types/json-schema": "^7.0.7",
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/typescript-estree": "4.31.0",
-        "eslint-scope": "^5.1.1",
-        "eslint-utils": "^3.0.0"
-      }
-    },
-    "@typescript-eslint/parser": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.0.tgz",
-      "integrity": "sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/scope-manager": "4.31.0",
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/typescript-estree": "4.31.0",
-        "debug": "^4.3.1"
-      }
-    },
-    "@typescript-eslint/scope-manager": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz",
-      "integrity": "sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/visitor-keys": "4.31.0"
-      }
-    },
-    "@typescript-eslint/types": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.0.tgz",
-      "integrity": "sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ==",
-      "dev": true
-    },
-    "@typescript-eslint/typescript-estree": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz",
-      "integrity": "sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "4.31.0",
-        "@typescript-eslint/visitor-keys": "4.31.0",
-        "debug": "^4.3.1",
-        "globby": "^11.0.3",
-        "is-glob": "^4.0.1",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
-      }
-    },
-    "@typescript-eslint/visitor-keys": {
-      "version": "4.31.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz",
-      "integrity": "sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "4.31.0",
-        "eslint-visitor-keys": "^2.0.0"
-      }
-    },
-    "@yarn-tool/resolve-package": {
-      "version": "1.0.47",
-      "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz",
-      "integrity": "sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==",
-      "dev": true,
-      "requires": {
-        "pkg-dir": "< 6 >= 5",
-        "tslib": "^2",
-        "upath2": "^3.1.13"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-          "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^6.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-          "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^5.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-          "dev": true,
-          "requires": {
-            "yocto-queue": "^0.1.0"
-          }
-        },
-        "p-locate": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-          "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^3.0.2"
-          }
-        },
-        "pkg-dir": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
-          "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
-          "dev": true,
-          "requires": {
-            "find-up": "^5.0.0"
-          }
-        }
-      }
-    },
-    "abab": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
-      "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
-      "dev": true
-    },
-    "acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-      "dev": true
-    },
-    "acorn-globals": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
-      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
-      "dev": true,
-      "requires": {
-        "acorn": "^7.1.1",
-        "acorn-walk": "^7.1.1"
-      }
-    },
-    "acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "requires": {}
-    },
-    "acorn-walk": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-      "dev": true
-    },
-    "agent-base": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "dev": true,
-      "requires": {
-        "debug": "4"
-      }
-    },
-    "aggregate-error": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
-      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
-      "dev": true,
-      "requires": {
-        "clean-stack": "^2.0.0",
-        "indent-string": "^4.0.0"
-      }
-    },
-    "ajv": {
-      "version": "8.6.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
-      "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
-      "requires": {
-        "fast-deep-equal": "^3.1.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "ansi-colors": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
-      "dev": true
-    },
-    "ansi-escapes": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
-      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
-      "dev": true,
-      "requires": {
-        "type-fest": "^0.21.3"
-      },
-      "dependencies": {
-        "type-fest": {
-          "version": "0.21.3",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-          "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-          "dev": true
-        }
-      }
-    },
-    "ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true
-    },
-    "ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "requires": {
-        "color-convert": "^2.0.1"
-      }
-    },
-    "anymatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-      "dev": true,
-      "requires": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      }
-    },
-    "arg": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-      "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-      "dev": true
-    },
-    "argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
-    },
-    "array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true
-    },
-    "astral-regex": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
-      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
-      "dev": true
-    },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
-    },
-    "atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-      "dev": true
-    },
-    "babel-jest": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.2.tgz",
-      "integrity": "sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA==",
-      "dev": true,
-      "requires": {
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/babel__core": "^7.1.14",
-        "babel-plugin-istanbul": "^6.0.0",
-        "babel-preset-jest": "^27.4.0",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
-        "slash": "^3.0.0"
-      }
-    },
-    "babel-plugin-istanbul": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
-      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@istanbuljs/load-nyc-config": "^1.0.0",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-instrument": "^5.0.4",
-        "test-exclude": "^6.0.0"
-      },
-      "dependencies": {
-        "istanbul-lib-instrument": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
-          "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
-          "dev": true,
-          "requires": {
-            "@babel/core": "^7.12.3",
-            "@babel/parser": "^7.14.7",
-            "@istanbuljs/schema": "^0.1.2",
-            "istanbul-lib-coverage": "^3.2.0",
-            "semver": "^6.3.0"
-          }
-        },
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
-      }
-    },
-    "babel-plugin-jest-hoist": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz",
-      "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.3.3",
-        "@babel/types": "^7.3.3",
-        "@types/babel__core": "^7.0.0",
-        "@types/babel__traverse": "^7.0.6"
-      }
-    },
-    "babel-preset-current-node-syntax": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
-      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
-      "dev": true,
-      "requires": {
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-bigint": "^7.8.3",
-        "@babel/plugin-syntax-class-properties": "^7.8.3",
-        "@babel/plugin-syntax-import-meta": "^7.8.3",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-top-level-await": "^7.8.3"
-      }
-    },
-    "babel-preset-jest": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz",
-      "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==",
-      "dev": true,
-      "requires": {
-        "babel-plugin-jest-hoist": "^27.4.0",
-        "babel-preset-current-node-syntax": "^1.0.0"
-      }
-    },
-    "balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "requires": {
-        "fill-range": "^7.0.1"
-      }
-    },
-    "browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true
-    },
-    "browserslist": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
-      "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
-      "dev": true,
-      "requires": {
-        "caniuse-lite": "^1.0.30001280",
-        "electron-to-chromium": "^1.3.896",
-        "escalade": "^3.1.1",
-        "node-releases": "^2.0.1",
-        "picocolors": "^1.0.0"
-      }
-    },
-    "bs-logger": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
-      "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
-      "dev": true,
-      "requires": {
-        "fast-json-stable-stringify": "2.x"
-      }
-    },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
-      "dev": true,
-      "requires": {
-        "node-int64": "^0.4.0"
-      }
-    },
-    "buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
-    },
-    "builtin-modules": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
-      "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
-      "dev": true
-    },
-    "call-me-maybe": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
-      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
-      "dev": true
-    },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true
-    },
-    "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001284",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz",
-      "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==",
-      "dev": true
-    },
-    "chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      }
-    },
-    "char-regex": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
-      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
-      "dev": true
-    },
-    "ci-info": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
-      "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
-      "dev": true
-    },
-    "cjs-module-lexer": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
-      "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
-      "dev": true
-    },
-    "clean-stack": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
-      "dev": true
-    },
-    "cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "dev": true,
-      "requires": {
-        "restore-cursor": "^3.1.0"
-      }
-    },
-    "cli-truncate": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
-      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
-      "dev": true,
-      "requires": {
-        "slice-ansi": "^3.0.0",
-        "string-width": "^4.2.0"
-      }
-    },
-    "cliui": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-      "dev": true,
-      "requires": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^7.0.0"
-      }
-    },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "collect-v8-coverage": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
-      "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
-      "dev": true
-    },
-    "color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "requires": {
-        "color-name": "~1.1.4"
-      }
-    },
-    "color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "colorette": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
-      "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
-      "dev": true
-    },
-    "combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
-      "requires": {
-        "delayed-stream": "~1.0.0"
-      }
-    },
-    "commander": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz",
-      "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==",
-      "dev": true
-    },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-      "dev": true
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-          "dev": true
-        }
-      }
-    },
-    "cosmiconfig": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-      "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
-      "dev": true,
-      "requires": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.2.1",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.10.0"
-      }
-    },
-    "create-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-      "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
-      "dev": true
-    },
-    "cross-fetch": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
-      "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
-      "dev": true,
-      "requires": {
-        "node-fetch": "2.6.7"
-      }
-    },
-    "cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "requires": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      }
-    },
-    "cssom": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
-      "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
-      "dev": true
-    },
-    "cssstyle": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
-      "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
-      "dev": true,
-      "requires": {
-        "cssom": "~0.3.6"
-      },
-      "dependencies": {
-        "cssom": {
-          "version": "0.3.8",
-          "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-          "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-          "dev": true
-        }
-      }
-    },
-    "data-urls": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
-      "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.3",
-        "whatwg-mimetype": "^2.3.0",
-        "whatwg-url": "^8.0.0"
-      }
-    },
-    "debug": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
-      "dev": true,
-      "requires": {
-        "ms": "2.1.2"
-      }
-    },
-    "decimal.js": {
-      "version": "10.3.1",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
-      "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
-      "dev": true
-    },
-    "decode-uri-component": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
-      "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
-      "dev": true
-    },
-    "dedent": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
-      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
-      "dev": true
-    },
-    "deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
-    },
-    "deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
-      "dev": true
-    },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
-    },
-    "detect-newline": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
-      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
-      "dev": true
-    },
-    "diff": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-      "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-      "dev": true
-    },
-    "diff-sequences": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
-      "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==",
-      "dev": true
-    },
-    "dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "requires": {
-        "path-type": "^4.0.0"
-      }
-    },
-    "doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "requires": {
-        "esutils": "^2.0.2"
-      }
-    },
-    "domexception": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
-      "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
-      "dev": true,
-      "requires": {
-        "webidl-conversions": "^5.0.0"
-      },
-      "dependencies": {
-        "webidl-conversions": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
-          "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
-          "dev": true
-        }
-      }
-    },
-    "dtsgenerator": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.13.0.tgz",
-      "integrity": "sha512-jGCEbUAr7sUubmuYHLx2MAEaWc62rWNMav7/+ZEMMPdhvAld6RTQ5EyU9b6OhP9kJo/ZH0vMyeY9xpIEcL8dFg==",
-      "dev": true,
-      "requires": {
-        "commander": "^8.1.0",
-        "cross-fetch": "^3.1.4",
-        "debug": "^4.3.2",
-        "glob": "^7.1.7",
-        "https-proxy-agent": "^5.0.0",
-        "js-yaml": "^4.1.0",
-        "tslib": "^2.3.1",
-        "typescript": "^4.4.2"
-      }
-    },
-    "electron-to-chromium": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz",
-      "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==",
-      "dev": true
-    },
-    "emittery": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
-      "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
-      "dev": true
-    },
-    "emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "enquirer": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
-      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
-      "dev": true,
-      "requires": {
-        "ansi-colors": "^4.1.1"
-      }
-    },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "esbuild": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz",
-      "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==",
-      "dev": true,
-      "requires": {
-        "esbuild-android-arm64": "0.14.2",
-        "esbuild-darwin-64": "0.14.2",
-        "esbuild-darwin-arm64": "0.14.2",
-        "esbuild-freebsd-64": "0.14.2",
-        "esbuild-freebsd-arm64": "0.14.2",
-        "esbuild-linux-32": "0.14.2",
-        "esbuild-linux-64": "0.14.2",
-        "esbuild-linux-arm": "0.14.2",
-        "esbuild-linux-arm64": "0.14.2",
-        "esbuild-linux-mips64le": "0.14.2",
-        "esbuild-linux-ppc64le": "0.14.2",
-        "esbuild-netbsd-64": "0.14.2",
-        "esbuild-openbsd-64": "0.14.2",
-        "esbuild-sunos-64": "0.14.2",
-        "esbuild-windows-32": "0.14.2",
-        "esbuild-windows-64": "0.14.2",
-        "esbuild-windows-arm64": "0.14.2"
-      }
-    },
-    "esbuild-android-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz",
-      "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-darwin-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz",
-      "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-darwin-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz",
-      "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-freebsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz",
-      "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-freebsd-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz",
-      "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-32": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz",
-      "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz",
-      "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-arm": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz",
-      "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz",
-      "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-mips64le": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz",
-      "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-linux-ppc64le": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz",
-      "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-netbsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz",
-      "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-openbsd-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz",
-      "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-sunos-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz",
-      "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-windows-32": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz",
-      "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-windows-64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz",
-      "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-windows-arm64": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz",
-      "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==",
-      "dev": true,
-      "optional": true
-    },
-    "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true
-    },
-    "escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true
-    },
-    "escodegen": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
-      "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
-      "dev": true,
-      "requires": {
-        "esprima": "^4.0.1",
-        "estraverse": "^5.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        },
-        "levn": {
-          "version": "0.3.0",
-          "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-          "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-          "dev": true,
-          "requires": {
-            "prelude-ls": "~1.1.2",
-            "type-check": "~0.3.2"
-          }
-        },
-        "optionator": {
-          "version": "0.8.3",
-          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-          "dev": true,
-          "requires": {
-            "deep-is": "~0.1.3",
-            "fast-levenshtein": "~2.0.6",
-            "levn": "~0.3.0",
-            "prelude-ls": "~1.1.2",
-            "type-check": "~0.3.2",
-            "word-wrap": "~1.2.3"
-          }
-        },
-        "prelude-ls": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-          "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        },
-        "type-check": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-          "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-          "dev": true,
-          "requires": {
-            "prelude-ls": "~1.1.2"
-          }
-        }
-      }
-    },
-    "eslint": {
-      "version": "7.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
-      "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "7.12.11",
-        "@eslint/eslintrc": "^0.4.3",
-        "@humanwhocodes/config-array": "^0.5.0",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.0.1",
-        "doctrine": "^3.0.0",
-        "enquirer": "^2.3.5",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^5.1.1",
-        "eslint-utils": "^2.1.0",
-        "eslint-visitor-keys": "^2.0.0",
-        "espree": "^7.3.1",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.1.2",
-        "globals": "^13.6.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.0.4",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "progress": "^2.0.0",
-        "regexpp": "^3.1.0",
-        "semver": "^7.2.1",
-        "strip-ansi": "^6.0.0",
-        "strip-json-comments": "^3.1.0",
-        "table": "^6.0.9",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "eslint-utils": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-          "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
-          "dev": true,
-          "requires": {
-            "eslint-visitor-keys": "^1.1.0"
-          },
-          "dependencies": {
-            "eslint-visitor-keys": {
-              "version": "1.3.0",
-              "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-              "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-              "dev": true
-            }
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        }
-      }
-    },
-    "eslint-config-prettier": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
-      "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
-      "dev": true,
-      "requires": {}
-    },
-    "eslint-plugin-prettier": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz",
-      "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==",
-      "dev": true,
-      "requires": {
-        "prettier-linter-helpers": "^1.0.0"
-      }
-    },
-    "eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "requires": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      }
-    },
-    "eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "requires": {
-        "eslint-visitor-keys": "^2.0.0"
-      }
-    },
-    "eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true
-    },
-    "espree": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
-      "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
-      "dev": true,
-      "requires": {
-        "acorn": "^7.4.0",
-        "acorn-jsx": "^5.3.1",
-        "eslint-visitor-keys": "^1.3.0"
-      },
-      "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-          "dev": true
-        }
-      }
-    },
-    "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true
-    },
-    "esquery": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.1.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-          "dev": true
-        }
-      }
-    },
-    "esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.2.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-          "dev": true
-        }
-      }
-    },
-    "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true
-    },
-    "estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true
-    },
-    "execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "requires": {
         "cross-spawn": "^7.0.3",
         "get-stream": "^6.0.0",
         "human-signals": "^2.1.0",
@@ -9809,2776 +3150,4264 @@
         "onetime": "^5.1.2",
         "signal-exit": "^3.0.3",
         "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
       }
     },
-    "exit": {
+    "node_modules/execa/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
+    "node_modules/exit": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
-      "dev": true
+      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "expect": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz",
-      "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==",
+    "node_modules/expect": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+      "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "ansi-styles": "^5.0.0",
-        "jest-get-type": "^27.4.0",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-regex-util": "^27.4.0"
-      },
       "dependencies": {
-        "ansi-styles": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-          "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-          "dev": true
-        }
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "fast-deep-equal": {
+    "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
     },
-    "fast-diff": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
-      "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+    "node_modules/fast-diff": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
       "dev": true
     },
-    "fast-glob": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-      "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+    "node_modules/fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
         "glob-parent": "^5.1.2",
         "merge2": "^1.3.0",
         "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "fast-json-stable-stringify": {
+    "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "dev": true
     },
-    "fast-levenshtein": {
+    "node_modules/fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
-    "fastq": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
-      "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
+    "node_modules/fast-uri": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
+    },
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "reusify": "^1.0.4"
       }
     },
-    "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+    "node_modules/fb-watchman": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "bser": "2.1.1"
       }
     },
-    "file-entry-cache": {
+    "node_modules/fetch-blob": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+      "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/jimmywarting"
+        },
+        {
+          "type": "paypal",
+          "url": "https://paypal.me/jimmywarting"
+        }
+      ],
+      "dependencies": {
+        "node-domexception": "^1.0.0",
+        "web-streams-polyfill": "^3.0.3"
+      },
+      "engines": {
+        "node": "^12.20 || >= 14.13"
+      }
+    },
+    "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
       "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "flat-cache": "^3.0.4"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/filelist": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+      "dev": true,
+      "dependencies": {
+        "minimatch": "^5.0.1"
+      }
+    },
+    "node_modules/filelist/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "find-cache-dir": {
+    "node_modules/find-cache-dir": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
       "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "commondir": "^1.0.1",
         "make-dir": "^3.0.2",
         "pkg-dir": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
       }
     },
-    "find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+    "node_modules/find-cache-dir/node_modules/make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
       "dev": true,
-      "requires": {
-        "locate-path": "^5.0.0",
+      "dependencies": {
+        "semver": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/find-cache-dir/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^6.0.0",
         "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+    "node_modules/flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
       "dev": true,
-      "requires": {
-        "flatted": "^3.1.0",
+      "dependencies": {
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
         "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
-    "flatted": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
-      "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+    "node_modules/flat-cache/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/flat-cache/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/flat-cache/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/flat-cache/node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/flatted": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+      "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
       "dev": true
     },
-    "form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+    "node_modules/foreground-child": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+      "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
         "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "fs-extra": {
+    "node_modules/formdata-polyfill": {
+      "version": "4.0.10",
+      "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+      "dev": true,
+      "dependencies": {
+        "fetch-blob": "^3.1.2"
+      },
+      "engines": {
+        "node": ">=12.20.0"
+      }
+    },
+    "node_modules/fs-extra": {
       "version": "10.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
       "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "graceful-fs": "^4.2.0",
         "jsonfile": "^6.0.1",
         "universalify": "^2.0.0"
       },
-      "dependencies": {
-        "universalify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=12"
       }
     },
-    "fs.realpath": {
+    "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "dev": true
     },
-    "fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
       "dev": true,
-      "optional": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
     },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "gensync": {
+    "node_modules/gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
     },
-    "get-caller-file": {
+    "node_modules/get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true
-    },
-    "get-own-enumerable-property-symbols": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
-      "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
     },
-    "get-package-type": {
+    "node_modules/get-east-asian-width": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+      "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/get-package-type": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
       "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8.0.0"
+      }
     },
-    "get-stream": {
+    "node_modules/get-stream": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
       "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "glob": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+    "node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
       "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
       "dev": true,
-      "requires": {
-        "is-glob": "^4.0.1"
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
       }
     },
-    "globals": {
-      "version": "13.11.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
-      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+    "node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "globby": {
-      "version": "11.0.4",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
-      "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+    "node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "array-union": "^2.1.0",
         "dir-glob": "^3.0.1",
-        "fast-glob": "^3.1.1",
-        "ignore": "^5.1.4",
-        "merge2": "^1.3.0",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
         "slash": "^3.0.0"
       },
-      "dependencies": {
-        "ignore": {
-          "version": "5.1.8",
-          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
-          "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "graceful-fs": {
-      "version": "4.2.8",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-      "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "dev": true
     },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+      "dev": true
     },
-    "has-flag": {
+    "node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "html-encoding-sniffer": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
-      "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
-      "requires": {
-        "whatwg-encoding": "^1.0.5"
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "html-escaper": {
+    "node_modules/html-escaper": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
       "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
       "dev": true
     },
-    "http-proxy-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
-      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+    "node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
       "dev": true,
-      "requires": {
-        "@tootallnate/once": "1",
-        "agent-base": "6",
-        "debug": "4"
+      "engines": {
+        "node": ">=10.17.0"
       }
     },
-    "https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+    "node_modules/husky": {
+      "version": "9.0.11",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz",
+      "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==",
       "dev": true,
-      "requires": {
-        "agent-base": "6",
-        "debug": "4"
+      "bin": {
+        "husky": "bin.mjs"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/typicode"
       }
     },
-    "human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true
-    },
-    "husky": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz",
-      "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==",
-      "dev": true
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+    "node_modules/ignore": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
       "dev": true,
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
+      "engines": {
+        "node": ">= 4"
       }
     },
-    "ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
-      "dev": true
-    },
-    "import-fresh": {
+    "node_modules/import-fresh": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
       "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "import-local": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz",
-      "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==",
+    "node_modules/import-local": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "pkg-dir": "^4.2.0",
         "resolve-cwd": "^3.0.0"
+      },
+      "bin": {
+        "import-local-fixture": "fixtures/cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "imurmurhash": {
+    "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true
-    },
-    "indent-string": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-      "dev": true
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.19"
+      }
     },
-    "inflight": {
+    "node_modules/inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
       }
     },
-    "inherits": {
+    "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "interpret": {
+    "node_modules/interpret": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
       "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10"
+      }
     },
-    "is-arrayish": {
+    "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "dev": true
     },
-    "is-core-module": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
-      "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+    "node_modules/is-builtin-module": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+      "dev": true,
+      "dependencies": {
+        "builtin-modules": "^3.3.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+      "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
       "dev": true,
-      "requires": {
-        "has": "^1.0.3"
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-extglob": {
+    "node_modules/is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true
+    "node_modules/is-fullwidth-code-point": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+      "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "is-generator-fn": {
+    "node_modules/is-generator-fn": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
       "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "is-module": {
+    "node_modules/is-module": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
-      "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+      "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
       "dev": true
     },
-    "is-number": {
+    "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
-    },
-    "is-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
-      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
     },
-    "is-potential-custom-element-name": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
-      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
-      "dev": true
+    "node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "is-reference": {
+    "node_modules/is-reference": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
       "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@types/estree": "*"
       }
     },
-    "is-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
-      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
-      "dev": true
-    },
-    "is-stream": {
+    "node_modules/is-stream": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "dev": true
-    },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
-    "is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "isexe": {
+    "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
       "dev": true
     },
-    "istanbul-lib-coverage": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
-      "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
-      "dev": true
+    "node_modules/istanbul-lib-coverage": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+      "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "istanbul-lib-instrument": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
-      "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+    "node_modules/istanbul-lib-instrument": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+      "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.7.5",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.0.0",
-        "semver": "^6.3.0"
-      },
       "dependencies": {
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
+        "@babel/core": "^7.23.9",
+        "@babel/parser": "^7.23.9",
+        "@istanbuljs/schema": "^0.1.3",
+        "istanbul-lib-coverage": "^3.2.0",
+        "semver": "^7.5.4"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+    "node_modules/istanbul-lib-report": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^3.0.0",
+        "make-dir": "^4.0.0",
         "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "istanbul-lib-source-maps": {
+    "node_modules/istanbul-lib-source-maps": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
       "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "^4.1.1",
         "istanbul-lib-coverage": "^3.0.0",
         "source-map": "^0.6.1"
       },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10"
       }
     },
-    "istanbul-reports": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz",
-      "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==",
+    "node_modules/istanbul-reports": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+      "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "html-escaper": "^2.0.0",
         "istanbul-lib-report": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "dev": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/jake": {
+      "version": "10.9.1",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
+      "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
+      "dev": true,
+      "dependencies": {
+        "async": "^3.2.3",
+        "chalk": "^4.0.2",
+        "filelist": "^1.0.4",
+        "minimatch": "^3.1.2"
+      },
+      "bin": {
+        "jake": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jake/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "jest": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.3.tgz",
-      "integrity": "sha512-jwsfVABBzuN3Atm+6h6vIEpTs9+VApODLt4dk2qv1WMOpb1weI1IIZfuwpMiWZ62qvWj78MvdvMHIYdUfqrFaA==",
+    "node_modules/jake/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/jest": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+      "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
       "dev": true,
-      "requires": {
-        "@jest/core": "^27.4.3",
+      "dependencies": {
+        "@jest/core": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "import-local": "^3.0.2",
-        "jest-cli": "^27.4.3"
+        "jest-cli": "^29.7.0"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
       }
     },
-    "jest-changed-files": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
-      "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
+    "node_modules/jest-changed-files": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+      "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
+      "dependencies": {
         "execa": "^5.0.0",
-        "throat": "^6.0.1"
+        "jest-util": "^29.7.0",
+        "p-limit": "^3.1.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-circus": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.2.tgz",
-      "integrity": "sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A==",
+    "node_modules/jest-circus": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+      "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "co": "^4.6.0",
-        "dedent": "^0.7.0",
-        "expect": "^27.4.2",
+        "dedent": "^1.0.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2",
+        "jest-each": "^29.7.0",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "p-limit": "^3.1.0",
+        "pretty-format": "^29.7.0",
+        "pure-rand": "^6.0.0",
         "slash": "^3.0.0",
-        "stack-utils": "^2.0.3",
-        "throat": "^6.0.1"
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-cli": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.3.tgz",
-      "integrity": "sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw==",
+    "node_modules/jest-cli": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+      "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
       "dev": true,
-      "requires": {
-        "@jest/core": "^27.4.3",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/core": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "chalk": "^4.0.0",
+        "create-jest": "^29.7.0",
         "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
         "import-local": "^3.0.2",
-        "jest-config": "^27.4.3",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
-        "prompts": "^2.0.1",
-        "yargs": "^16.2.0"
-      },
-      "dependencies": {
-        "yargs": {
-          "version": "16.2.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-          "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^7.0.2",
-            "escalade": "^3.1.1",
-            "get-caller-file": "^2.0.5",
-            "require-directory": "^2.1.1",
-            "string-width": "^4.2.0",
-            "y18n": "^5.0.5",
-            "yargs-parser": "^20.2.2"
-          }
+        "jest-config": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
         }
       }
     },
-    "jest-config": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.3.tgz",
-      "integrity": "sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw==",
+    "node_modules/jest-config": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+      "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "babel-jest": "^27.4.2",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/test-sequencer": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-jest": "^29.7.0",
         "chalk": "^4.0.0",
         "ci-info": "^3.2.0",
         "deepmerge": "^4.2.2",
-        "glob": "^7.1.1",
-        "graceful-fs": "^4.2.4",
-        "jest-circus": "^27.4.2",
-        "jest-environment-jsdom": "^27.4.3",
-        "jest-environment-node": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "jest-jasmine2": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-runner": "^27.4.3",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-circus": "^29.7.0",
+        "jest-environment-node": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-runner": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.4.2",
-        "slash": "^3.0.0"
+        "parse-json": "^5.2.0",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@types/node": "*",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-config/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/jest-config/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/jest-config/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "jest-diff": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz",
-      "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==",
+    "node_modules/jest-diff": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+      "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "chalk": "^4.0.0",
-        "diff-sequences": "^27.4.0",
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-docblock": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz",
-      "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==",
+    "node_modules/jest-docblock": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+      "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "detect-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-each": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz",
-      "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==",
+    "node_modules/jest-each": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+      "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
         "chalk": "^4.0.0",
-        "jest-get-type": "^27.4.0",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2"
+        "jest-get-type": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-environment-jsdom": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz",
-      "integrity": "sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw==",
+    "node_modules/jest-environment-node": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+      "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^27.4.2",
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jsdom": "^16.6.0"
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-environment-node": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.2.tgz",
-      "integrity": "sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg==",
+    "node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+      "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^27.4.2",
-        "@jest/fake-timers": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "jest-mock": "^27.4.2",
-        "jest-util": "^27.4.2"
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-get-type": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz",
-      "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==",
-      "dev": true
-    },
-    "jest-haste-map": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.2.tgz",
-      "integrity": "sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA==",
+    "node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+      "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "@types/graceful-fs": "^4.1.2",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
         "@types/node": "*",
         "anymatch": "^3.0.3",
         "fb-watchman": "^2.0.0",
-        "fsevents": "^2.3.2",
-        "graceful-fs": "^4.2.4",
-        "jest-regex-util": "^27.4.0",
-        "jest-serializer": "^27.4.0",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
         "micromatch": "^4.0.4",
-        "walker": "^1.0.7"
-      },
-      "dependencies": {
-        "jest-worker": {
-          "version": "27.4.2",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-          "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "jest-jasmine2": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz",
-      "integrity": "sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ==",
-      "dev": true,
-      "requires": {
-        "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^27.4.2",
-        "@jest/source-map": "^27.4.0",
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "expect": "^27.4.2",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "pretty-format": "^27.4.2",
-        "throat": "^6.0.1"
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
-    "jest-leak-detector": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz",
-      "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==",
+    "node_modules/jest-leak-detector": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+      "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
       "dev": true,
-      "requires": {
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
+      "dependencies": {
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-matcher-utils": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz",
-      "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==",
+    "node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+      "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "chalk": "^4.0.0",
-        "jest-diff": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "pretty-format": "^27.4.2"
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-message-util": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz",
-      "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==",
+    "node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+      "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^27.4.2",
+        "@jest/types": "^29.6.3",
         "@types/stack-utils": "^2.0.0",
         "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
+        "graceful-fs": "^4.2.9",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.4.2",
+        "pretty-format": "^29.7.0",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3"
       },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.0",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
-          "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.0"
-          }
-        }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-mock": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz",
-      "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==",
+    "node_modules/jest-mock": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+      "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "@types/node": "*"
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+    "node_modules/jest-pnp-resolver": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
       "dev": true,
-      "requires": {}
+      "engines": {
+        "node": ">=6"
+      },
+      "peerDependencies": {
+        "jest-resolve": "*"
+      },
+      "peerDependenciesMeta": {
+        "jest-resolve": {
+          "optional": true
+        }
+      }
     },
-    "jest-regex-util": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz",
-      "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==",
-      "dev": true
+    "node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+      "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+      "dev": true,
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "jest-resolve": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.2.tgz",
-      "integrity": "sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg==",
+    "node_modules/jest-resolve": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+      "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
+      "dependencies": {
         "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
         "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
         "resolve": "^1.20.0",
-        "resolve.exports": "^1.1.0",
+        "resolve.exports": "^2.0.0",
         "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-resolve-dependencies": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz",
-      "integrity": "sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw==",
+    "node_modules/jest-resolve-dependencies": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+      "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-snapshot": "^27.4.2"
+      "dependencies": {
+        "jest-regex-util": "^29.6.3",
+        "jest-snapshot": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-runner": {
-      "version": "27.4.3",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.3.tgz",
-      "integrity": "sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA==",
+    "node_modules/jest-runner": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+      "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
       "dev": true,
-      "requires": {
-        "@jest/console": "^27.4.2",
-        "@jest/environment": "^27.4.2",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/environment": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "chalk": "^4.0.0",
-        "emittery": "^0.8.1",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "jest-docblock": "^27.4.0",
-        "jest-environment-jsdom": "^27.4.3",
-        "jest-environment-node": "^27.4.2",
-        "jest-haste-map": "^27.4.2",
-        "jest-leak-detector": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-runtime": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-worker": "^27.4.2",
-        "source-map-support": "^0.5.6",
-        "throat": "^6.0.1"
-      },
-      "dependencies": {
-        "jest-worker": {
-          "version": "27.4.2",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz",
-          "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
+        "emittery": "^0.13.1",
+        "graceful-fs": "^4.2.9",
+        "jest-docblock": "^29.7.0",
+        "jest-environment-node": "^29.7.0",
+        "jest-haste-map": "^29.7.0",
+        "jest-leak-detector": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-resolve": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-watcher": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "p-limit": "^3.1.0",
+        "source-map-support": "0.5.13"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-runtime": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.2.tgz",
-      "integrity": "sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^27.4.2",
-        "@jest/environment": "^27.4.2",
-        "@jest/globals": "^27.4.2",
-        "@jest/source-map": "^27.4.0",
-        "@jest/test-result": "^27.4.2",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/yargs": "^16.0.0",
+    "node_modules/jest-runtime": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+      "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+      "dev": true,
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/globals": "^29.7.0",
+        "@jest/source-map": "^29.6.3",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
         "chalk": "^4.0.0",
         "cjs-module-lexer": "^1.0.0",
         "collect-v8-coverage": "^1.0.0",
-        "execa": "^5.0.0",
-        "exit": "^0.1.2",
         "glob": "^7.1.3",
-        "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-mock": "^27.4.2",
-        "jest-regex-util": "^27.4.0",
-        "jest-resolve": "^27.4.2",
-        "jest-snapshot": "^27.4.2",
-        "jest-util": "^27.4.2",
-        "jest-validate": "^27.4.2",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
         "slash": "^3.0.0",
-        "strip-bom": "^4.0.0",
-        "yargs": "^16.2.0"
-      },
-      "dependencies": {
-        "yargs": {
-          "version": "16.2.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-          "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^7.0.2",
-            "escalade": "^3.1.1",
-            "get-caller-file": "^2.0.5",
-            "require-directory": "^2.1.1",
-            "string-width": "^4.2.0",
-            "y18n": "^5.0.5",
-            "yargs-parser": "^20.2.2"
-          }
-        }
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "jest-serializer": {
-      "version": "27.4.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz",
-      "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==",
+    "node_modules/jest-runtime/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "graceful-fs": "^4.2.4"
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "jest-snapshot": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.2.tgz",
-      "integrity": "sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ==",
+    "node_modules/jest-runtime/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/jest-snapshot": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+      "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.7.2",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
         "@babel/generator": "^7.7.2",
-        "@babel/parser": "^7.7.2",
+        "@babel/plugin-syntax-jsx": "^7.7.2",
         "@babel/plugin-syntax-typescript": "^7.7.2",
-        "@babel/traverse": "^7.7.2",
-        "@babel/types": "^7.0.0",
-        "@jest/transform": "^27.4.2",
-        "@jest/types": "^27.4.2",
-        "@types/babel__traverse": "^7.0.4",
-        "@types/prettier": "^2.1.5",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "babel-preset-current-node-syntax": "^1.0.0",
         "chalk": "^4.0.0",
-        "expect": "^27.4.2",
-        "graceful-fs": "^4.2.4",
-        "jest-diff": "^27.4.2",
-        "jest-get-type": "^27.4.0",
-        "jest-haste-map": "^27.4.2",
-        "jest-matcher-utils": "^27.4.2",
-        "jest-message-util": "^27.4.2",
-        "jest-resolve": "^27.4.2",
-        "jest-util": "^27.4.2",
+        "expect": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
         "natural-compare": "^1.4.0",
-        "pretty-format": "^27.4.2",
-        "semver": "^7.3.2"
+        "pretty-format": "^29.7.0",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-util": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz",
-      "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==",
+    "node_modules/jest-util": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+      "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.4",
+        "graceful-fs": "^4.2.9",
         "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-validate": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz",
-      "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==",
+    "node_modules/jest-validate": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+      "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
         "camelcase": "^6.2.0",
         "chalk": "^4.0.0",
-        "jest-get-type": "^27.4.0",
+        "jest-get-type": "^29.6.3",
         "leven": "^3.1.0",
-        "pretty-format": "^27.4.2"
+        "pretty-format": "^29.7.0"
       },
-      "dependencies": {
-        "camelcase": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
-          "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
-          "dev": true
-        }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-validate/node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "jest-watcher": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz",
-      "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==",
+    "node_modules/jest-watcher": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+      "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
       "dev": true,
-      "requires": {
-        "@jest/test-result": "^27.4.2",
-        "@jest/types": "^27.4.2",
+      "dependencies": {
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
         "chalk": "^4.0.0",
-        "jest-util": "^27.4.2",
+        "emittery": "^0.13.1",
+        "jest-util": "^29.7.0",
         "string-length": "^4.0.1"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "jest-worker": {
-      "version": "26.6.2",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
-      "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+    "node_modules/jest-worker": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+      "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@types/node": "*",
+        "jest-util": "^29.7.0",
         "merge-stream": "^2.0.0",
-        "supports-color": "^7.0.0"
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
-    "js-tokens": {
+    "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
       "dev": true
     },
-    "js-yaml": {
+    "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
       "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "requires": {
+      "dependencies": {
         "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "jsdom": {
-      "version": "16.7.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
-      "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.5",
-        "acorn": "^8.2.4",
-        "acorn-globals": "^6.0.0",
-        "cssom": "^0.4.4",
-        "cssstyle": "^2.3.0",
-        "data-urls": "^2.0.0",
-        "decimal.js": "^10.2.1",
-        "domexception": "^2.0.1",
-        "escodegen": "^2.0.0",
-        "form-data": "^3.0.0",
-        "html-encoding-sniffer": "^2.0.1",
-        "http-proxy-agent": "^4.0.1",
-        "https-proxy-agent": "^5.0.0",
-        "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.0",
-        "parse5": "6.0.1",
-        "saxes": "^5.0.1",
-        "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.0.0",
-        "w3c-hr-time": "^1.0.2",
-        "w3c-xmlserializer": "^2.0.0",
-        "webidl-conversions": "^6.1.0",
-        "whatwg-encoding": "^1.0.5",
-        "whatwg-mimetype": "^2.3.0",
-        "whatwg-url": "^8.5.0",
-        "ws": "^7.4.6",
-        "xml-name-validator": "^3.0.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "8.6.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz",
-          "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
-          "dev": true
-        }
-      }
-    },
-    "jsesc": {
+    "node_modules/jsesc": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
       "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
       "dev": true
     },
-    "json-parse-even-better-errors": {
+    "node_modules/json-parse-even-better-errors": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
       "dev": true
     },
-    "json-schema-traverse": {
+    "node_modules/json-schema-to-typescript": {
+      "version": "15.0.2",
+      "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-15.0.2.tgz",
+      "integrity": "sha512-+cRBw+bBJ3k783mZroDIgz1pLNPB4hvj6nnbHTWwEVl0dkW8qdZ+M9jWhBb+Y0FAdHvNsXACga3lewGO8lktrw==",
+      "dev": true,
+      "dependencies": {
+        "@apidevtools/json-schema-ref-parser": "^11.5.5",
+        "@types/json-schema": "^7.0.15",
+        "@types/lodash": "^4.17.7",
+        "glob": "^10.3.12",
+        "is-glob": "^4.0.3",
+        "js-yaml": "^4.1.0",
+        "lodash": "^4.17.21",
+        "minimist": "^1.2.8",
+        "prettier": "^3.2.5"
+      },
+      "bin": {
+        "json2ts": "dist/src/cli.js"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/json-schema-traverse": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
     },
-    "json-stable-stringify-without-jsonify": {
+    "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "dev": true
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dev": true,
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "dev": true,
+      "dependencies": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/leven": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/lilconfig": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+      "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antonk52"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
       "dev": true
     },
-    "json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true
+    "node_modules/lint-staged": {
+      "version": "15.2.7",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz",
+      "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==",
+      "dev": true,
+      "dependencies": {
+        "chalk": "~5.3.0",
+        "commander": "~12.1.0",
+        "debug": "~4.3.4",
+        "execa": "~8.0.1",
+        "lilconfig": "~3.1.1",
+        "listr2": "~8.2.1",
+        "micromatch": "~4.0.7",
+        "pidtree": "~0.6.0",
+        "string-argv": "~0.3.2",
+        "yaml": "~2.4.2"
+      },
+      "bin": {
+        "lint-staged": "bin/lint-staged.js"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/lint-staged"
+      }
+    },
+    "node_modules/lint-staged/node_modules/chalk": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+      "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+      "dev": true,
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/lint-staged/node_modules/execa": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^8.0.1",
+        "human-signals": "^5.0.0",
+        "is-stream": "^3.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^5.1.0",
+        "onetime": "^6.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=16.17"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/lint-staged/node_modules/get-stream": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lint-staged/node_modules/human-signals": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=16.17.0"
+      }
+    },
+    "node_modules/lint-staged/node_modules/is-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lint-staged/node_modules/mimic-fn": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lint-staged/node_modules/npm-run-path": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lint-staged/node_modules/onetime": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+      "dev": true,
+      "dependencies": {
+        "mimic-fn": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lint-staged/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+    "node_modules/lint-staged/node_modules/strip-final-newline": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
       "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.6",
-        "universalify": "^2.0.0"
+      "engines": {
+        "node": ">=12"
       },
-      "dependencies": {
-        "universalify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-          "dev": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true
+    "node_modules/listr2": {
+      "version": "8.2.3",
+      "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.3.tgz",
+      "integrity": "sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==",
+      "dev": true,
+      "dependencies": {
+        "cli-truncate": "^4.0.0",
+        "colorette": "^2.0.20",
+        "eventemitter3": "^5.0.1",
+        "log-update": "^6.0.0",
+        "rfdc": "^1.4.1",
+        "wrap-ansi": "^9.0.0"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
     },
-    "leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-      "dev": true
+    "node_modules/listr2/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
     },
-    "levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+    "node_modules/listr2/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
       "dev": true,
-      "requires": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "lines-and-columns": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+    "node_modules/listr2/node_modules/emoji-regex": {
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
       "dev": true
     },
-    "lint-staged": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz",
-      "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==",
-      "dev": true,
-      "requires": {
-        "chalk": "^4.1.1",
-        "cli-truncate": "^2.1.0",
-        "commander": "^7.2.0",
-        "cosmiconfig": "^7.0.0",
-        "debug": "^4.3.1",
-        "dedent": "^0.7.0",
-        "enquirer": "^2.3.6",
-        "execa": "^5.0.0",
-        "listr2": "^3.8.2",
-        "log-symbols": "^4.1.0",
-        "micromatch": "^4.0.4",
-        "normalize-path": "^3.0.0",
-        "please-upgrade-node": "^3.2.0",
-        "string-argv": "0.3.1",
-        "stringify-object": "^3.3.0"
+    "node_modules/listr2/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
       },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/listr2/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
       "dependencies": {
-        "commander": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-          "dev": true
-        }
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "listr2": {
-      "version": "3.11.1",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.11.1.tgz",
-      "integrity": "sha512-ZXQvQfmH9iWLlb4n3hh31yicXDxlzB0pE7MM1zu6kgbVL4ivEsO4H8IPh4E682sC8RjnYO9anose+zT52rrpyg==",
+    "node_modules/listr2/node_modules/wrap-ansi": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+      "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
       "dev": true,
-      "requires": {
-        "cli-truncate": "^2.1.0",
-        "colorette": "^1.2.2",
-        "log-update": "^4.0.0",
-        "p-map": "^4.0.0",
-        "rxjs": "^6.6.7",
-        "through": "^2.3.8",
-        "wrap-ansi": "^7.0.0"
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "string-width": "^7.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
-      "requires": {
-        "p-locate": "^4.1.0"
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "lodash": {
+    "node_modules/lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
       "dev": true
     },
-    "lodash.clonedeep": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
-      "dev": true
-    },
-    "lodash.memoize": {
+    "node_modules/lodash.memoize": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
       "dev": true
     },
-    "lodash.merge": {
+    "node_modules/lodash.merge": {
       "version": "4.6.2",
       "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
       "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
       "dev": true
     },
-    "lodash.truncate": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-      "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+    "node_modules/log-update": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz",
+      "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==",
+      "dev": true,
+      "dependencies": {
+        "ansi-escapes": "^6.2.0",
+        "cli-cursor": "^4.0.0",
+        "slice-ansi": "^7.0.0",
+        "strip-ansi": "^7.1.0",
+        "wrap-ansi": "^9.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-update/node_modules/ansi-escapes": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz",
+      "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-update/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/log-update/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/log-update/node_modules/emoji-regex": {
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
       "dev": true
     },
-    "log-symbols": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+    "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
+      "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
       "dev": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "is-unicode-supported": "^0.1.0"
+      "dependencies": {
+        "get-east-asian-width": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "log-update": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
-      "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
-      "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.3.0",
-        "cli-cursor": "^3.1.0",
-        "slice-ansi": "^4.0.0",
-        "wrap-ansi": "^6.2.0"
-      },
-      "dependencies": {
-        "slice-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-          "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "astral-regex": "^2.0.0",
-            "is-fullwidth-code-point": "^3.0.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "6.2.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
-          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "string-width": "^4.1.0",
-            "strip-ansi": "^6.0.0"
-          }
-        }
+    "node_modules/log-update/node_modules/slice-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
+      "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "is-fullwidth-code-point": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
       }
     },
-    "lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+    "node_modules/log-update/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
       "dev": true,
-      "requires": {
-        "yallist": "^4.0.0"
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "magic-string": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
-      "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+    "node_modules/log-update/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
-      "requires": {
-        "sourcemap-codec": "^1.4.4"
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+    "node_modules/log-update/node_modules/wrap-ansi": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+      "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
       "dev": true,
-      "requires": {
-        "semver": "^6.0.0"
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "string-width": "^7.0.0",
+        "strip-ansi": "^7.1.0"
       },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
       "dependencies": {
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.10",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+      "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.4.15"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+      "dev": true,
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "make-error": {
+    "node_modules/make-error": {
       "version": "1.3.6",
       "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
       "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
       "dev": true
     },
-    "makeerror": {
+    "node_modules/makeerror": {
       "version": "1.0.12",
       "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
       "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "tmpl": "1.0.5"
       }
     },
-    "merge-stream": {
+    "node_modules/merge-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
       "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
       "dev": true
     },
-    "merge2": {
+    "node_modules/merge2": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
       "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
     },
-    "micromatch": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
-      "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
-      "requires": {
-        "braces": "^3.0.1",
-        "picomatch": "^2.2.3"
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
       }
     },
-    "mime-db": {
-      "version": "1.49.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
-      "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
-      "dev": true
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "mime-types": {
-      "version": "2.1.32",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
-      "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
       "dev": true,
-      "requires": {
-        "mime-db": "1.49.0"
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "mimic-fn": {
+    "node_modules/mimic-fn": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
       "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/minipass": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
       "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
       }
     },
-    "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "dev": true
+    "node_modules/mkdirp": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+      "dev": true,
+      "bin": {
+        "mkdirp": "dist/cjs/src/bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
-    "ms": {
+    "node_modules/ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
       "dev": true
     },
-    "natural-compare": {
+    "node_modules/natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true
     },
-    "node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+    "node_modules/node-domexception": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
       "dev": true,
-      "requires": {
-        "whatwg-url": "^5.0.0"
-      },
-      "dependencies": {
-        "tr46": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-          "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-          "dev": true
-        },
-        "webidl-conversions": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-          "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-          "dev": true
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/jimmywarting"
         },
-        "whatwg-url": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-          "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-          "dev": true,
-          "requires": {
-            "tr46": "~0.0.3",
-            "webidl-conversions": "^3.0.0"
-          }
+        {
+          "type": "github",
+          "url": "https://paypal.me/jimmywarting"
         }
+      ],
+      "engines": {
+        "node": ">=10.5.0"
+      }
+    },
+    "node_modules/node-fetch": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+      "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+      "dev": true,
+      "dependencies": {
+        "data-uri-to-buffer": "^4.0.0",
+        "fetch-blob": "^3.1.4",
+        "formdata-polyfill": "^4.0.10"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/node-fetch"
       }
     },
-    "node-int64": {
+    "node_modules/node-int64": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
-      "dev": true
-    },
-    "node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
       "dev": true
     },
-    "node-releases": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
-      "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
+    "node_modules/node-releases": {
+      "version": "2.0.14",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
       "dev": true
     },
-    "normalize-path": {
+    "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "npm-run-path": {
+    "node_modules/npm-run-path": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
       "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
-      "dev": true
-    },
-    "once": {
+    "node_modules/once": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "wrappy": "1"
       }
     },
-    "onetime": {
+    "node_modules/onetime": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+    "node_modules/optionator": {
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
         "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
-      }
-    },
-    "p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "requires": {
-        "p-try": "^2.0.0"
+        "word-wrap": "^1.2.5"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
       "dev": true,
-      "requires": {
-        "p-limit": "^2.2.0"
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "p-map": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
-      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
       "dev": true,
-      "requires": {
-        "aggregate-error": "^3.0.0"
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "p-try": {
+    "node_modules/p-try": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
       "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
       "dev": true
     },
-    "parent-module": {
+    "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "parse-json": {
+    "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
       "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@babel/code-frame": "^7.0.0",
         "error-ex": "^1.3.1",
         "json-parse-even-better-errors": "^2.3.0",
         "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "parse5": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
-      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+    "node_modules/path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
       "dev": true
     },
-    "path-exists": {
+    "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
       "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "path-is-absolute": {
+    "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "path-is-network-drive": {
-      "version": "1.0.20",
-      "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.20.tgz",
-      "integrity": "sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
       "dev": true,
-      "requires": {
-        "tslib": "^2"
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "path-key": {
+    "node_modules/path-key": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "path-parse": {
+    "node_modules/path-parse": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
       "dev": true
     },
-    "path-strip-sep": {
-      "version": "1.0.17",
-      "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.17.tgz",
-      "integrity": "sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==",
+    "node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
-      "requires": {
-        "tslib": "^2"
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "path-type": {
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "dev": true
+    },
+    "node_modules/path-type": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+    "node_modules/picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
       "dev": true
     },
-    "picomatch": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
-      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-      "dev": true
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
     },
-    "pirates": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
-      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+    "node_modules/pidtree": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+      "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+      "dev": true,
+      "bin": {
+        "pidtree": "bin/pidtree.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
       "dev": true,
-      "requires": {
-        "node-modules-regexp": "^1.0.0"
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "pkg-dir": {
+    "node_modules/pkg-dir": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
       "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "find-up": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "please-upgrade-node": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
-      "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+    "node_modules/pkg-dir/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "dev": true,
-      "requires": {
-        "semver-compare": "^1.0.0"
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "prelude-ls": {
+    "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "prettier": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
-      "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
-      "dev": true
+    "node_modules/prettier": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
     },
-    "prettier-linter-helpers": {
+    "node_modules/prettier-linter-helpers": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
       "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "fast-diff": "^1.1.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "pretty-format": {
-      "version": "27.4.2",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz",
-      "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==",
+    "node_modules/pretty-format": {
+      "version": "29.7.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^27.4.2",
-        "ansi-regex": "^5.0.1",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
         "ansi-styles": "^5.0.0",
-        "react-is": "^17.0.1"
+        "react-is": "^18.0.0"
       },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-          "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-          "dev": true
-        }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-      "dev": true
+    "node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
     },
-    "prompts": {
+    "node_modules/prompts": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
       "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "kleur": "^3.0.3",
         "sisteransi": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
-      "dev": true
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
-      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
-      "dev": true
+    "node_modules/pure-rand": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+      "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/dubzzz"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fast-check"
+        }
+      ]
     },
-    "queue-microtask": {
+    "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
-    "randombytes": {
+    "node_modules/randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "safe-buffer": "^5.1.0"
       }
     },
-    "react-is": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
-      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+    "node_modules/react-is": {
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+      "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
       "dev": true
     },
-    "rechoir": {
+    "node_modules/rechoir": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "resolve": "^1.1.6"
+      },
+      "engines": {
+        "node": ">= 0.10"
       }
     },
-    "regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true
-    },
-    "require-directory": {
+    "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "require-from-string": {
+    "node_modules/require-from-string": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
-    },
-    "requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-      "dev": true
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "dev": true,
-      "requires": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "resolve-cwd": {
+    "node_modules/resolve-cwd": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
       "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "resolve-from": "^5.0.0"
       },
-      "dependencies": {
-        "resolve-from": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/resolve-cwd/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
       }
     },
-    "resolve-from": {
+    "node_modules/resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
       "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "resolve.exports": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
-      "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
-      "dev": true
+    "node_modules/resolve.exports": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+      "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+    "node_modules/restore-cursor": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+      "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "onetime": "^5.1.0",
         "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "reusify": {
+    "node_modules/restore-cursor/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
+    "node_modules/reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
       "dev": true
     },
-    "rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+    "node_modules/rimraf": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz",
+      "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==",
       "dev": true,
-      "requires": {
-        "glob": "^7.1.3"
+      "dependencies": {
+        "glob": "^11.0.0",
+        "package-json-from-dist": "^1.0.0"
+      },
+      "bin": {
+        "rimraf": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/glob": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
+      "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
+      "dev": true,
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^4.0.1",
+        "minimatch": "^10.0.0",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^2.0.0"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/jackspeak": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
+      "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
+      "dev": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/rimraf/node_modules/lru-cache": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz",
+      "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==",
+      "dev": true,
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "node_modules/rimraf/node_modules/minimatch": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+      "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/path-scurry": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^11.0.0",
+        "minipass": "^7.1.2"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "rollup": {
-      "version": "2.56.3",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz",
-      "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==",
+    "node_modules/rollup": {
+      "version": "2.79.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+      "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "optionalDependencies": {
         "fsevents": "~2.3.2"
       }
     },
-    "rollup-plugin-sourcemaps": {
+    "node_modules/rollup-plugin-sourcemaps": {
       "version": "0.6.3",
       "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz",
       "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@rollup/pluginutils": "^3.0.9",
         "source-map-resolve": "^0.6.0"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "@types/node": ">=10.0.0",
+        "rollup": ">=0.31.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/rollup-plugin-sourcemaps/node_modules/@rollup/pluginutils": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
+      "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+      "dev": true,
+      "dependencies": {
+        "@types/estree": "0.0.39",
+        "estree-walker": "^1.0.1",
+        "picomatch": "^2.2.2"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0"
       }
     },
-    "rollup-plugin-terser": {
+    "node_modules/rollup-plugin-sourcemaps/node_modules/@types/estree": {
+      "version": "0.0.39",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+      "dev": true
+    },
+    "node_modules/rollup-plugin-sourcemaps/node_modules/estree-walker": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
+      "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
+      "dev": true
+    },
+    "node_modules/rollup-plugin-terser": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
       "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
+      "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@babel/code-frame": "^7.10.4",
         "jest-worker": "^26.2.1",
         "serialize-javascript": "^4.0.0",
         "terser": "^5.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^2.0.0"
+      }
+    },
+    "node_modules/rollup-plugin-terser/node_modules/jest-worker": {
+      "version": "26.6.2",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+      "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
       }
     },
-    "rollup-plugin-typescript2": {
-      "version": "0.31.2",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz",
-      "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==",
+    "node_modules/rollup-plugin-typescript2": {
+      "version": "0.36.0",
+      "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz",
+      "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@rollup/pluginutils": "^4.1.2",
-        "@yarn-tool/resolve-package": "^1.0.40",
         "find-cache-dir": "^3.3.2",
         "fs-extra": "^10.0.0",
-        "resolve": "^1.20.0",
-        "tslib": "^2.3.1"
-      },
-      "dependencies": {
-        "@rollup/pluginutils": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
-          "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
-          "dev": true,
-          "requires": {
-            "estree-walker": "^2.0.1",
-            "picomatch": "^2.2.2"
-          }
-        }
+        "semver": "^7.5.4",
+        "tslib": "^2.6.2"
+      },
+      "peerDependencies": {
+        "rollup": ">=1.26.3",
+        "typescript": ">=2.4.0"
       }
     },
-    "run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+    "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
       "dev": true,
-      "requires": {
-        "queue-microtask": "^1.2.2"
+      "dependencies": {
+        "estree-walker": "^2.0.1",
+        "picomatch": "^2.2.2"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
       }
     },
-    "rxjs": {
-      "version": "6.6.7",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-      "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
       "dev": true,
-      "requires": {
-        "tslib": "^1.9.0"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
       }
     },
-    "safe-buffer": {
+    "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
-    },
-    "saxes": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
-      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
       "dev": true,
-      "requires": {
-        "xmlchars": "^2.2.0"
-      }
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
-    "semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+    "node_modules/semver": {
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "dev": true,
-      "requires": {
-        "lru-cache": "^6.0.0"
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "semver-compare": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
-      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
-      "dev": true
-    },
-    "serialize-javascript": {
+    "node_modules/serialize-javascript": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
       "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "randombytes": "^2.1.0"
       }
     },
-    "shebang-command": {
+    "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
       "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "shebang-regex": {
+    "node_modules/shebang-regex": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "shelljs": {
+    "node_modules/shelljs": {
       "version": "0.8.5",
       "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
       "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "glob": "^7.0.0",
         "interpret": "^1.0.0",
         "rechoir": "^0.6.2"
+      },
+      "bin": {
+        "shjs": "bin/shjs"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/shelljs/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/shelljs/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/shelljs/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "shx": {
+    "node_modules/shx": {
       "version": "0.3.4",
       "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz",
       "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "minimist": "^1.2.3",
         "shelljs": "^0.8.5"
+      },
+      "bin": {
+        "shx": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "signal-exit": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
-      "dev": true
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
-    "sisteransi": {
+    "node_modules/sisteransi": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
       "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
       "dev": true
     },
-    "slash": {
+    "node_modules/slash": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
       "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/slice-ansi": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+      "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.0.0",
+        "is-fullwidth-code-point": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-resolve": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
+      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
+      "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+      "dev": true,
+      "dependencies": {
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+      "dev": true,
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true
     },
-    "slice-ansi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
-      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+    "node_modules/stack-utils": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+      "dev": true,
+      "dependencies": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/stack-utils/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-argv": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+      "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.6.19"
+      }
+    },
+    "node_modules/string-length": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
       "dev": true,
-      "requires": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
+      "dependencies": {
+        "char-regex": "^1.0.2",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "source-map": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
-      "dev": true
-    },
-    "source-map-resolve": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
-      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
+    "node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
       "dev": true,
-      "requires": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0"
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "source-map-support": {
-      "version": "0.5.20",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
-      "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
-      "dev": true
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
-    "stack-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
-      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+    "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
       "dev": true,
-      "requires": {
-        "escape-string-regexp": "^2.0.0"
-      },
-      "dependencies": {
-        "escape-string-regexp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=8"
       }
     },
-    "string-argv": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
-      "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
-      "dev": true
-    },
-    "string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+    "node_modules/string-width/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
-      "requires": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "string-width": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-      "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+    "node_modules/string-width/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
-      "requires": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.0"
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "stringify-object": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
-      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
-      "requires": {
-        "get-own-enumerable-property-symbols": "^3.0.0",
-        "is-obj": "^1.0.1",
-        "is-regexp": "^1.0.0"
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "strip-ansi": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-      "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
-      "requires": {
-        "ansi-regex": "^5.0.0"
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "strip-bom": {
+    "node_modules/strip-bom": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
       "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "strip-final-newline": {
+    "node_modules/strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "strip-json-comments": {
+    "node_modules/strip-json-comments": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "supports-color": {
+    "node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
-      "dev": true,
-      "requires": {
-        "has-flag": "^4.0.0",
-        "supports-color": "^7.0.0"
-      }
-    },
-    "symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
-    },
-    "table": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
-      "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
       "dev": true,
-      "requires": {
-        "ajv": "^8.0.1",
-        "lodash.clonedeep": "^4.5.0",
-        "lodash.truncate": "^4.4.2",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "dependencies": {
-        "slice-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-          "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "astral-regex": "^2.0.0",
-            "is-fullwidth-code-point": "^3.0.0"
-          }
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "terminal-link": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
-      "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+    "node_modules/synckit": {
+      "version": "0.8.8",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
+      "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
       "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "supports-hyperlinks": "^2.0.0"
+      "dependencies": {
+        "@pkgr/core": "^0.1.0",
+        "tslib": "^2.6.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unts"
       }
     },
-    "terser": {
-      "version": "5.16.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz",
-      "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==",
+    "node_modules/terser": {
+      "version": "5.31.2",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz",
+      "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==",
       "dev": true,
-      "requires": {
-        "@jridgewell/source-map": "^0.3.2",
-        "acorn": "^8.5.0",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
         "commander": "^2.20.0",
         "source-map-support": "~0.5.20"
       },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
+    },
+    "node_modules/terser/node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dev": true,
       "dependencies": {
-        "acorn": {
-          "version": "8.8.2",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-          "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
-          "dev": true
-        },
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-          "dev": true
-        }
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
       }
     },
-    "test-exclude": {
+    "node_modules/test-exclude": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
       "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@istanbuljs/schema": "^0.1.2",
         "glob": "^7.1.4",
         "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "dev": true
+    "node_modules/test-exclude/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
     },
-    "throat": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
-      "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
-      "dev": true
+    "node_modules/test-exclude/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/test-exclude/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
     },
-    "through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+    "node_modules/text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
       "dev": true
     },
-    "tmpl": {
+    "node_modules/tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
       "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
       "dev": true
     },
-    "to-fast-properties": {
+    "node_modules/to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-      "dev": true
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "to-regex-range": {
+    "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
       }
     },
-    "tough-cookie": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
-      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+    "node_modules/ts-api-utils": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+      "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
       "dev": true,
-      "requires": {
-        "psl": "^1.1.33",
-        "punycode": "^2.1.1",
-        "universalify": "^0.2.0",
-        "url-parse": "^1.5.3"
+      "engines": {
+        "node": ">=16"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.2.0"
       }
     },
-    "tr46": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
-      "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.1"
-      }
+    "node_modules/ts-inference-check": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/ts-inference-check/-/ts-inference-check-0.3.0.tgz",
+      "integrity": "sha512-nJ0MflAJTFmvJq0bP+KYcPze4WWE+VgkVZt2mL+qiizdqSI/PX55b21q9LpqiSLOOiRPdOWjW5Tsxrrf+jByog==",
+      "dev": true
     },
-    "ts-jest": {
-      "version": "27.1.0",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.0.tgz",
-      "integrity": "sha512-ZouWlP03JMtzfNHg0ZeDrxAESYGmVhWyHtIl2/01kBbXaMbTr4Vhv6/GeMxUed6GFg/4ycMo+yU6Eo9gI16xTQ==",
+    "node_modules/ts-jest": {
+      "version": "29.2.2",
+      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.2.tgz",
+      "integrity": "sha512-sSW7OooaKT34AAngP6k1VS669a0HdLxkQZnlC7T76sckGCokXFnvJ3yRlQZGRTAoV5K19HfSgCiSwWOSIfcYlg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "bs-logger": "0.x",
-        "esbuild": "~0.14.0",
+        "ejs": "^3.0.0",
         "fast-json-stable-stringify": "2.x",
-        "jest-util": "^27.0.0",
-        "json5": "2.x",
+        "jest-util": "^29.0.0",
+        "json5": "^2.2.3",
         "lodash.memoize": "4.x",
         "make-error": "1.x",
-        "semver": "7.x",
-        "yargs-parser": "20.x"
+        "semver": "^7.5.3",
+        "yargs-parser": "^21.0.1"
+      },
+      "bin": {
+        "ts-jest": "cli.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": ">=7.0.0-beta.0 <8",
+        "@jest/transform": "^29.0.0",
+        "@jest/types": "^29.0.0",
+        "babel-jest": "^29.0.0",
+        "jest": "^29.0.0",
+        "typescript": ">=4.3 <6"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        },
+        "@jest/transform": {
+          "optional": true
+        },
+        "@jest/types": {
+          "optional": true
+        },
+        "babel-jest": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        }
       }
     },
-    "ts-node": {
-      "version": "9.1.1",
-      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
-      "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
+    "node_modules/ts-morph": {
+      "version": "23.0.0",
+      "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-23.0.0.tgz",
+      "integrity": "sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==",
       "dev": true,
-      "requires": {
+      "dependencies": {
+        "@ts-morph/common": "~0.24.0",
+        "code-block-writer": "^13.0.1"
+      }
+    },
+    "node_modules/ts-node": {
+      "version": "10.9.2",
+      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+      "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+      "dev": true,
+      "dependencies": {
+        "@cspotcode/source-map-support": "^0.8.0",
+        "@tsconfig/node10": "^1.0.7",
+        "@tsconfig/node12": "^1.0.7",
+        "@tsconfig/node14": "^1.0.0",
+        "@tsconfig/node16": "^1.0.2",
+        "acorn": "^8.4.1",
+        "acorn-walk": "^8.1.1",
         "arg": "^4.1.0",
         "create-require": "^1.1.0",
         "diff": "^4.0.1",
         "make-error": "^1.1.1",
-        "source-map-support": "^0.5.17",
+        "v8-compile-cache-lib": "^3.0.1",
         "yn": "3.1.1"
-      }
-    },
-    "tslib": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
-      "dev": true
-    },
-    "tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "requires": {
-        "tslib": "^1.8.1"
       },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
+      "bin": {
+        "ts-node": "dist/bin.js",
+        "ts-node-cwd": "dist/bin-cwd.js",
+        "ts-node-esm": "dist/bin-esm.js",
+        "ts-node-script": "dist/bin-script.js",
+        "ts-node-transpile-only": "dist/bin-transpile.js",
+        "ts-script": "dist/bin-script-deprecated.js"
+      },
+      "peerDependencies": {
+        "@swc/core": ">=1.2.50",
+        "@swc/wasm": ">=1.2.50",
+        "@types/node": "*",
+        "typescript": ">=2.7"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "@swc/wasm": {
+          "optional": true
         }
       }
     },
-    "type-check": {
+    "node_modules/tslib": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "dev": true
+    },
+    "node_modules/type-check": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
       "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "prelude-ls": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "type-detect": {
+    "node_modules/type-detect": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
       "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "type-fest": {
+    "node_modules/type-fest": {
       "version": "0.20.2",
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
       "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+    "node_modules/typescript": {
+      "version": "5.5.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
+      "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
       "dev": true,
-      "requires": {
-        "is-typedarray": "^1.0.0"
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
       }
     },
-    "typescript": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz",
-      "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==",
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
-    "universalify": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
-      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
-      "dev": true
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10.0.0"
+      }
     },
-    "upath2": {
-      "version": "3.1.19",
-      "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.19.tgz",
-      "integrity": "sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==",
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
       "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "path-is-network-drive": "^1.0.20",
-        "path-strip-sep": "^1.0.17",
-        "tslib": "^2"
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "escalade": "^3.1.2",
+        "picocolors": "^1.0.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
       }
     },
-    "uri-js": {
+    "node_modules/uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
       "dev": true,
-      "requires": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
+      "dependencies": {
+        "punycode": "^2.1.0"
       }
     },
-    "v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+    "node_modules/v8-compile-cache-lib": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+      "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
       "dev": true
     },
-    "v8-to-istanbul": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
-      "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
+    "node_modules/v8-to-istanbul": {
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+      "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.12",
         "@types/istanbul-lib-coverage": "^2.0.1",
-        "convert-source-map": "^1.6.0",
-        "source-map": "^0.7.3"
-      }
-    },
-    "w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
-      "dev": true,
-      "requires": {
-        "browser-process-hrtime": "^1.0.0"
-      }
-    },
-    "w3c-xmlserializer": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
-      "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
-      "dev": true,
-      "requires": {
-        "xml-name-validator": "^3.0.0"
+        "convert-source-map": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10.12.0"
       }
     },
-    "walker": {
+    "node_modules/walker": {
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
       "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "makeerror": "1.0.12"
       }
     },
-    "webidl-conversions": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
-      "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
-      "dev": true
-    },
-    "whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
-      "dev": true,
-      "requires": {
-        "iconv-lite": "0.4.24"
-      }
-    },
-    "whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
-    },
-    "whatwg-url": {
-      "version": "8.7.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
-      "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+    "node_modules/web-streams-polyfill": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+      "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
       "dev": true,
-      "requires": {
-        "lodash": "^4.7.0",
-        "tr46": "^2.1.0",
-        "webidl-conversions": "^6.1.0"
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "which": {
+    "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "word-wrap": {
+    "node_modules/word-wrap": {
       "version": "1.2.5",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
       "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
     },
-    "wrap-ansi": {
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
         "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
-    "write-file-atomic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+    "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
       "dev": true,
-      "requires": {
-        "imurmurhash": "^0.1.4",
-        "is-typedarray": "^1.0.0",
-        "signal-exit": "^3.0.2",
-        "typedarray-to-buffer": "^3.1.5"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "ws": {
-      "version": "7.5.6",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
-      "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
-      "requires": {}
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+    "node_modules/wrap-ansi/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
-    "xmlchars": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
-      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+    "node_modules/write-file-atomic": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+      "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+      "dev": true,
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.7"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/write-file-atomic/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
-    "y18n": {
+    "node_modules/y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
       "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
       "dev": true
     },
-    "yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "dev": true
+    "node_modules/yaml": {
+      "version": "2.4.5",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
+      "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
+      "dev": true,
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
     },
-    "yargs": {
-      "version": "17.1.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
-      "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
       "dev": true,
-      "requires": {
-        "cliui": "^7.0.2",
+      "dependencies": {
+        "cliui": "^8.0.1",
         "escalade": "^3.1.1",
         "get-caller-file": "^2.0.5",
         "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
+        "string-width": "^4.2.3",
         "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
       }
     },
-    "yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+    "node_modules/yargs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
-    "yn": {
+    "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yn": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
       "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "yocto-queue": {
+    "node_modules/yocto-queue": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     }
   }
 }
diff --git a/package.json b/package.json
index e5f7e1e..d85e53d 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
-  "name": "@serverlessworkflow/sdk-typescript",
-  "version": "4.0.0",
-  "schemaVersion": "0.8",
+  "name": "@serverlessworkflow/sdk",
+  "version": "1.0.0-alpha5.0",
+  "schemaVersion": "1.0.0-alpha5",
   "description": "Typescript SDK for Serverless Workflow Specification",
   "main": "umd/index.umd.min.js",
   "browser": "umd/index.umd.min.js",
@@ -16,11 +16,12 @@
     "prettier": "npx prettier",
     "lint-staged": "npx lint-staged",
     "clean": "npx rimraf dist && rimraf out-tsc",
-    "tools:download-schemas": "npx ts-node --project ./tools/tsconfig.json ./tools/download-schemas.ts",
-    "tools:generate-merged_json": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-merged_json.ts",
-    "tools:generate-definitions": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-definitions.ts",
-    "tools:generate-builders": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-builders.ts",
-    "update-code-base": "npm run tools:download-schemas && tools:generate-merged_json && npm run tools:generate-definitions && npm run tools:generate-builders && npm run format && npm run test",
+    "tools:1_download-schemas": "npx ts-node --project ./tools/tsconfig.json ./tools/1_download-schemas.ts",
+    "tools:2_generate-definitions": "npx ts-node --project ./tools/tsconfig.json ./tools/2_generate-definitions.ts",
+    "tools:3_generate-validation-pointers": "npx ts-node --project ./tools/tsconfig.json ./tools/3_generate-validation-pointers.ts",
+    "tools:4_generate-classes": "npx ts-node --project ./tools/tsconfig.json ./tools/4_generate-classes.ts",
+    "tools:5_generate-builders": "npx ts-node --project ./tools/tsconfig.json ./tools/5_generate-builders.ts",
+    "update-code-base": "npm run tools:1_download-schemas && npm run tools:2_generate-definitions && npm run tools:3_generate-validation-pointers && npm run tools:4_generate-classes && npm run tools:5_generate-builders && npm run format && npm run test",
     "format": "npx prettier --write \"**/*.ts\"",
     "lint": "npx eslint . --ext .ts && npx prettier --check \"**/*.ts\"",
     "pretest": "npx rimraf out-tsc",
@@ -31,44 +32,46 @@
     "verify-publish-directory": "node -e 'if (!process.cwd().endsWith(\"dist\")) { console.error(\"Packaging/Publishing should be done from ./dist/\"); process.exitCode = 1; } process.exit();'",
     "prepack": "npm run verify-publish-directory",
     "prepublishOnly": "npm run verify-publish-directory",
-    "prepublish": "husky install"
+    "prepublish": "husky"
   },
   "dependencies": {
-    "ajv": "^8.1.0",
+    "ajv": "^8.17.1",
+    "ajv-formats": "^3.0.1",
     "js-yaml": "^4.1.0"
   },
   "devDependencies": {
-    "@apidevtools/json-schema-ref-parser": "^9.0.7",
-    "@dtsgenerator/replace-namespace": "^1.4.1",
-    "@rollup/plugin-commonjs": "^19.0.0",
-    "@rollup/plugin-json": "^4.1.0",
-    "@rollup/plugin-node-resolve": "^13.0.0",
-    "@types/jest": "^27.0.3",
-    "@types/js-yaml": "^4.0.1",
-    "@types/node-fetch": "^2.5.10",
-    "@types/rimraf": "^3.0.0",
-    "@types/yargs": "^16.0.1",
-    "@typescript-eslint/eslint-plugin": "^4.23.0",
-    "@typescript-eslint/parser": "^4.23.0",
-    "dtsgenerator": "^3.10.0",
-    "eslint": "^7.26.0",
-    "eslint-config-prettier": "^8.3.0",
-    "eslint-plugin-prettier": "^3.4.0",
-    "husky": "6.0.0",
-    "jest": "^27.4.3",
-    "lint-staged": "11.0.0",
-    "node-fetch": "^2.6.1",
-    "prettier": "^2.3.0",
-    "rimraf": "^3.0.2",
-    "rollup": "^2.47.0",
+    "@apidevtools/json-schema-ref-parser": "^11.6.4",
+    "@rollup/plugin-commonjs": "^26.0.1",
+    "@rollup/plugin-json": "^6.1.0",
+    "@rollup/plugin-node-resolve": "^15.2.3",
+    "@types/jest": "^29.5.12",
+    "@types/js-yaml": "^4.0.9",
+    "@types/node-fetch": "^2.6.11",
+    "@types/rimraf": "^4.0.5",
+    "@types/yargs": "^17.0.32",
+    "@typescript-eslint/eslint-plugin": "^7.16.1",
+    "@typescript-eslint/parser": "^7.16.1",
+    "eslint": "^8.57.0",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-plugin-prettier": "^5.1.3",
+    "husky": "^9.0.11",
+    "jest": "^29.7.0",
+    "json-schema-to-typescript": "^15.0.2",
+    "lint-staged": "^15.2.7",
+    "node-fetch": "^3.3.2",
+    "prettier": "^3.3.3",
+    "rimraf": "^6.0.1",
+    "rollup": "^2.79.1",
     "rollup-plugin-sourcemaps": "^0.6.3",
     "rollup-plugin-terser": "^7.0.2",
-    "rollup-plugin-typescript2": "^0.31.0",
+    "rollup-plugin-typescript2": "^0.36.0",
     "shx": "^0.3.4",
-    "ts-jest": "^27.1.0",
-    "ts-node": "^9.1.1",
-    "typescript": "^4.2.4",
-    "yargs": "^17.0.1"
+    "ts-inference-check": "^0.3.0",
+    "ts-jest": "^29.2.2",
+    "ts-morph": "^23.0.0",
+    "ts-node": "^10.9.2",
+    "typescript": "^5.5.3",
+    "yargs": "^17.7.2"
   },
   "repository": {
     "type": "git",
@@ -84,7 +87,7 @@
   },
   "homepage": "https://serverlessworkflow.io",
   "engines": {
-    "node": ">=15.0",
-    "npm": ">=7.0.0"
+    "node": ">=20.0",
+    "npm": ">=10.0.0"
   }
 }
diff --git a/src/index.ts b/src/index.ts
index bacbdc6..c957c39 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,18 +1 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
 export * from './serverless-workflow-sdk';
-export * from './lib/diagram';
diff --git a/src/lib/builder.ts b/src/lib/builder.ts
index 5034729..5e8321b 100644
--- a/src/lib/builder.ts
+++ b/src/lib/builder.ts
@@ -9,38 +9,95 @@
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 
 /**
- * Represents a builder proxy
+ * Represents the options passed to the `build()` method
+ */
+export type BuildOptions = {
+  /**
+   * Default true
+   */
+  validate?: boolean;
+  /**
+   * Default true
+   */
+  normalize?: boolean;
+};
+
+/**
+ * The type of the underlying function called on `build()` for objects
  */
-export type Builder = {
-  build: () => T;
+export type BuildingFunction = (model: Partial, options: BuildOptions) => TBuilt;
+
+/**
+ * The type of the underlying function called on `build()` for arrays
+ */
+export type ArrayBuildingFunction = (model: Array, options: BuildOptions) => TBuilt;
+
+/**
+ * Represents a fluent builder proxy for an object
+ */
+export type Builder = {
+  build: (option?: BuildOptions) => TBuilt;
 } & {
-  [k in T extends T ? keyof T : never]-?: (arg: T[k]) => Builder;
+  [K in keyof TSpec]-?: (arg: TSpec[K]) => Builder;
+};
+
+/**
+ * Represents a fluent builder proxy for an array
+ */
+export type ArrayBuilder = {
+  push: (item: TSpec) => ArrayBuilder;
+  build: (option?: BuildOptions) => TBuilt;
 };
 
 /**
- * A factory for builders that proxy properties assignations and validate against schema on build
- * @param {Function} buildingFn The function used to validate and produce the object on build()
- * @returns {Builder} A builder proxy
+ * The default function used to build an object, basically just return the provided object
+ * @param model The object to "build"
+ * @param options The build options
+ * @returns
  */
-export function builder(buildingFn?: (data: Partial) => () => T): Builder {
-  const data: Partial = {};
-  const defaultBuildingFn =
-    (data: Partial): (() => T) =>
-    () =>
-      data as T;
-  const proxy = new Proxy({} as Builder, {
+function defaultBuildingFn(model: Partial, options: BuildOptions): TBuilt {
+  // prevents @typescript-eslint/no-unused-vars ...
+  if (options.validate == null) {
+    options.validate = true;
+  }
+  if (options.normalize == null) {
+    options.normalize = true;
+  }
+  return model as TBuilt;
+}
+
+/**
+ * A factory for fluent builders that proxy properties assignations and can validate against schema on build()
+ * @param buildingFn The function used to validate and produce the object on build()
+ * @returns A fluent builder
+ */
+export function builder(
+  model: Partial = {},
+  buildingFn: BuildingFunction = defaultBuildingFn,
+): Builder {
+  const proxy = new Proxy({} as Builder, {
     get: (_, prop) => {
       if (prop === 'build') {
-        return (buildingFn || defaultBuildingFn)(data);
+        return (options?: BuildOptions) => {
+          options = options || ({} as BuildOptions);
+          if (options.validate == null) {
+            options.validate = true;
+          }
+          if (options.normalize == null) {
+            options.normalize = true;
+          }
+          return buildingFn(model, options);
+        };
       }
-      return (value: unknown): Builder => {
-        (data as any)[prop.toString()] = value;
+      return (value: unknown): Builder => {
+        (model as any)[prop.toString()] = value;
         return proxy;
       };
     },
@@ -50,3 +107,43 @@ export function builder(buildingFn?: (data: Partial) => () => T): Builder<
   });
   return proxy;
 }
+
+/**
+ * A factory for fluent builders that proxy properties assignations and can validate against schema on build()
+ * @param buildingFn The function used to validate and produce the object on build()
+ * @returns A fluent builder
+ */
+export function arrayBuilder(
+  model: Array = [],
+  buildingFn: ArrayBuildingFunction = defaultBuildingFn,
+): ArrayBuilder {
+  if (model != null && !Array.isArray(model)) {
+    throw new Error(`The provided model should be an array`);
+  }
+  const proxy = new Proxy({} as ArrayBuilder, {
+    get: (_, prop) => {
+      if (prop === 'build') {
+        return (options?: BuildOptions) => {
+          options = options || ({} as BuildOptions);
+          if (options.validate == null) {
+            options.validate = true;
+          }
+          if (options.normalize == null) {
+            options.normalize = true;
+          }
+          return buildingFn(model, options);
+        };
+      }
+      if (prop === 'push') {
+        return (value: TSpec): ArrayBuilder => {
+          model.push(value);
+          return proxy;
+        };
+      }
+    },
+    set: () => {
+      return false;
+    },
+  });
+  return proxy;
+}
diff --git a/src/lib/builders/action-builder.ts b/src/lib/builders/action-builder.ts
deleted file mode 100644
index 9a9b52a..0000000
--- a/src/lib/builders/action-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Action} data The underlying object
- * @returns {Specification.Action} The validated underlying object
- */
-function actionBuildingFn(data: Specification.Action): () => Specification.Action {
-  return () => {
-    const model = new Specification.Action(data);
-
-    validate('Action', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Action`
- * @returns {Specification.Action} A builder for `Specification.Action`
- */
-export function actionBuilder(): Builder {
-  return builder(actionBuildingFn);
-}
diff --git a/src/lib/builders/actiondatafilter-builder.ts b/src/lib/builders/actiondatafilter-builder.ts
deleted file mode 100644
index cd2278b..0000000
--- a/src/lib/builders/actiondatafilter-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Actiondatafilter} data The underlying object
- * @returns {Specification.Actiondatafilter} The validated underlying object
- */
-function actiondatafilterBuildingFn(data: Specification.Actiondatafilter): () => Specification.Actiondatafilter {
-  return () => {
-    const model = new Specification.Actiondatafilter(data);
-
-    validate('Actiondatafilter', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Actiondatafilter`
- * @returns {Specification.Actiondatafilter} A builder for `Specification.Actiondatafilter`
- */
-export function actiondatafilterBuilder(): Builder {
-  return builder(actiondatafilterBuildingFn);
-}
diff --git a/src/lib/builders/authdef-builder.ts b/src/lib/builders/authdef-builder.ts
deleted file mode 100644
index 4cbd711..0000000
--- a/src/lib/builders/authdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Authdef} data The underlying object
- * @returns {Specification.Authdef} The validated underlying object
- */
-function authdefBuildingFn(data: Specification.Authdef): () => Specification.Authdef {
-  return () => {
-    const model = new Specification.Authdef(data);
-
-    validate('Authdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Authdef`
- * @returns {Specification.Authdef} A builder for `Specification.Authdef`
- */
-export function authdefBuilder(): Builder {
-  return builder(authdefBuildingFn);
-}
diff --git a/src/lib/builders/basicpropsdef-builder.ts b/src/lib/builders/basicpropsdef-builder.ts
deleted file mode 100644
index 49c359c..0000000
--- a/src/lib/builders/basicpropsdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Basicpropsdef} data The underlying object
- * @returns {Specification.Basicpropsdef} The validated underlying object
- */
-function basicpropsdefBuildingFn(data: Specification.Basicpropsdef): () => Specification.Basicpropsdef {
-  return () => {
-    const model = new Specification.Basicpropsdef(data);
-
-    validate('Basicpropsdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Basicpropsdef`
- * @returns {Specification.Basicpropsdef} A builder for `Specification.Basicpropsdef`
- */
-export function basicpropsdefBuilder(): Builder {
-  return builder(basicpropsdefBuildingFn);
-}
diff --git a/src/lib/builders/bearerpropsdef-builder.ts b/src/lib/builders/bearerpropsdef-builder.ts
deleted file mode 100644
index 6c372fd..0000000
--- a/src/lib/builders/bearerpropsdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Bearerpropsdef} data The underlying object
- * @returns {Specification.Bearerpropsdef} The validated underlying object
- */
-function bearerpropsdefBuildingFn(data: Specification.Bearerpropsdef): () => Specification.Bearerpropsdef {
-  return () => {
-    const model = new Specification.Bearerpropsdef(data);
-
-    validate('Bearerpropsdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Bearerpropsdef`
- * @returns {Specification.Bearerpropsdef} A builder for `Specification.Bearerpropsdef`
- */
-export function bearerpropsdefBuilder(): Builder {
-  return builder(bearerpropsdefBuildingFn);
-}
diff --git a/src/lib/builders/branch-builder.ts b/src/lib/builders/branch-builder.ts
deleted file mode 100644
index 50bd435..0000000
--- a/src/lib/builders/branch-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Branch} data The underlying object
- * @returns {Specification.Branch} The validated underlying object
- */
-function branchBuildingFn(data: Specification.Branch): () => Specification.Branch {
-  return () => {
-    const model = new Specification.Branch(data);
-
-    validate('Branch', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Branch`
- * @returns {Specification.Branch} A builder for `Specification.Branch`
- */
-export function branchBuilder(): Builder {
-  return builder(branchBuildingFn);
-}
diff --git a/src/lib/builders/callbackstate-builder.ts b/src/lib/builders/callbackstate-builder.ts
deleted file mode 100644
index b89a299..0000000
--- a/src/lib/builders/callbackstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Callbackstate} data The underlying object
- * @returns {Specification.Callbackstate} The validated underlying object
- */
-function callbackstateBuildingFn(data: Specification.Callbackstate): () => Specification.Callbackstate {
-  return () => {
-    const model = new Specification.Callbackstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Callbackstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Callbackstate`
- * @returns {Specification.Callbackstate} A builder for `Specification.Callbackstate`
- */
-export function callbackstateBuilder(): Builder {
-  return builder(callbackstateBuildingFn);
-}
diff --git a/src/lib/builders/continueasdef-builder.ts b/src/lib/builders/continueasdef-builder.ts
deleted file mode 100644
index db6f417..0000000
--- a/src/lib/builders/continueasdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Continueasdef} data The underlying object
- * @returns {Specification.Continueasdef} The validated underlying object
- */
-function continueasdefBuildingFn(data: Specification.Continueasdef): () => Specification.Continueasdef {
-  return () => {
-    const model = new Specification.Continueasdef(data);
-
-    validate('Continueasdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Continueasdef`
- * @returns {Specification.Continueasdef} A builder for `Specification.Continueasdef`
- */
-export function continueasdefBuilder(): Builder {
-  return builder(continueasdefBuildingFn);
-}
diff --git a/src/lib/builders/correlation-def-builder.ts b/src/lib/builders/correlation-def-builder.ts
deleted file mode 100644
index 048ddf3..0000000
--- a/src/lib/builders/correlation-def-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.CorrelationDef} data The underlying object
- * @returns {Specification.CorrelationDef} The validated underlying object
- */
-function correlationDefBuildingFn(data: Specification.CorrelationDef): () => Specification.CorrelationDef {
-  return () => {
-    const model = new Specification.CorrelationDef(data);
-
-    validate('CorrelationDef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.CorrelationDef`
- * @returns {Specification.CorrelationDef} A builder for `Specification.CorrelationDef`
- */
-export function correlationDefBuilder(): Builder {
-  return builder(correlationDefBuildingFn);
-}
diff --git a/src/lib/builders/crondef-builder.ts b/src/lib/builders/crondef-builder.ts
deleted file mode 100644
index f8172fa..0000000
--- a/src/lib/builders/crondef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Crondef} data The underlying object
- * @returns {Specification.Crondef} The validated underlying object
- */
-function crondefBuildingFn(data: Specification.Crondef): () => Specification.Crondef {
-  return () => {
-    const model = new Specification.Crondef(data);
-
-    validate('Crondef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Crondef`
- * @returns {Specification.Crondef} A builder for `Specification.Crondef`
- */
-export function crondefBuilder(): Builder {
-  return builder(crondefBuildingFn);
-}
diff --git a/src/lib/builders/databasedswitchstate-builder.ts b/src/lib/builders/databasedswitchstate-builder.ts
deleted file mode 100644
index eabbce3..0000000
--- a/src/lib/builders/databasedswitchstate-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Databasedswitchstate} data The underlying object
- * @returns {Specification.Databasedswitchstate} The validated underlying object
- */
-function databasedswitchstateBuildingFn(
-  data: Specification.Databasedswitchstate
-): () => Specification.Databasedswitchstate {
-  return () => {
-    const model = new Specification.Databasedswitchstate(data);
-
-    validate('Databasedswitchstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Databasedswitchstate`
- * @returns {Specification.Databasedswitchstate} A builder for `Specification.Databasedswitchstate`
- */
-export function databasedswitchstateBuilder(): Builder {
-  return builder(databasedswitchstateBuildingFn);
-}
diff --git a/src/lib/builders/defaultconditiondef-builder.ts b/src/lib/builders/defaultconditiondef-builder.ts
deleted file mode 100644
index 0fda1ac..0000000
--- a/src/lib/builders/defaultconditiondef-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Defaultconditiondef} data The underlying object
- * @returns {Specification.Defaultconditiondef} The validated underlying object
- */
-function defaultconditiondefBuildingFn(
-  data: Specification.Defaultconditiondef
-): () => Specification.Defaultconditiondef {
-  return () => {
-    const model = new Specification.Defaultconditiondef(data);
-
-    validate('Defaultconditiondef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Defaultconditiondef`
- * @returns {Specification.Defaultconditiondef} A builder for `Specification.Defaultconditiondef`
- */
-export function defaultconditiondefBuilder(): Builder {
-  return builder(defaultconditiondefBuildingFn);
-}
diff --git a/src/lib/builders/end-builder.ts b/src/lib/builders/end-builder.ts
deleted file mode 100644
index 067766a..0000000
--- a/src/lib/builders/end-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.End} data The underlying object
- * @returns {Specification.End} The validated underlying object
- */
-function endBuildingFn(data: Specification.End): () => Specification.End {
-  return () => {
-    const model = new Specification.End(data);
-
-    validate('End', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.End`
- * @returns {Specification.End} A builder for `Specification.End`
- */
-export function endBuilder(): Builder {
-  return builder(endBuildingFn);
-}
diff --git a/src/lib/builders/enddatacondition-builder.ts b/src/lib/builders/enddatacondition-builder.ts
deleted file mode 100644
index 8f5e44e..0000000
--- a/src/lib/builders/enddatacondition-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Enddatacondition} data The underlying object
- * @returns {Specification.Enddatacondition} The validated underlying object
- */
-function enddataconditionBuildingFn(data: Specification.Enddatacondition): () => Specification.Enddatacondition {
-  return () => {
-    const model = new Specification.Enddatacondition(data);
-
-    validate('Enddatacondition', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Enddatacondition`
- * @returns {Specification.Enddatacondition} A builder for `Specification.Enddatacondition`
- */
-export function enddataconditionBuilder(): Builder {
-  return builder(enddataconditionBuildingFn);
-}
diff --git a/src/lib/builders/endeventcondition-builder.ts b/src/lib/builders/endeventcondition-builder.ts
deleted file mode 100644
index b6792bb..0000000
--- a/src/lib/builders/endeventcondition-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Endeventcondition} data The underlying object
- * @returns {Specification.Endeventcondition} The validated underlying object
- */
-function endeventconditionBuildingFn(data: Specification.Endeventcondition): () => Specification.Endeventcondition {
-  return () => {
-    const model = new Specification.Endeventcondition(data);
-
-    validate('Endeventcondition', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Endeventcondition`
- * @returns {Specification.Endeventcondition} A builder for `Specification.Endeventcondition`
- */
-export function endeventconditionBuilder(): Builder {
-  return builder(endeventconditionBuildingFn);
-}
diff --git a/src/lib/builders/error-builder.ts b/src/lib/builders/error-builder.ts
deleted file mode 100644
index 2400aef..0000000
--- a/src/lib/builders/error-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Error} data The underlying object
- * @returns {Specification.Error} The validated underlying object
- */
-function errorBuildingFn(data: Specification.Error): () => Specification.Error {
-  return () => {
-    const model = new Specification.Error(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Error', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Error`
- * @returns {Specification.Error} A builder for `Specification.Error`
- */
-export function errorBuilder(): Builder {
-  return builder(errorBuildingFn);
-}
diff --git a/src/lib/builders/errordef-builder.ts b/src/lib/builders/errordef-builder.ts
deleted file mode 100644
index 461aee0..0000000
--- a/src/lib/builders/errordef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Errordef} data The underlying object
- * @returns {Specification.Errordef} The validated underlying object
- */
-function errordefBuildingFn(data: Specification.Errordef): () => Specification.Errordef {
-  return () => {
-    const model = new Specification.Errordef(data);
-
-    validate('Errordef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Errordef`
- * @returns {Specification.Errordef} A builder for `Specification.Errordef`
- */
-export function errordefBuilder(): Builder {
-  return builder(errordefBuildingFn);
-}
diff --git a/src/lib/builders/eventbasedswitchstate-builder.ts b/src/lib/builders/eventbasedswitchstate-builder.ts
deleted file mode 100644
index 26c0754..0000000
--- a/src/lib/builders/eventbasedswitchstate-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Eventbasedswitchstate} data The underlying object
- * @returns {Specification.Eventbasedswitchstate} The validated underlying object
- */
-function eventbasedswitchstateBuildingFn(
-  data: Specification.Eventbasedswitchstate
-): () => Specification.Eventbasedswitchstate {
-  return () => {
-    const model = new Specification.Eventbasedswitchstate(data);
-
-    validate('Eventbasedswitchstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Eventbasedswitchstate`
- * @returns {Specification.Eventbasedswitchstate} A builder for `Specification.Eventbasedswitchstate`
- */
-export function eventbasedswitchstateBuilder(): Builder {
-  return builder(eventbasedswitchstateBuildingFn);
-}
diff --git a/src/lib/builders/eventdatafilter-builder.ts b/src/lib/builders/eventdatafilter-builder.ts
deleted file mode 100644
index d86487e..0000000
--- a/src/lib/builders/eventdatafilter-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Eventdatafilter} data The underlying object
- * @returns {Specification.Eventdatafilter} The validated underlying object
- */
-function eventdatafilterBuildingFn(data: Specification.Eventdatafilter): () => Specification.Eventdatafilter {
-  return () => {
-    const model = new Specification.Eventdatafilter(data);
-
-    validate('Eventdatafilter', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Eventdatafilter`
- * @returns {Specification.Eventdatafilter} A builder for `Specification.Eventdatafilter`
- */
-export function eventdatafilterBuilder(): Builder {
-  return builder(eventdatafilterBuildingFn);
-}
diff --git a/src/lib/builders/eventdef-builder.ts b/src/lib/builders/eventdef-builder.ts
deleted file mode 100644
index 6e75103..0000000
--- a/src/lib/builders/eventdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Eventdef} data The underlying object
- * @returns {Specification.Eventdef} The validated underlying object
- */
-function eventdefBuildingFn(data: Specification.Eventdef): () => Specification.Eventdef {
-  return () => {
-    const model = new Specification.Eventdef(data);
-
-    validate('Eventdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Eventdef`
- * @returns {Specification.Eventdef} A builder for `Specification.Eventdef`
- */
-export function eventdefBuilder(): Builder {
-  return builder(eventdefBuildingFn);
-}
diff --git a/src/lib/builders/eventref-builder.ts b/src/lib/builders/eventref-builder.ts
deleted file mode 100644
index 58685a6..0000000
--- a/src/lib/builders/eventref-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Eventref} data The underlying object
- * @returns {Specification.Eventref} The validated underlying object
- */
-function eventrefBuildingFn(data: Specification.Eventref): () => Specification.Eventref {
-  return () => {
-    const model = new Specification.Eventref(data);
-
-    validate('Eventref', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Eventref`
- * @returns {Specification.Eventref} A builder for `Specification.Eventref`
- */
-export function eventrefBuilder(): Builder {
-  return builder(eventrefBuildingFn);
-}
diff --git a/src/lib/builders/eventstate-builder.ts b/src/lib/builders/eventstate-builder.ts
deleted file mode 100644
index 3ebea78..0000000
--- a/src/lib/builders/eventstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Eventstate} data The underlying object
- * @returns {Specification.Eventstate} The validated underlying object
- */
-function eventstateBuildingFn(data: Specification.Eventstate): () => Specification.Eventstate {
-  return () => {
-    const model = new Specification.Eventstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Eventstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Eventstate`
- * @returns {Specification.Eventstate} A builder for `Specification.Eventstate`
- */
-export function eventstateBuilder(): Builder {
-  return builder(eventstateBuildingFn);
-}
diff --git a/src/lib/builders/extension-builder.ts b/src/lib/builders/extension-builder.ts
deleted file mode 100644
index bd90a3e..0000000
--- a/src/lib/builders/extension-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Extension} data The underlying object
- * @returns {Specification.Extension} The validated underlying object
- */
-function extensionBuildingFn(data: Specification.Extension): () => Specification.Extension {
-  return () => {
-    const model = new Specification.Extension(data);
-
-    validate('Extension', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Extension`
- * @returns {Specification.Extension} A builder for `Specification.Extension`
- */
-export function extensionBuilder(): Builder {
-  return builder(extensionBuildingFn);
-}
diff --git a/src/lib/builders/foreachstate-builder.ts b/src/lib/builders/foreachstate-builder.ts
deleted file mode 100644
index 5a36731..0000000
--- a/src/lib/builders/foreachstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Foreachstate} data The underlying object
- * @returns {Specification.Foreachstate} The validated underlying object
- */
-function foreachstateBuildingFn(data: Specification.Foreachstate): () => Specification.Foreachstate {
-  return () => {
-    const model = new Specification.Foreachstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Foreachstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Foreachstate`
- * @returns {Specification.Foreachstate} A builder for `Specification.Foreachstate`
- */
-export function foreachstateBuilder(): Builder {
-  return builder(foreachstateBuildingFn);
-}
diff --git a/src/lib/builders/function-builder.ts b/src/lib/builders/function-builder.ts
deleted file mode 100644
index 8f0bc90..0000000
--- a/src/lib/builders/function-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Function} data The underlying object
- * @returns {Specification.Function} The validated underlying object
- */
-function functionBuildingFn(data: Specification.Function): () => Specification.Function {
-  return () => {
-    const model = new Specification.Function(data);
-
-    validate('Function', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Function`
- * @returns {Specification.Function} A builder for `Specification.Function`
- */
-export function functionBuilder(): Builder {
-  return builder(functionBuildingFn);
-}
diff --git a/src/lib/builders/functionref-builder.ts b/src/lib/builders/functionref-builder.ts
deleted file mode 100644
index 65256eb..0000000
--- a/src/lib/builders/functionref-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Functionref} data The underlying object
- * @returns {Specification.Functionref} The validated underlying object
- */
-function functionrefBuildingFn(data: Specification.Functionref): () => Specification.Functionref {
-  return () => {
-    const model = new Specification.Functionref(data);
-
-    validate('Functionref', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Functionref`
- * @returns {Specification.Functionref} A builder for `Specification.Functionref`
- */
-export function functionrefBuilder(): Builder {
-  return builder(functionrefBuildingFn);
-}
diff --git a/src/lib/builders/index.ts b/src/lib/builders/index.ts
deleted file mode 100644
index 737e880..0000000
--- a/src/lib/builders/index.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export * from './workflow-builder';
-export * from './action-builder';
-export * from './actiondatafilter-builder';
-export * from './authdef-builder';
-export * from './basicpropsdef-builder';
-export * from './bearerpropsdef-builder';
-export * from './branch-builder';
-export * from './callbackstate-builder';
-export * from './continueasdef-builder';
-export * from './correlation-def-builder';
-export * from './crondef-builder';
-export * from './databasedswitchstate-builder';
-export * from './defaultconditiondef-builder';
-export * from './end-builder';
-export * from './enddatacondition-builder';
-export * from './endeventcondition-builder';
-export * from './error-builder';
-export * from './errordef-builder';
-export * from './eventbasedswitchstate-builder';
-export * from './eventdatafilter-builder';
-export * from './eventdef-builder';
-export * from './eventref-builder';
-export * from './eventstate-builder';
-export * from './extension-builder';
-export * from './foreachstate-builder';
-export * from './function-builder';
-export * from './functionref-builder';
-export * from './injectstate-builder';
-export * from './metadata-builder';
-export * from './oauth2propsdef-builder';
-export * from './onevents-builder';
-export * from './operationstate-builder';
-export * from './parallelstate-builder';
-export * from './produceeventdef-builder';
-export * from './retrydef-builder';
-export * from './schedule-builder';
-export * from './sleep-builder';
-export * from './sleepstate-builder';
-export * from './startdef-builder';
-export * from './statedatafilter-builder';
-export * from './subflowref-builder';
-export * from './timeouts-builder';
-export * from './transition-builder';
-export * from './transitiondatacondition-builder';
-export * from './transitioneventcondition-builder';
-export * from './workflow-exec-timeout-builder';
diff --git a/src/lib/builders/injectstate-builder.ts b/src/lib/builders/injectstate-builder.ts
deleted file mode 100644
index 03ea25d..0000000
--- a/src/lib/builders/injectstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Injectstate} data The underlying object
- * @returns {Specification.Injectstate} The validated underlying object
- */
-function injectstateBuildingFn(data: Specification.Injectstate): () => Specification.Injectstate {
-  return () => {
-    const model = new Specification.Injectstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Injectstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Injectstate`
- * @returns {Specification.Injectstate} A builder for `Specification.Injectstate`
- */
-export function injectstateBuilder(): Builder {
-  return builder(injectstateBuildingFn);
-}
diff --git a/src/lib/builders/metadata-builder.ts b/src/lib/builders/metadata-builder.ts
deleted file mode 100644
index acc9db1..0000000
--- a/src/lib/builders/metadata-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Metadata} data The underlying object
- * @returns {Specification.Metadata} The validated underlying object
- */
-function metadataBuildingFn(data: Specification.Metadata): () => Specification.Metadata {
-  return () => {
-    const model = new Specification.Metadata(data);
-
-    validate('Metadata', model);
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Metadata`
- * @returns {Specification.Metadata} A builder for `Specification.Metadata`
- */
-export function metadataBuilder(): Builder {
-  return builder(metadataBuildingFn);
-}
diff --git a/src/lib/builders/oauth2propsdef-builder.ts b/src/lib/builders/oauth2propsdef-builder.ts
deleted file mode 100644
index f078e3a..0000000
--- a/src/lib/builders/oauth2propsdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Oauth2propsdef} data The underlying object
- * @returns {Specification.Oauth2propsdef} The validated underlying object
- */
-function oauth2propsdefBuildingFn(data: Specification.Oauth2propsdef): () => Specification.Oauth2propsdef {
-  return () => {
-    const model = new Specification.Oauth2propsdef(data);
-
-    validate('Oauth2propsdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Oauth2propsdef`
- * @returns {Specification.Oauth2propsdef} A builder for `Specification.Oauth2propsdef`
- */
-export function oauth2propsdefBuilder(): Builder {
-  return builder(oauth2propsdefBuildingFn);
-}
diff --git a/src/lib/builders/onevents-builder.ts b/src/lib/builders/onevents-builder.ts
deleted file mode 100644
index 72bd58e..0000000
--- a/src/lib/builders/onevents-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Onevents} data The underlying object
- * @returns {Specification.Onevents} The validated underlying object
- */
-function oneventsBuildingFn(data: Specification.Onevents): () => Specification.Onevents {
-  return () => {
-    const model = new Specification.Onevents(data);
-
-    validate('Onevents', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Onevents`
- * @returns {Specification.Onevents} A builder for `Specification.Onevents`
- */
-export function oneventsBuilder(): Builder {
-  return builder(oneventsBuildingFn);
-}
diff --git a/src/lib/builders/operationstate-builder.ts b/src/lib/builders/operationstate-builder.ts
deleted file mode 100644
index 47ceb83..0000000
--- a/src/lib/builders/operationstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Operationstate} data The underlying object
- * @returns {Specification.Operationstate} The validated underlying object
- */
-function operationstateBuildingFn(data: Specification.Operationstate): () => Specification.Operationstate {
-  return () => {
-    const model = new Specification.Operationstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Operationstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Operationstate`
- * @returns {Specification.Operationstate} A builder for `Specification.Operationstate`
- */
-export function operationstateBuilder(): Builder {
-  return builder(operationstateBuildingFn);
-}
diff --git a/src/lib/builders/parallelstate-builder.ts b/src/lib/builders/parallelstate-builder.ts
deleted file mode 100644
index 010ef07..0000000
--- a/src/lib/builders/parallelstate-builder.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-import { setEndValueIfNoTransition } from '../definitions/utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Parallelstate} data The underlying object
- * @returns {Specification.Parallelstate} The validated underlying object
- */
-function parallelstateBuildingFn(data: Specification.Parallelstate): () => Specification.Parallelstate {
-  return () => {
-    const model = new Specification.Parallelstate(data);
-
-    setEndValueIfNoTransition(model);
-
-    validate('Parallelstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Parallelstate`
- * @returns {Specification.Parallelstate} A builder for `Specification.Parallelstate`
- */
-export function parallelstateBuilder(): Builder {
-  return builder(parallelstateBuildingFn);
-}
diff --git a/src/lib/builders/produceeventdef-builder.ts b/src/lib/builders/produceeventdef-builder.ts
deleted file mode 100644
index 5212cf7..0000000
--- a/src/lib/builders/produceeventdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Produceeventdef} data The underlying object
- * @returns {Specification.Produceeventdef} The validated underlying object
- */
-function produceeventdefBuildingFn(data: Specification.Produceeventdef): () => Specification.Produceeventdef {
-  return () => {
-    const model = new Specification.Produceeventdef(data);
-
-    validate('Produceeventdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Produceeventdef`
- * @returns {Specification.Produceeventdef} A builder for `Specification.Produceeventdef`
- */
-export function produceeventdefBuilder(): Builder {
-  return builder(produceeventdefBuildingFn);
-}
diff --git a/src/lib/builders/retrydef-builder.ts b/src/lib/builders/retrydef-builder.ts
deleted file mode 100644
index c7ed653..0000000
--- a/src/lib/builders/retrydef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Retrydef} data The underlying object
- * @returns {Specification.Retrydef} The validated underlying object
- */
-function retrydefBuildingFn(data: Specification.Retrydef): () => Specification.Retrydef {
-  return () => {
-    const model = new Specification.Retrydef(data);
-
-    validate('Retrydef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Retrydef`
- * @returns {Specification.Retrydef} A builder for `Specification.Retrydef`
- */
-export function retrydefBuilder(): Builder {
-  return builder(retrydefBuildingFn);
-}
diff --git a/src/lib/builders/schedule-builder.ts b/src/lib/builders/schedule-builder.ts
deleted file mode 100644
index dbf2655..0000000
--- a/src/lib/builders/schedule-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Schedule} data The underlying object
- * @returns {Specification.Schedule} The validated underlying object
- */
-function scheduleBuildingFn(data: Specification.Schedule): () => Specification.Schedule {
-  return () => {
-    const model = new Specification.Schedule(data);
-
-    validate('Schedule', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Schedule`
- * @returns {Specification.Schedule} A builder for `Specification.Schedule`
- */
-export function scheduleBuilder(): Builder {
-  return builder(scheduleBuildingFn);
-}
diff --git a/src/lib/builders/sleep-builder.ts b/src/lib/builders/sleep-builder.ts
deleted file mode 100644
index d2d8e0b..0000000
--- a/src/lib/builders/sleep-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Sleep} data The underlying object
- * @returns {Specification.Sleep} The validated underlying object
- */
-function sleepBuildingFn(data: Specification.Sleep): () => Specification.Sleep {
-  return () => {
-    const model = new Specification.Sleep(data);
-
-    validate('Sleep', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Sleep`
- * @returns {Specification.Sleep} A builder for `Specification.Sleep`
- */
-export function sleepBuilder(): Builder {
-  return builder(sleepBuildingFn);
-}
diff --git a/src/lib/builders/sleepstate-builder.ts b/src/lib/builders/sleepstate-builder.ts
deleted file mode 100644
index 210ec33..0000000
--- a/src/lib/builders/sleepstate-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Sleepstate} data The underlying object
- * @returns {Specification.Sleepstate} The validated underlying object
- */
-function sleepstateBuildingFn(data: Specification.Sleepstate): () => Specification.Sleepstate {
-  return () => {
-    const model = new Specification.Sleepstate(data);
-
-    validate('Sleepstate', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Sleepstate`
- * @returns {Specification.Sleepstate} A builder for `Specification.Sleepstate`
- */
-export function sleepstateBuilder(): Builder {
-  return builder(sleepstateBuildingFn);
-}
diff --git a/src/lib/builders/startdef-builder.ts b/src/lib/builders/startdef-builder.ts
deleted file mode 100644
index bc6fb7f..0000000
--- a/src/lib/builders/startdef-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Startdef} data The underlying object
- * @returns {Specification.Startdef} The validated underlying object
- */
-function startdefBuildingFn(data: Specification.Startdef): () => Specification.Startdef {
-  return () => {
-    const model = new Specification.Startdef(data);
-
-    validate('Startdef', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Startdef`
- * @returns {Specification.Startdef} A builder for `Specification.Startdef`
- */
-export function startdefBuilder(): Builder {
-  return builder(startdefBuildingFn);
-}
diff --git a/src/lib/builders/statedatafilter-builder.ts b/src/lib/builders/statedatafilter-builder.ts
deleted file mode 100644
index 69d0aa1..0000000
--- a/src/lib/builders/statedatafilter-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Statedatafilter} data The underlying object
- * @returns {Specification.Statedatafilter} The validated underlying object
- */
-function statedatafilterBuildingFn(data: Specification.Statedatafilter): () => Specification.Statedatafilter {
-  return () => {
-    const model = new Specification.Statedatafilter(data);
-
-    validate('Statedatafilter', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Statedatafilter`
- * @returns {Specification.Statedatafilter} A builder for `Specification.Statedatafilter`
- */
-export function statedatafilterBuilder(): Builder {
-  return builder(statedatafilterBuildingFn);
-}
diff --git a/src/lib/builders/subflowref-builder.ts b/src/lib/builders/subflowref-builder.ts
deleted file mode 100644
index 3011aa7..0000000
--- a/src/lib/builders/subflowref-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Subflowref} data The underlying object
- * @returns {Specification.Subflowref} The validated underlying object
- */
-function subflowrefBuildingFn(data: Specification.Subflowref): () => Specification.Subflowref {
-  return () => {
-    const model = new Specification.Subflowref(data);
-
-    validate('Subflowref', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Subflowref`
- * @returns {Specification.Subflowref} A builder for `Specification.Subflowref`
- */
-export function subflowrefBuilder(): Builder {
-  return builder(subflowrefBuildingFn);
-}
diff --git a/src/lib/builders/timeouts-builder.ts b/src/lib/builders/timeouts-builder.ts
deleted file mode 100644
index 413964e..0000000
--- a/src/lib/builders/timeouts-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Timeouts} data The underlying object
- * @returns {Specification.Timeouts} The validated underlying object
- */
-function timeoutsBuildingFn(data: Specification.Timeouts): () => Specification.Timeouts {
-  return () => {
-    const model = new Specification.Timeouts(data);
-
-    validate('Timeouts', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Timeouts`
- * @returns {Specification.Timeouts} A builder for `Specification.Timeouts`
- */
-export function timeoutsBuilder(): Builder {
-  return builder(timeoutsBuildingFn);
-}
diff --git a/src/lib/builders/transition-builder.ts b/src/lib/builders/transition-builder.ts
deleted file mode 100644
index e10b988..0000000
--- a/src/lib/builders/transition-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Transition} data The underlying object
- * @returns {Specification.Transition} The validated underlying object
- */
-function transitionBuildingFn(data: Specification.Transition): () => Specification.Transition {
-  return () => {
-    const model = new Specification.Transition(data);
-
-    validate('Transition', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Transition`
- * @returns {Specification.Transition} A builder for `Specification.Transition`
- */
-export function transitionBuilder(): Builder {
-  return builder(transitionBuildingFn);
-}
diff --git a/src/lib/builders/transitiondatacondition-builder.ts b/src/lib/builders/transitiondatacondition-builder.ts
deleted file mode 100644
index 4abfae7..0000000
--- a/src/lib/builders/transitiondatacondition-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Transitiondatacondition} data The underlying object
- * @returns {Specification.Transitiondatacondition} The validated underlying object
- */
-function transitiondataconditionBuildingFn(
-  data: Specification.Transitiondatacondition
-): () => Specification.Transitiondatacondition {
-  return () => {
-    const model = new Specification.Transitiondatacondition(data);
-
-    validate('Transitiondatacondition', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Transitiondatacondition`
- * @returns {Specification.Transitiondatacondition} A builder for `Specification.Transitiondatacondition`
- */
-export function transitiondataconditionBuilder(): Builder {
-  return builder(transitiondataconditionBuildingFn);
-}
diff --git a/src/lib/builders/transitioneventcondition-builder.ts b/src/lib/builders/transitioneventcondition-builder.ts
deleted file mode 100644
index 161a92b..0000000
--- a/src/lib/builders/transitioneventcondition-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Transitioneventcondition} data The underlying object
- * @returns {Specification.Transitioneventcondition} The validated underlying object
- */
-function transitioneventconditionBuildingFn(
-  data: Specification.Transitioneventcondition
-): () => Specification.Transitioneventcondition {
-  return () => {
-    const model = new Specification.Transitioneventcondition(data);
-
-    validate('Transitioneventcondition', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Transitioneventcondition`
- * @returns {Specification.Transitioneventcondition} A builder for `Specification.Transitioneventcondition`
- */
-export function transitioneventconditionBuilder(): Builder {
-  return builder(transitioneventconditionBuildingFn);
-}
diff --git a/src/lib/builders/workflow-builder.ts b/src/lib/builders/workflow-builder.ts
deleted file mode 100644
index 2177a30..0000000
--- a/src/lib/builders/workflow-builder.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.Workflow} data The underlying object
- * @returns {Specification.Workflow} The validated underlying object
- */
-function workflowBuildingFn(data: Specification.Workflow): () => Specification.Workflow {
-  return () => {
-    const model = new Specification.Workflow(data);
-
-    validate('Workflow', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.Workflow`
- * @returns {Specification.Workflow} A builder for `Specification.Workflow`
- */
-export function workflowBuilder(): Builder {
-  return builder(workflowBuildingFn);
-}
diff --git a/src/lib/builders/workflow-exec-timeout-builder.ts b/src/lib/builders/workflow-exec-timeout-builder.ts
deleted file mode 100644
index 766e9da..0000000
--- a/src/lib/builders/workflow-exec-timeout-builder.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Builder, builder } from '../builder';
-import { Specification } from '../definitions';
-import { validate } from '../utils';
-
-/**
- * The internal function used by the builder proxy to validate and return its underlying object
- * @param {Specification.WorkflowExecTimeout} data The underlying object
- * @returns {Specification.WorkflowExecTimeout} The validated underlying object
- */
-function workflowExecTimeoutBuildingFn(
-  data: Specification.WorkflowExecTimeout
-): () => Specification.WorkflowExecTimeout {
-  return () => {
-    const model = new Specification.WorkflowExecTimeout(data);
-
-    validate('WorkflowExecTimeout', model.normalize());
-    return model;
-  };
-}
-
-/**
- * A factory to create a builder proxy for the type `Specification.WorkflowExecTimeout`
- * @returns {Specification.WorkflowExecTimeout} A builder for `Specification.WorkflowExecTimeout`
- */
-export function workflowExecTimeoutBuilder(): Builder {
-  return builder(workflowExecTimeoutBuildingFn);
-}
diff --git a/src/lib/definitions/action.ts b/src/lib/definitions/action.ts
deleted file mode 100644
index d587d86..0000000
--- a/src/lib/definitions/action.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Actiondatafilter } from './actiondatafilter';
-import { Eventref } from './eventref';
-import { Functionref } from './functionref';
-import {
-  cleanSourceModelProperty,
-  normalizeEventRef,
-  normalizeFunctionRef,
-  normalizeSubFlowRef,
-  overwriteActionDataFilter,
-  overwriteEventRef,
-  overwriteFunctionRef,
-  overwriteSleep,
-  overwriteSubFlowRef,
-} from './utils';
-import { Subflowref } from './subflowref';
-import { Sleep } from './sleep';
-
-export class Action {
-  sourceModel?: Action;
-  /**
-   * Unique action definition name
-   */
-  name?: string;
-  functionRef?: string | Functionref;
-  eventRef?: /* Event References */ Eventref;
-  subFlowRef?: string | Subflowref;
-  sleep?: Sleep;
-  /**
-   * References a defined workflow retry definition. If not defined the default retry policy is assumed
-   */
-  retryRef?: string;
-  /**
-   * List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`
-   */
-  nonRetryableErrors?: [string, ...string[]];
-  /**
-   * List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`
-   */
-  retryableErrors?: [string, ...string[]];
-  actionDataFilter?: Actiondatafilter;
-  /**
-   * Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded
-   */
-  condition?: string;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteFunctionRef(this);
-    overwriteEventRef(this);
-    overwriteSubFlowRef(this);
-    overwriteSleep(this);
-    overwriteActionDataFilter(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Action} without deleted properties.
-   */
-  normalize = (): Action => {
-    const clone = new Action(this);
-
-    normalizeSubFlowRef(clone);
-    normalizeEventRef(clone);
-    normalizeFunctionRef(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/actiondatafilter.ts b/src/lib/definitions/actiondatafilter.ts
deleted file mode 100644
index 6500aca..0000000
--- a/src/lib/definitions/actiondatafilter.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Actiondatafilter {
-  /**
-   * Workflow expression that selects state data that the state action can use
-   */
-  fromStateData?: string;
-  /**
-   * If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.
-   */
-  useResults?: boolean;
-  /**
-   * Workflow expression that filters the actions data results
-   */
-  results?: string;
-  /**
-   * Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element
-   */
-  toStateData?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Actiondatafilter} without deleted properties.
-   */
-  normalize = (): Actiondatafilter => {
-    const clone = new Actiondatafilter(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/authdef.ts b/src/lib/definitions/authdef.ts
deleted file mode 100644
index 0d65cf1..0000000
--- a/src/lib/definitions/authdef.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { cleanSourceModelProperty, normalizeScheme, overwriteProperties } from './utils';
-import { Properties } from './types';
-
-export class Authdef {
-  sourceModel?: Authdef;
-  /**
-   * Unique auth definition name
-   */
-  name: string;
-  /**
-   * Defines the auth type
-   */
-  scheme?: 'basic' | 'bearer' | 'oauth2';
-  properties: string | Properties;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { scheme: 'basic' };
-    Object.assign(this, defaultModel, model);
-
-    overwriteProperties(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Authdef} without deleted properties.
-   */
-  normalize = (): Authdef => {
-    const clone = new Authdef(this);
-
-    normalizeScheme(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/basicpropsdef.ts b/src/lib/definitions/basicpropsdef.ts
deleted file mode 100644
index d51920c..0000000
--- a/src/lib/definitions/basicpropsdef.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Metadata } from './metadata';
-import { overwriteMetadata } from './utils';
-
-export class Basicpropsdef {
-  /**
-   * String or a workflow expression. Contains the user name
-   */
-  username: string;
-  /**
-   * String or a workflow expression. Contains the user password
-   */
-  password: string;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-
-    overwriteMetadata(this);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Basicpropsdef} without deleted properties.
-   */
-  normalize = (): Basicpropsdef => {
-    const clone = new Basicpropsdef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/bearerpropsdef.ts b/src/lib/definitions/bearerpropsdef.ts
deleted file mode 100644
index 9c444d7..0000000
--- a/src/lib/definitions/bearerpropsdef.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Metadata } from './metadata';
-import { overwriteMetadata } from './utils';
-
-export class Bearerpropsdef {
-  /**
-   * String or a workflow expression. Contains the token
-   */
-  token: string;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-    overwriteMetadata(this);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Bearerpropsdef} without deleted properties.
-   */
-  normalize = (): Bearerpropsdef => {
-    const clone = new Bearerpropsdef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/branch.ts b/src/lib/definitions/branch.ts
deleted file mode 100644
index 9a82edd..0000000
--- a/src/lib/definitions/branch.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Action } from './action';
-import { cleanSourceModelProperty, normalizeActions, overwriteActions, overwritePropertyAsPlainType } from './utils';
-import { ActionExecTimeout, BranchExecTimeout } from './types';
-
-export class Branch /* Branch Definition */ {
-  sourceModel?: Branch;
-  /**
-   * Branch name
-   */
-  name: string;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-    branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-  };
-  /**
-   * Actions to be executed in this branch
-   */
-  actions: Action[];
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-    overwriteActions(this);
-    overwritePropertyAsPlainType('timeouts', this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Branch} without deleted properties.
-   */
-  normalize = (): Branch => {
-    const clone = new Branch(this);
-    normalizeActions(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/callbackstate.ts b/src/lib/definitions/callbackstate.ts
deleted file mode 100644
index 49e1d8d..0000000
--- a/src/lib/definitions/callbackstate.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Action } from './action';
-import { End } from './end';
-import { Error } from './error';
-import { Eventdatafilter } from './eventdatafilter';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeAction,
-  normalizeEnd,
-  normalizeOnErrors,
-  normalizeTransition,
-  normalizeUsedForCompensation,
-  overwriteAction,
-  overwriteEnd,
-  overwriteEventDataFilter,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwritePropertyAsPlainType,
-  overwriteStateDataFilter,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-import { ActionExecTimeout, EventTimeout, StateExecTimeout } from './types';
-
-export class Callbackstate {
-  sourceModel?: Callbackstate;
-  /**
-   * Unique state id
-   */
-  id?: string;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'callback';
-  /**
-   * Defines the action to be executed
-   */
-  action?: Action;
-  /**
-   * References an unique callback event name in the defined workflow events
-   */
-  eventRef?: string;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-    eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-  };
-  /**
-   * Event data filter
-   */
-  eventDataFilter?: Eventdatafilter;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all the actions have been performed
-   */
-  transition?: string | Transition;
-  /**
-   * State end definition
-   */
-  end?: boolean | End;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'callback',
-      usedForCompensation: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteAction(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteEventDataFilter(this);
-    overwriteStateDataFilter(this);
-    overwriteOnErrors(this);
-    overwriteTransition(this);
-    overwriteEnd(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Callbackstate} without deleted properties.
-   */
-  normalize = (): Callbackstate => {
-    const clone = new Callbackstate(this);
-
-    normalizeAction(clone);
-    normalizeOnErrors(clone);
-    normalizeTransition(clone);
-    normalizeEnd(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/continueasdef.ts b/src/lib/definitions/continueasdef.ts
deleted file mode 100644
index ff5208c..0000000
--- a/src/lib/definitions/continueasdef.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { WorkflowExecTimeout } from './workflowExecTimeout';
-import {
-  cleanSourceModelProperty,
-  normalizeWorkflowExecTimeout,
-  overwritePropertyAsPlainType,
-  overwriteWorkflowExecTimeout,
-} from './utils';
-
-export class Continueasdef {
-  sourceModel?: Continueasdef;
-  /**
-   * Unique id of the workflow to continue execution as
-   */
-  workflowId: string;
-  /**
-   * Version of the workflow to continue execution as
-   */
-  version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-  /**
-   * If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution
-   */
-  data?:
-    | string
-    | {
-        [key: string]: any;
-      };
-  /**
-   * Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow
-   */
-  workflowExecTimeout?: WorkflowExecTimeout;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-    overwriteWorkflowExecTimeout(this);
-    overwritePropertyAsPlainType('data', this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Exectimeout} without deleted properties.
-   */
-  normalize = (): Continueasdef => {
-    const clone = new Continueasdef(this);
-    normalizeWorkflowExecTimeout(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/correlationDef.ts b/src/lib/definitions/correlationDef.ts
deleted file mode 100644
index 824f52e..0000000
--- a/src/lib/definitions/correlationDef.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class CorrelationDef {
-  /**
-   * CloudEvent Extension Context Attribute name
-   */
-  contextAttributeName: string;
-  /**
-   * CloudEvent Extension Context Attribute value
-   */
-  contextAttributeValue?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.CorrelationDef} without deleted properties.
-   */
-  normalize = (): CorrelationDef => {
-    const clone = new CorrelationDef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/crondef.ts b/src/lib/definitions/crondef.ts
deleted file mode 100644
index a7aefb4..0000000
--- a/src/lib/definitions/crondef.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Crondef {
-  /**
-   * Repeating interval (cron expression) describing when the workflow instance should be created
-   */
-  expression: string;
-  /**
-   * Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid
-   */
-  validUntil?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Crondef} without deleted properties.
-   */
-  normalize = (): Crondef => {
-    const clone = new Crondef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/databasedswitchstate.ts b/src/lib/definitions/databasedswitchstate.ts
deleted file mode 100644
index 013b369..0000000
--- a/src/lib/definitions/databasedswitchstate.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Defaultconditiondef } from './defaultconditiondef';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import {
-  cleanSourceModelProperty,
-  normalizeDataConditions,
-  normalizeDefaultCondition,
-  normalizeOnErrors,
-  normalizeUsedForCompensation,
-  overwriteDataConditions,
-  overwriteDefaultCondition,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-} from './utils';
-import { Datacondition, StateExecTimeout } from './types';
-
-export class Databasedswitchstate {
-  sourceModel?: Databasedswitchstate;
-  /**
-   * State name
-   */
-  name: string;
-  /**
-   * State type
-   */
-  type: 'switch';
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-  };
-  /**
-   * Defines conditions evaluated against state data
-   */
-  dataConditions: Datacondition[];
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition
-   */
-  defaultCondition: /* DefaultCondition definition. Can be either a transition or end definition */ Defaultconditiondef;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { id: undefined, name: undefined, type: 'switch', usedForCompensation: false };
-    Object.assign(this, defaultModel, model);
-
-    overwriteStateDataFilter(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteDataConditions(this);
-    overwriteOnErrors(this);
-    overwriteDefaultCondition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Databasedswitch} without deleted properties.
-   */
-  normalize = (): Databasedswitchstate => {
-    const clone = new Databasedswitchstate(this);
-
-    normalizeDataConditions(clone);
-    normalizeOnErrors(clone);
-    normalizeDefaultCondition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/defaultconditiondef.ts b/src/lib/definitions/defaultconditiondef.ts
deleted file mode 100644
index d95fecd..0000000
--- a/src/lib/definitions/defaultconditiondef.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { End } from './end';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  normalizeTransition,
-  overwriteEnd,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-
-export class Defaultconditiondef /* DefaultCondition definition. Can be either a transition or end definition */ {
-  sourceModel?: Defaultconditiondef;
-  /**
-   * The optional name of the default condition, used solely for display purposes
-   */
-  name?: string;
-  transition: string | Transition;
-  end?: boolean | End;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteTransition(this);
-    overwriteEnd(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Defaultdef} without deleted properties.
-   */
-  normalize = (): Defaultconditiondef => {
-    const clone = new Defaultconditiondef(this);
-
-    normalizeEnd(clone);
-    normalizeTransition(clone);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/end.ts b/src/lib/definitions/end.ts
deleted file mode 100644
index 1339dc3..0000000
--- a/src/lib/definitions/end.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Produceeventdef } from './produceeventdef';
-import {
-  cleanSourceModelProperty,
-  normalizeCompensate,
-  normalizeContinueAs,
-  normalizeTerminate,
-  overwriteContinueAs,
-  overwriteProduceEvents,
-} from './utils';
-import { Continueasdef } from './continueasdef';
-
-export class End {
-  sourceModel?: End;
-  /**
-   * If true, completes all execution flows in the given workflow instance
-   */
-  terminate?: boolean;
-  /**
-   * Defines events that should be produced
-   */
-  produceEvents?: /* Produce an event and set its data */ Produceeventdef[];
-  /**
-   * If set to true, triggers workflow compensation. Default is false
-   */
-  compensate?: boolean;
-  continueAs?: string | Continueasdef;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      compensate: false,
-      terminate: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteProduceEvents(this);
-    overwriteContinueAs(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.End} without deleted properties.
-   */
-  normalize = (): End => {
-    const clone = new End(this);
-
-    normalizeCompensate(clone, this.sourceModel);
-    normalizeTerminate(clone, this.sourceModel);
-    normalizeContinueAs(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/enddatacondition.ts b/src/lib/definitions/enddatacondition.ts
deleted file mode 100644
index ce49f4d..0000000
--- a/src/lib/definitions/enddatacondition.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { End } from './end';
-import { Metadata } from './metadata';
-import { cleanSourceModelProperty, normalizeEnd, overwriteEnd, overwriteMetadata } from './utils';
-
-export class Enddatacondition {
-  sourceModel?: Enddatacondition;
-  /**
-   * Data condition name
-   */
-  name?: string;
-  /**
-   * Workflow expression evaluated against state data. Must evaluate to true or false
-   */
-  condition: string;
-  /**
-   * Workflow end definition
-   */
-  end: boolean | End;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteEnd(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Enddatacondition} without deleted properties.
-   */
-  normalize = (): Enddatacondition => {
-    const clone = new Enddatacondition(this);
-
-    normalizeEnd(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/endeventcondition.ts b/src/lib/definitions/endeventcondition.ts
deleted file mode 100644
index 9c98e01..0000000
--- a/src/lib/definitions/endeventcondition.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { End } from './end';
-import { Eventdatafilter } from './eventdatafilter';
-import { Metadata } from './metadata';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  overwriteEnd,
-  overwriteEventDataFilter,
-  overwriteMetadata,
-} from './utils';
-
-export class Endeventcondition {
-  sourceModel?: Endeventcondition;
-  /**
-   * Event condition name
-   */
-  name?: string;
-  /**
-   * References an unique event name in the defined workflow events
-   */
-  eventRef: string;
-  /**
-   * Explicit transition to end
-   */
-  end: boolean | End;
-  /**
-   * Event data filter definition
-   */
-  eventDataFilter?: Eventdatafilter;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteEnd(this);
-    overwriteEventDataFilter(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Endeventcondition} without deleted properties.
-   */
-  normalize = (): Endeventcondition => {
-    const clone = new Endeventcondition(this);
-
-    normalizeEnd(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/error.ts b/src/lib/definitions/error.ts
deleted file mode 100644
index 76e3863..0000000
--- a/src/lib/definitions/error.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { End } from './end';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  normalizeTransition,
-  overwriteEnd,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-
-export class Error {
-  sourceModel?: Error;
-  /**
-   * Reference to a unique workflow error definition. Used of errorRefs is not used
-   */
-  errorRef: string;
-  /**
-   * References one or more workflow error definitions. Used if errorRef is not used
-   */
-  errorRefs?: [string, ...string[]];
-  transition: string | Transition;
-  end?: boolean | End;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteTransition(this);
-    overwriteEnd(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Error} without deleted properties.
-   */
-  normalize = (): Error => {
-    const clone = new Error(this);
-
-    normalizeEnd(clone);
-    normalizeTransition(clone);
-
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/errordef.ts b/src/lib/definitions/errordef.ts
deleted file mode 100644
index 78aa011..0000000
--- a/src/lib/definitions/errordef.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Errordef {
-  /**
-   * Domain-specific error name
-   */
-  name: string;
-  /**
-   * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'
-   */
-  code?: string;
-  /**
-   * Error description
-   */
-  description?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Errordef} without deleted properties.
-   */
-  normalize = (): Errordef => {
-    const clone = new Errordef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/eventbasedswitchstate.ts b/src/lib/definitions/eventbasedswitchstate.ts
deleted file mode 100644
index 089935c..0000000
--- a/src/lib/definitions/eventbasedswitchstate.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Defaultconditiondef } from './defaultconditiondef';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import {
-  cleanSourceModelProperty,
-  normalizeDefaultCondition,
-  normalizeEventConditions,
-  normalizeOnErrors,
-  normalizeUsedForCompensation,
-  overwriteDefaultCondition,
-  overwriteEventConditions,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-} from './utils';
-import { Eventcondition, EventTimeout, StateExecTimeout } from './types';
-
-export class Eventbasedswitchstate {
-  sourceModel?: Eventbasedswitchstate;
-  /**
-   * State name
-   */
-  name: string;
-  /**
-   * State type
-   */
-  type: 'switch';
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-  };
-  /**
-   * Defines conditions evaluated against events
-   */
-  eventConditions: Eventcondition[];
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition
-   */
-  defaultCondition: /* DefaultCondition definition. Can be either a transition or end definition */ Defaultconditiondef;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { id: undefined, name: undefined, type: 'switch', usedForCompensation: false };
-    Object.assign(this, defaultModel, model);
-
-    overwriteStateDataFilter(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteEventConditions(this);
-    overwriteOnErrors(this);
-    overwriteDefaultCondition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Eventbasedswitch} without deleted properties.
-   */
-  normalize = (): Eventbasedswitchstate => {
-    const clone = new Eventbasedswitchstate(this);
-
-    normalizeEventConditions(clone);
-    normalizeOnErrors(clone);
-    normalizeDefaultCondition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/eventdatafilter.ts b/src/lib/definitions/eventdatafilter.ts
deleted file mode 100644
index 9a46282..0000000
--- a/src/lib/definitions/eventdatafilter.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Eventdatafilter {
-  /**
-   * If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.
-   */
-  useData?: boolean;
-  /**
-   * Workflow expression that filters the received event payload (default: '${ . }')
-   */
-  data?: string;
-  /**
-   *  Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element.
-   */
-  toStateData?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Eventdatafilter} without deleted properties.
-   */
-  normalize = (): Eventdatafilter => {
-    const clone = new Eventdatafilter(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/eventdef.ts b/src/lib/definitions/eventdef.ts
deleted file mode 100644
index 603acbc..0000000
--- a/src/lib/definitions/eventdef.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Metadata } from './metadata';
-import {
-  cleanSourceModelProperty,
-  normalizeDataOnly,
-  normalizeKind,
-  overwriteCorrelation,
-  overwriteMetadata,
-} from './utils';
-import { CorrelationDefs } from './types';
-
-export class Eventdef {
-  sourceModel?: Eventdef;
-  /**
-   * Unique event name
-   */
-  name?: string;
-  /**
-   * CloudEvent source
-   */
-  source?: string;
-  /**
-   * CloudEvent type
-   */
-  type?: string;
-  /**
-   * Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'
-   */
-  kind?: 'consumed' | 'produced';
-  /**
-   * CloudEvent correlation definitions
-   */
-  correlation?: CorrelationDefs;
-  /**
-   * If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible
-   */
-  dataOnly?: boolean;
-  /**
-   * Metadata information
-   */
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      kind: 'consumed',
-      dataOnly: true,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteCorrelation(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Eventdef} without deleted properties.
-   */
-  normalize = (): Eventdef => {
-    const clone = new Eventdef(this);
-
-    normalizeKind(clone, this.sourceModel);
-    normalizeDataOnly(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/eventref.ts b/src/lib/definitions/eventref.ts
deleted file mode 100644
index 02dc0bd..0000000
--- a/src/lib/definitions/eventref.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { cleanSourceModelProperty, overwritePropertyAsPlainType } from './utils';
-
-export class Eventref {
-  sourceModel?: Eventref;
-  /**
-   * Reference to the unique name of a 'produced' event definition
-   */
-  produceEventRef: string;
-  /**
-   * Reference to the unique name of a 'consumed' event definition
-   */
-  consumeEventRef?: string;
-  /**
-   * Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout
-   */
-  consumeEventTimeout?: string;
-  /**
-   * If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'produceEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'produceEventRef'.
-   */
-  data?:
-    | string
-    | {
-        [key: string]: any;
-      };
-  /**
-   * Add additional extension context attributes to the produced event
-   */
-  contextAttributes?: {
-    [name: string]: string;
-  };
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-    overwritePropertyAsPlainType('data', this);
-    overwritePropertyAsPlainType('contextAttributes', this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Eventref} without deleted properties.
-   */
-  normalize = (): Eventref => {
-    const clone = new Eventref(this);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/eventstate.ts b/src/lib/definitions/eventstate.ts
deleted file mode 100644
index 836cd4f..0000000
--- a/src/lib/definitions/eventstate.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { End } from './end';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Onevents } from './onevents';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  normalizeExclusive,
-  normalizeOnErrors,
-  normalizeOnEvents,
-  normalizeTransition,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteOnEvents,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-import { ActionExecTimeout, EventTimeout, StateExecTimeout } from './types';
-
-export class Eventstate /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ {
-  sourceModel?: Eventstate;
-  /**
-   * State name
-   */
-  name: string;
-  /**
-   * State type
-   */
-  type: 'event';
-  /**
-   * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed
-   */
-  exclusive?: boolean;
-  /**
-   * Define the events to be consumed and optional actions to be performed
-   */
-  onEvents: Onevents[];
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-    eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-  };
-  stateDataFilter?: Statedatafilter;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  transition?: string | Transition;
-  end: boolean | End;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'event',
-      exclusive: true,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteOnEvents(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteStateDataFilter(this);
-    overwriteOnErrors(this);
-    overwriteTransition(this);
-    overwriteEnd(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Eventstate} without deleted properties.
-   */
-  normalize = (): Eventstate => {
-    const clone = new Eventstate(this);
-
-    normalizeExclusive(clone, this.sourceModel);
-    normalizeOnEvents(clone);
-    normalizeOnErrors(clone);
-    normalizeTransition(clone);
-    normalizeEnd(clone);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/extension.ts b/src/lib/definitions/extension.ts
deleted file mode 100644
index 40166a2..0000000
--- a/src/lib/definitions/extension.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Extension {
-  /**
-   * Unique extension id
-   */
-  extensionId: string;
-  /**
-   * URI to a resource containing this workflow extension definitions (json or yaml)
-   */
-  resource: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Extension} without deleted properties.
-   */
-  normalize = (): Extension => {
-    const clone = new Extension(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/foreachstate.ts b/src/lib/definitions/foreachstate.ts
deleted file mode 100644
index d9e2857..0000000
--- a/src/lib/definitions/foreachstate.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Action } from './action';
-import { End } from './end';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeActions,
-  normalizeEnd,
-  normalizeMode,
-  normalizeOnErrors,
-  normalizeTransition,
-  normalizeUsedForCompensation,
-  overwriteActions,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-import { ActionExecTimeout, StateExecTimeout } from './types';
-
-export class Foreachstate {
-  sourceModel?: Foreachstate;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'foreach';
-  /**
-   * State end definition
-   */
-  end?: boolean | End;
-  /**
-   * Workflow expression selecting an array element of the states data
-   */
-  inputCollection?: string;
-  /**
-   * Workflow expression specifying an array element of the states data to add the results of each iteration
-   */
-  outputCollection?: string;
-  /**
-   * Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array
-   */
-  iterationParam?: string;
-  /**
-   * Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)
-   */
-  batchSize?: number | string;
-  /**
-   * Actions to be executed for each of the elements of inputCollection
-   */
-  actions?: Action[];
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-  };
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after state has completed
-   */
-  transition?: string | Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  /**
-   * Specifies how iterations are to be performed (sequentially or in parallel)
-   */
-  mode?: 'sequential' | 'parallel';
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'foreach',
-      usedForCompensation: false,
-      mode: 'parallel',
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteEnd(this);
-    overwriteActions(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteStateDataFilter(this);
-    overwriteOnErrors(this);
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Foreachstate} without deleted properties.
-   */
-  normalize = (): Foreachstate => {
-    const clone = new Foreachstate(this);
-
-    normalizeEnd(clone);
-    normalizeActions(clone);
-    normalizeOnErrors(clone);
-    normalizeTransition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    normalizeMode(clone, this.sourceModel);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/function.ts b/src/lib/definitions/function.ts
deleted file mode 100644
index bdb7ed9..0000000
--- a/src/lib/definitions/function.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { cleanSourceModelProperty, normalizeType, overwriteMetadata, overwritePropertyAsPlainType } from './utils';
-
-import { Metadata } from './metadata';
-
-export class Function {
-  sourceModel?: Function;
-  /**
-   * Unique function name
-   */
-  name: string;
-  /**
-   * If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.
-   */
-  operation: string;
-  /**
-   * Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`
-   */
-  type?: 'rest' | 'asyncapi' | 'rpc' | 'graphql' | 'odata' | 'expression' | 'custom';
-  authRef?:
-    | string
-    | {
-        /**
-         * References an auth definition to be used to access the resource defined in the operation parameter
-         */
-        resource: string;
-        /**
-         * References an auth definition to be used to invoke the operation
-         */
-        invocation?: string;
-      };
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { type: 'rest' };
-    Object.assign(this, defaultModel, model);
-    overwritePropertyAsPlainType('authRef', this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Function} without deleted properties.
-   */
-
-  normalize = (): Function => {
-    const clone = new Function(this);
-
-    normalizeType(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/functionref.ts b/src/lib/definitions/functionref.ts
deleted file mode 100644
index b969bce..0000000
--- a/src/lib/definitions/functionref.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { cleanSourceModelProperty, normalizeInvoke, overwritePropertyAsPlainType } from './utils';
-
-export class Functionref {
-  sourceModel?: Functionref;
-  /**
-   * Name of the referenced function
-   */
-  refName: string;
-  /**
-   * Function arguments/inputs
-   */
-  arguments?: {
-    [key: string]: any;
-  };
-  /**
-   * Only used if function type is 'graphql'. A string containing a valid GraphQL selection set
-   */
-  selectionSet?: string;
-  /**
-   * Specifies if the function should be invoked sync or async
-   */
-  invoke?: 'sync' | 'async';
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-    overwritePropertyAsPlainType('arguments', this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Functionref} without deleted properties.
-   */
-  normalize = (): Functionref => {
-    const clone = new Functionref(this);
-
-    normalizeInvoke(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/injectstate.ts b/src/lib/definitions/injectstate.ts
deleted file mode 100644
index e25c657..0000000
--- a/src/lib/definitions/injectstate.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { End } from './end';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  normalizeTransition,
-  normalizeUsedForCompensation,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-
-export class Injectstate {
-  sourceModel?: Injectstate;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'inject';
-  /**
-   * State end definition
-   */
-  end?: boolean | End;
-  /**
-   * JSON object which can be set as states data input and can be manipulated via filters
-   */
-  data?: {
-    [key: string]: any;
-  };
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * Next transition of the workflow after injection has completed
-   */
-  transition?: string | Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'inject',
-      usedForCompensation: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteEnd(this);
-    overwritePropertyAsPlainType('data', this);
-    overwriteStateDataFilter(this);
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Injectstate} without deleted properties.
-   */
-  normalize = (): Injectstate => {
-    const clone = new Injectstate(this);
-
-    normalizeEnd(clone);
-    normalizeTransition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/metadata.ts b/src/lib/definitions/metadata.ts
deleted file mode 100644
index 9e191da..0000000
--- a/src/lib/definitions/metadata.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Metadata {
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  [name: string]: string;
-}
diff --git a/src/lib/definitions/oauth2propsdef.ts b/src/lib/definitions/oauth2propsdef.ts
deleted file mode 100644
index 3d2b994..0000000
--- a/src/lib/definitions/oauth2propsdef.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Metadata } from './metadata';
-import { overwriteMetadata } from './utils';
-
-export class Oauth2propsdef {
-  /**
-   * String or a workflow expression. Contains the authority information
-   */
-  authority?: string;
-  /**
-   * Defines the grant type
-   */
-  grantType: 'password' | 'clientCredentials' | 'tokenExchange';
-  /**
-   * String or a workflow expression. Contains the client identifier
-   */
-  clientId: string;
-  /**
-   * Workflow secret or a workflow expression. Contains the client secret
-   */
-  clientSecret?: string;
-  /**
-   * Array containing strings or workflow expressions. Contains the OAuth2 scopes
-   */
-  scopes?: [string, ...string[]];
-  /**
-   * String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'
-   */
-  username?: string;
-  /**
-   * String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'
-   */
-  password?: string;
-  /**
-   * Array containing strings or workflow expressions. Contains the OAuth2 audiences
-   */
-  audiences?: [string, ...string[]];
-  /**
-   * String or a workflow expression. Contains the subject token
-   */
-  subjectToken?: string;
-  /**
-   * String or a workflow expression. Contains the requested subject
-   */
-  requestedSubject?: string;
-  /**
-   * String or a workflow expression. Contains the requested issuer
-   */
-  requestedIssuer?: string;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Oauth2propsdef} without deleted properties.
-   */
-  normalize = (): Oauth2propsdef => {
-    const clone = new Oauth2propsdef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/onevents.ts b/src/lib/definitions/onevents.ts
deleted file mode 100644
index fc30353..0000000
--- a/src/lib/definitions/onevents.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Action } from './action';
-import { Eventdatafilter } from './eventdatafilter';
-import {
-  cleanSourceModelProperty,
-  normalizeActionMode,
-  normalizeActions,
-  overwriteActions,
-  overwriteEventDataFilter,
-} from './utils';
-
-export class Onevents {
-  sourceModel?: Onevents;
-  /**
-   * References one or more unique event names in the defined workflow events
-   */
-  eventRefs: [string, ...string[]];
-  /**
-   * Specifies how actions are to be performed (in sequence or in parallel)
-   */
-  actionMode?: 'sequential' | 'parallel';
-  /**
-   * Actions to be performed if expression matches
-   */
-  actions?: Action[];
-  /**
-   * Event data filter
-   */
-  eventDataFilter?: Eventdatafilter;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { actionMode: 'sequential' };
-    Object.assign(this, defaultModel, model);
-
-    overwriteActions(this);
-    overwriteEventDataFilter(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Onevents} without deleted properties.
-   */
-  normalize = (): Onevents => {
-    const clone = new Onevents(this);
-
-    normalizeActionMode(clone, this.sourceModel);
-    normalizeActions(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/operationstate.ts b/src/lib/definitions/operationstate.ts
deleted file mode 100644
index 3de32e5..0000000
--- a/src/lib/definitions/operationstate.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Action } from './action';
-import { End } from './end';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeActionMode,
-  normalizeActions,
-  normalizeEnd,
-  normalizeOnErrors,
-  normalizeTransition,
-  normalizeUsedForCompensation,
-  overwriteActions,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-import { ActionExecTimeout, StateExecTimeout } from './types';
-
-export class Operationstate {
-  sourceModel?: Operationstate;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'operation';
-  /**
-   * State end definition
-   */
-  end?: boolean | End;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * Specifies whether actions are performed in sequence or in parallel
-   */
-  actionMode?: 'sequential' | 'parallel';
-  /**
-   * Actions to be performed
-   */
-  actions?: Action[];
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-  };
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all the actions have been performed
-   */
-  transition?: string | Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'operation',
-      actionMode: 'sequential',
-      usedForCompensation: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteEnd(this);
-    overwriteStateDataFilter(this);
-    overwriteActions(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteOnErrors(this);
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Operationstate} without deleted properties.
-   */
-  normalize = (): Operationstate => {
-    const clone = new Operationstate(this);
-
-    normalizeEnd(clone);
-
-    normalizeActionMode(clone, this.sourceModel);
-
-    normalizeActions(clone);
-    normalizeOnErrors(clone);
-    normalizeTransition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/parallelstate.ts b/src/lib/definitions/parallelstate.ts
deleted file mode 100644
index 2a3d6d5..0000000
--- a/src/lib/definitions/parallelstate.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Branch } from './branch';
-import { End } from './end';
-import { Error } from './error';
-import { Metadata } from './metadata';
-import { Statedatafilter } from './statedatafilter';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeBranches,
-  normalizeCompletionType,
-  normalizeEnd,
-  normalizeOnErrors,
-  normalizeTransition,
-  normalizeUsedForCompensation,
-  overwriteBranches,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteOnErrors,
-  overwriteStateDataFilter,
-  overwritePropertyAsPlainType,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-import { BranchExecTimeout, StateExecTimeout } from './types';
-
-export class Parallelstate {
-  sourceModel?: Parallelstate;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'parallel';
-  /**
-   * State end definition
-   */
-  end?: boolean | End;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-  };
-  /**
-   * Branch Definitions
-   */
-  branches?: /* Branch Definition */ Branch[];
-  /**
-   * Option types on how to complete branch execution.
-   */
-  completionType?: 'allOf' | 'atLeast';
-  /**
-   * Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition.
-   */
-  numCompleted?: number | string;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all branches have completed execution
-   */
-  transition?: string | Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'parallel',
-      completionType: 'allOf',
-      usedForCompensation: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteEnd(this);
-    overwriteStateDataFilter(this);
-    overwritePropertyAsPlainType('timeouts', this);
-    overwriteBranches(this);
-    overwriteOnErrors(this);
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Parallelstate} without deleted properties.
-   */
-  normalize = (): Parallelstate => {
-    const clone = new Parallelstate(this);
-
-    normalizeEnd(clone);
-    normalizeBranches(clone);
-    normalizeCompletionType(clone, this.sourceModel);
-    normalizeOnErrors(clone);
-    normalizeTransition(clone);
-    normalizeUsedForCompensation(clone, this.sourceModel);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/produceeventdef.ts b/src/lib/definitions/produceeventdef.ts
deleted file mode 100644
index 3750cb0..0000000
--- a/src/lib/definitions/produceeventdef.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { overwritePropertyAsPlainType } from './utils';
-
-export class Produceeventdef {
-  /**
-   * References a name of a defined event
-   */
-  eventRef: string;
-  /**
-   * If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event.
-   */
-  data?:
-    | string
-    | {
-        [key: string]: any;
-      };
-  /**
-   * Add additional event extension context attributes
-   */
-  contextAttributes?: {
-    [name: string]: string;
-  };
-
-  constructor(model: any) {
-    Object.assign(this, model);
-    overwritePropertyAsPlainType('data', this);
-    overwritePropertyAsPlainType('contextAttributes', this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Produceeventdef} without deleted properties.
-   */
-  normalize = (): Produceeventdef => {
-    const clone = new Produceeventdef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/retrydef.ts b/src/lib/definitions/retrydef.ts
deleted file mode 100644
index a85313f..0000000
--- a/src/lib/definitions/retrydef.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Retrydef {
-  /**
-   * Unique retry strategy name
-   */
-  name: string;
-  /**
-   * Time delay between retry attempts (ISO 8601 duration format)
-   */
-  delay?: string;
-  /**
-   * Maximum time delay between retry attempts (ISO 8601 duration format)
-   */
-  maxDelay?: string;
-  /**
-   * Static value by which the delay increases during each attempt (ISO 8601 time format)
-   */
-  increment?: string;
-  /**
-   * Numeric value, if specified the delay between retries is multiplied by this value.
-   */
-  multiplier?: number | string;
-  /**
-   * Maximum number of retry attempts.
-   */
-  maxAttempts: number | string;
-  /**
-   * If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)
-   */
-  jitter?: number | string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Retrydef} without deleted properties.
-   */
-  normalize = (): Retrydef => {
-    const clone = new Retrydef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/schedule.ts b/src/lib/definitions/schedule.ts
deleted file mode 100644
index c3f7506..0000000
--- a/src/lib/definitions/schedule.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Crondef } from './crondef';
-import { overwriteCron } from './utils';
-
-export class Schedule {
-  /**
-   * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.
-   */
-  interval?: string;
-  cron?: string | Crondef;
-  /**
-   * Timezone name used to evaluate the interval & cron-expression. (default: UTC)
-   */
-  timezone?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-
-    overwriteCron(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Schedule} without deleted properties.
-   */
-  normalize = (): Schedule => {
-    const clone = new Schedule(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/sleep.ts b/src/lib/definitions/sleep.ts
deleted file mode 100644
index cfbd4a3..0000000
--- a/src/lib/definitions/sleep.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Sleep {
-  /**
-   * Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined.
-   */
-  before: string;
-  /**
-   * Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined.
-   */
-  after?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Sleep} without deleted properties.
-   */
-  normalize = (): Sleep => {
-    const clone = new Sleep(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/sleepstate.ts b/src/lib/definitions/sleepstate.ts
deleted file mode 100644
index 58843ce..0000000
--- a/src/lib/definitions/sleepstate.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { End } from './end';
-import { Metadata } from './metadata';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeEnd,
-  normalizeTransition,
-  overwriteEnd,
-  overwriteMetadata,
-  overwriteTransition,
-  setEndValueIfNoTransition,
-} from './utils';
-
-export class Sleepstate {
-  sourceModel?: Sleepstate;
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type: 'sleep';
-  end?: End;
-  /**
-   * Duration (ISO 8601 duration format) to sleep
-   */
-  duration?: string;
-
-  transition?: string | Transition;
-
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      type: 'sleep',
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteEnd(this);
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Delaystate} without deleted properties.
-   */
-  normalize = (): Sleepstate => {
-    const clone = new Sleepstate(this);
-
-    normalizeEnd(clone);
-    normalizeTransition(clone);
-    setEndValueIfNoTransition(clone);
-
-    cleanSourceModelProperty(clone);
-
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/specification.ts b/src/lib/definitions/specification.ts
deleted file mode 100644
index 436473b..0000000
--- a/src/lib/definitions/specification.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export * from './workflow';
-export * from './action';
-export * from './actiondatafilter';
-export * from './authdef';
-export * from './basicpropsdef';
-export * from './bearerpropsdef';
-export * from './branch';
-export * from './callbackstate';
-export * from './continueasdef';
-export * from './correlationDef';
-export * from './crondef';
-export * from './databasedswitchstate';
-export * from './defaultconditiondef';
-export * from './end';
-export * from './enddatacondition';
-export * from './endeventcondition';
-export * from './error';
-export * from './errordef';
-export * from './eventbasedswitchstate';
-export * from './eventdatafilter';
-export * from './eventdef';
-export * from './eventref';
-export * from './eventstate';
-export * from './extension';
-export * from './foreachstate';
-export * from './function';
-export * from './functionref';
-export * from './injectstate';
-export * from './metadata';
-export * from './oauth2propsdef';
-export * from './onevents';
-export * from './operationstate';
-export * from './parallelstate';
-export * from './produceeventdef';
-export * from './retrydef';
-export * from './schedule';
-export * from './sleep';
-export * from './sleepstate';
-export * from './startdef';
-export * from './statedatafilter';
-export * from './subflowref';
-export * from './timeouts';
-export * from './transition';
-export * from './transitiondatacondition';
-export * from './transitioneventcondition';
-export * from './workflow';
-export * from './workflowExecTimeout';
-export * from './types';
diff --git a/src/lib/definitions/startdef.ts b/src/lib/definitions/startdef.ts
deleted file mode 100644
index e53c520..0000000
--- a/src/lib/definitions/startdef.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Schedule } from './schedule';
-import { overwriteSchedule } from './utils';
-
-export class Startdef {
-  /**
-   * Name of the starting workflow state
-   */
-  stateName?: string;
-  /**
-   * Define the time/repeating intervals or cron at which workflow instances should be automatically started.
-   */
-  schedule: string | Schedule;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-
-    overwriteSchedule(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Startdef} without deleted properties.
-   */
-  normalize = (): Startdef => {
-    const clone = new Startdef(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/statedatafilter.ts b/src/lib/definitions/statedatafilter.ts
deleted file mode 100644
index e7487ab..0000000
--- a/src/lib/definitions/statedatafilter.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class Statedatafilter {
-  /**
-   * Workflow expression to filter the state data input
-   */
-  input?: string;
-  /**
-   * Workflow expression that filters the state data output
-   */
-  output?: string;
-
-  constructor(model: any) {
-    Object.assign(this, model);
-  }
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Statedatafilter} without deleted properties.
-   */
-  normalize = (): Statedatafilter => {
-    const clone = new Statedatafilter(this);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/subflowref.ts b/src/lib/definitions/subflowref.ts
deleted file mode 100644
index 9cc3445..0000000
--- a/src/lib/definitions/subflowref.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { cleanSourceModelProperty, normalizeInvoke, normalizeOnParentComplete } from './utils';
-
-export class Subflowref {
-  sourceModel?: Subflowref;
-  /**
-   * Unique id of the sub-workflow to be invoked
-   */
-  workflowId: string;
-  /**
-   * Version of the sub-workflow to be invoked
-   */
-  version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-  /**
-   * If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'
-   */
-  onParentComplete?: 'continue' | 'terminate';
-  /**
-   * Specifies if the subflow should be invoked sync or async
-   */
-  invoke?: 'sync' | 'async';
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Subflowref} without deleted properties.
-   */
-  normalize = (): Subflowref => {
-    const clone = new Subflowref(this);
-
-    normalizeInvoke(clone, this.sourceModel);
-    normalizeOnParentComplete(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/timeouts.ts b/src/lib/definitions/timeouts.ts
deleted file mode 100644
index d6c5490..0000000
--- a/src/lib/definitions/timeouts.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { WorkflowExecTimeout } from './workflowExecTimeout';
-import { ActionExecTimeout, BranchExecTimeout, EventTimeout, StateExecTimeout } from './types';
-import { cleanSourceModelProperty, normalizeWorkflowExecTimeout, overwriteWorkflowExecTimeout } from './utils';
-
-export class Timeouts {
-  sourceModel?: Timeouts;
-  workflowExecTimeout?: WorkflowExecTimeout;
-  stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-  actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-  branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-  eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-    overwriteWorkflowExecTimeout(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Exectimeout} without deleted properties.
-   */
-  normalize = (): Timeouts => {
-    const clone = new Timeouts(this);
-    normalizeWorkflowExecTimeout(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/transition.ts b/src/lib/definitions/transition.ts
deleted file mode 100644
index 4477f61..0000000
--- a/src/lib/definitions/transition.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Produceeventdef } from './produceeventdef';
-import { cleanSourceModelProperty, normalizeCompensate, overwriteProduceEvents } from './utils';
-
-export class Transition {
-  sourceModel?: Transition;
-  /**
-   * Name of state to transition to
-   */
-  nextState: string;
-  /**
-   * Array of events to be produced before the transition happens
-   */
-  produceEvents?: /* Produce an event and set its data */ Produceeventdef[];
-  /**
-   * If set to true, triggers workflow compensation when before this transition is taken. Default is false
-   */
-  compensate?: boolean;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      compensate: false,
-    };
-    Object.assign(this, defaultModel, model);
-
-    overwriteProduceEvents(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Transition} without deleted properties.
-   */
-  normalize = (): Transition => {
-    const clone = new Transition(this);
-
-    normalizeCompensate(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/transitiondatacondition.ts b/src/lib/definitions/transitiondatacondition.ts
deleted file mode 100644
index 65dda3b..0000000
--- a/src/lib/definitions/transitiondatacondition.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Metadata } from './metadata';
-import { Transition } from './transition';
-import { cleanSourceModelProperty, normalizeTransition, overwriteMetadata, overwriteTransition } from './utils';
-
-export class Transitiondatacondition {
-  sourceModel?: Transitiondatacondition;
-  /**
-   * Data condition name
-   */
-  name?: string;
-  /**
-   * Workflow expression evaluated against state data. Must evaluate to true or false
-   */
-  condition: string;
-  /**
-   * Workflow transition if condition is evaluated to true
-   */
-  transition: string | Transition;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteTransition(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Transitiondatacondition} without deleted properties.
-   */
-  normalize = (): Transitiondatacondition => {
-    const clone = new Transitiondatacondition(this);
-
-    normalizeTransition(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/transitioneventcondition.ts b/src/lib/definitions/transitioneventcondition.ts
deleted file mode 100644
index 7fe0bd8..0000000
--- a/src/lib/definitions/transitioneventcondition.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Eventdatafilter } from './eventdatafilter';
-import { Metadata } from './metadata';
-import { Transition } from './transition';
-import {
-  cleanSourceModelProperty,
-  normalizeTransition,
-  overwriteEventDataFilter,
-  overwriteMetadata,
-  overwriteTransition,
-} from './utils';
-
-export class Transitioneventcondition {
-  sourceModel?: Transitioneventcondition;
-  /**
-   * Event condition name
-   */
-  name?: string;
-  /**
-   * References an unique event name in the defined workflow events
-   */
-  eventRef: string;
-  /**
-   * Next transition of the workflow if there is valid matches
-   */
-  transition: string | Transition;
-  /**
-   * Event data filter definition
-   */
-  eventDataFilter?: Eventdatafilter;
-  metadata?: /* Metadata information */ Metadata;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    Object.assign(this, model);
-
-    overwriteTransition(this);
-    overwriteEventDataFilter(this);
-    overwriteMetadata(this);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Transitioneventcondition} without deleted properties.
-   */
-  normalize = (): Transitioneventcondition => {
-    const clone = new Transitioneventcondition(this);
-
-    normalizeTransition(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/types.ts b/src/lib/definitions/types.ts
deleted file mode 100644
index 87254a2..0000000
--- a/src/lib/definitions/types.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { CorrelationDef } from './correlationDef';
-import { Transitiondatacondition } from './transitiondatacondition';
-import { Enddatacondition } from './enddatacondition';
-import { Retrydef } from './retrydef';
-import { Function } from './function';
-import { Databasedswitchstate } from './databasedswitchstate';
-import { Eventbasedswitchstate } from './eventbasedswitchstate';
-import { Transitioneventcondition } from './transitioneventcondition';
-import { Endeventcondition } from './endeventcondition';
-import { Eventstate } from './eventstate';
-import { Operationstate } from './operationstate';
-import { Parallelstate } from './parallelstate';
-import { Injectstate } from './injectstate';
-import { Foreachstate } from './foreachstate';
-import { Callbackstate } from './callbackstate';
-import { Eventdef } from './eventdef';
-import { Sleepstate } from './sleepstate';
-import { Authdef } from './authdef';
-import { Errordef } from './errordef';
-import { Specification } from './index';
-import { Extension } from './extension';
-
-export type CorrelationDefs = [
-  /* CloudEvent correlation definition */ CorrelationDef,
-  .../* CloudEvent correlation definition */ CorrelationDef[]
-];
-
-export type Datacondition /* Switch state data based condition */ =
-  | Transitiondatacondition
-  | /* Switch state data based condition */ Enddatacondition;
-
-export type Retries = string /* uri */ | [Retrydef, ...Retrydef[]];
-
-export type Functions = string /* uri */ | [Function, ...Function[]];
-
-export type Switchstate /* Permits transitions to other states based on data conditions */ =
-  | Databasedswitchstate
-  | /* Permits transitions to other states based on events */ Eventbasedswitchstate;
-
-export type Eventcondition /* Switch state data event condition */ =
-  | Transitioneventcondition
-  | /* Switch state data event condition */ Endeventcondition;
-
-export type States = [
-  (
-    | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-    | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-    | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-    | /* Consists of a number of states that are executed in parallel */ Parallelstate
-    | Switchstate
-    | /* Inject static data into state data. Does not perform any actions */ Injectstate
-    | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-    | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-  ),
-  ...(
-    | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-    | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-    | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-    | /* Consists of a number of states that are executed in parallel */ Parallelstate
-    | Switchstate
-    | /* Inject static data into state data. Does not perform any actions */ Injectstate
-    | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-    | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-  )[]
-];
-
-/**
- * Branch execution timeout duration (ISO 8601 duration format)
- */
-export type BranchExecTimeout = string;
-
-/**
- * Action execution timeout duration (ISO 8601 duration format)
- */
-export type ActionExecTimeout = string;
-
-/**
- * Timeout duration to wait for consuming defined events (ISO 8601 duration format)
- */
-export type EventTimeout = string;
-
-export type Secrets = string /* uri */ | [string, ...string[]];
-
-export type Events = string /* uri */ | [Eventdef, ...Eventdef[]];
-
-export type Auth = string /* uri */ | [Authdef, ...Authdef[]];
-
-export type Errors = string /* uri */ | [Errordef, ...Errordef[]];
-
-export type Properties = Specification.Basicpropsdef | Specification.Bearerpropsdef | Specification.Oauth2propsdef;
-
-export type Extensions = string /* uri */ | [Extension, ...Extension[]];
-
-/**
- * Workflow state execution timeout duration (ISO 8601 duration format)
- */
-export type StateExecTimeout = string;
diff --git a/src/lib/definitions/utils.ts b/src/lib/definitions/utils.ts
deleted file mode 100644
index 47684c0..0000000
--- a/src/lib/definitions/utils.ts
+++ /dev/null
@@ -1,846 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Specification } from './index';
-import { isObject } from '../utils';
-
-/**
- * Modify the provided object, set the value to 'schedule' property as an instance of Specification.Schedule class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteSchedule(object: { schedule: string | Specification.Schedule }): void {
-  if (isObject(object.schedule)) {
-    object.schedule = new Specification.Schedule(object.schedule);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'start' property as an instance of Specification.Startdef class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteStart(object: { start?: string | Specification.Startdef }): void {
-  if (isObject(object.start)) {
-    object.start = new Specification.Startdef(object.start);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'end' property as an instance of Specification.End class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteEnd(object: { end?: boolean | Specification.End }): void {
-  if (isObject(object.end)) {
-    object.end = new Specification.End(object.end);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'cron' property as an instance of Specification.Crondef class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteCron(object: { cron?: string | Specification.Crondef }): void {
-  if (isObject(object.cron)) {
-    object.cron = new Specification.Crondef(object.cron);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'transition' property as an instance of Specification.Transition class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteTransition(object: { transition?: string | Specification.Transition }): void {
-  if (isObject(object.transition)) {
-    object.transition = new Specification.Transition(object.transition);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'defaultCondition' property as an instance of Specification.Defaultconditiondef class
- * @param object to set/overwrite the property
- */
-export function overwriteDefaultCondition(object: { defaultCondition?: Specification.Defaultconditiondef }): void {
-  object.defaultCondition = object.defaultCondition && new Specification.Defaultconditiondef(object.defaultCondition);
-}
-
-/**
- * Modify the provided object, set the value to 'eventConditions' property as an instance of Specification.Eventcondition[] class
- * Throws an error if provided value is neither a Transitioneventcondition nor a Endeventcondition
- * @param object to set/overwrite the property
- */
-export function overwriteEventConditions(object: { eventConditions: Specification.Eventcondition[] }): void {
-  if (Array.isArray(object.eventConditions)) {
-    object.eventConditions = object.eventConditions.map((eventCondition: any) => {
-      if (eventCondition.transition) {
-        return new Specification.Transitioneventcondition(eventCondition);
-      }
-
-      if (eventCondition.end) {
-        return new Specification.Endeventcondition(eventCondition);
-      }
-
-      throw new Error(
-        `Provided value is neither Transitioneventcondition nor Endeventcondition \n data= ${eventCondition} `
-      );
-    });
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'dataConditions' property as an instance of Specification.Datacondition[] class
- * Throws an error if provided value is neither a Transitiondatacondition nor a Enddatacondition
- * @param object to set/overwrite the property
- */
-export function overwriteDataConditions(object: { dataConditions: Specification.Datacondition[] }): void {
-  if (Array.isArray(object.dataConditions)) {
-    object.dataConditions = object.dataConditions.map((dataCondition: any) => {
-      if (dataCondition.transition) {
-        return new Specification.Transitiondatacondition(dataCondition);
-      }
-
-      if (dataCondition.end) {
-        return new Specification.Enddatacondition(dataCondition);
-      }
-
-      throw new Error(
-        `Provided value is neither Transitiondatacondition nor Enddatacondition \n data= ${dataCondition} `
-      );
-    });
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'actions' property as an instance of Specification.Action[] class
- * @param object to set/overwrite the property
- */
-export function overwriteActions(object: { actions?: Specification.Action[] }): void {
-  if (Array.isArray(object.actions)) {
-    object.actions = object.actions.map((v) => new Specification.Action(v));
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'onEvents' property as an instance of Specification.Onevents[] class
- * @param object to set/overwrite the property
- */
-export function overwriteOnEvents(object: { onEvents: Specification.Onevents[] }): void {
-  object.onEvents = object.onEvents.map((event) => new Specification.Onevents(event));
-}
-
-/**
- * Modify the provided object, set the value to 'stateDataFilter' property as an instance of Specification.Statedatafilter class
- * @param object to set/overwrite the property
- */
-export function overwriteStateDataFilter(object: { stateDataFilter?: Specification.Statedatafilter }): void {
-  object.stateDataFilter = object.stateDataFilter && new Specification.Statedatafilter(object.stateDataFilter);
-}
-
-/**
- * Modify the provided object, set the value to 'metadata' property as an instance of Specification.Metadata class
- * @param object to set/overwrite the property
- */
-export function overwriteMetadata(object: { metadata?: Specification.Metadata }): void {
-  object.metadata = object.metadata && new Specification.Metadata(object.metadata);
-}
-
-/**
- * Modify the provided object, set the value to 'retries' property as an instance of Specification.Retries class
- * @param object to set/overwrite the property
- */
-export function overwriteRetries(object: { retries?: Specification.Retries }) {
-  if (Array.isArray(object.retries)) {
-    object.retries = (object.retries as Specification.Retrydef[]).map(
-      (f) => new Specification.Retrydef(f)
-    ) as Specification.Retries;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'events' property as an instance of Specification.Events class
- * @param object to set/overwrite the property
- */
-export function overwriteEvents(object: { events?: Specification.Events }) {
-  if (Array.isArray(object.events)) {
-    object.events = (object.events as Specification.Eventdef[]).map(
-      (f) => new Specification.Eventdef(f)
-    ) as Specification.Events;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'errors' property as an instance of Specification.Errors class
- * @param object to set/overwrite the property
- */
-export function overwriteErrors(object: { errors?: Specification.Errors }) {
-  if (Array.isArray(object.errors)) {
-    object.errors = (object.errors as Specification.Errordef[]).map(
-      (f) => new Specification.Errordef(f)
-    ) as Specification.Errors;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'extensions' property as an instance of Specification.Auth class
- * @param object to set/overwrite the property
- */
-export function overwriteExtensions(object: { extensions?: Specification.Extensions }) {
-  if (Array.isArray(object.extensions)) {
-    object.extensions = (object.extensions as Specification.Extension[]).map(
-      (f) => new Specification.Extension(f)
-    ) as Specification.Extensions;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'auth' property as an instance of Specification.Auth class
- * @param object to set/overwrite the property
- */
-export function overwriteAuth(object: { auth?: Specification.Auth }) {
-  if (Array.isArray(object.auth)) {
-    object.auth = (object.auth as Specification.Authdef[]).map(
-      (f) => new Specification.Authdef(f)
-    ) as Specification.Auth;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'functions' property as an instance of Specification.Functions class
- * @param object to set/overwrite the property
- */
-export function overwriteFunctions(object: { functions?: Specification.Functions }) {
-  if (Array.isArray(object.functions)) {
-    object.functions = (object.functions as Specification.Function[]).map(
-      (f) => new Specification.Function(f)
-    ) as Specification.Functions;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'states' property as an instance of Specification.States class
- * Throws an error if the value of the property type is not handler
- * @param object to set/overwrite the property
- */
-export function overwriteStates(object: { states: Specification.States }) {
-  object.states =
-    object.states &&
-    ((object.states as Specification.States).map((v) => {
-      switch (v.type) {
-        case 'sleep':
-          return new Specification.Sleepstate(v);
-        case 'event':
-          return new Specification.Eventstate(v);
-        case 'operation':
-          return new Specification.Operationstate(v);
-        case 'parallel':
-          return new Specification.Parallelstate(v);
-        case 'switch':
-          const switchState: any = v;
-          if (switchState.dataConditions) {
-            return new Specification.Databasedswitchstate(v);
-          }
-          if (switchState.eventConditions) {
-            return new Specification.Eventbasedswitchstate(v);
-          }
-          throw new Error(`Unexpected switch type; \n state value= ${JSON.stringify(v, null, 4)}`);
-        case 'inject':
-          return new Specification.Injectstate(v);
-        case 'foreach':
-          return new Specification.Foreachstate(v);
-        case 'callback':
-          return new Specification.Callbackstate(v);
-        default:
-          throw new Error(`Unexpected type= ${v.type}; \n state value= ${JSON.stringify(v, null, 4)}`);
-      }
-    }) as Specification.States);
-}
-
-/**
- * Modify the provided object, set the value to 'properties' property as an instance of Specification.Properties class, if the provided value is an object
- * Throws an error if the value of the property type is not handler
- * @param object to set/overwrite the property
- */
-export function overwriteProperties(object: { properties: string | Specification.Properties }) {
-  if (isObject(object.properties)) {
-    const properties: any = object.properties;
-
-    if (properties.username && properties.password) {
-      object.properties = new Specification.Basicpropsdef(object.properties);
-    }
-
-    if (properties.token) {
-      object.properties = new Specification.Bearerpropsdef(object.properties);
-    }
-
-    if (properties.grantType) {
-      object.properties = new Specification.Oauth2propsdef(object.properties);
-    }
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'correlation' property as an instance of Specification.CorrelationDefs class
- * @param object to set/overwrite the property
- */
-export function overwriteCorrelation(object: { correlation?: Specification.CorrelationDefs }): void {
-  if (Array.isArray(object.correlation)) {
-    object.correlation = object.correlation.map(
-      (correlation) => new Specification.CorrelationDef(correlation)
-    ) as Specification.CorrelationDefs;
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'action' property as an instance of Specification.Action class
- * @param object to set/overwrite the property
- */
-export function overwriteAction(object: { action?: Specification.Action }): void {
-  object.action = object.action && new Specification.Action(object.action);
-}
-
-/**
- * Modify the provided object, set the value to 'workflowExecTimeout' property as an instance of Specification.WorkflowExecTimeout class
- * @param object to set/overwrite the property
- */
-export function overwriteWorkflowExecTimeout(object: {
-  workflowExecTimeout?: Specification.WorkflowExecTimeout;
-}): void {
-  object.workflowExecTimeout =
-    object.workflowExecTimeout && new Specification.WorkflowExecTimeout(object.workflowExecTimeout);
-}
-
-/**
- * Modify the provided object, set the value to 'eventDataFilter' property as an instance of Specification.Eventdatafilter class
- * @param object to set/overwrite the property
- */
-export function overwriteEventDataFilter(object: { eventDataFilter?: Specification.Eventdatafilter }): void {
-  object.eventDataFilter = object.eventDataFilter && new Specification.Eventdatafilter(object.eventDataFilter);
-}
-
-/**
- * Modify the provided object, set the value to 'onErrors' property as an instance of Specification.Error[] class
- * @param object to set/overwrite the property
- */
-export function overwriteOnErrors(object: { onErrors?: Specification.Error[] }): void {
-  if (Array.isArray(object.onErrors)) {
-    object.onErrors = object.onErrors.map((error) => new Specification.Error(error));
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'branches' property as an instance of Specification.Branch[] class
- * @param object to set/overwrite the property
- */
-export function overwriteBranches(object: { branches?: Specification.Branch[] }): void {
-  if (Array.isArray(object.branches)) {
-    object.branches = object.branches.map((v) => new Specification.Branch(v));
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'produceEvents' property as an instance of Specification.Produceeventdef[] class
- * @param object to set/overwrite the property
- */
-export function overwriteProduceEvents(object: { produceEvents?: Specification.Produceeventdef[] }): void {
-  if (Array.isArray(object.produceEvents)) {
-    object.produceEvents = object.produceEvents.map((produceEvent) => new Specification.Produceeventdef(produceEvent));
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'functionRef' property as an instance of Specification.Functionref class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteFunctionRef(object: { functionRef?: string | Specification.Functionref }): void {
-  if (isObject(object.functionRef)) {
-    object.functionRef = new Specification.Functionref(object.functionRef);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'continueAs' property as an instance of Specification. Continueasdef, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteContinueAs(object: { continueAs?: string | Specification.Continueasdef }): void {
-  if (isObject(object.continueAs)) {
-    object.continueAs = new Specification.Continueasdef(object.continueAs);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'subFlowRef' property as an instance of Specification.Subflowref class, if the provided value is an object
- * @param object to set/overwrite the property
- */
-export function overwriteSubFlowRef(object: { subFlowRef?: string | Specification.Subflowref }): void {
-  if (isObject(object.subFlowRef)) {
-    object.subFlowRef = new Specification.Subflowref(object.subFlowRef);
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'eventRef' property as an instance of Specification.Eventref class
- * @param object to set/overwrite the property
- */
-export function overwriteEventRef(object: { eventRef?: Specification.Eventref }): void {
-  object.eventRef = object.eventRef && new Specification.Eventref(object.eventRef);
-}
-
-/**
- * Modify the provided object, set the value to 'sleep' property as an instance of Specification.Sleep class
- * @param object to set/overwrite the property
- */
-export function overwriteSleep(object: { sleep?: Specification.Sleep }): void {
-  object.sleep = object.sleep && new Specification.Sleep(object.sleep);
-}
-
-/**
- * Modify the provided object, set the value to 'actionDataFilter' property as an instance of Specification.Actiondatafilter class
- * @param object to set/overwrite the property
- */
-export function overwriteActionDataFilter(object: { actionDataFilter?: Specification.Actiondatafilter }): void {
-  object.actionDataFilter = object.actionDataFilter && new Specification.Actiondatafilter(object.actionDataFilter);
-}
-
-/**
- * Set end to true if neither nor transition properties are defined
- * @param object to modify
- */
-export function setEndValueIfNoTransition(object: {
-  transition?: string | Specification.Transition;
-  end?: boolean | Specification.End;
-}): void {
-  if (!object.end && !object.transition) {
-    object.end = true;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'end' property.
- * @param object to be modified
- */
-export function normalizeEnd(object: { end?: boolean | Specification.End }) {
-  if (isObject(object.end)) {
-    object.end = (object.end as Specification.End).normalize();
-  }
-}
-
-/**
- * Modify the provided object, deep cloning the value of the provided property
- * @param property to be cloned
- * @param object to set/overwrite the property
- */
-export function overwritePropertyAsPlainType(property: string, object: any): void {
-  if (isObject(object[property])) {
-    Object.assign(object, { [property]: JSON.parse(JSON.stringify(object[property])) });
-  }
-}
-
-/**
- * Modify the provided object, set the value to 'timeouts' property as an instance of Specification.Timeouts class
- * @param object to set/overwrite the property
- */
-export function overwriteTimeouts(object: { timeouts?: string | Specification.Timeouts }): void {
-  if (isObject(object.timeouts)) {
-    object.timeouts = object.timeouts && new Specification.Timeouts(object.timeouts);
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'subFlowRef' property.
- * @param object to be modified
- */
-export function normalizeSubFlowRef(object: { subFlowRef?: string | Specification.Subflowref }) {
-  if (isObject(object.subFlowRef)) {
-    object.subFlowRef = (object.subFlowRef as Specification.Subflowref).normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'continueAs' property.
- * @param object to be modified
- */
-export function normalizeContinueAs(object: { continueAs?: string | Specification.Continueasdef }) {
-  if (isObject(object.continueAs)) {
-    object.continueAs = (object.continueAs as Specification.Continueasdef).normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'defaultCondition' property.
- * @param object to be modified
- */
-export function normalizeDefaultCondition(object: { defaultCondition?: Specification.Defaultconditiondef }) {
-  object.defaultCondition = object.defaultCondition && object.defaultCondition.normalize();
-}
-
-/**
- * Modify the provided object by normalizing the 'workflowExecTimeout' property.
- * @param object to be modified
- */
-export function normalizeWorkflowExecTimeout(object: { workflowExecTimeout?: Specification.WorkflowExecTimeout }) {
-  object.workflowExecTimeout = object.workflowExecTimeout && object.workflowExecTimeout.normalize();
-}
-
-/**
- * Modify the provided object by normalizing the 'onEvents' property.
- * @param object to be modified
- */
-export function normalizeOnEvents(object: { onEvents: Specification.Onevents[] }) {
-  object.onEvents = object.onEvents && object.onEvents.map((onEvent) => onEvent.normalize());
-}
-
-/**
- * Modify the provided object by normalizing the 'onErrors' property.
- * @param object to be modified
- */
-export function normalizeOnErrors(object: { onErrors?: Specification.Error[] }): void {
-  if (Array.isArray(object.onErrors)) {
-    object.onErrors = object.onErrors.map((error) => error.normalize());
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'branches' property.
- * @param object to be modified
- */
-export function normalizeBranches(object: { branches?: Specification.Branch[] }): void {
-  if (Array.isArray(object.branches)) {
-    object.branches = object.branches.map((branch) => branch.normalize());
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'actions' property.
- * @param object to be modified
- */
-export function normalizeActions(object: { actions?: Specification.Action[] }): void {
-  if (Array.isArray(object.actions)) {
-    object.actions = object.actions.map((action) => action.normalize());
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'action' property.
- * @param object to be modified
- */
-export function normalizeAction(object: { action?: Specification.Action }): void {
-  object.action = object.action && object.action.normalize();
-}
-
-/**
- * Modify the provided object by normalizing the 'dataConditions' property.
- * @param object to be modified
- */
-export function normalizeDataConditions(object: { dataConditions?: Specification.Datacondition[] }): void {
-  if (Array.isArray(object.dataConditions)) {
-    object.dataConditions = object.dataConditions.map((dc) => dc.normalize());
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'eventConditions' property.
- * @param object to be modified
- */
-export function normalizeEventConditions(object: { eventConditions?: Specification.Eventcondition[] }): void {
-  if (Array.isArray(object.eventConditions)) {
-    object.eventConditions = object.eventConditions.map((event) => event.normalize());
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'transition' property if property type is Specification.Transition.
- * @param object to be modified
- */
-export function normalizeTransition(object: { transition?: string | Specification.Transition }) {
-  if (isObject(object.transition)) {
-    object.transition = (object.transition as Specification.Transition).normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'states' property.
- * @param object to be modified
- */
-export function normalizeStates(object: { states: Specification.States }) {
-  object.states = object.states.map((state) => {
-    return state.normalize();
-  }) as Specification.States;
-}
-
-/**
- * Modify the provided object by normalizing the 'extensions' property.
- * @param object to be modified
- */
-export function normalizeExtensions(object: { extensions?: Specification.Extensions }) {
-  if (Array.isArray(object.extensions)) {
-    object.extensions = object.extensions.map((extension) => {
-      return extension.normalize();
-    }) as Specification.Extensions;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'auth' property.
- * @param object to be modified
- */
-export function normalizeAuth(object: { auth?: Specification.Auth }) {
-  if (Array.isArray(object.auth)) {
-    object.auth = object.auth.map((auth) => {
-      return auth.normalize();
-    }) as Specification.Auth;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'functions' property.
- * @param object to be modified
- */
-export function normalizeFunctions(object: { functions?: Specification.Functions }) {
-  if (Array.isArray(object.functions)) {
-    object.functions = (object.functions as Specification.Function[]).map((f) =>
-      f.normalize()
-    ) as Specification.Functions;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'events' property.
- * @param object to be modified
- */
-export function normalizeEvents(object: { events?: Specification.Events }) {
-  if (Array.isArray(object.events)) {
-    object.events = (object.events as Specification.Eventdef[]).map((event) =>
-      event.normalize()
-    ) as Specification.Events;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'timeouts' property.
- * @param object to be modified
- */
-export function normalizeTimeouts(object: { timeouts?: string | Specification.Timeouts }) {
-  if (isObject(object.timeouts)) {
-    object.timeouts = object.timeouts && object.timeouts.normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'eventRef' property.
- * @param object to be modified
- */
-export function normalizeEventRef(object: { eventRef?: Specification.Eventref }) {
-  if (isObject(object.eventRef)) {
-    object.eventRef = object.eventRef && object.eventRef.normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'functionRef' property.
- * @param object to be modified
- */
-export function normalizeFunctionRef(object: { functionRef?: string | Specification.Functionref }) {
-  if (isObject(object.functionRef)) {
-    object.functionRef = object.functionRef && object.functionRef.normalize();
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'actionMode' property.
- * @param target to be modified
- * @param source
- */
-export function normalizeActionMode(target: { actionMode?: string }, source?: { actionMode?: string }) {
-  if (!source?.actionMode) {
-    delete target.actionMode;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'completionType' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeCompletionType(object: { completionType?: string }, source?: { completionType?: string }) {
-  if (!source?.completionType) {
-    delete object.completionType;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'usedForCompensation' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeUsedForCompensation(
-  object: { usedForCompensation?: boolean },
-  source?: { usedForCompensation?: boolean }
-) {
-  if (source?.usedForCompensation === undefined) {
-    delete object.usedForCompensation;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'mode' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeMode(object: { mode?: string }, source?: { mode?: string }) {
-  if (!source?.mode) {
-    delete object.mode;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'compensate' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeCompensate(object: { compensate?: boolean }, source?: { compensate?: boolean }) {
-  if (source?.compensate === undefined) {
-    delete object.compensate;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'scheme' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeScheme(object: { scheme?: string }, source?: { scheme?: string }) {
-  if (!source?.scheme) {
-    delete object.scheme;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'terminate' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeTerminate(object: { terminate?: boolean }, source?: { terminate?: boolean }) {
-  if (source?.terminate === undefined) {
-    delete object.terminate;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'exclusive' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeExclusive(object: { exclusive?: boolean }, source?: { exclusive?: boolean }) {
-  if (source?.exclusive === undefined) {
-    delete object.exclusive;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'keepActive' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeKeepActive(object: { keepActive?: boolean }, source?: { keepActive?: boolean }) {
-  if (source?.keepActive === undefined) {
-    delete object.keepActive;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'expressionLang' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeExpressionLang(object: { expressionLang?: string }, source?: { expressionLang?: string }) {
-  if (!source?.expressionLang) {
-    delete object.expressionLang;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'interrupt' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeInterrupt(object: { interrupt?: boolean }, source?: { interrupt?: boolean }) {
-  if (source?.interrupt === undefined) {
-    delete object.interrupt;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'type' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeType(object: { type?: string }, source?: { type?: string }) {
-  if (!source?.type) {
-    delete object.type;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'invoke' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeInvoke(object: { invoke?: string }, source?: { invoke?: string }) {
-  if (!source?.invoke) {
-    delete object.invoke;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'onParentComplete' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeOnParentComplete(
-  object: { onParentComplete?: 'continue' | 'terminate' },
-  source?: { onParentComplete?: 'continue' | 'terminate' }
-) {
-  if (!source?.onParentComplete) {
-    delete object.onParentComplete;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'kind' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeKind(object: { kind?: string }, source?: { kind?: string }) {
-  if (!source?.kind) {
-    delete object.kind;
-  }
-}
-
-/**
- * Modify the provided object by normalizing the 'dataOnly' property.
- * @param object to be modified
- * @param source
- */
-export function normalizeDataOnly(object: { dataOnly?: boolean }, source?: { dataOnly?: boolean }) {
-  if (source?.dataOnly === undefined) {
-    delete object.dataOnly;
-  }
-}
-
-/**
- * Modify the provided object by deleting the 'source' property
- * @param object
- */
-export function cleanSourceModelProperty(object?: { sourceModel?: any }): void {
-  delete object?.sourceModel;
-}
diff --git a/src/lib/definitions/workflow.ts b/src/lib/definitions/workflow.ts
deleted file mode 100644
index 39c0a2c..0000000
--- a/src/lib/definitions/workflow.ts
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Metadata } from './metadata';
-import { Startdef } from './startdef';
-import { Timeouts } from './timeouts';
-import * as yaml from 'js-yaml';
-
-import { Specification } from '.';
-
-import { validate } from '../utils';
-import {
-  cleanSourceModelProperty,
-  normalizeAuth,
-  normalizeEvents,
-  normalizeExpressionLang,
-  normalizeExtensions,
-  normalizeFunctions,
-  normalizeKeepActive,
-  normalizeStates,
-  normalizeTimeouts,
-  overwriteAuth,
-  overwriteErrors,
-  overwriteEvents,
-  overwriteExtensions,
-  overwriteFunctions,
-  overwriteMetadata,
-  overwritePropertyAsPlainType,
-  overwriteRetries,
-  overwriteStart,
-  overwriteStates,
-  overwriteTimeouts,
-} from './utils';
-import { Auth, Errors, Events, Extensions, Functions, Retries, Secrets, States } from './types';
-
-export class Workflow {
-  sourceModel?: Workflow;
-  /**
-   * Workflow unique identifier
-   */
-  id: string;
-  /**
-   * Domain-specific workflow identifier
-   */
-  key?: string;
-  /**
-   * Workflow name
-   */
-  name?: string;
-  /**
-   * Workflow description
-   */
-  description?: string;
-  /**
-   * Workflow version
-   */
-  version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-  /**
-   * List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities
-   */
-  annotations?: [string, ...string[]];
-  dataInputSchema?:
-    | string
-    | {
-        schema: any;
-        /**
-         * Determines if workflow execution should continue if there are validation errors
-         */
-        failOnValidationErrors?: boolean;
-      };
-  secrets?: Secrets;
-  constants?:
-    | string /* uri */
-    | {
-        [key: string]: any;
-      };
-  start?: string | Startdef;
-  /**
-   * Serverless Workflow schema version
-   */
-  specVersion: string;
-  /**
-   * Identifies the expression language used for workflow expressions. Default is 'jq'
-   */
-  expressionLang?: string;
-  timeouts?: string /* uri */ | Timeouts;
-  errors?: Errors;
-  /**
-   * If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'
-   */
-  keepActive?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-  events?: Events;
-  functions?: Functions;
-  /**
-   * If set to true, actions should automatically be retried on unchecked errors. Default is false
-   */
-  autoRetries?: boolean;
-  retries?: Retries;
-  auth?: Auth;
-  extensions?: Extensions;
-  /**
-   * State definitions
-   */
-  states: States;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = {
-      id: undefined,
-      name: undefined,
-      version: undefined,
-      description: undefined,
-      specVersion: undefined,
-      start: undefined,
-      states: undefined,
-      functions: undefined,
-      events: undefined,
-      retries: undefined,
-      timeouts: undefined,
-      expressionLang: 'jq',
-      keepActive: true,
-    };
-
-    Object.assign(this, defaultModel, model);
-
-    overwritePropertyAsPlainType('dataInputSchema', this);
-    overwritePropertyAsPlainType('constants', this);
-    overwriteStart(this);
-    overwriteTimeouts(this);
-    overwriteErrors(this);
-    overwriteMetadata(this);
-    overwriteEvents(this);
-    overwriteFunctions(this);
-    overwriteRetries(this);
-    overwriteExtensions(this);
-    overwriteAuth(this);
-    overwriteStates(this);
-  }
-
-  /**
-   * Parses the provided string as Workflow
-   * @param {string} data The JSON or YAML workflow to parse
-   * @returns {Workflow} The parse Workflow
-   */
-  static fromSource(value: string): Specification.Workflow {
-    try {
-      const model = yaml.load(value);
-      return new Workflow(model);
-    } catch (ex) {
-      throw new Error('Format not supported');
-    }
-  }
-
-  /**
-   * Stringifies the provided workflow to the JSON format
-   * @param {Workflow} workflow The workflow to strigify
-   * @returns {string} The workflow as JSON
-   */
-  static toJson(workflow: Workflow): string {
-    validate('Workflow', workflow.normalize());
-    return JSON.stringify(workflow.normalize());
-  }
-
-  /**
-   * Stringifies the provided workflow to the YAML format
-   * @param {Workflow} workflow The workflow to strigify
-   * @returns {string} The workflow as YAML
-   */
-  static toYaml(workflow: Workflow): string {
-    validate('Workflow', workflow.normalize());
-    return yaml.dump(JSON.parse(JSON.stringify(workflow.normalize())));
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.Workflow} without deleted properties.
-   */
-  normalize = (): Workflow => {
-    const clone = new Workflow(this);
-
-    normalizeExpressionLang(clone, this.sourceModel);
-    normalizeTimeouts(clone);
-    normalizeKeepActive(clone, this.sourceModel);
-    normalizeEvents(clone);
-    normalizeFunctions(clone);
-    normalizeAuth(clone);
-    normalizeExtensions(clone);
-    normalizeStates(clone);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/definitions/workflowExecTimeout.ts b/src/lib/definitions/workflowExecTimeout.ts
deleted file mode 100644
index 37ead5f..0000000
--- a/src/lib/definitions/workflowExecTimeout.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { cleanSourceModelProperty, normalizeInterrupt } from './utils';
-
-export class WorkflowExecTimeout {
-  sourceModel?: WorkflowExecTimeout;
-  /**
-   * Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'
-   */
-  duration: string;
-  /**
-   * If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.
-   */
-  interrupt?: boolean;
-  /**
-   * Name of a workflow state to be executed before workflow instance is terminated
-   */
-  runBefore?: string;
-
-  constructor(model: any) {
-    this.sourceModel = Object.assign({}, model);
-
-    const defaultModel = { interrupt: true };
-    Object.assign(this, defaultModel, model);
-  }
-
-  /**
-   * Normalize the value of each property by recursively deleting properties whose value is equal to its default value. Does not modify the object state.
-   * @returns {Specification.WorkflowExecTimeout} without deleted properties.
-   */
-
-  normalize = (): WorkflowExecTimeout => {
-    const clone = new WorkflowExecTimeout(this);
-
-    normalizeInterrupt(clone, this.sourceModel);
-
-    cleanSourceModelProperty(clone);
-    return clone;
-  };
-}
diff --git a/src/lib/diagram/mermaidState.ts b/src/lib/diagram/mermaidState.ts
deleted file mode 100644
index cf23e98..0000000
--- a/src/lib/diagram/mermaidState.ts
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { Specification } from '../definitions';
-import { humanCase, isObject, pascalCase } from '../utils';
-
-export class MermaidState {
-  constructor(
-    private state: {
-      name?: string;
-      type?: string;
-      transition?: string | Specification.Transition;
-      end?: boolean | Specification.End;
-      compensatedBy?: string;
-      onErrors?: Specification.Error[];
-      usedForCompensation?: boolean;
-    },
-    private isFirstState: boolean = false
-  ) {}
-
-  sourceCode() {
-    const stateDefinition = this.definitions();
-    const stateTransitions = this.transitions();
-
-    const stateDescription = stateTransitions.reduce((p, c) => {
-      return p + '\n' + c;
-    }, stateDefinition);
-
-    return stateDescription;
-  }
-
-  private definitions(): string {
-    return (
-      this.definitionName() +
-      '\n' +
-      this.definitionType() +
-      (this.definitionDetails() !== undefined ? '\n' + this.definitionDetails() : '')
-    );
-  }
-
-  private transitions(): string[] {
-    const transitions: string[] = [];
-
-    transitions.push(...this.startTransition());
-    transitions.push(...this.dataConditionsTransitions());
-    transitions.push(...this.eventConditionsTransition());
-    transitions.push(...this.errorTransitions());
-    transitions.push(...this.naturalTransition(this.stateKeyDiagram(this.state.name), this.state.transition));
-    transitions.push(...this.compensatedByTransition());
-    transitions.push(...this.endTransition());
-
-    return transitions;
-  }
-
-  private stateKeyDiagram(name: string | undefined) {
-    return pascalCase(name || '');
-  }
-
-  private startTransition() {
-    const transitions: string[] = [];
-    if (this.isFirstState) {
-      const stateName = this.stateKeyDiagram(this.state.name);
-      transitions.push(this.transitionDescription('[*]', stateName));
-    }
-    return transitions;
-  }
-
-  private dataConditionsTransitions() {
-    const transitions: string[] = [];
-
-    const dataBasedSwitchState = this.state as Specification.Databasedswitchstate;
-    if (dataBasedSwitchState.dataConditions) {
-      const stateName = this.state.name;
-      dataBasedSwitchState.dataConditions.forEach((dataCondition) => {
-        const transitionDataCondition = dataCondition as Specification.Transitiondatacondition;
-
-        transitions.push(
-          ...this.naturalTransition(stateName, transitionDataCondition.transition, transitionDataCondition.condition)
-        );
-
-        const endDataCondition = dataCondition as Specification.Enddatacondition;
-        if (endDataCondition.end) {
-          transitions.push(this.transitionDescription(stateName, '[*]', transitionDataCondition.condition));
-        }
-      });
-
-      transitions.push(...this.defaultConditionTransition(dataBasedSwitchState));
-    }
-    return transitions;
-  }
-
-  private eventConditionsTransition() {
-    const transitions: string[] = [];
-
-    const eventBasedSwitchState = this.state as Specification.Eventbasedswitchstate;
-    if (eventBasedSwitchState.eventConditions) {
-      const stateName = this.state.name;
-      eventBasedSwitchState.eventConditions.forEach((eventCondition) => {
-        const transitionEventCondition = eventCondition as Specification.Transitioneventcondition;
-
-        transitions.push(
-          ...this.naturalTransition(stateName, transitionEventCondition.transition, transitionEventCondition.eventRef)
-        );
-
-        const endEventCondition = eventCondition as Specification.Endeventcondition;
-        if (endEventCondition.end) {
-          transitions.push(this.transitionDescription(stateName, '[*]'));
-        }
-      });
-
-      transitions.push(...this.defaultConditionTransition(eventBasedSwitchState));
-    }
-    return transitions;
-  }
-
-  private defaultConditionTransition(state: { defaultCondition?: Specification.Defaultconditiondef }) {
-    const transitions: string[] = [];
-
-    if (state.defaultCondition) {
-      transitions.push(...this.naturalTransition(this.state.name, state.defaultCondition.transition, 'default'));
-    }
-    return transitions;
-  }
-
-  private endTransition() {
-    const transitions: string[] = [];
-
-    if (this.state.end) {
-      const stateName = this.state.name;
-      let transitionLabel = undefined;
-
-      if (isObject(this.state.end)) {
-        const end = this.state.end as Specification.End;
-
-        if (end.produceEvents) {
-          transitionLabel = 'Produced event = [' + end.produceEvents!.map((pe) => pe.eventRef).join(',') + ']';
-        }
-      }
-
-      transitions.push(this.transitionDescription(stateName, '[*]', transitionLabel));
-    }
-    return transitions;
-  }
-
-  private naturalTransition(
-    source?: string,
-    target?: string | Specification.Transition,
-    label: string | undefined = undefined
-  ) {
-    const transitions: string[] = [];
-
-    if (target) {
-      let descTransition = '';
-      if (isObject(target)) {
-        descTransition = (target as Specification.Transition).nextState;
-      } else if (typeof target === 'string') {
-        descTransition = target;
-      }
-      transitions.push(this.transitionDescription(source, descTransition, label ? label : undefined));
-    }
-    return transitions;
-  }
-
-  private errorTransitions() {
-    const transitions: string[] = [];
-
-    if (this.state.onErrors) {
-      this.state.onErrors.forEach((error) => {
-        transitions.push(
-          ...this.naturalTransition(this.stateKeyDiagram(this.state.name), error.transition, error.errorRef)
-        );
-      });
-    }
-    return transitions;
-  }
-
-  private compensatedByTransition() {
-    const transitions: string[] = [];
-
-    if (this.state.compensatedBy) {
-      transitions.push(...this.naturalTransition(this.state.name, this.state.compensatedBy, 'compensated by'));
-    }
-    return transitions;
-  }
-
-  private definitionDetails() {
-    let definition: string | undefined;
-
-    switch (this.state.type) {
-      case 'sleep':
-        definition = this.sleepStateDetails();
-        break;
-      case 'event':
-        // NOTHING
-        break;
-      case 'operation':
-        definition = this.operationStateDetails();
-        break;
-      case 'parallel':
-        definition = this.parallelStateDetails();
-        break;
-      case 'switch':
-        const switchState: any = this.state;
-        if (switchState.dataConditions) {
-          definition = this.dataBasedSwitchStateDetails();
-          break;
-        }
-        if (switchState.eventConditions) {
-          definition = this.eventBasedSwitchStateDetails();
-          break;
-        }
-        throw new Error(`Unexpected switch type; \n state value= ${JSON.stringify(this.state, null, 4)}`);
-      case 'inject':
-        // NOTHING
-        break;
-      case 'foreach':
-        definition = this.foreachStateDetails();
-        break;
-      case 'callback':
-        definition = this.callbackStateDetails();
-        break;
-      default:
-        throw new Error(`Unexpected type= ${this.state.type}; \n state value= ${JSON.stringify(this.state, null, 4)}`);
-    }
-
-    if (this.state.usedForCompensation) {
-      definition = definition ? definition : '';
-      definition = this.stateDescription(this.stateKeyDiagram(this.state.name), 'usedForCompensation\n') + definition;
-    }
-
-    return definition ? definition : undefined;
-  }
-
-  private definitionType() {
-    const type = this.state.type;
-    return this.stateDescription(
-      this.stateKeyDiagram(this.state.name),
-      'type',
-      type!.charAt(0).toUpperCase() + type!.slice(1) + ' State'
-    );
-  }
-
-  private parallelStateDetails(): string | undefined {
-    const parallelState = this.state as Specification.Parallelstate;
-
-    const descriptions: string[] = [];
-
-    if (parallelState.completionType) {
-      descriptions.push(
-        this.stateDescription(this.stateKeyDiagram(this.state.name), 'Completion type', parallelState.completionType)
-      );
-    }
-
-    if (parallelState.branches) {
-      descriptions.push(
-        this.stateDescription(
-          this.stateKeyDiagram(this.state.name),
-          'Num. of branches',
-          parallelState.branches?.length + ''
-        )
-      );
-    }
-
-    return descriptions.length > 0
-      ? descriptions.reduce((p, c) => {
-          return p + '\n' + c;
-        })
-      : undefined;
-  }
-
-  private eventBasedSwitchStateDetails() {
-    return this.stateDescription(this.stateKeyDiagram(this.state.name), `Condition type`, `event-based`);
-  }
-
-  private dataBasedSwitchStateDetails() {
-    return this.stateDescription(this.stateKeyDiagram(this.state.name), `Condition type`, `data-based`);
-  }
-
-  private operationStateDetails() {
-    const state = this.state as Specification.Operationstate;
-
-    const descriptions: string[] = [];
-
-    if (state.actionMode) {
-      descriptions.push(this.stateDescription(this.stateKeyDiagram(this.state.name), 'Action mode', state.actionMode));
-    }
-
-    if (state.actions) {
-      descriptions.push(
-        this.stateDescription(this.stateKeyDiagram(this.state.name), 'Num. of actions', state.actions?.length + '')
-      );
-    }
-
-    return descriptions.length > 0
-      ? descriptions.reduce((p, c) => {
-          return p + '\n' + c;
-        })
-      : undefined;
-  }
-
-  private sleepStateDetails() {
-    const state = this.state as Specification.Sleepstate;
-    if (state.duration) {
-      return this.stateDescription(this.stateKeyDiagram(this.state.name), 'Duration', state.duration);
-    }
-
-    return undefined;
-  }
-
-  private foreachStateDetails() {
-    const state = this.state as Specification.Foreachstate;
-
-    const descriptions: string[] = [];
-
-    if (state.inputCollection) {
-      descriptions.push(
-        this.stateDescription(this.stateKeyDiagram(this.state.name), 'Input collection', state.inputCollection)
-      );
-    }
-
-    if (state.actions) {
-      descriptions.push(
-        this.stateDescription(this.stateKeyDiagram(this.state.name), 'Num. of actions', state.actions?.length + '')
-      );
-    }
-
-    return descriptions.length > 0
-      ? descriptions.reduce((p, c) => {
-          return p + '\n' + c;
-        })
-      : undefined;
-  }
-
-  private callbackStateDetails() {
-    const state = this.state as Specification.Callbackstate;
-
-    const descriptions: string[] = [];
-
-    if (state.action && state.action.functionRef) {
-      const functionRef = state.action.functionRef;
-      let functionRefDescription = '';
-      if (isObject(functionRef)) {
-        functionRefDescription = (functionRef as Specification.Functionref).refName;
-      } else if (typeof functionRef === 'string') {
-        functionRefDescription = functionRef as string;
-      }
-      descriptions.push(
-        this.stateDescription(this.stateKeyDiagram(this.state.name), 'Callback function', functionRefDescription)
-      );
-    }
-
-    if (state.eventRef) {
-      descriptions.push(this.stateDescription(this.stateKeyDiagram(this.state.name), 'Callback event', state.eventRef));
-    }
-
-    return descriptions.length > 0
-      ? descriptions.reduce((p, c) => {
-          return p + '\n' + c;
-        })
-      : undefined;
-  }
-
-  private definitionName() {
-    const key = this.stateKeyDiagram(this.state.name);
-    const label = humanCase(key, true);
-    return key + ' : ' + label;
-  }
-
-  private transitionDescription(
-    source: string | undefined,
-    target: string | undefined,
-    label: string | undefined = undefined
-  ) {
-    return this.stateKeyDiagram(source) + ' --> ' + this.stateKeyDiagram(target) + (label ? ' : ' + label : '');
-  }
-
-  private stateDescription(stateName: string | undefined, description: string, value?: string) {
-    return stateName + ` : ${description}${value !== undefined ? ' = ' + value : ''}`;
-  }
-}
diff --git a/src/lib/builders/README.md b/src/lib/generated/builders/README.md
similarity index 100%
rename from src/lib/builders/README.md
rename to src/lib/generated/builders/README.md
diff --git a/src/lib/generated/builders/all-event-consumption-strategy-builder.ts b/src/lib/generated/builders/all-event-consumption-strategy-builder.ts
new file mode 100644
index 0000000..e5de7ed
--- /dev/null
+++ b/src/lib/generated/builders/all-event-consumption-strategy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AllEventConsumptionStrategyIntersection } from '../classes/all-event-consumption-strategy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.AllEventConsumptionStrategy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {AllEventConsumptionStrategyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.AllEventConsumptionStrategy,
+  options: BuildOptions,
+): AllEventConsumptionStrategyIntersection {
+  const instance = new Classes.AllEventConsumptionStrategy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as AllEventConsumptionStrategyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AllEventConsumptionStrategyIntersection`
+ * @returns {Builder} A builder for `AllEventConsumptionStrategyIntersection`
+ */
+export const allEventConsumptionStrategyBuilder = (
+  model?: Partial,
+): Builder, AllEventConsumptionStrategyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/all-event-consumption-strategy-configuration-builder.ts b/src/lib/generated/builders/all-event-consumption-strategy-configuration-builder.ts
new file mode 100644
index 0000000..c9119f6
--- /dev/null
+++ b/src/lib/generated/builders/all-event-consumption-strategy-configuration-builder.ts
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AllEventConsumptionStrategyConfigurationIntersection } from '../classes/all-event-consumption-strategy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.AllEventConsumptionStrategyConfiguration} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {AllEventConsumptionStrategyConfigurationIntersection} The built array
+ */
+function buildingFn(
+  model: Specification.AllEventConsumptionStrategyConfiguration,
+  options: BuildOptions,
+): AllEventConsumptionStrategyConfigurationIntersection {
+  const instance = new Classes.AllEventConsumptionStrategyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize
+    ? instance.normalize()
+    : instance) as unknown as AllEventConsumptionStrategyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AllEventConsumptionStrategyConfigurationIntersection`
+ * @returns {ArrayBuilder} A builder for `AllEventConsumptionStrategyConfigurationIntersection`
+ */
+export const allEventConsumptionStrategyConfigurationBuilder = (
+  model?: Specification.AllEventConsumptionStrategyConfiguration,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/any-event-consumption-strategy-builder.ts b/src/lib/generated/builders/any-event-consumption-strategy-builder.ts
new file mode 100644
index 0000000..5bacba3
--- /dev/null
+++ b/src/lib/generated/builders/any-event-consumption-strategy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AnyEventConsumptionStrategyIntersection } from '../classes/any-event-consumption-strategy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.AnyEventConsumptionStrategy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {AnyEventConsumptionStrategyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.AnyEventConsumptionStrategy,
+  options: BuildOptions,
+): AnyEventConsumptionStrategyIntersection {
+  const instance = new Classes.AnyEventConsumptionStrategy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as AnyEventConsumptionStrategyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AnyEventConsumptionStrategyIntersection`
+ * @returns {Builder} A builder for `AnyEventConsumptionStrategyIntersection`
+ */
+export const anyEventConsumptionStrategyBuilder = (
+  model?: Partial,
+): Builder, AnyEventConsumptionStrategyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/any-event-consumption-strategy-configuration-builder.ts b/src/lib/generated/builders/any-event-consumption-strategy-configuration-builder.ts
new file mode 100644
index 0000000..c8a9c7e
--- /dev/null
+++ b/src/lib/generated/builders/any-event-consumption-strategy-configuration-builder.ts
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AnyEventConsumptionStrategyConfigurationIntersection } from '../classes/any-event-consumption-strategy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.AnyEventConsumptionStrategyConfiguration} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {AnyEventConsumptionStrategyConfigurationIntersection} The built array
+ */
+function buildingFn(
+  model: Specification.AnyEventConsumptionStrategyConfiguration,
+  options: BuildOptions,
+): AnyEventConsumptionStrategyConfigurationIntersection {
+  const instance = new Classes.AnyEventConsumptionStrategyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize
+    ? instance.normalize()
+    : instance) as unknown as AnyEventConsumptionStrategyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AnyEventConsumptionStrategyConfigurationIntersection`
+ * @returns {ArrayBuilder} A builder for `AnyEventConsumptionStrategyConfigurationIntersection`
+ */
+export const anyEventConsumptionStrategyConfigurationBuilder = (
+  model?: Specification.AnyEventConsumptionStrategyConfiguration,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/async-api-arguments-builder.ts b/src/lib/generated/builders/async-api-arguments-builder.ts
new file mode 100644
index 0000000..4ac9ed7
--- /dev/null
+++ b/src/lib/generated/builders/async-api-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AsyncApiArgumentsIntersection } from '../classes/async-api-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.AsyncApiArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {AsyncApiArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.AsyncApiArguments, options: BuildOptions): AsyncApiArgumentsIntersection {
+  const instance = new Classes.AsyncApiArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as AsyncApiArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AsyncApiArgumentsIntersection`
+ * @returns {Builder} A builder for `AsyncApiArgumentsIntersection`
+ */
+export const asyncApiArgumentsBuilder = (
+  model?: Partial,
+): Builder, AsyncApiArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/authentication-policy-builder.ts b/src/lib/generated/builders/authentication-policy-builder.ts
new file mode 100644
index 0000000..1acf09a
--- /dev/null
+++ b/src/lib/generated/builders/authentication-policy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AuthenticationPolicyIntersection } from '../classes/authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.AuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {AuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.AuthenticationPolicy,
+  options: BuildOptions,
+): AuthenticationPolicyIntersection {
+  const instance = new Classes.AuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as AuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `AuthenticationPolicyIntersection`
+ */
+export const authenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, AuthenticationPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/authentication-policy-reference-builder.ts b/src/lib/generated/builders/authentication-policy-reference-builder.ts
new file mode 100644
index 0000000..89a7d49
--- /dev/null
+++ b/src/lib/generated/builders/authentication-policy-reference-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { AuthenticationPolicyReferenceIntersection } from '../classes/authentication-policy-reference';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.AuthenticationPolicyReference} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {AuthenticationPolicyReferenceIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.AuthenticationPolicyReference,
+  options: BuildOptions,
+): AuthenticationPolicyReferenceIntersection {
+  const instance = new Classes.AuthenticationPolicyReference(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as AuthenticationPolicyReferenceIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `AuthenticationPolicyReferenceIntersection`
+ * @returns {Builder} A builder for `AuthenticationPolicyReferenceIntersection`
+ */
+export const authenticationPolicyReferenceBuilder = (
+  model?: Partial,
+): Builder, AuthenticationPolicyReferenceIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/basic-authentication-policy-builder.ts b/src/lib/generated/builders/basic-authentication-policy-builder.ts
new file mode 100644
index 0000000..ad168c7
--- /dev/null
+++ b/src/lib/generated/builders/basic-authentication-policy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BasicAuthenticationPolicyIntersection } from '../classes/basic-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BasicAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BasicAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BasicAuthenticationPolicy,
+  options: BuildOptions,
+): BasicAuthenticationPolicyIntersection {
+  const instance = new Classes.BasicAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BasicAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BasicAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `BasicAuthenticationPolicyIntersection`
+ */
+export const basicAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, BasicAuthenticationPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/basic-authentication-policy-configuration-builder.ts b/src/lib/generated/builders/basic-authentication-policy-configuration-builder.ts
new file mode 100644
index 0000000..cb8dc69
--- /dev/null
+++ b/src/lib/generated/builders/basic-authentication-policy-configuration-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BasicAuthenticationPolicyConfigurationIntersection } from '../classes/basic-authentication-policy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BasicAuthenticationPolicyConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BasicAuthenticationPolicyConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BasicAuthenticationPolicyConfiguration,
+  options: BuildOptions,
+): BasicAuthenticationPolicyConfigurationIntersection {
+  const instance = new Classes.BasicAuthenticationPolicyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BasicAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BasicAuthenticationPolicyConfigurationIntersection`
+ * @returns {Builder} A builder for `BasicAuthenticationPolicyConfigurationIntersection`
+ */
+export const basicAuthenticationPolicyConfigurationBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  BasicAuthenticationPolicyConfigurationIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/basic-authentication-properties-builder.ts b/src/lib/generated/builders/basic-authentication-properties-builder.ts
new file mode 100644
index 0000000..5ad97b1
--- /dev/null
+++ b/src/lib/generated/builders/basic-authentication-properties-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BasicAuthenticationPropertiesIntersection } from '../classes/basic-authentication-properties';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BasicAuthenticationProperties} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BasicAuthenticationPropertiesIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BasicAuthenticationProperties,
+  options: BuildOptions,
+): BasicAuthenticationPropertiesIntersection {
+  const instance = new Classes.BasicAuthenticationProperties(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BasicAuthenticationPropertiesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BasicAuthenticationPropertiesIntersection`
+ * @returns {Builder} A builder for `BasicAuthenticationPropertiesIntersection`
+ */
+export const basicAuthenticationPropertiesBuilder = (
+  model?: Partial,
+): Builder, BasicAuthenticationPropertiesIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/bearer-authentication-policy-builder.ts b/src/lib/generated/builders/bearer-authentication-policy-builder.ts
new file mode 100644
index 0000000..491270e
--- /dev/null
+++ b/src/lib/generated/builders/bearer-authentication-policy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BearerAuthenticationPolicyIntersection } from '../classes/bearer-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BearerAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BearerAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BearerAuthenticationPolicy,
+  options: BuildOptions,
+): BearerAuthenticationPolicyIntersection {
+  const instance = new Classes.BearerAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BearerAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BearerAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `BearerAuthenticationPolicyIntersection`
+ */
+export const bearerAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, BearerAuthenticationPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/bearer-authentication-policy-configuration-builder.ts b/src/lib/generated/builders/bearer-authentication-policy-configuration-builder.ts
new file mode 100644
index 0000000..e6f7601
--- /dev/null
+++ b/src/lib/generated/builders/bearer-authentication-policy-configuration-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BearerAuthenticationPolicyConfigurationIntersection } from '../classes/bearer-authentication-policy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BearerAuthenticationPolicyConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BearerAuthenticationPolicyConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BearerAuthenticationPolicyConfiguration,
+  options: BuildOptions,
+): BearerAuthenticationPolicyConfigurationIntersection {
+  const instance = new Classes.BearerAuthenticationPolicyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BearerAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BearerAuthenticationPolicyConfigurationIntersection`
+ * @returns {Builder} A builder for `BearerAuthenticationPolicyConfigurationIntersection`
+ */
+export const bearerAuthenticationPolicyConfigurationBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  BearerAuthenticationPolicyConfigurationIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/bearer-authentication-properties-builder.ts b/src/lib/generated/builders/bearer-authentication-properties-builder.ts
new file mode 100644
index 0000000..21fb44d
--- /dev/null
+++ b/src/lib/generated/builders/bearer-authentication-properties-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { BearerAuthenticationPropertiesIntersection } from '../classes/bearer-authentication-properties';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.BearerAuthenticationProperties} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {BearerAuthenticationPropertiesIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.BearerAuthenticationProperties,
+  options: BuildOptions,
+): BearerAuthenticationPropertiesIntersection {
+  const instance = new Classes.BearerAuthenticationProperties(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as BearerAuthenticationPropertiesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `BearerAuthenticationPropertiesIntersection`
+ * @returns {Builder} A builder for `BearerAuthenticationPropertiesIntersection`
+ */
+export const bearerAuthenticationPropertiesBuilder = (
+  model?: Partial,
+): Builder, BearerAuthenticationPropertiesIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-async-api-builder.ts b/src/lib/generated/builders/call-async-api-builder.ts
new file mode 100644
index 0000000..07fdc9f
--- /dev/null
+++ b/src/lib/generated/builders/call-async-api-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallAsyncAPIIntersection } from '../classes/call-async-api';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallAsyncAPI} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallAsyncAPIIntersection} The built object
+ */
+function buildingFn(model: Specification.CallAsyncAPI, options: BuildOptions): CallAsyncAPIIntersection {
+  const instance = new Classes.CallAsyncAPI(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallAsyncAPIIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallAsyncAPIIntersection`
+ * @returns {Builder} A builder for `CallAsyncAPIIntersection`
+ */
+export const callAsyncAPIBuilder = (
+  model?: Partial,
+): Builder, CallAsyncAPIIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-function-builder.ts b/src/lib/generated/builders/call-function-builder.ts
new file mode 100644
index 0000000..ca729ed
--- /dev/null
+++ b/src/lib/generated/builders/call-function-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallFunctionIntersection } from '../classes/call-function';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallFunction} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallFunctionIntersection} The built object
+ */
+function buildingFn(model: Specification.CallFunction, options: BuildOptions): CallFunctionIntersection {
+  const instance = new Classes.CallFunction(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallFunctionIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallFunctionIntersection`
+ * @returns {Builder} A builder for `CallFunctionIntersection`
+ */
+export const callFunctionBuilder = (
+  model?: Partial,
+): Builder, CallFunctionIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-grpc-builder.ts b/src/lib/generated/builders/call-grpc-builder.ts
new file mode 100644
index 0000000..356e3d6
--- /dev/null
+++ b/src/lib/generated/builders/call-grpc-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallGRPCIntersection } from '../classes/call-grpc';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallGRPC} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallGRPCIntersection} The built object
+ */
+function buildingFn(model: Specification.CallGRPC, options: BuildOptions): CallGRPCIntersection {
+  const instance = new Classes.CallGRPC(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallGRPCIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallGRPCIntersection`
+ * @returns {Builder} A builder for `CallGRPCIntersection`
+ */
+export const callGRPCBuilder = (
+  model?: Partial,
+): Builder, CallGRPCIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-http-builder.ts b/src/lib/generated/builders/call-http-builder.ts
new file mode 100644
index 0000000..e6ac20c
--- /dev/null
+++ b/src/lib/generated/builders/call-http-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallHTTPIntersection } from '../classes/call-http';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallHTTP} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallHTTPIntersection} The built object
+ */
+function buildingFn(model: Specification.CallHTTP, options: BuildOptions): CallHTTPIntersection {
+  const instance = new Classes.CallHTTP(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallHTTPIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallHTTPIntersection`
+ * @returns {Builder} A builder for `CallHTTPIntersection`
+ */
+export const callHTTPBuilder = (
+  model?: Partial,
+): Builder, CallHTTPIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-open-api-builder.ts b/src/lib/generated/builders/call-open-api-builder.ts
new file mode 100644
index 0000000..98c8d11
--- /dev/null
+++ b/src/lib/generated/builders/call-open-api-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallOpenAPIIntersection } from '../classes/call-open-api';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallOpenAPI} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallOpenAPIIntersection} The built object
+ */
+function buildingFn(model: Specification.CallOpenAPI, options: BuildOptions): CallOpenAPIIntersection {
+  const instance = new Classes.CallOpenAPI(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallOpenAPIIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallOpenAPIIntersection`
+ * @returns {Builder} A builder for `CallOpenAPIIntersection`
+ */
+export const callOpenAPIBuilder = (
+  model?: Partial,
+): Builder, CallOpenAPIIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/call-task-builder.ts b/src/lib/generated/builders/call-task-builder.ts
new file mode 100644
index 0000000..5015eb1
--- /dev/null
+++ b/src/lib/generated/builders/call-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CallTaskIntersection } from '../classes/call-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CallTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CallTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.CallTask, options: BuildOptions): CallTaskIntersection {
+  const instance = new Classes.CallTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CallTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CallTaskIntersection`
+ * @returns {Builder} A builder for `CallTaskIntersection`
+ */
+export const callTaskBuilder = (
+  model?: Partial,
+): Builder, CallTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/catalog-builder.ts b/src/lib/generated/builders/catalog-builder.ts
new file mode 100644
index 0000000..96f0ee2
--- /dev/null
+++ b/src/lib/generated/builders/catalog-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CatalogIntersection } from '../classes/catalog';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Catalog} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CatalogIntersection} The built object
+ */
+function buildingFn(model: Specification.Catalog, options: BuildOptions): CatalogIntersection {
+  const instance = new Classes.Catalog(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CatalogIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CatalogIntersection`
+ * @returns {Builder} A builder for `CatalogIntersection`
+ */
+export const catalogBuilder = (
+  model?: Partial,
+): Builder, CatalogIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/catch-errors-builder.ts b/src/lib/generated/builders/catch-errors-builder.ts
new file mode 100644
index 0000000..ad6aad5
--- /dev/null
+++ b/src/lib/generated/builders/catch-errors-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { CatchErrorsIntersection } from '../classes/catch-errors';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.CatchErrors} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {CatchErrorsIntersection} The built object
+ */
+function buildingFn(model: Specification.CatchErrors, options: BuildOptions): CatchErrorsIntersection {
+  const instance = new Classes.CatchErrors(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as CatchErrorsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `CatchErrorsIntersection`
+ * @returns {Builder} A builder for `CatchErrorsIntersection`
+ */
+export const catchErrorsBuilder = (
+  model?: Partial,
+): Builder, CatchErrorsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/constant-backoff-builder.ts b/src/lib/generated/builders/constant-backoff-builder.ts
new file mode 100644
index 0000000..5abb972
--- /dev/null
+++ b/src/lib/generated/builders/constant-backoff-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ConstantBackoffIntersection } from '../classes/constant-backoff';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ConstantBackoff} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ConstantBackoffIntersection} The built object
+ */
+function buildingFn(model: Specification.ConstantBackoff, options: BuildOptions): ConstantBackoffIntersection {
+  const instance = new Classes.ConstantBackoff(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ConstantBackoffIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ConstantBackoffIntersection`
+ * @returns {Builder} A builder for `ConstantBackoffIntersection`
+ */
+export const constantBackoffBuilder = (
+  model?: Partial,
+): Builder, ConstantBackoffIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/container-builder.ts b/src/lib/generated/builders/container-builder.ts
new file mode 100644
index 0000000..6396a98
--- /dev/null
+++ b/src/lib/generated/builders/container-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ContainerIntersection } from '../classes/container';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Container} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ContainerIntersection} The built object
+ */
+function buildingFn(model: Specification.Container, options: BuildOptions): ContainerIntersection {
+  const instance = new Classes.Container(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ContainerIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ContainerIntersection`
+ * @returns {Builder} A builder for `ContainerIntersection`
+ */
+export const containerBuilder = (
+  model?: Partial,
+): Builder, ContainerIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/container-environment-builder.ts b/src/lib/generated/builders/container-environment-builder.ts
new file mode 100644
index 0000000..f6a19fc
--- /dev/null
+++ b/src/lib/generated/builders/container-environment-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ContainerEnvironmentIntersection } from '../classes/container-environment';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ContainerEnvironment} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ContainerEnvironmentIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.ContainerEnvironment,
+  options: BuildOptions,
+): ContainerEnvironmentIntersection {
+  const instance = new Classes.ContainerEnvironment(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ContainerEnvironmentIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ContainerEnvironmentIntersection`
+ * @returns {Builder} A builder for `ContainerEnvironmentIntersection`
+ */
+export const containerEnvironmentBuilder = (
+  model?: Partial,
+): Builder, ContainerEnvironmentIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/container-ports-builder.ts b/src/lib/generated/builders/container-ports-builder.ts
new file mode 100644
index 0000000..1f45f71
--- /dev/null
+++ b/src/lib/generated/builders/container-ports-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ContainerPortsIntersection } from '../classes/container-ports';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ContainerPorts} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ContainerPortsIntersection} The built object
+ */
+function buildingFn(model: Specification.ContainerPorts, options: BuildOptions): ContainerPortsIntersection {
+  const instance = new Classes.ContainerPorts(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ContainerPortsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ContainerPortsIntersection`
+ * @returns {Builder} A builder for `ContainerPortsIntersection`
+ */
+export const containerPortsBuilder = (
+  model?: Partial,
+): Builder, ContainerPortsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/container-volumes-builder.ts b/src/lib/generated/builders/container-volumes-builder.ts
new file mode 100644
index 0000000..eb438ac
--- /dev/null
+++ b/src/lib/generated/builders/container-volumes-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ContainerVolumesIntersection } from '../classes/container-volumes';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ContainerVolumes} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ContainerVolumesIntersection} The built object
+ */
+function buildingFn(model: Specification.ContainerVolumes, options: BuildOptions): ContainerVolumesIntersection {
+  const instance = new Classes.ContainerVolumes(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ContainerVolumesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ContainerVolumesIntersection`
+ * @returns {Builder} A builder for `ContainerVolumesIntersection`
+ */
+export const containerVolumesBuilder = (
+  model?: Partial,
+): Builder, ContainerVolumesIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/digest-authentication-policy-builder.ts b/src/lib/generated/builders/digest-authentication-policy-builder.ts
new file mode 100644
index 0000000..c3e01db
--- /dev/null
+++ b/src/lib/generated/builders/digest-authentication-policy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DigestAuthenticationPolicyIntersection } from '../classes/digest-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.DigestAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DigestAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.DigestAuthenticationPolicy,
+  options: BuildOptions,
+): DigestAuthenticationPolicyIntersection {
+  const instance = new Classes.DigestAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DigestAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DigestAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `DigestAuthenticationPolicyIntersection`
+ */
+export const digestAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, DigestAuthenticationPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/digest-authentication-policy-configuration-builder.ts b/src/lib/generated/builders/digest-authentication-policy-configuration-builder.ts
new file mode 100644
index 0000000..2aef95a
--- /dev/null
+++ b/src/lib/generated/builders/digest-authentication-policy-configuration-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DigestAuthenticationPolicyConfigurationIntersection } from '../classes/digest-authentication-policy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.DigestAuthenticationPolicyConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DigestAuthenticationPolicyConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.DigestAuthenticationPolicyConfiguration,
+  options: BuildOptions,
+): DigestAuthenticationPolicyConfigurationIntersection {
+  const instance = new Classes.DigestAuthenticationPolicyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DigestAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DigestAuthenticationPolicyConfigurationIntersection`
+ * @returns {Builder} A builder for `DigestAuthenticationPolicyConfigurationIntersection`
+ */
+export const digestAuthenticationPolicyConfigurationBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  DigestAuthenticationPolicyConfigurationIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/digest-authentication-properties-builder.ts b/src/lib/generated/builders/digest-authentication-properties-builder.ts
new file mode 100644
index 0000000..a7d2a1c
--- /dev/null
+++ b/src/lib/generated/builders/digest-authentication-properties-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DigestAuthenticationPropertiesIntersection } from '../classes/digest-authentication-properties';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.DigestAuthenticationProperties} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DigestAuthenticationPropertiesIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.DigestAuthenticationProperties,
+  options: BuildOptions,
+): DigestAuthenticationPropertiesIntersection {
+  const instance = new Classes.DigestAuthenticationProperties(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DigestAuthenticationPropertiesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DigestAuthenticationPropertiesIntersection`
+ * @returns {Builder} A builder for `DigestAuthenticationPropertiesIntersection`
+ */
+export const digestAuthenticationPropertiesBuilder = (
+  model?: Partial,
+): Builder, DigestAuthenticationPropertiesIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/do-task-builder.ts b/src/lib/generated/builders/do-task-builder.ts
new file mode 100644
index 0000000..baaf133
--- /dev/null
+++ b/src/lib/generated/builders/do-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DoTaskIntersection } from '../classes/do-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.DoTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DoTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.DoTask, options: BuildOptions): DoTaskIntersection {
+  const instance = new Classes.DoTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DoTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DoTaskIntersection`
+ * @returns {Builder} A builder for `DoTaskIntersection`
+ */
+export const doTaskBuilder = (
+  model?: Partial,
+): Builder, DoTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/document-builder.ts b/src/lib/generated/builders/document-builder.ts
new file mode 100644
index 0000000..f8eb93a
--- /dev/null
+++ b/src/lib/generated/builders/document-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DocumentIntersection } from '../classes/document';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Document} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DocumentIntersection} The built object
+ */
+function buildingFn(model: Specification.Document, options: BuildOptions): DocumentIntersection {
+  const instance = new Classes.Document(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DocumentIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DocumentIntersection`
+ * @returns {Builder} A builder for `DocumentIntersection`
+ */
+export const documentBuilder = (
+  model?: Partial,
+): Builder, DocumentIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/duration-builder.ts b/src/lib/generated/builders/duration-builder.ts
new file mode 100644
index 0000000..87bfaea
--- /dev/null
+++ b/src/lib/generated/builders/duration-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DurationIntersection } from '../classes/duration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Duration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DurationIntersection} The built object
+ */
+function buildingFn(model: Specification.Duration, options: BuildOptions): DurationIntersection {
+  const instance = new Classes.Duration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DurationIntersection`
+ * @returns {Builder} A builder for `DurationIntersection`
+ */
+export const durationBuilder = (
+  model?: Partial,
+): Builder, DurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/duration-inline-builder.ts b/src/lib/generated/builders/duration-inline-builder.ts
new file mode 100644
index 0000000..15aa68e
--- /dev/null
+++ b/src/lib/generated/builders/duration-inline-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { DurationInlineIntersection } from '../classes/duration-inline';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.DurationInline} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {DurationInlineIntersection} The built object
+ */
+function buildingFn(model: Specification.DurationInline, options: BuildOptions): DurationInlineIntersection {
+  const instance = new Classes.DurationInline(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as DurationInlineIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `DurationInlineIntersection`
+ * @returns {Builder} A builder for `DurationInlineIntersection`
+ */
+export const durationInlineBuilder = (
+  model?: Partial,
+): Builder, DurationInlineIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/emit-event-definition-builder.ts b/src/lib/generated/builders/emit-event-definition-builder.ts
new file mode 100644
index 0000000..f89df72
--- /dev/null
+++ b/src/lib/generated/builders/emit-event-definition-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EmitEventDefinitionIntersection } from '../classes/emit-event-definition';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EmitEventDefinition} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EmitEventDefinitionIntersection} The built object
+ */
+function buildingFn(model: Specification.EmitEventDefinition, options: BuildOptions): EmitEventDefinitionIntersection {
+  const instance = new Classes.EmitEventDefinition(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EmitEventDefinitionIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EmitEventDefinitionIntersection`
+ * @returns {Builder} A builder for `EmitEventDefinitionIntersection`
+ */
+export const emitEventDefinitionBuilder = (
+  model?: Partial,
+): Builder, EmitEventDefinitionIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/emit-event-with-builder.ts b/src/lib/generated/builders/emit-event-with-builder.ts
new file mode 100644
index 0000000..d96e5f7
--- /dev/null
+++ b/src/lib/generated/builders/emit-event-with-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EmitEventWithIntersection } from '../classes/emit-event-with';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EmitEventWith} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EmitEventWithIntersection} The built object
+ */
+function buildingFn(model: Specification.EmitEventWith, options: BuildOptions): EmitEventWithIntersection {
+  const instance = new Classes.EmitEventWith(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EmitEventWithIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EmitEventWithIntersection`
+ * @returns {Builder} A builder for `EmitEventWithIntersection`
+ */
+export const emitEventWithBuilder = (
+  model?: Partial,
+): Builder, EmitEventWithIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/emit-task-builder.ts b/src/lib/generated/builders/emit-task-builder.ts
new file mode 100644
index 0000000..6031347
--- /dev/null
+++ b/src/lib/generated/builders/emit-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EmitTaskIntersection } from '../classes/emit-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EmitTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EmitTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.EmitTask, options: BuildOptions): EmitTaskIntersection {
+  const instance = new Classes.EmitTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EmitTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EmitTaskIntersection`
+ * @returns {Builder} A builder for `EmitTaskIntersection`
+ */
+export const emitTaskBuilder = (
+  model?: Partial,
+): Builder, EmitTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/emit-task-configuration-builder.ts b/src/lib/generated/builders/emit-task-configuration-builder.ts
new file mode 100644
index 0000000..715fba1
--- /dev/null
+++ b/src/lib/generated/builders/emit-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EmitTaskConfigurationIntersection } from '../classes/emit-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EmitTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EmitTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.EmitTaskConfiguration,
+  options: BuildOptions,
+): EmitTaskConfigurationIntersection {
+  const instance = new Classes.EmitTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EmitTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EmitTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `EmitTaskConfigurationIntersection`
+ */
+export const emitTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, EmitTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/endpoint-builder.ts b/src/lib/generated/builders/endpoint-builder.ts
new file mode 100644
index 0000000..0c397ee
--- /dev/null
+++ b/src/lib/generated/builders/endpoint-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EndpointIntersection } from '../classes/endpoint';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Endpoint} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EndpointIntersection} The built object
+ */
+function buildingFn(model: Specification.Endpoint, options: BuildOptions): EndpointIntersection {
+  const instance = new Classes.Endpoint(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EndpointIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EndpointIntersection`
+ * @returns {Builder} A builder for `EndpointIntersection`
+ */
+export const endpointBuilder = (
+  model?: Partial,
+): Builder, EndpointIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/endpoint-configuration-builder.ts b/src/lib/generated/builders/endpoint-configuration-builder.ts
new file mode 100644
index 0000000..11fb85c
--- /dev/null
+++ b/src/lib/generated/builders/endpoint-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EndpointConfigurationIntersection } from '../classes/endpoint-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EndpointConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EndpointConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.EndpointConfiguration,
+  options: BuildOptions,
+): EndpointConfigurationIntersection {
+  const instance = new Classes.EndpointConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EndpointConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EndpointConfigurationIntersection`
+ * @returns {Builder} A builder for `EndpointConfigurationIntersection`
+ */
+export const endpointConfigurationBuilder = (
+  model?: Partial,
+): Builder, EndpointConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/endpoint-uri-builder.ts b/src/lib/generated/builders/endpoint-uri-builder.ts
new file mode 100644
index 0000000..3de7e83
--- /dev/null
+++ b/src/lib/generated/builders/endpoint-uri-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EndpointUriIntersection } from '../classes/endpoint-uri';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EndpointUri} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EndpointUriIntersection} The built object
+ */
+function buildingFn(model: Specification.EndpointUri, options: BuildOptions): EndpointUriIntersection {
+  const instance = new Classes.EndpointUri(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EndpointUriIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EndpointUriIntersection`
+ * @returns {Builder} A builder for `EndpointUriIntersection`
+ */
+export const endpointUriBuilder = (
+  model?: Partial,
+): Builder, EndpointUriIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/error-builder.ts b/src/lib/generated/builders/error-builder.ts
new file mode 100644
index 0000000..0c4e6e0
--- /dev/null
+++ b/src/lib/generated/builders/error-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ErrorIntersection } from '../classes/error';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Error} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ErrorIntersection} The built object
+ */
+function buildingFn(model: Specification.Error, options: BuildOptions): ErrorIntersection {
+  const instance = new Classes.Error(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ErrorIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ErrorIntersection`
+ * @returns {Builder} A builder for `ErrorIntersection`
+ */
+export const errorBuilder = (
+  model?: Partial,
+): Builder, ErrorIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/error-instance-builder.ts b/src/lib/generated/builders/error-instance-builder.ts
new file mode 100644
index 0000000..d0bf62e
--- /dev/null
+++ b/src/lib/generated/builders/error-instance-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ErrorInstanceIntersection } from '../classes/error-instance';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ErrorInstance} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ErrorInstanceIntersection} The built object
+ */
+function buildingFn(model: Specification.ErrorInstance, options: BuildOptions): ErrorInstanceIntersection {
+  const instance = new Classes.ErrorInstance(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ErrorInstanceIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ErrorInstanceIntersection`
+ * @returns {Builder} A builder for `ErrorInstanceIntersection`
+ */
+export const errorInstanceBuilder = (
+  model?: Partial,
+): Builder, ErrorInstanceIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/error-type-builder.ts b/src/lib/generated/builders/error-type-builder.ts
new file mode 100644
index 0000000..49b5d8c
--- /dev/null
+++ b/src/lib/generated/builders/error-type-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ErrorTypeIntersection } from '../classes/error-type';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ErrorType} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ErrorTypeIntersection} The built object
+ */
+function buildingFn(model: Specification.ErrorType, options: BuildOptions): ErrorTypeIntersection {
+  const instance = new Classes.ErrorType(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ErrorTypeIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ErrorTypeIntersection`
+ * @returns {Builder} A builder for `ErrorTypeIntersection`
+ */
+export const errorTypeBuilder = (
+  model?: Partial,
+): Builder, ErrorTypeIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-consumption-strategy-builder.ts b/src/lib/generated/builders/event-consumption-strategy-builder.ts
new file mode 100644
index 0000000..94d9e93
--- /dev/null
+++ b/src/lib/generated/builders/event-consumption-strategy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventConsumptionStrategyIntersection } from '../classes/event-consumption-strategy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventConsumptionStrategy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventConsumptionStrategyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.EventConsumptionStrategy,
+  options: BuildOptions,
+): EventConsumptionStrategyIntersection {
+  const instance = new Classes.EventConsumptionStrategy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventConsumptionStrategyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventConsumptionStrategyIntersection`
+ * @returns {Builder} A builder for `EventConsumptionStrategyIntersection`
+ */
+export const eventConsumptionStrategyBuilder = (
+  model?: Partial,
+): Builder, EventConsumptionStrategyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-dataschema-builder.ts b/src/lib/generated/builders/event-dataschema-builder.ts
new file mode 100644
index 0000000..8143619
--- /dev/null
+++ b/src/lib/generated/builders/event-dataschema-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventDataschemaIntersection } from '../classes/event-dataschema';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventDataschema} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventDataschemaIntersection} The built object
+ */
+function buildingFn(model: Specification.EventDataschema, options: BuildOptions): EventDataschemaIntersection {
+  const instance = new Classes.EventDataschema(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventDataschemaIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventDataschemaIntersection`
+ * @returns {Builder} A builder for `EventDataschemaIntersection`
+ */
+export const eventDataschemaBuilder = (
+  model?: Partial,
+): Builder, EventDataschemaIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-filter-builder.ts b/src/lib/generated/builders/event-filter-builder.ts
new file mode 100644
index 0000000..d1c9c38
--- /dev/null
+++ b/src/lib/generated/builders/event-filter-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventFilterIntersection } from '../classes/event-filter';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventFilter} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventFilterIntersection} The built object
+ */
+function buildingFn(model: Specification.EventFilter, options: BuildOptions): EventFilterIntersection {
+  const instance = new Classes.EventFilter(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventFilterIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventFilterIntersection`
+ * @returns {Builder} A builder for `EventFilterIntersection`
+ */
+export const eventFilterBuilder = (
+  model?: Partial,
+): Builder, EventFilterIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-filter-correlate-builder.ts b/src/lib/generated/builders/event-filter-correlate-builder.ts
new file mode 100644
index 0000000..6fbafb6
--- /dev/null
+++ b/src/lib/generated/builders/event-filter-correlate-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventFilterCorrelateIntersection } from '../classes/event-filter-correlate';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventFilterCorrelate} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventFilterCorrelateIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.EventFilterCorrelate,
+  options: BuildOptions,
+): EventFilterCorrelateIntersection {
+  const instance = new Classes.EventFilterCorrelate(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventFilterCorrelateIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventFilterCorrelateIntersection`
+ * @returns {Builder} A builder for `EventFilterCorrelateIntersection`
+ */
+export const eventFilterCorrelateBuilder = (
+  model?: Partial,
+): Builder, EventFilterCorrelateIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-source-builder.ts b/src/lib/generated/builders/event-source-builder.ts
new file mode 100644
index 0000000..449b00b
--- /dev/null
+++ b/src/lib/generated/builders/event-source-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventSourceIntersection } from '../classes/event-source';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventSource} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventSourceIntersection} The built object
+ */
+function buildingFn(model: Specification.EventSource, options: BuildOptions): EventSourceIntersection {
+  const instance = new Classes.EventSource(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventSourceIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventSourceIntersection`
+ * @returns {Builder} A builder for `EventSourceIntersection`
+ */
+export const eventSourceBuilder = (
+  model?: Partial,
+): Builder, EventSourceIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/event-time-builder.ts b/src/lib/generated/builders/event-time-builder.ts
new file mode 100644
index 0000000..b9499cb
--- /dev/null
+++ b/src/lib/generated/builders/event-time-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { EventTimeIntersection } from '../classes/event-time';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.EventTime} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {EventTimeIntersection} The built object
+ */
+function buildingFn(model: Specification.EventTime, options: BuildOptions): EventTimeIntersection {
+  const instance = new Classes.EventTime(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as EventTimeIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `EventTimeIntersection`
+ * @returns {Builder} A builder for `EventTimeIntersection`
+ */
+export const eventTimeBuilder = (
+  model?: Partial,
+): Builder, EventTimeIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/exponential-back-off-builder.ts b/src/lib/generated/builders/exponential-back-off-builder.ts
new file mode 100644
index 0000000..df4d6bb
--- /dev/null
+++ b/src/lib/generated/builders/exponential-back-off-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExponentialBackOffIntersection } from '../classes/exponential-back-off';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ExponentialBackOff} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExponentialBackOffIntersection} The built object
+ */
+function buildingFn(model: Specification.ExponentialBackOff, options: BuildOptions): ExponentialBackOffIntersection {
+  const instance = new Classes.ExponentialBackOff(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExponentialBackOffIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExponentialBackOffIntersection`
+ * @returns {Builder} A builder for `ExponentialBackOffIntersection`
+ */
+export const exponentialBackOffBuilder = (
+  model?: Partial,
+): Builder, ExponentialBackOffIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/export-as-builder.ts b/src/lib/generated/builders/export-as-builder.ts
new file mode 100644
index 0000000..e09e270
--- /dev/null
+++ b/src/lib/generated/builders/export-as-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExportAsIntersection } from '../classes/export-as';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ExportAs} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExportAsIntersection} The built object
+ */
+function buildingFn(model: Specification.ExportAs, options: BuildOptions): ExportAsIntersection {
+  const instance = new Classes.ExportAs(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExportAsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExportAsIntersection`
+ * @returns {Builder} A builder for `ExportAsIntersection`
+ */
+export const exportAsBuilder = (
+  model?: Partial,
+): Builder, ExportAsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/export-builder.ts b/src/lib/generated/builders/export-builder.ts
new file mode 100644
index 0000000..c7255e6
--- /dev/null
+++ b/src/lib/generated/builders/export-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExportIntersection } from '../classes/export';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Export} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExportIntersection} The built object
+ */
+function buildingFn(model: Specification.Export, options: BuildOptions): ExportIntersection {
+  const instance = new Classes.Export(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExportIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExportIntersection`
+ * @returns {Builder} A builder for `ExportIntersection`
+ */
+export const exportBuilder = (
+  model?: Partial,
+): Builder, ExportIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/extension-builder.ts b/src/lib/generated/builders/extension-builder.ts
new file mode 100644
index 0000000..f9f0b71
--- /dev/null
+++ b/src/lib/generated/builders/extension-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExtensionIntersection } from '../classes/extension';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Extension} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExtensionIntersection} The built object
+ */
+function buildingFn(model: Specification.Extension, options: BuildOptions): ExtensionIntersection {
+  const instance = new Classes.Extension(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExtensionIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExtensionIntersection`
+ * @returns {Builder} A builder for `ExtensionIntersection`
+ */
+export const extensionBuilder = (
+  model?: Partial,
+): Builder, ExtensionIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/extension-item-builder.ts b/src/lib/generated/builders/extension-item-builder.ts
new file mode 100644
index 0000000..d99c719
--- /dev/null
+++ b/src/lib/generated/builders/extension-item-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExtensionItemIntersection } from '../classes/extension-item';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ExtensionItem} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExtensionItemIntersection} The built object
+ */
+function buildingFn(model: Specification.ExtensionItem, options: BuildOptions): ExtensionItemIntersection {
+  const instance = new Classes.ExtensionItem(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExtensionItemIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExtensionItemIntersection`
+ * @returns {Builder} A builder for `ExtensionItemIntersection`
+ */
+export const extensionItemBuilder = (
+  model?: Partial,
+): Builder, ExtensionItemIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/external-resource-builder.ts b/src/lib/generated/builders/external-resource-builder.ts
new file mode 100644
index 0000000..d03ae38
--- /dev/null
+++ b/src/lib/generated/builders/external-resource-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExternalResourceIntersection } from '../classes/external-resource';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ExternalResource} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExternalResourceIntersection} The built object
+ */
+function buildingFn(model: Specification.ExternalResource, options: BuildOptions): ExternalResourceIntersection {
+  const instance = new Classes.ExternalResource(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExternalResourceIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExternalResourceIntersection`
+ * @returns {Builder} A builder for `ExternalResourceIntersection`
+ */
+export const externalResourceBuilder = (
+  model?: Partial,
+): Builder, ExternalResourceIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/external-script-builder.ts b/src/lib/generated/builders/external-script-builder.ts
new file mode 100644
index 0000000..6e5f29e
--- /dev/null
+++ b/src/lib/generated/builders/external-script-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ExternalScriptIntersection } from '../classes/external-script';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ExternalScript} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ExternalScriptIntersection} The built object
+ */
+function buildingFn(model: Specification.ExternalScript, options: BuildOptions): ExternalScriptIntersection {
+  const instance = new Classes.ExternalScript(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ExternalScriptIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ExternalScriptIntersection`
+ * @returns {Builder} A builder for `ExternalScriptIntersection`
+ */
+export const externalScriptBuilder = (
+  model?: Partial,
+): Builder, ExternalScriptIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/flow-directive-builder.ts b/src/lib/generated/builders/flow-directive-builder.ts
new file mode 100644
index 0000000..44f2a0c
--- /dev/null
+++ b/src/lib/generated/builders/flow-directive-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { FlowDirectiveIntersection } from '../classes/flow-directive';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.FlowDirective} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {FlowDirectiveIntersection} The built object
+ */
+function buildingFn(model: Specification.FlowDirective, options: BuildOptions): FlowDirectiveIntersection {
+  const instance = new Classes.FlowDirective(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as FlowDirectiveIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `FlowDirectiveIntersection`
+ * @returns {Builder} A builder for `FlowDirectiveIntersection`
+ */
+export const flowDirectiveBuilder = (
+  model?: Partial,
+): Builder, FlowDirectiveIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/for-task-builder.ts b/src/lib/generated/builders/for-task-builder.ts
new file mode 100644
index 0000000..2e56e41
--- /dev/null
+++ b/src/lib/generated/builders/for-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ForTaskIntersection } from '../classes/for-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ForTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ForTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.ForTask, options: BuildOptions): ForTaskIntersection {
+  const instance = new Classes.ForTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ForTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ForTaskIntersection`
+ * @returns {Builder} A builder for `ForTaskIntersection`
+ */
+export const forTaskBuilder = (
+  model?: Partial,
+): Builder, ForTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/for-task-configuration-builder.ts b/src/lib/generated/builders/for-task-configuration-builder.ts
new file mode 100644
index 0000000..080b053
--- /dev/null
+++ b/src/lib/generated/builders/for-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ForTaskConfigurationIntersection } from '../classes/for-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ForTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ForTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.ForTaskConfiguration,
+  options: BuildOptions,
+): ForTaskConfigurationIntersection {
+  const instance = new Classes.ForTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ForTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ForTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `ForTaskConfigurationIntersection`
+ */
+export const forTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, ForTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/fork-task-builder.ts b/src/lib/generated/builders/fork-task-builder.ts
new file mode 100644
index 0000000..0c79c54
--- /dev/null
+++ b/src/lib/generated/builders/fork-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ForkTaskIntersection } from '../classes/fork-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ForkTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ForkTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.ForkTask, options: BuildOptions): ForkTaskIntersection {
+  const instance = new Classes.ForkTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ForkTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ForkTaskIntersection`
+ * @returns {Builder} A builder for `ForkTaskIntersection`
+ */
+export const forkTaskBuilder = (
+  model?: Partial,
+): Builder, ForkTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/fork-task-configuration-builder.ts b/src/lib/generated/builders/fork-task-configuration-builder.ts
new file mode 100644
index 0000000..fbfecb6
--- /dev/null
+++ b/src/lib/generated/builders/fork-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ForkTaskConfigurationIntersection } from '../classes/fork-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ForkTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ForkTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.ForkTaskConfiguration,
+  options: BuildOptions,
+): ForkTaskConfigurationIntersection {
+  const instance = new Classes.ForkTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ForkTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ForkTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `ForkTaskConfigurationIntersection`
+ */
+export const forkTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, ForkTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/function-arguments-builder.ts b/src/lib/generated/builders/function-arguments-builder.ts
new file mode 100644
index 0000000..a2523c1
--- /dev/null
+++ b/src/lib/generated/builders/function-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { FunctionArgumentsIntersection } from '../classes/function-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.FunctionArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {FunctionArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.FunctionArguments, options: BuildOptions): FunctionArgumentsIntersection {
+  const instance = new Classes.FunctionArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as FunctionArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `FunctionArgumentsIntersection`
+ * @returns {Builder} A builder for `FunctionArgumentsIntersection`
+ */
+export const functionArgumentsBuilder = (
+  model?: Partial,
+): Builder, FunctionArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/grpc-arguments-builder.ts b/src/lib/generated/builders/grpc-arguments-builder.ts
new file mode 100644
index 0000000..e8294de
--- /dev/null
+++ b/src/lib/generated/builders/grpc-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { GRPCArgumentsIntersection } from '../classes/grpc-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.GRPCArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {GRPCArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.GRPCArguments, options: BuildOptions): GRPCArgumentsIntersection {
+  const instance = new Classes.GRPCArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as GRPCArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `GRPCArgumentsIntersection`
+ * @returns {Builder} A builder for `GRPCArgumentsIntersection`
+ */
+export const gRPCArgumentsBuilder = (
+  model?: Partial,
+): Builder, GRPCArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/http-arguments-builder.ts b/src/lib/generated/builders/http-arguments-builder.ts
new file mode 100644
index 0000000..3997f63
--- /dev/null
+++ b/src/lib/generated/builders/http-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { HTTPArgumentsIntersection } from '../classes/http-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.HTTPArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {HTTPArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.HTTPArguments, options: BuildOptions): HTTPArgumentsIntersection {
+  const instance = new Classes.HTTPArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as HTTPArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `HTTPArgumentsIntersection`
+ * @returns {Builder} A builder for `HTTPArgumentsIntersection`
+ */
+export const hTTPArgumentsBuilder = (
+  model?: Partial,
+): Builder, HTTPArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/index.ts b/src/lib/generated/builders/index.ts
new file mode 100644
index 0000000..cf5ec03
--- /dev/null
+++ b/src/lib/generated/builders/index.ts
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export * from './all-event-consumption-strategy-builder';
+export * from './all-event-consumption-strategy-configuration-builder';
+export * from './any-event-consumption-strategy-builder';
+export * from './any-event-consumption-strategy-configuration-builder';
+export * from './async-api-arguments-builder';
+export * from './authentication-policy-builder';
+export * from './authentication-policy-reference-builder';
+export * from './basic-authentication-policy-builder';
+export * from './basic-authentication-policy-configuration-builder';
+export * from './basic-authentication-properties-builder';
+export * from './bearer-authentication-policy-builder';
+export * from './bearer-authentication-policy-configuration-builder';
+export * from './bearer-authentication-properties-builder';
+export * from './call-async-api-builder';
+export * from './call-function-builder';
+export * from './call-grpc-builder';
+export * from './call-http-builder';
+export * from './call-open-api-builder';
+export * from './call-task-builder';
+export * from './catalog-builder';
+export * from './catch-errors-builder';
+export * from './constant-backoff-builder';
+export * from './container-builder';
+export * from './container-environment-builder';
+export * from './container-ports-builder';
+export * from './container-volumes-builder';
+export * from './digest-authentication-policy-builder';
+export * from './digest-authentication-policy-configuration-builder';
+export * from './digest-authentication-properties-builder';
+export * from './document-builder';
+export * from './do-task-builder';
+export * from './duration-builder';
+export * from './duration-inline-builder';
+export * from './emit-event-definition-builder';
+export * from './emit-event-with-builder';
+export * from './emit-task-builder';
+export * from './emit-task-configuration-builder';
+export * from './endpoint-builder';
+export * from './endpoint-configuration-builder';
+export * from './endpoint-uri-builder';
+export * from './error-builder';
+export * from './error-instance-builder';
+export * from './error-type-builder';
+export * from './event-consumption-strategy-builder';
+export * from './event-dataschema-builder';
+export * from './event-filter-builder';
+export * from './event-filter-correlate-builder';
+export * from './event-source-builder';
+export * from './event-time-builder';
+export * from './exponential-back-off-builder';
+export * from './export-builder';
+export * from './export-as-builder';
+export * from './extension-builder';
+export * from './extension-item-builder';
+export * from './external-resource-builder';
+export * from './external-script-builder';
+export * from './flow-directive-builder';
+export * from './fork-task-builder';
+export * from './fork-task-configuration-builder';
+export * from './for-task-builder';
+export * from './for-task-configuration-builder';
+export * from './function-arguments-builder';
+export * from './grpc-arguments-builder';
+export * from './http-arguments-builder';
+export * from './inline-script-builder';
+export * from './input-builder';
+export * from './input-from-builder';
+export * from './linear-backoff-builder';
+export * from './listen-task-builder';
+export * from './listen-task-configuration-builder';
+export * from './oauth2-autenthication-data-builder';
+export * from './oauth2-autenthication-data-audiences-builder';
+export * from './oauth2-autenthication-data-client-builder';
+export * from './oauth2-autenthication-data-scopes-builder';
+export * from './oauth2-authentication-policy-builder';
+export * from './oauth2-authentication-policy-configuration-builder';
+export * from './oauth2-authentication-properties-endpoints-builder';
+export * from './oauth2-connect-authentication-properties-builder';
+export * from './oauth2-issuers-builder';
+export * from './oauth2-token-definition-builder';
+export * from './oauth2-token-request-builder';
+export * from './one-event-consumption-strategy-builder';
+export * from './open-api-arguments-builder';
+export * from './open-id-connect-authentication-policy-builder';
+export * from './open-id-connect-authentication-policy-configuration-builder';
+export * from './open-id-connect-authentication-properties-builder';
+export * from './output-builder';
+export * from './output-as-builder';
+export * from './raise-task-builder';
+export * from './raise-task-configuration-builder';
+export * from './raise-task-raise-error-builder';
+export * from './referenceable-authentication-policy-builder';
+export * from './retry-backoff-builder';
+export * from './retry-limit-builder';
+export * from './retry-limit-attempt-builder';
+export * from './retry-policy-builder';
+export * from './retry-policy-jitter-builder';
+export * from './run-container-builder';
+export * from './run-script-builder';
+export * from './run-shell-builder';
+export * from './run-task-builder';
+export * from './run-task-configuration-builder';
+export * from './runtime-expression-builder';
+export * from './run-workflow-builder';
+export * from './schedule-builder';
+export * from './schema-builder';
+export * from './schema-external-builder';
+export * from './schema-inline-builder';
+export * from './script-builder';
+export * from './secret-based-authentication-policy-builder';
+export * from './set-task-builder';
+export * from './set-task-configuration-builder';
+export * from './shell-builder';
+export * from './shell-arguments-builder';
+export * from './shell-environment-builder';
+export * from './subflow-configuration-builder';
+export * from './subflow-input-builder';
+export * from './switch-case-builder';
+export * from './switch-item-builder';
+export * from './switch-task-builder';
+export * from './switch-task-configuration-builder';
+export * from './task-builder';
+export * from './task-base-builder';
+export * from './task-base-if-builder';
+export * from './task-base-timeout-builder';
+export * from './task-item-builder';
+export * from './task-list-builder';
+export * from './task-metadata-builder';
+export * from './timeout-builder';
+export * from './try-task-builder';
+export * from './try-task-catch-builder';
+export * from './try-task-catch-retry-builder';
+export * from './uri-template-builder';
+export * from './use-builder';
+export * from './use-authentications-builder';
+export * from './use-catalogs-builder';
+export * from './use-errors-builder';
+export * from './use-extensions-builder';
+export * from './use-functions-builder';
+export * from './use-retries-builder';
+export * from './use-secrets-builder';
+export * from './use-timeouts-builder';
+export * from './wait-task-builder';
+export * from './with-async-api-payload-builder';
+export * from './with-event-builder';
+export * from './with-grpc-arguments-builder';
+export * from './with-grpc-service-builder';
+export * from './with-http-body-builder';
+export * from './with-http-headers-builder';
+export * from './with-http-query-builder';
+export * from './with-open-api-parameters-builder';
+export * from './workflow-builder';
+export * from './workflow-metadata-builder';
+export * from './workflow-tags-builder';
+export * from './workflow-timeout-builder';
diff --git a/src/lib/generated/builders/inline-script-builder.ts b/src/lib/generated/builders/inline-script-builder.ts
new file mode 100644
index 0000000..6dfca93
--- /dev/null
+++ b/src/lib/generated/builders/inline-script-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { InlineScriptIntersection } from '../classes/inline-script';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.InlineScript} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {InlineScriptIntersection} The built object
+ */
+function buildingFn(model: Specification.InlineScript, options: BuildOptions): InlineScriptIntersection {
+  const instance = new Classes.InlineScript(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as InlineScriptIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `InlineScriptIntersection`
+ * @returns {Builder} A builder for `InlineScriptIntersection`
+ */
+export const inlineScriptBuilder = (
+  model?: Partial,
+): Builder, InlineScriptIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/input-builder.ts b/src/lib/generated/builders/input-builder.ts
new file mode 100644
index 0000000..f7bb11e
--- /dev/null
+++ b/src/lib/generated/builders/input-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { InputIntersection } from '../classes/input';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Input} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {InputIntersection} The built object
+ */
+function buildingFn(model: Specification.Input, options: BuildOptions): InputIntersection {
+  const instance = new Classes.Input(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as InputIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `InputIntersection`
+ * @returns {Builder} A builder for `InputIntersection`
+ */
+export const inputBuilder = (
+  model?: Partial,
+): Builder, InputIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/input-from-builder.ts b/src/lib/generated/builders/input-from-builder.ts
new file mode 100644
index 0000000..f69c64c
--- /dev/null
+++ b/src/lib/generated/builders/input-from-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { InputFromIntersection } from '../classes/input-from';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.InputFrom} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {InputFromIntersection} The built object
+ */
+function buildingFn(model: Specification.InputFrom, options: BuildOptions): InputFromIntersection {
+  const instance = new Classes.InputFrom(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as InputFromIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `InputFromIntersection`
+ * @returns {Builder} A builder for `InputFromIntersection`
+ */
+export const inputFromBuilder = (
+  model?: Partial,
+): Builder, InputFromIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/linear-backoff-builder.ts b/src/lib/generated/builders/linear-backoff-builder.ts
new file mode 100644
index 0000000..deeb0ea
--- /dev/null
+++ b/src/lib/generated/builders/linear-backoff-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { LinearBackoffIntersection } from '../classes/linear-backoff';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.LinearBackoff} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {LinearBackoffIntersection} The built object
+ */
+function buildingFn(model: Specification.LinearBackoff, options: BuildOptions): LinearBackoffIntersection {
+  const instance = new Classes.LinearBackoff(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as LinearBackoffIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `LinearBackoffIntersection`
+ * @returns {Builder} A builder for `LinearBackoffIntersection`
+ */
+export const linearBackoffBuilder = (
+  model?: Partial,
+): Builder, LinearBackoffIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/listen-task-builder.ts b/src/lib/generated/builders/listen-task-builder.ts
new file mode 100644
index 0000000..597b735
--- /dev/null
+++ b/src/lib/generated/builders/listen-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ListenTaskIntersection } from '../classes/listen-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ListenTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ListenTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.ListenTask, options: BuildOptions): ListenTaskIntersection {
+  const instance = new Classes.ListenTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ListenTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ListenTaskIntersection`
+ * @returns {Builder} A builder for `ListenTaskIntersection`
+ */
+export const listenTaskBuilder = (
+  model?: Partial,
+): Builder, ListenTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/listen-task-configuration-builder.ts b/src/lib/generated/builders/listen-task-configuration-builder.ts
new file mode 100644
index 0000000..60feb31
--- /dev/null
+++ b/src/lib/generated/builders/listen-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ListenTaskConfigurationIntersection } from '../classes/listen-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ListenTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ListenTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.ListenTaskConfiguration,
+  options: BuildOptions,
+): ListenTaskConfigurationIntersection {
+  const instance = new Classes.ListenTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ListenTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ListenTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `ListenTaskConfigurationIntersection`
+ */
+export const listenTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, ListenTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-autenthication-data-audiences-builder.ts b/src/lib/generated/builders/oauth2-autenthication-data-audiences-builder.ts
new file mode 100644
index 0000000..da49de4
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-autenthication-data-audiences-builder.ts
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AutenthicationDataAudiencesIntersection } from '../classes/oauth2-autenthication-data-audiences';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.OAuth2AutenthicationDataAudiences} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AutenthicationDataAudiencesIntersection} The built array
+ */
+function buildingFn(
+  model: Specification.OAuth2AutenthicationDataAudiences,
+  options: BuildOptions,
+): OAuth2AutenthicationDataAudiencesIntersection {
+  const instance = new Classes.OAuth2AutenthicationDataAudiences(model);
+  if (options.validate) instance.validate();
+  return (options.normalize
+    ? instance.normalize()
+    : instance) as unknown as OAuth2AutenthicationDataAudiencesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AutenthicationDataAudiencesIntersection`
+ * @returns {ArrayBuilder} A builder for `OAuth2AutenthicationDataAudiencesIntersection`
+ */
+export const oAuth2AutenthicationDataAudiencesBuilder = (
+  model?: Specification.OAuth2AutenthicationDataAudiences,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-autenthication-data-builder.ts b/src/lib/generated/builders/oauth2-autenthication-data-builder.ts
new file mode 100644
index 0000000..42f476a
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-autenthication-data-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AutenthicationDataIntersection } from '../classes/oauth2-autenthication-data';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2AutenthicationData} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AutenthicationDataIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2AutenthicationData,
+  options: BuildOptions,
+): OAuth2AutenthicationDataIntersection {
+  const instance = new Classes.OAuth2AutenthicationData(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2AutenthicationDataIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AutenthicationDataIntersection`
+ * @returns {Builder} A builder for `OAuth2AutenthicationDataIntersection`
+ */
+export const oAuth2AutenthicationDataBuilder = (
+  model?: Partial,
+): Builder, OAuth2AutenthicationDataIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-autenthication-data-client-builder.ts b/src/lib/generated/builders/oauth2-autenthication-data-client-builder.ts
new file mode 100644
index 0000000..dcbc5fd
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-autenthication-data-client-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AutenthicationDataClientIntersection } from '../classes/oauth2-autenthication-data-client';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2AutenthicationDataClient} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AutenthicationDataClientIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2AutenthicationDataClient,
+  options: BuildOptions,
+): OAuth2AutenthicationDataClientIntersection {
+  const instance = new Classes.OAuth2AutenthicationDataClient(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2AutenthicationDataClientIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AutenthicationDataClientIntersection`
+ * @returns {Builder} A builder for `OAuth2AutenthicationDataClientIntersection`
+ */
+export const oAuth2AutenthicationDataClientBuilder = (
+  model?: Partial,
+): Builder, OAuth2AutenthicationDataClientIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-autenthication-data-scopes-builder.ts b/src/lib/generated/builders/oauth2-autenthication-data-scopes-builder.ts
new file mode 100644
index 0000000..54bf64c
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-autenthication-data-scopes-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AutenthicationDataScopesIntersection } from '../classes/oauth2-autenthication-data-scopes';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.OAuth2AutenthicationDataScopes} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AutenthicationDataScopesIntersection} The built array
+ */
+function buildingFn(
+  model: Specification.OAuth2AutenthicationDataScopes,
+  options: BuildOptions,
+): OAuth2AutenthicationDataScopesIntersection {
+  const instance = new Classes.OAuth2AutenthicationDataScopes(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as OAuth2AutenthicationDataScopesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AutenthicationDataScopesIntersection`
+ * @returns {ArrayBuilder} A builder for `OAuth2AutenthicationDataScopesIntersection`
+ */
+export const oAuth2AutenthicationDataScopesBuilder = (
+  model?: Specification.OAuth2AutenthicationDataScopes,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-authentication-policy-builder.ts b/src/lib/generated/builders/oauth2-authentication-policy-builder.ts
new file mode 100644
index 0000000..949c5f0
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-authentication-policy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AuthenticationPolicyIntersection } from '../classes/oauth2-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2AuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2AuthenticationPolicy,
+  options: BuildOptions,
+): OAuth2AuthenticationPolicyIntersection {
+  const instance = new Classes.OAuth2AuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2AuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `OAuth2AuthenticationPolicyIntersection`
+ */
+export const oAuth2AuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, OAuth2AuthenticationPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-authentication-policy-configuration-builder.ts b/src/lib/generated/builders/oauth2-authentication-policy-configuration-builder.ts
new file mode 100644
index 0000000..6092386
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-authentication-policy-configuration-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AuthenticationPolicyConfigurationIntersection } from '../classes/oauth2-authentication-policy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2AuthenticationPolicyConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AuthenticationPolicyConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2AuthenticationPolicyConfiguration,
+  options: BuildOptions,
+): OAuth2AuthenticationPolicyConfigurationIntersection {
+  const instance = new Classes.OAuth2AuthenticationPolicyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2AuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AuthenticationPolicyConfigurationIntersection`
+ * @returns {Builder} A builder for `OAuth2AuthenticationPolicyConfigurationIntersection`
+ */
+export const oAuth2AuthenticationPolicyConfigurationBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  OAuth2AuthenticationPolicyConfigurationIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/oauth2-authentication-properties-endpoints-builder.ts b/src/lib/generated/builders/oauth2-authentication-properties-endpoints-builder.ts
new file mode 100644
index 0000000..8f62cb4
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-authentication-properties-endpoints-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2AuthenticationPropertiesEndpointsIntersection } from '../classes/oauth2-authentication-properties-endpoints';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2AuthenticationPropertiesEndpoints} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2AuthenticationPropertiesEndpointsIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2AuthenticationPropertiesEndpoints,
+  options: BuildOptions,
+): OAuth2AuthenticationPropertiesEndpointsIntersection {
+  const instance = new Classes.OAuth2AuthenticationPropertiesEndpoints(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2AuthenticationPropertiesEndpointsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2AuthenticationPropertiesEndpointsIntersection`
+ * @returns {Builder} A builder for `OAuth2AuthenticationPropertiesEndpointsIntersection`
+ */
+export const oAuth2AuthenticationPropertiesEndpointsBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  OAuth2AuthenticationPropertiesEndpointsIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/oauth2-connect-authentication-properties-builder.ts b/src/lib/generated/builders/oauth2-connect-authentication-properties-builder.ts
new file mode 100644
index 0000000..10b8489
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-connect-authentication-properties-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2ConnectAuthenticationPropertiesIntersection } from '../classes/oauth2-connect-authentication-properties';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2ConnectAuthenticationProperties} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2ConnectAuthenticationPropertiesIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2ConnectAuthenticationProperties,
+  options: BuildOptions,
+): OAuth2ConnectAuthenticationPropertiesIntersection {
+  const instance = new Classes.OAuth2ConnectAuthenticationProperties(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2ConnectAuthenticationPropertiesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2ConnectAuthenticationPropertiesIntersection`
+ * @returns {Builder} A builder for `OAuth2ConnectAuthenticationPropertiesIntersection`
+ */
+export const oAuth2ConnectAuthenticationPropertiesBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  OAuth2ConnectAuthenticationPropertiesIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/oauth2-issuers-builder.ts b/src/lib/generated/builders/oauth2-issuers-builder.ts
new file mode 100644
index 0000000..6b2ab4b
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-issuers-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2IssuersIntersection } from '../classes/oauth2-issuers';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.OAuth2Issuers} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2IssuersIntersection} The built array
+ */
+function buildingFn(model: Specification.OAuth2Issuers, options: BuildOptions): OAuth2IssuersIntersection {
+  const instance = new Classes.OAuth2Issuers(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as OAuth2IssuersIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2IssuersIntersection`
+ * @returns {ArrayBuilder} A builder for `OAuth2IssuersIntersection`
+ */
+export const oAuth2IssuersBuilder = (
+  model?: Specification.OAuth2Issuers,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-token-definition-builder.ts b/src/lib/generated/builders/oauth2-token-definition-builder.ts
new file mode 100644
index 0000000..68ff0bb
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-token-definition-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2TokenDefinitionIntersection } from '../classes/oauth2-token-definition';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2TokenDefinition} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2TokenDefinitionIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OAuth2TokenDefinition,
+  options: BuildOptions,
+): OAuth2TokenDefinitionIntersection {
+  const instance = new Classes.OAuth2TokenDefinition(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2TokenDefinitionIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2TokenDefinitionIntersection`
+ * @returns {Builder} A builder for `OAuth2TokenDefinitionIntersection`
+ */
+export const oAuth2TokenDefinitionBuilder = (
+  model?: Partial,
+): Builder, OAuth2TokenDefinitionIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/oauth2-token-request-builder.ts b/src/lib/generated/builders/oauth2-token-request-builder.ts
new file mode 100644
index 0000000..7d417a5
--- /dev/null
+++ b/src/lib/generated/builders/oauth2-token-request-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OAuth2TokenRequestIntersection } from '../classes/oauth2-token-request';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OAuth2TokenRequest} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OAuth2TokenRequestIntersection} The built object
+ */
+function buildingFn(model: Specification.OAuth2TokenRequest, options: BuildOptions): OAuth2TokenRequestIntersection {
+  const instance = new Classes.OAuth2TokenRequest(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OAuth2TokenRequestIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OAuth2TokenRequestIntersection`
+ * @returns {Builder} A builder for `OAuth2TokenRequestIntersection`
+ */
+export const oAuth2TokenRequestBuilder = (
+  model?: Partial,
+): Builder, OAuth2TokenRequestIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/one-event-consumption-strategy-builder.ts b/src/lib/generated/builders/one-event-consumption-strategy-builder.ts
new file mode 100644
index 0000000..7af05a1
--- /dev/null
+++ b/src/lib/generated/builders/one-event-consumption-strategy-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OneEventConsumptionStrategyIntersection } from '../classes/one-event-consumption-strategy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OneEventConsumptionStrategy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OneEventConsumptionStrategyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OneEventConsumptionStrategy,
+  options: BuildOptions,
+): OneEventConsumptionStrategyIntersection {
+  const instance = new Classes.OneEventConsumptionStrategy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OneEventConsumptionStrategyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OneEventConsumptionStrategyIntersection`
+ * @returns {Builder} A builder for `OneEventConsumptionStrategyIntersection`
+ */
+export const oneEventConsumptionStrategyBuilder = (
+  model?: Partial,
+): Builder, OneEventConsumptionStrategyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/open-api-arguments-builder.ts b/src/lib/generated/builders/open-api-arguments-builder.ts
new file mode 100644
index 0000000..1ea8354
--- /dev/null
+++ b/src/lib/generated/builders/open-api-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OpenAPIArgumentsIntersection } from '../classes/open-api-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OpenAPIArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OpenAPIArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.OpenAPIArguments, options: BuildOptions): OpenAPIArgumentsIntersection {
+  const instance = new Classes.OpenAPIArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OpenAPIArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OpenAPIArgumentsIntersection`
+ * @returns {Builder} A builder for `OpenAPIArgumentsIntersection`
+ */
+export const openAPIArgumentsBuilder = (
+  model?: Partial,
+): Builder, OpenAPIArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/open-id-connect-authentication-policy-builder.ts b/src/lib/generated/builders/open-id-connect-authentication-policy-builder.ts
new file mode 100644
index 0000000..c1ede40
--- /dev/null
+++ b/src/lib/generated/builders/open-id-connect-authentication-policy-builder.ts
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OpenIdConnectAuthenticationPolicyIntersection } from '../classes/open-id-connect-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OpenIdConnectAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OpenIdConnectAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OpenIdConnectAuthenticationPolicy,
+  options: BuildOptions,
+): OpenIdConnectAuthenticationPolicyIntersection {
+  const instance = new Classes.OpenIdConnectAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OpenIdConnectAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OpenIdConnectAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `OpenIdConnectAuthenticationPolicyIntersection`
+ */
+export const openIdConnectAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, OpenIdConnectAuthenticationPolicyIntersection> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/open-id-connect-authentication-policy-configuration-builder.ts b/src/lib/generated/builders/open-id-connect-authentication-policy-configuration-builder.ts
new file mode 100644
index 0000000..2989d3e
--- /dev/null
+++ b/src/lib/generated/builders/open-id-connect-authentication-policy-configuration-builder.ts
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OpenIdConnectAuthenticationPolicyConfigurationIntersection } from '../classes/open-id-connect-authentication-policy-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OpenIdConnectAuthenticationPolicyConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OpenIdConnectAuthenticationPolicyConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OpenIdConnectAuthenticationPolicyConfiguration,
+  options: BuildOptions,
+): OpenIdConnectAuthenticationPolicyConfigurationIntersection {
+  const instance = new Classes.OpenIdConnectAuthenticationPolicyConfiguration(model);
+  if (options.validate) instance.validate();
+  return (
+    options.normalize ? instance.normalize() : instance
+  ) as OpenIdConnectAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OpenIdConnectAuthenticationPolicyConfigurationIntersection`
+ * @returns {Builder} A builder for `OpenIdConnectAuthenticationPolicyConfigurationIntersection`
+ */
+export const openIdConnectAuthenticationPolicyConfigurationBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  OpenIdConnectAuthenticationPolicyConfigurationIntersection
+> =>
+  builder<
+    Specification.OpenIdConnectAuthenticationPolicyConfiguration,
+    OpenIdConnectAuthenticationPolicyConfigurationIntersection
+  >(model, buildingFn);
diff --git a/src/lib/generated/builders/open-id-connect-authentication-properties-builder.ts b/src/lib/generated/builders/open-id-connect-authentication-properties-builder.ts
new file mode 100644
index 0000000..e13302b
--- /dev/null
+++ b/src/lib/generated/builders/open-id-connect-authentication-properties-builder.ts
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OpenIdConnectAuthenticationPropertiesIntersection } from '../classes/open-id-connect-authentication-properties';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OpenIdConnectAuthenticationProperties} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OpenIdConnectAuthenticationPropertiesIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.OpenIdConnectAuthenticationProperties,
+  options: BuildOptions,
+): OpenIdConnectAuthenticationPropertiesIntersection {
+  const instance = new Classes.OpenIdConnectAuthenticationProperties(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OpenIdConnectAuthenticationPropertiesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OpenIdConnectAuthenticationPropertiesIntersection`
+ * @returns {Builder} A builder for `OpenIdConnectAuthenticationPropertiesIntersection`
+ */
+export const openIdConnectAuthenticationPropertiesBuilder = (
+  model?: Partial,
+): Builder<
+  Partial,
+  OpenIdConnectAuthenticationPropertiesIntersection
+> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/output-as-builder.ts b/src/lib/generated/builders/output-as-builder.ts
new file mode 100644
index 0000000..b267309
--- /dev/null
+++ b/src/lib/generated/builders/output-as-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OutputAsIntersection } from '../classes/output-as';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.OutputAs} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OutputAsIntersection} The built object
+ */
+function buildingFn(model: Specification.OutputAs, options: BuildOptions): OutputAsIntersection {
+  const instance = new Classes.OutputAs(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OutputAsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OutputAsIntersection`
+ * @returns {Builder} A builder for `OutputAsIntersection`
+ */
+export const outputAsBuilder = (
+  model?: Partial,
+): Builder, OutputAsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/output-builder.ts b/src/lib/generated/builders/output-builder.ts
new file mode 100644
index 0000000..098478d
--- /dev/null
+++ b/src/lib/generated/builders/output-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { OutputIntersection } from '../classes/output';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Output} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {OutputIntersection} The built object
+ */
+function buildingFn(model: Specification.Output, options: BuildOptions): OutputIntersection {
+  const instance = new Classes.Output(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as OutputIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `OutputIntersection`
+ * @returns {Builder} A builder for `OutputIntersection`
+ */
+export const outputBuilder = (
+  model?: Partial,
+): Builder, OutputIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/raise-task-builder.ts b/src/lib/generated/builders/raise-task-builder.ts
new file mode 100644
index 0000000..b2ecda8
--- /dev/null
+++ b/src/lib/generated/builders/raise-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RaiseTaskIntersection } from '../classes/raise-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RaiseTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RaiseTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.RaiseTask, options: BuildOptions): RaiseTaskIntersection {
+  const instance = new Classes.RaiseTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RaiseTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RaiseTaskIntersection`
+ * @returns {Builder} A builder for `RaiseTaskIntersection`
+ */
+export const raiseTaskBuilder = (
+  model?: Partial,
+): Builder, RaiseTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/raise-task-configuration-builder.ts b/src/lib/generated/builders/raise-task-configuration-builder.ts
new file mode 100644
index 0000000..6372e4a
--- /dev/null
+++ b/src/lib/generated/builders/raise-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RaiseTaskConfigurationIntersection } from '../classes/raise-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RaiseTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RaiseTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.RaiseTaskConfiguration,
+  options: BuildOptions,
+): RaiseTaskConfigurationIntersection {
+  const instance = new Classes.RaiseTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RaiseTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RaiseTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `RaiseTaskConfigurationIntersection`
+ */
+export const raiseTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, RaiseTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/raise-task-raise-error-builder.ts b/src/lib/generated/builders/raise-task-raise-error-builder.ts
new file mode 100644
index 0000000..802ffde
--- /dev/null
+++ b/src/lib/generated/builders/raise-task-raise-error-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RaiseTaskRaiseErrorIntersection } from '../classes/raise-task-raise-error';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RaiseTaskRaiseError} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RaiseTaskRaiseErrorIntersection} The built object
+ */
+function buildingFn(model: Specification.RaiseTaskRaiseError, options: BuildOptions): RaiseTaskRaiseErrorIntersection {
+  const instance = new Classes.RaiseTaskRaiseError(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RaiseTaskRaiseErrorIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RaiseTaskRaiseErrorIntersection`
+ * @returns {Builder} A builder for `RaiseTaskRaiseErrorIntersection`
+ */
+export const raiseTaskRaiseErrorBuilder = (
+  model?: Partial,
+): Builder, RaiseTaskRaiseErrorIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/referenceable-authentication-policy-builder.ts b/src/lib/generated/builders/referenceable-authentication-policy-builder.ts
new file mode 100644
index 0000000..203774b
--- /dev/null
+++ b/src/lib/generated/builders/referenceable-authentication-policy-builder.ts
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ReferenceableAuthenticationPolicyIntersection } from '../classes/referenceable-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ReferenceableAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ReferenceableAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.ReferenceableAuthenticationPolicy,
+  options: BuildOptions,
+): ReferenceableAuthenticationPolicyIntersection {
+  const instance = new Classes.ReferenceableAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ReferenceableAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ReferenceableAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `ReferenceableAuthenticationPolicyIntersection`
+ */
+export const referenceableAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, ReferenceableAuthenticationPolicyIntersection> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/retry-backoff-builder.ts b/src/lib/generated/builders/retry-backoff-builder.ts
new file mode 100644
index 0000000..1ca7ada
--- /dev/null
+++ b/src/lib/generated/builders/retry-backoff-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RetryBackoffIntersection } from '../classes/retry-backoff';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RetryBackoff} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RetryBackoffIntersection} The built object
+ */
+function buildingFn(model: Specification.RetryBackoff, options: BuildOptions): RetryBackoffIntersection {
+  const instance = new Classes.RetryBackoff(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RetryBackoffIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RetryBackoffIntersection`
+ * @returns {Builder} A builder for `RetryBackoffIntersection`
+ */
+export const retryBackoffBuilder = (
+  model?: Partial,
+): Builder, RetryBackoffIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/retry-limit-attempt-builder.ts b/src/lib/generated/builders/retry-limit-attempt-builder.ts
new file mode 100644
index 0000000..b43ed14
--- /dev/null
+++ b/src/lib/generated/builders/retry-limit-attempt-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RetryLimitAttemptIntersection } from '../classes/retry-limit-attempt';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RetryLimitAttempt} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RetryLimitAttemptIntersection} The built object
+ */
+function buildingFn(model: Specification.RetryLimitAttempt, options: BuildOptions): RetryLimitAttemptIntersection {
+  const instance = new Classes.RetryLimitAttempt(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RetryLimitAttemptIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RetryLimitAttemptIntersection`
+ * @returns {Builder} A builder for `RetryLimitAttemptIntersection`
+ */
+export const retryLimitAttemptBuilder = (
+  model?: Partial,
+): Builder, RetryLimitAttemptIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/retry-limit-builder.ts b/src/lib/generated/builders/retry-limit-builder.ts
new file mode 100644
index 0000000..6e252ee
--- /dev/null
+++ b/src/lib/generated/builders/retry-limit-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RetryLimitIntersection } from '../classes/retry-limit';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RetryLimit} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RetryLimitIntersection} The built object
+ */
+function buildingFn(model: Specification.RetryLimit, options: BuildOptions): RetryLimitIntersection {
+  const instance = new Classes.RetryLimit(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RetryLimitIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RetryLimitIntersection`
+ * @returns {Builder} A builder for `RetryLimitIntersection`
+ */
+export const retryLimitBuilder = (
+  model?: Partial,
+): Builder, RetryLimitIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/retry-policy-builder.ts b/src/lib/generated/builders/retry-policy-builder.ts
new file mode 100644
index 0000000..cecfe46
--- /dev/null
+++ b/src/lib/generated/builders/retry-policy-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RetryPolicyIntersection } from '../classes/retry-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RetryPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RetryPolicyIntersection} The built object
+ */
+function buildingFn(model: Specification.RetryPolicy, options: BuildOptions): RetryPolicyIntersection {
+  const instance = new Classes.RetryPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RetryPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RetryPolicyIntersection`
+ * @returns {Builder} A builder for `RetryPolicyIntersection`
+ */
+export const retryPolicyBuilder = (
+  model?: Partial,
+): Builder, RetryPolicyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/retry-policy-jitter-builder.ts b/src/lib/generated/builders/retry-policy-jitter-builder.ts
new file mode 100644
index 0000000..46139ba
--- /dev/null
+++ b/src/lib/generated/builders/retry-policy-jitter-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RetryPolicyJitterIntersection } from '../classes/retry-policy-jitter';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RetryPolicyJitter} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RetryPolicyJitterIntersection} The built object
+ */
+function buildingFn(model: Specification.RetryPolicyJitter, options: BuildOptions): RetryPolicyJitterIntersection {
+  const instance = new Classes.RetryPolicyJitter(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RetryPolicyJitterIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RetryPolicyJitterIntersection`
+ * @returns {Builder} A builder for `RetryPolicyJitterIntersection`
+ */
+export const retryPolicyJitterBuilder = (
+  model?: Partial,
+): Builder, RetryPolicyJitterIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-container-builder.ts b/src/lib/generated/builders/run-container-builder.ts
new file mode 100644
index 0000000..8a28bf3
--- /dev/null
+++ b/src/lib/generated/builders/run-container-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunContainerIntersection } from '../classes/run-container';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunContainer} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunContainerIntersection} The built object
+ */
+function buildingFn(model: Specification.RunContainer, options: BuildOptions): RunContainerIntersection {
+  const instance = new Classes.RunContainer(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunContainerIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunContainerIntersection`
+ * @returns {Builder} A builder for `RunContainerIntersection`
+ */
+export const runContainerBuilder = (
+  model?: Partial,
+): Builder, RunContainerIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-script-builder.ts b/src/lib/generated/builders/run-script-builder.ts
new file mode 100644
index 0000000..7d1be6a
--- /dev/null
+++ b/src/lib/generated/builders/run-script-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunScriptIntersection } from '../classes/run-script';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunScript} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunScriptIntersection} The built object
+ */
+function buildingFn(model: Specification.RunScript, options: BuildOptions): RunScriptIntersection {
+  const instance = new Classes.RunScript(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunScriptIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunScriptIntersection`
+ * @returns {Builder} A builder for `RunScriptIntersection`
+ */
+export const runScriptBuilder = (
+  model?: Partial,
+): Builder, RunScriptIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-shell-builder.ts b/src/lib/generated/builders/run-shell-builder.ts
new file mode 100644
index 0000000..e35a66f
--- /dev/null
+++ b/src/lib/generated/builders/run-shell-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunShellIntersection } from '../classes/run-shell';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunShell} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunShellIntersection} The built object
+ */
+function buildingFn(model: Specification.RunShell, options: BuildOptions): RunShellIntersection {
+  const instance = new Classes.RunShell(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunShellIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunShellIntersection`
+ * @returns {Builder} A builder for `RunShellIntersection`
+ */
+export const runShellBuilder = (
+  model?: Partial,
+): Builder, RunShellIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-task-builder.ts b/src/lib/generated/builders/run-task-builder.ts
new file mode 100644
index 0000000..833d3c6
--- /dev/null
+++ b/src/lib/generated/builders/run-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunTaskIntersection } from '../classes/run-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.RunTask, options: BuildOptions): RunTaskIntersection {
+  const instance = new Classes.RunTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunTaskIntersection`
+ * @returns {Builder} A builder for `RunTaskIntersection`
+ */
+export const runTaskBuilder = (
+  model?: Partial,
+): Builder, RunTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-task-configuration-builder.ts b/src/lib/generated/builders/run-task-configuration-builder.ts
new file mode 100644
index 0000000..b7b2b2e
--- /dev/null
+++ b/src/lib/generated/builders/run-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunTaskConfigurationIntersection } from '../classes/run-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.RunTaskConfiguration,
+  options: BuildOptions,
+): RunTaskConfigurationIntersection {
+  const instance = new Classes.RunTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `RunTaskConfigurationIntersection`
+ */
+export const runTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, RunTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/run-workflow-builder.ts b/src/lib/generated/builders/run-workflow-builder.ts
new file mode 100644
index 0000000..edb6b5e
--- /dev/null
+++ b/src/lib/generated/builders/run-workflow-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RunWorkflowIntersection } from '../classes/run-workflow';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RunWorkflow} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RunWorkflowIntersection} The built object
+ */
+function buildingFn(model: Specification.RunWorkflow, options: BuildOptions): RunWorkflowIntersection {
+  const instance = new Classes.RunWorkflow(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RunWorkflowIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RunWorkflowIntersection`
+ * @returns {Builder} A builder for `RunWorkflowIntersection`
+ */
+export const runWorkflowBuilder = (
+  model?: Partial,
+): Builder, RunWorkflowIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/runtime-expression-builder.ts b/src/lib/generated/builders/runtime-expression-builder.ts
new file mode 100644
index 0000000..e432ce1
--- /dev/null
+++ b/src/lib/generated/builders/runtime-expression-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { RuntimeExpressionIntersection } from '../classes/runtime-expression';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.RuntimeExpression} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {RuntimeExpressionIntersection} The built object
+ */
+function buildingFn(model: Specification.RuntimeExpression, options: BuildOptions): RuntimeExpressionIntersection {
+  const instance = new Classes.RuntimeExpression(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as RuntimeExpressionIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `RuntimeExpressionIntersection`
+ * @returns {Builder} A builder for `RuntimeExpressionIntersection`
+ */
+export const runtimeExpressionBuilder = (
+  model?: Partial,
+): Builder, RuntimeExpressionIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/schedule-builder.ts b/src/lib/generated/builders/schedule-builder.ts
new file mode 100644
index 0000000..2defa86
--- /dev/null
+++ b/src/lib/generated/builders/schedule-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ScheduleIntersection } from '../classes/schedule';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Schedule} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ScheduleIntersection} The built object
+ */
+function buildingFn(model: Specification.Schedule, options: BuildOptions): ScheduleIntersection {
+  const instance = new Classes.Schedule(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ScheduleIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ScheduleIntersection`
+ * @returns {Builder} A builder for `ScheduleIntersection`
+ */
+export const scheduleBuilder = (
+  model?: Partial,
+): Builder, ScheduleIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/schema-builder.ts b/src/lib/generated/builders/schema-builder.ts
new file mode 100644
index 0000000..a72b6d9
--- /dev/null
+++ b/src/lib/generated/builders/schema-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SchemaIntersection } from '../classes/schema';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Schema} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SchemaIntersection} The built object
+ */
+function buildingFn(model: Specification.Schema, options: BuildOptions): SchemaIntersection {
+  const instance = new Classes.Schema(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SchemaIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SchemaIntersection`
+ * @returns {Builder} A builder for `SchemaIntersection`
+ */
+export const schemaBuilder = (
+  model?: Partial,
+): Builder, SchemaIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/schema-external-builder.ts b/src/lib/generated/builders/schema-external-builder.ts
new file mode 100644
index 0000000..79697c6
--- /dev/null
+++ b/src/lib/generated/builders/schema-external-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SchemaExternalIntersection } from '../classes/schema-external';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SchemaExternal} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SchemaExternalIntersection} The built object
+ */
+function buildingFn(model: Specification.SchemaExternal, options: BuildOptions): SchemaExternalIntersection {
+  const instance = new Classes.SchemaExternal(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SchemaExternalIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SchemaExternalIntersection`
+ * @returns {Builder} A builder for `SchemaExternalIntersection`
+ */
+export const schemaExternalBuilder = (
+  model?: Partial,
+): Builder, SchemaExternalIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/schema-inline-builder.ts b/src/lib/generated/builders/schema-inline-builder.ts
new file mode 100644
index 0000000..910bfb6
--- /dev/null
+++ b/src/lib/generated/builders/schema-inline-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SchemaInlineIntersection } from '../classes/schema-inline';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SchemaInline} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SchemaInlineIntersection} The built object
+ */
+function buildingFn(model: Specification.SchemaInline, options: BuildOptions): SchemaInlineIntersection {
+  const instance = new Classes.SchemaInline(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SchemaInlineIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SchemaInlineIntersection`
+ * @returns {Builder} A builder for `SchemaInlineIntersection`
+ */
+export const schemaInlineBuilder = (
+  model?: Partial,
+): Builder, SchemaInlineIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/script-builder.ts b/src/lib/generated/builders/script-builder.ts
new file mode 100644
index 0000000..d2d728e
--- /dev/null
+++ b/src/lib/generated/builders/script-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ScriptIntersection } from '../classes/script';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Script} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ScriptIntersection} The built object
+ */
+function buildingFn(model: Specification.Script, options: BuildOptions): ScriptIntersection {
+  const instance = new Classes.Script(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ScriptIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ScriptIntersection`
+ * @returns {Builder} A builder for `ScriptIntersection`
+ */
+export const scriptBuilder = (
+  model?: Partial,
+): Builder, ScriptIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/secret-based-authentication-policy-builder.ts b/src/lib/generated/builders/secret-based-authentication-policy-builder.ts
new file mode 100644
index 0000000..fac6870
--- /dev/null
+++ b/src/lib/generated/builders/secret-based-authentication-policy-builder.ts
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SecretBasedAuthenticationPolicyIntersection } from '../classes/secret-based-authentication-policy';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SecretBasedAuthenticationPolicy} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SecretBasedAuthenticationPolicyIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.SecretBasedAuthenticationPolicy,
+  options: BuildOptions,
+): SecretBasedAuthenticationPolicyIntersection {
+  const instance = new Classes.SecretBasedAuthenticationPolicy(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SecretBasedAuthenticationPolicyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SecretBasedAuthenticationPolicyIntersection`
+ * @returns {Builder} A builder for `SecretBasedAuthenticationPolicyIntersection`
+ */
+export const secretBasedAuthenticationPolicyBuilder = (
+  model?: Partial,
+): Builder, SecretBasedAuthenticationPolicyIntersection> =>
+  builder(
+    model,
+    buildingFn,
+  );
diff --git a/src/lib/generated/builders/set-task-builder.ts b/src/lib/generated/builders/set-task-builder.ts
new file mode 100644
index 0000000..a0895ad
--- /dev/null
+++ b/src/lib/generated/builders/set-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SetTaskIntersection } from '../classes/set-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SetTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SetTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.SetTask, options: BuildOptions): SetTaskIntersection {
+  const instance = new Classes.SetTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SetTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SetTaskIntersection`
+ * @returns {Builder} A builder for `SetTaskIntersection`
+ */
+export const setTaskBuilder = (
+  model?: Partial,
+): Builder, SetTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/set-task-configuration-builder.ts b/src/lib/generated/builders/set-task-configuration-builder.ts
new file mode 100644
index 0000000..77715dc
--- /dev/null
+++ b/src/lib/generated/builders/set-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SetTaskConfigurationIntersection } from '../classes/set-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SetTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SetTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.SetTaskConfiguration,
+  options: BuildOptions,
+): SetTaskConfigurationIntersection {
+  const instance = new Classes.SetTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SetTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SetTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `SetTaskConfigurationIntersection`
+ */
+export const setTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, SetTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/shell-arguments-builder.ts b/src/lib/generated/builders/shell-arguments-builder.ts
new file mode 100644
index 0000000..4611cc2
--- /dev/null
+++ b/src/lib/generated/builders/shell-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ShellArgumentsIntersection } from '../classes/shell-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ShellArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ShellArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.ShellArguments, options: BuildOptions): ShellArgumentsIntersection {
+  const instance = new Classes.ShellArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ShellArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ShellArgumentsIntersection`
+ * @returns {Builder} A builder for `ShellArgumentsIntersection`
+ */
+export const shellArgumentsBuilder = (
+  model?: Partial,
+): Builder, ShellArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/shell-builder.ts b/src/lib/generated/builders/shell-builder.ts
new file mode 100644
index 0000000..b919114
--- /dev/null
+++ b/src/lib/generated/builders/shell-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ShellIntersection } from '../classes/shell';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Shell} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ShellIntersection} The built object
+ */
+function buildingFn(model: Specification.Shell, options: BuildOptions): ShellIntersection {
+  const instance = new Classes.Shell(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ShellIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ShellIntersection`
+ * @returns {Builder} A builder for `ShellIntersection`
+ */
+export const shellBuilder = (
+  model?: Partial,
+): Builder, ShellIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/shell-environment-builder.ts b/src/lib/generated/builders/shell-environment-builder.ts
new file mode 100644
index 0000000..89ebc31
--- /dev/null
+++ b/src/lib/generated/builders/shell-environment-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { ShellEnvironmentIntersection } from '../classes/shell-environment';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.ShellEnvironment} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {ShellEnvironmentIntersection} The built object
+ */
+function buildingFn(model: Specification.ShellEnvironment, options: BuildOptions): ShellEnvironmentIntersection {
+  const instance = new Classes.ShellEnvironment(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as ShellEnvironmentIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `ShellEnvironmentIntersection`
+ * @returns {Builder} A builder for `ShellEnvironmentIntersection`
+ */
+export const shellEnvironmentBuilder = (
+  model?: Partial,
+): Builder, ShellEnvironmentIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/subflow-configuration-builder.ts b/src/lib/generated/builders/subflow-configuration-builder.ts
new file mode 100644
index 0000000..078997f
--- /dev/null
+++ b/src/lib/generated/builders/subflow-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SubflowConfigurationIntersection } from '../classes/subflow-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SubflowConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SubflowConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.SubflowConfiguration,
+  options: BuildOptions,
+): SubflowConfigurationIntersection {
+  const instance = new Classes.SubflowConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SubflowConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SubflowConfigurationIntersection`
+ * @returns {Builder} A builder for `SubflowConfigurationIntersection`
+ */
+export const subflowConfigurationBuilder = (
+  model?: Partial,
+): Builder, SubflowConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/subflow-input-builder.ts b/src/lib/generated/builders/subflow-input-builder.ts
new file mode 100644
index 0000000..4551aca
--- /dev/null
+++ b/src/lib/generated/builders/subflow-input-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SubflowInputIntersection } from '../classes/subflow-input';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SubflowInput} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SubflowInputIntersection} The built object
+ */
+function buildingFn(model: Specification.SubflowInput, options: BuildOptions): SubflowInputIntersection {
+  const instance = new Classes.SubflowInput(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SubflowInputIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SubflowInputIntersection`
+ * @returns {Builder} A builder for `SubflowInputIntersection`
+ */
+export const subflowInputBuilder = (
+  model?: Partial,
+): Builder, SubflowInputIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/switch-case-builder.ts b/src/lib/generated/builders/switch-case-builder.ts
new file mode 100644
index 0000000..86dc28b
--- /dev/null
+++ b/src/lib/generated/builders/switch-case-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SwitchCaseIntersection } from '../classes/switch-case';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SwitchCase} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SwitchCaseIntersection} The built object
+ */
+function buildingFn(model: Specification.SwitchCase, options: BuildOptions): SwitchCaseIntersection {
+  const instance = new Classes.SwitchCase(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SwitchCaseIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SwitchCaseIntersection`
+ * @returns {Builder} A builder for `SwitchCaseIntersection`
+ */
+export const switchCaseBuilder = (
+  model?: Partial,
+): Builder, SwitchCaseIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/switch-item-builder.ts b/src/lib/generated/builders/switch-item-builder.ts
new file mode 100644
index 0000000..2935a6d
--- /dev/null
+++ b/src/lib/generated/builders/switch-item-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SwitchItemIntersection } from '../classes/switch-item';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SwitchItem} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SwitchItemIntersection} The built object
+ */
+function buildingFn(model: Specification.SwitchItem, options: BuildOptions): SwitchItemIntersection {
+  const instance = new Classes.SwitchItem(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SwitchItemIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SwitchItemIntersection`
+ * @returns {Builder} A builder for `SwitchItemIntersection`
+ */
+export const switchItemBuilder = (
+  model?: Partial,
+): Builder, SwitchItemIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/switch-task-builder.ts b/src/lib/generated/builders/switch-task-builder.ts
new file mode 100644
index 0000000..a60b0ce
--- /dev/null
+++ b/src/lib/generated/builders/switch-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SwitchTaskIntersection } from '../classes/switch-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SwitchTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SwitchTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.SwitchTask, options: BuildOptions): SwitchTaskIntersection {
+  const instance = new Classes.SwitchTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as SwitchTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SwitchTaskIntersection`
+ * @returns {Builder} A builder for `SwitchTaskIntersection`
+ */
+export const switchTaskBuilder = (
+  model?: Partial,
+): Builder, SwitchTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/switch-task-configuration-builder.ts b/src/lib/generated/builders/switch-task-configuration-builder.ts
new file mode 100644
index 0000000..e17975a
--- /dev/null
+++ b/src/lib/generated/builders/switch-task-configuration-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { SwitchTaskConfigurationIntersection } from '../classes/switch-task-configuration';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.SwitchTaskConfiguration} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {SwitchTaskConfigurationIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.SwitchTaskConfiguration,
+  options: BuildOptions,
+): SwitchTaskConfigurationIntersection {
+  const instance = new Classes.SwitchTaskConfiguration(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as SwitchTaskConfigurationIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `SwitchTaskConfigurationIntersection`
+ * @returns {Builder} A builder for `SwitchTaskConfigurationIntersection`
+ */
+export const switchTaskConfigurationBuilder = (
+  model?: Partial,
+): Builder, SwitchTaskConfigurationIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-base-builder.ts b/src/lib/generated/builders/task-base-builder.ts
new file mode 100644
index 0000000..1896f26
--- /dev/null
+++ b/src/lib/generated/builders/task-base-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskBaseIntersection } from '../classes/task-base';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TaskBase} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskBaseIntersection} The built object
+ */
+function buildingFn(model: Specification.TaskBase, options: BuildOptions): TaskBaseIntersection {
+  const instance = new Classes.TaskBase(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskBaseIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskBaseIntersection`
+ * @returns {Builder} A builder for `TaskBaseIntersection`
+ */
+export const taskBaseBuilder = (
+  model?: Partial,
+): Builder, TaskBaseIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-base-if-builder.ts b/src/lib/generated/builders/task-base-if-builder.ts
new file mode 100644
index 0000000..b4a5b03
--- /dev/null
+++ b/src/lib/generated/builders/task-base-if-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskBaseIfIntersection } from '../classes/task-base-if';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TaskBaseIf} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskBaseIfIntersection} The built object
+ */
+function buildingFn(model: Specification.TaskBaseIf, options: BuildOptions): TaskBaseIfIntersection {
+  const instance = new Classes.TaskBaseIf(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskBaseIfIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskBaseIfIntersection`
+ * @returns {Builder} A builder for `TaskBaseIfIntersection`
+ */
+export const taskBaseIfBuilder = (
+  model?: Partial,
+): Builder, TaskBaseIfIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-base-timeout-builder.ts b/src/lib/generated/builders/task-base-timeout-builder.ts
new file mode 100644
index 0000000..991119a
--- /dev/null
+++ b/src/lib/generated/builders/task-base-timeout-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskBaseTimeoutIntersection } from '../classes/task-base-timeout';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TaskBaseTimeout} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskBaseTimeoutIntersection} The built object
+ */
+function buildingFn(model: Specification.TaskBaseTimeout, options: BuildOptions): TaskBaseTimeoutIntersection {
+  const instance = new Classes.TaskBaseTimeout(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskBaseTimeoutIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskBaseTimeoutIntersection`
+ * @returns {Builder} A builder for `TaskBaseTimeoutIntersection`
+ */
+export const taskBaseTimeoutBuilder = (
+  model?: Partial,
+): Builder, TaskBaseTimeoutIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-builder.ts b/src/lib/generated/builders/task-builder.ts
new file mode 100644
index 0000000..c74aa8c
--- /dev/null
+++ b/src/lib/generated/builders/task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskIntersection } from '../classes/task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Task} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskIntersection} The built object
+ */
+function buildingFn(model: Specification.Task, options: BuildOptions): TaskIntersection {
+  const instance = new Classes.Task(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskIntersection`
+ * @returns {Builder} A builder for `TaskIntersection`
+ */
+export const taskBuilder = (
+  model?: Partial,
+): Builder, TaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-item-builder.ts b/src/lib/generated/builders/task-item-builder.ts
new file mode 100644
index 0000000..5ee7159
--- /dev/null
+++ b/src/lib/generated/builders/task-item-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskItemIntersection } from '../classes/task-item';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TaskItem} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskItemIntersection} The built object
+ */
+function buildingFn(model: Specification.TaskItem, options: BuildOptions): TaskItemIntersection {
+  const instance = new Classes.TaskItem(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskItemIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskItemIntersection`
+ * @returns {Builder} A builder for `TaskItemIntersection`
+ */
+export const taskItemBuilder = (
+  model?: Partial,
+): Builder, TaskItemIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-list-builder.ts b/src/lib/generated/builders/task-list-builder.ts
new file mode 100644
index 0000000..eb90ed3
--- /dev/null
+++ b/src/lib/generated/builders/task-list-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskListIntersection } from '../classes/task-list';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.TaskList} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskListIntersection} The built array
+ */
+function buildingFn(model: Specification.TaskList, options: BuildOptions): TaskListIntersection {
+  const instance = new Classes.TaskList(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as TaskListIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskListIntersection`
+ * @returns {ArrayBuilder} A builder for `TaskListIntersection`
+ */
+export const taskListBuilder = (
+  model?: Specification.TaskList,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/task-metadata-builder.ts b/src/lib/generated/builders/task-metadata-builder.ts
new file mode 100644
index 0000000..d9dc907
--- /dev/null
+++ b/src/lib/generated/builders/task-metadata-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TaskMetadataIntersection } from '../classes/task-metadata';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TaskMetadata} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TaskMetadataIntersection} The built object
+ */
+function buildingFn(model: Specification.TaskMetadata, options: BuildOptions): TaskMetadataIntersection {
+  const instance = new Classes.TaskMetadata(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TaskMetadataIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TaskMetadataIntersection`
+ * @returns {Builder} A builder for `TaskMetadataIntersection`
+ */
+export const taskMetadataBuilder = (
+  model?: Partial,
+): Builder, TaskMetadataIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/timeout-builder.ts b/src/lib/generated/builders/timeout-builder.ts
new file mode 100644
index 0000000..d395c81
--- /dev/null
+++ b/src/lib/generated/builders/timeout-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TimeoutIntersection } from '../classes/timeout';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Timeout} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TimeoutIntersection} The built object
+ */
+function buildingFn(model: Specification.Timeout, options: BuildOptions): TimeoutIntersection {
+  const instance = new Classes.Timeout(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TimeoutIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TimeoutIntersection`
+ * @returns {Builder} A builder for `TimeoutIntersection`
+ */
+export const timeoutBuilder = (
+  model?: Partial,
+): Builder, TimeoutIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/try-task-builder.ts b/src/lib/generated/builders/try-task-builder.ts
new file mode 100644
index 0000000..0a977db
--- /dev/null
+++ b/src/lib/generated/builders/try-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TryTaskIntersection } from '../classes/try-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TryTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TryTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.TryTask, options: BuildOptions): TryTaskIntersection {
+  const instance = new Classes.TryTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TryTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TryTaskIntersection`
+ * @returns {Builder} A builder for `TryTaskIntersection`
+ */
+export const tryTaskBuilder = (
+  model?: Partial,
+): Builder, TryTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/try-task-catch-builder.ts b/src/lib/generated/builders/try-task-catch-builder.ts
new file mode 100644
index 0000000..2b534d7
--- /dev/null
+++ b/src/lib/generated/builders/try-task-catch-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TryTaskCatchIntersection } from '../classes/try-task-catch';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TryTaskCatch} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TryTaskCatchIntersection} The built object
+ */
+function buildingFn(model: Specification.TryTaskCatch, options: BuildOptions): TryTaskCatchIntersection {
+  const instance = new Classes.TryTaskCatch(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TryTaskCatchIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TryTaskCatchIntersection`
+ * @returns {Builder} A builder for `TryTaskCatchIntersection`
+ */
+export const tryTaskCatchBuilder = (
+  model?: Partial,
+): Builder, TryTaskCatchIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/try-task-catch-retry-builder.ts b/src/lib/generated/builders/try-task-catch-retry-builder.ts
new file mode 100644
index 0000000..0db8167
--- /dev/null
+++ b/src/lib/generated/builders/try-task-catch-retry-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { TryTaskCatchRetryIntersection } from '../classes/try-task-catch-retry';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.TryTaskCatchRetry} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {TryTaskCatchRetryIntersection} The built object
+ */
+function buildingFn(model: Specification.TryTaskCatchRetry, options: BuildOptions): TryTaskCatchRetryIntersection {
+  const instance = new Classes.TryTaskCatchRetry(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as TryTaskCatchRetryIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `TryTaskCatchRetryIntersection`
+ * @returns {Builder} A builder for `TryTaskCatchRetryIntersection`
+ */
+export const tryTaskCatchRetryBuilder = (
+  model?: Partial,
+): Builder, TryTaskCatchRetryIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/uri-template-builder.ts b/src/lib/generated/builders/uri-template-builder.ts
new file mode 100644
index 0000000..ec5713f
--- /dev/null
+++ b/src/lib/generated/builders/uri-template-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UriTemplateIntersection } from '../classes/uri-template';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UriTemplate} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UriTemplateIntersection} The built object
+ */
+function buildingFn(model: Specification.UriTemplate, options: BuildOptions): UriTemplateIntersection {
+  const instance = new Classes.UriTemplate(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UriTemplateIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UriTemplateIntersection`
+ * @returns {Builder} A builder for `UriTemplateIntersection`
+ */
+export const uriTemplateBuilder = (
+  model?: Partial,
+): Builder, UriTemplateIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-authentications-builder.ts b/src/lib/generated/builders/use-authentications-builder.ts
new file mode 100644
index 0000000..0c224bb
--- /dev/null
+++ b/src/lib/generated/builders/use-authentications-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseAuthenticationsIntersection } from '../classes/use-authentications';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseAuthentications} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseAuthenticationsIntersection} The built object
+ */
+function buildingFn(model: Specification.UseAuthentications, options: BuildOptions): UseAuthenticationsIntersection {
+  const instance = new Classes.UseAuthentications(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseAuthenticationsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseAuthenticationsIntersection`
+ * @returns {Builder} A builder for `UseAuthenticationsIntersection`
+ */
+export const useAuthenticationsBuilder = (
+  model?: Partial,
+): Builder, UseAuthenticationsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-builder.ts b/src/lib/generated/builders/use-builder.ts
new file mode 100644
index 0000000..32c748d
--- /dev/null
+++ b/src/lib/generated/builders/use-builder.ts
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseIntersection } from '../classes/use';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Use} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseIntersection} The built object
+ */
+function buildingFn(model: Specification.Use, options: BuildOptions): UseIntersection {
+  const instance = new Classes.Use(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseIntersection`
+ * @returns {Builder} A builder for `UseIntersection`
+ */
+export const useBuilder = (model?: Partial): Builder, UseIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-catalogs-builder.ts b/src/lib/generated/builders/use-catalogs-builder.ts
new file mode 100644
index 0000000..1e569e9
--- /dev/null
+++ b/src/lib/generated/builders/use-catalogs-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseCatalogsIntersection } from '../classes/use-catalogs';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseCatalogs} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseCatalogsIntersection} The built object
+ */
+function buildingFn(model: Specification.UseCatalogs, options: BuildOptions): UseCatalogsIntersection {
+  const instance = new Classes.UseCatalogs(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseCatalogsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseCatalogsIntersection`
+ * @returns {Builder} A builder for `UseCatalogsIntersection`
+ */
+export const useCatalogsBuilder = (
+  model?: Partial,
+): Builder, UseCatalogsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-errors-builder.ts b/src/lib/generated/builders/use-errors-builder.ts
new file mode 100644
index 0000000..59ebec2
--- /dev/null
+++ b/src/lib/generated/builders/use-errors-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseErrorsIntersection } from '../classes/use-errors';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseErrors} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseErrorsIntersection} The built object
+ */
+function buildingFn(model: Specification.UseErrors, options: BuildOptions): UseErrorsIntersection {
+  const instance = new Classes.UseErrors(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseErrorsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseErrorsIntersection`
+ * @returns {Builder} A builder for `UseErrorsIntersection`
+ */
+export const useErrorsBuilder = (
+  model?: Partial,
+): Builder, UseErrorsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-extensions-builder.ts b/src/lib/generated/builders/use-extensions-builder.ts
new file mode 100644
index 0000000..a58eba5
--- /dev/null
+++ b/src/lib/generated/builders/use-extensions-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseExtensionsIntersection } from '../classes/use-extensions';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.UseExtensions} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseExtensionsIntersection} The built array
+ */
+function buildingFn(model: Specification.UseExtensions, options: BuildOptions): UseExtensionsIntersection {
+  const instance = new Classes.UseExtensions(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as UseExtensionsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseExtensionsIntersection`
+ * @returns {ArrayBuilder} A builder for `UseExtensionsIntersection`
+ */
+export const useExtensionsBuilder = (
+  model?: Specification.UseExtensions,
+): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-functions-builder.ts b/src/lib/generated/builders/use-functions-builder.ts
new file mode 100644
index 0000000..4bd1399
--- /dev/null
+++ b/src/lib/generated/builders/use-functions-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseFunctionsIntersection } from '../classes/use-functions';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseFunctions} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseFunctionsIntersection} The built object
+ */
+function buildingFn(model: Specification.UseFunctions, options: BuildOptions): UseFunctionsIntersection {
+  const instance = new Classes.UseFunctions(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseFunctionsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseFunctionsIntersection`
+ * @returns {Builder} A builder for `UseFunctionsIntersection`
+ */
+export const useFunctionsBuilder = (
+  model?: Partial,
+): Builder, UseFunctionsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-retries-builder.ts b/src/lib/generated/builders/use-retries-builder.ts
new file mode 100644
index 0000000..2aea55b
--- /dev/null
+++ b/src/lib/generated/builders/use-retries-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseRetriesIntersection } from '../classes/use-retries';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseRetries} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseRetriesIntersection} The built object
+ */
+function buildingFn(model: Specification.UseRetries, options: BuildOptions): UseRetriesIntersection {
+  const instance = new Classes.UseRetries(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseRetriesIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseRetriesIntersection`
+ * @returns {Builder} A builder for `UseRetriesIntersection`
+ */
+export const useRetriesBuilder = (
+  model?: Partial,
+): Builder, UseRetriesIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-secrets-builder.ts b/src/lib/generated/builders/use-secrets-builder.ts
new file mode 100644
index 0000000..432dd6f
--- /dev/null
+++ b/src/lib/generated/builders/use-secrets-builder.ts
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { arrayBuilder, ArrayBuilder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseSecretsIntersection } from '../classes/use-secrets';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying array
+ * @param {Specification.UseSecrets} model The proxied array
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseSecretsIntersection} The built array
+ */
+function buildingFn(model: Specification.UseSecrets, options: BuildOptions): UseSecretsIntersection {
+  const instance = new Classes.UseSecrets(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as unknown as UseSecretsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseSecretsIntersection`
+ * @returns {ArrayBuilder} A builder for `UseSecretsIntersection`
+ */
+export const useSecretsBuilder = (model?: Specification.UseSecrets): ArrayBuilder =>
+  arrayBuilder(model, buildingFn);
diff --git a/src/lib/generated/builders/use-timeouts-builder.ts b/src/lib/generated/builders/use-timeouts-builder.ts
new file mode 100644
index 0000000..f15cd84
--- /dev/null
+++ b/src/lib/generated/builders/use-timeouts-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { UseTimeoutsIntersection } from '../classes/use-timeouts';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.UseTimeouts} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {UseTimeoutsIntersection} The built object
+ */
+function buildingFn(model: Specification.UseTimeouts, options: BuildOptions): UseTimeoutsIntersection {
+  const instance = new Classes.UseTimeouts(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as UseTimeoutsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `UseTimeoutsIntersection`
+ * @returns {Builder} A builder for `UseTimeoutsIntersection`
+ */
+export const useTimeoutsBuilder = (
+  model?: Partial,
+): Builder, UseTimeoutsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/wait-task-builder.ts b/src/lib/generated/builders/wait-task-builder.ts
new file mode 100644
index 0000000..54e9713
--- /dev/null
+++ b/src/lib/generated/builders/wait-task-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WaitTaskIntersection } from '../classes/wait-task';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WaitTask} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WaitTaskIntersection} The built object
+ */
+function buildingFn(model: Specification.WaitTask, options: BuildOptions): WaitTaskIntersection {
+  const instance = new Classes.WaitTask(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WaitTaskIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WaitTaskIntersection`
+ * @returns {Builder} A builder for `WaitTaskIntersection`
+ */
+export const waitTaskBuilder = (
+  model?: Partial,
+): Builder, WaitTaskIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-async-api-payload-builder.ts b/src/lib/generated/builders/with-async-api-payload-builder.ts
new file mode 100644
index 0000000..3cacabf
--- /dev/null
+++ b/src/lib/generated/builders/with-async-api-payload-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithAsyncAPIPayloadIntersection } from '../classes/with-async-api-payload';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithAsyncAPIPayload} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithAsyncAPIPayloadIntersection} The built object
+ */
+function buildingFn(model: Specification.WithAsyncAPIPayload, options: BuildOptions): WithAsyncAPIPayloadIntersection {
+  const instance = new Classes.WithAsyncAPIPayload(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithAsyncAPIPayloadIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithAsyncAPIPayloadIntersection`
+ * @returns {Builder} A builder for `WithAsyncAPIPayloadIntersection`
+ */
+export const withAsyncAPIPayloadBuilder = (
+  model?: Partial,
+): Builder, WithAsyncAPIPayloadIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-event-builder.ts b/src/lib/generated/builders/with-event-builder.ts
new file mode 100644
index 0000000..2037d6f
--- /dev/null
+++ b/src/lib/generated/builders/with-event-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithEventIntersection } from '../classes/with-event';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithEvent} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithEventIntersection} The built object
+ */
+function buildingFn(model: Specification.WithEvent, options: BuildOptions): WithEventIntersection {
+  const instance = new Classes.WithEvent(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithEventIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithEventIntersection`
+ * @returns {Builder} A builder for `WithEventIntersection`
+ */
+export const withEventBuilder = (
+  model?: Partial,
+): Builder, WithEventIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-grpc-arguments-builder.ts b/src/lib/generated/builders/with-grpc-arguments-builder.ts
new file mode 100644
index 0000000..b865c71
--- /dev/null
+++ b/src/lib/generated/builders/with-grpc-arguments-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithGRPCArgumentsIntersection } from '../classes/with-grpc-arguments';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithGRPCArguments} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithGRPCArgumentsIntersection} The built object
+ */
+function buildingFn(model: Specification.WithGRPCArguments, options: BuildOptions): WithGRPCArgumentsIntersection {
+  const instance = new Classes.WithGRPCArguments(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithGRPCArgumentsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithGRPCArgumentsIntersection`
+ * @returns {Builder} A builder for `WithGRPCArgumentsIntersection`
+ */
+export const withGRPCArgumentsBuilder = (
+  model?: Partial,
+): Builder, WithGRPCArgumentsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-grpc-service-builder.ts b/src/lib/generated/builders/with-grpc-service-builder.ts
new file mode 100644
index 0000000..d4a890d
--- /dev/null
+++ b/src/lib/generated/builders/with-grpc-service-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithGRPCServiceIntersection } from '../classes/with-grpc-service';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithGRPCService} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithGRPCServiceIntersection} The built object
+ */
+function buildingFn(model: Specification.WithGRPCService, options: BuildOptions): WithGRPCServiceIntersection {
+  const instance = new Classes.WithGRPCService(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithGRPCServiceIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithGRPCServiceIntersection`
+ * @returns {Builder} A builder for `WithGRPCServiceIntersection`
+ */
+export const withGRPCServiceBuilder = (
+  model?: Partial,
+): Builder, WithGRPCServiceIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-http-body-builder.ts b/src/lib/generated/builders/with-http-body-builder.ts
new file mode 100644
index 0000000..4eea7cf
--- /dev/null
+++ b/src/lib/generated/builders/with-http-body-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithHTTPBodyIntersection } from '../classes/with-http-body';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithHTTPBody} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithHTTPBodyIntersection} The built object
+ */
+function buildingFn(model: Specification.WithHTTPBody, options: BuildOptions): WithHTTPBodyIntersection {
+  const instance = new Classes.WithHTTPBody(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithHTTPBodyIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithHTTPBodyIntersection`
+ * @returns {Builder} A builder for `WithHTTPBodyIntersection`
+ */
+export const withHTTPBodyBuilder = (
+  model?: Partial,
+): Builder, WithHTTPBodyIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-http-headers-builder.ts b/src/lib/generated/builders/with-http-headers-builder.ts
new file mode 100644
index 0000000..8af5c76
--- /dev/null
+++ b/src/lib/generated/builders/with-http-headers-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithHTTPHeadersIntersection } from '../classes/with-http-headers';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithHTTPHeaders} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithHTTPHeadersIntersection} The built object
+ */
+function buildingFn(model: Specification.WithHTTPHeaders, options: BuildOptions): WithHTTPHeadersIntersection {
+  const instance = new Classes.WithHTTPHeaders(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithHTTPHeadersIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithHTTPHeadersIntersection`
+ * @returns {Builder} A builder for `WithHTTPHeadersIntersection`
+ */
+export const withHTTPHeadersBuilder = (
+  model?: Partial,
+): Builder, WithHTTPHeadersIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-http-query-builder.ts b/src/lib/generated/builders/with-http-query-builder.ts
new file mode 100644
index 0000000..7a58dda
--- /dev/null
+++ b/src/lib/generated/builders/with-http-query-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithHTTPQueryIntersection } from '../classes/with-http-query';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithHTTPQuery} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithHTTPQueryIntersection} The built object
+ */
+function buildingFn(model: Specification.WithHTTPQuery, options: BuildOptions): WithHTTPQueryIntersection {
+  const instance = new Classes.WithHTTPQuery(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithHTTPQueryIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithHTTPQueryIntersection`
+ * @returns {Builder} A builder for `WithHTTPQueryIntersection`
+ */
+export const withHTTPQueryBuilder = (
+  model?: Partial,
+): Builder, WithHTTPQueryIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/with-open-api-parameters-builder.ts b/src/lib/generated/builders/with-open-api-parameters-builder.ts
new file mode 100644
index 0000000..3156756
--- /dev/null
+++ b/src/lib/generated/builders/with-open-api-parameters-builder.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WithOpenAPIParametersIntersection } from '../classes/with-open-api-parameters';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WithOpenAPIParameters} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WithOpenAPIParametersIntersection} The built object
+ */
+function buildingFn(
+  model: Specification.WithOpenAPIParameters,
+  options: BuildOptions,
+): WithOpenAPIParametersIntersection {
+  const instance = new Classes.WithOpenAPIParameters(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WithOpenAPIParametersIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WithOpenAPIParametersIntersection`
+ * @returns {Builder} A builder for `WithOpenAPIParametersIntersection`
+ */
+export const withOpenAPIParametersBuilder = (
+  model?: Partial,
+): Builder, WithOpenAPIParametersIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/workflow-builder.ts b/src/lib/generated/builders/workflow-builder.ts
new file mode 100644
index 0000000..cd5fc3d
--- /dev/null
+++ b/src/lib/generated/builders/workflow-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WorkflowIntersection } from '../classes/workflow';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.Workflow} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WorkflowIntersection} The built object
+ */
+function buildingFn(model: Specification.Workflow, options: BuildOptions): WorkflowIntersection {
+  const instance = new Classes.Workflow(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WorkflowIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WorkflowIntersection`
+ * @returns {Builder} A builder for `WorkflowIntersection`
+ */
+export const workflowBuilder = (
+  model?: Partial,
+): Builder, WorkflowIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/workflow-metadata-builder.ts b/src/lib/generated/builders/workflow-metadata-builder.ts
new file mode 100644
index 0000000..97c700c
--- /dev/null
+++ b/src/lib/generated/builders/workflow-metadata-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WorkflowMetadataIntersection } from '../classes/workflow-metadata';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WorkflowMetadata} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WorkflowMetadataIntersection} The built object
+ */
+function buildingFn(model: Specification.WorkflowMetadata, options: BuildOptions): WorkflowMetadataIntersection {
+  const instance = new Classes.WorkflowMetadata(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WorkflowMetadataIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WorkflowMetadataIntersection`
+ * @returns {Builder} A builder for `WorkflowMetadataIntersection`
+ */
+export const workflowMetadataBuilder = (
+  model?: Partial,
+): Builder, WorkflowMetadataIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/workflow-tags-builder.ts b/src/lib/generated/builders/workflow-tags-builder.ts
new file mode 100644
index 0000000..d92aab2
--- /dev/null
+++ b/src/lib/generated/builders/workflow-tags-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WorkflowTagsIntersection } from '../classes/workflow-tags';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WorkflowTags} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WorkflowTagsIntersection} The built object
+ */
+function buildingFn(model: Specification.WorkflowTags, options: BuildOptions): WorkflowTagsIntersection {
+  const instance = new Classes.WorkflowTags(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WorkflowTagsIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WorkflowTagsIntersection`
+ * @returns {Builder} A builder for `WorkflowTagsIntersection`
+ */
+export const workflowTagsBuilder = (
+  model?: Partial,
+): Builder, WorkflowTagsIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/generated/builders/workflow-timeout-builder.ts b/src/lib/generated/builders/workflow-timeout-builder.ts
new file mode 100644
index 0000000..dd084c3
--- /dev/null
+++ b/src/lib/generated/builders/workflow-timeout-builder.ts
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { builder, Builder, BuildOptions } from '../../builder';
+import { Classes } from '../classes';
+import { WorkflowTimeoutIntersection } from '../classes/workflow-timeout';
+import { Specification } from '../definitions';
+
+/**
+ * The internal function used by the builder proxy to validate and return its underlying object
+ * @param {Specification.WorkflowTimeout} model The proxied object
+ * @param {BuildOptions} options The build options to use
+ * @returns {WorkflowTimeoutIntersection} The built object
+ */
+function buildingFn(model: Specification.WorkflowTimeout, options: BuildOptions): WorkflowTimeoutIntersection {
+  const instance = new Classes.WorkflowTimeout(model);
+  if (options.validate) instance.validate();
+  return (options.normalize ? instance.normalize() : instance) as WorkflowTimeoutIntersection;
+}
+
+/**
+ * A factory to create a builder proxy for the type `WorkflowTimeoutIntersection`
+ * @returns {Builder} A builder for `WorkflowTimeoutIntersection`
+ */
+export const workflowTimeoutBuilder = (
+  model?: Partial,
+): Builder, WorkflowTimeoutIntersection> =>
+  builder(model, buildingFn);
diff --git a/src/lib/schema/types/README.md b/src/lib/generated/classes/README.md
similarity index 100%
rename from src/lib/schema/types/README.md
rename to src/lib/generated/classes/README.md
diff --git a/src/lib/generated/classes/all-event-consumption-strategy-configuration.ts b/src/lib/generated/classes/all-event-consumption-strategy-configuration.ts
new file mode 100644
index 0000000..5a6c71a
--- /dev/null
+++ b/src/lib/generated/classes/all-event-consumption-strategy-configuration.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EventFilter } from './event-filter';
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the AllEventConsumptionStrategyConfiguration class and type
+ */
+export type AllEventConsumptionStrategyConfigurationIntersection = AllEventConsumptionStrategyConfiguration &
+  Specification.AllEventConsumptionStrategyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the AllEventConsumptionStrategyConfiguration class and type
+ */
+export interface AllEventConsumptionStrategyConfigurationConstructor {
+  new (model?: Array | number): AllEventConsumptionStrategyConfigurationIntersection;
+}
+
+/**
+ * Represents a collection of Specification.EventFilter.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class AllEventConsumptionStrategyConfiguration extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the AllEventConsumptionStrategyConfiguration class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(new _EventFilter(item)));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(AllEventConsumptionStrategyConfiguration.prototype));
+    getLifecycleHooks('AllEventConsumptionStrategyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AllEventConsumptionStrategyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AllEventConsumptionStrategyConfiguration(this);
+    validate('AllEventConsumptionStrategyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AllEventConsumptionStrategyConfiguration.
+   * Creates a copy of the AllEventConsumptionStrategyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AllEventConsumptionStrategyConfiguration instance.
+   */
+  normalize(): AllEventConsumptionStrategyConfiguration {
+    const copy = new AllEventConsumptionStrategyConfiguration(this);
+    return getLifecycleHooks('AllEventConsumptionStrategyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AllEventConsumptionStrategyConfiguration =
+  AllEventConsumptionStrategyConfiguration as unknown as AllEventConsumptionStrategyConfigurationConstructor;
+//export const _AllEventConsumptionStrategyConfiguration = AllEventConsumptionStrategyConfiguration; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/all-event-consumption-strategy.ts b/src/lib/generated/classes/all-event-consumption-strategy.ts
new file mode 100644
index 0000000..028ca07
--- /dev/null
+++ b/src/lib/generated/classes/all-event-consumption-strategy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _AllEventConsumptionStrategyConfiguration } from './all-event-consumption-strategy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the AllEventConsumptionStrategy class and type
+ */
+export type AllEventConsumptionStrategyIntersection = AllEventConsumptionStrategy &
+  Specification.AllEventConsumptionStrategy;
+
+/**
+ * Represents a constructor for the intersection of the AllEventConsumptionStrategy class and type
+ */
+export interface AllEventConsumptionStrategyConstructor {
+  new (model?: Partial): AllEventConsumptionStrategyIntersection;
+}
+
+/**
+ * Represents a AllEventConsumptionStrategy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class AllEventConsumptionStrategy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the AllEventConsumptionStrategy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the AllEventConsumptionStrategy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.AllEventConsumptionStrategy & object;
+    if (isObject(model)) {
+      if (typeof model.all === 'object') self.all = new _AllEventConsumptionStrategyConfiguration(model.all);
+    }
+    getLifecycleHooks('AllEventConsumptionStrategy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AllEventConsumptionStrategy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AllEventConsumptionStrategy(this as any) as AllEventConsumptionStrategyIntersection;
+    validate('AllEventConsumptionStrategy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AllEventConsumptionStrategy.
+   * Creates a copy of the AllEventConsumptionStrategy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AllEventConsumptionStrategy instance.
+   */
+  normalize(): AllEventConsumptionStrategy & Specification.AllEventConsumptionStrategy {
+    const copy = new AllEventConsumptionStrategy(this as any) as AllEventConsumptionStrategyIntersection;
+    return getLifecycleHooks('AllEventConsumptionStrategy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AllEventConsumptionStrategy = AllEventConsumptionStrategy as AllEventConsumptionStrategyConstructor;
diff --git a/src/lib/generated/classes/any-event-consumption-strategy-configuration.ts b/src/lib/generated/classes/any-event-consumption-strategy-configuration.ts
new file mode 100644
index 0000000..15a5bb1
--- /dev/null
+++ b/src/lib/generated/classes/any-event-consumption-strategy-configuration.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EventFilter } from './event-filter';
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the AnyEventConsumptionStrategyConfiguration class and type
+ */
+export type AnyEventConsumptionStrategyConfigurationIntersection = AnyEventConsumptionStrategyConfiguration &
+  Specification.AnyEventConsumptionStrategyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the AnyEventConsumptionStrategyConfiguration class and type
+ */
+export interface AnyEventConsumptionStrategyConfigurationConstructor {
+  new (model?: Array | number): AnyEventConsumptionStrategyConfigurationIntersection;
+}
+
+/**
+ * Represents a collection of Specification.EventFilter.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class AnyEventConsumptionStrategyConfiguration extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the AnyEventConsumptionStrategyConfiguration class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(new _EventFilter(item)));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(AnyEventConsumptionStrategyConfiguration.prototype));
+    getLifecycleHooks('AnyEventConsumptionStrategyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AnyEventConsumptionStrategyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AnyEventConsumptionStrategyConfiguration(this);
+    validate('AnyEventConsumptionStrategyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AnyEventConsumptionStrategyConfiguration.
+   * Creates a copy of the AnyEventConsumptionStrategyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AnyEventConsumptionStrategyConfiguration instance.
+   */
+  normalize(): AnyEventConsumptionStrategyConfiguration {
+    const copy = new AnyEventConsumptionStrategyConfiguration(this);
+    return getLifecycleHooks('AnyEventConsumptionStrategyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AnyEventConsumptionStrategyConfiguration =
+  AnyEventConsumptionStrategyConfiguration as unknown as AnyEventConsumptionStrategyConfigurationConstructor;
+//export const _AnyEventConsumptionStrategyConfiguration = AnyEventConsumptionStrategyConfiguration; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/any-event-consumption-strategy.ts b/src/lib/generated/classes/any-event-consumption-strategy.ts
new file mode 100644
index 0000000..827f4b9
--- /dev/null
+++ b/src/lib/generated/classes/any-event-consumption-strategy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _AnyEventConsumptionStrategyConfiguration } from './any-event-consumption-strategy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the AnyEventConsumptionStrategy class and type
+ */
+export type AnyEventConsumptionStrategyIntersection = AnyEventConsumptionStrategy &
+  Specification.AnyEventConsumptionStrategy;
+
+/**
+ * Represents a constructor for the intersection of the AnyEventConsumptionStrategy class and type
+ */
+export interface AnyEventConsumptionStrategyConstructor {
+  new (model?: Partial): AnyEventConsumptionStrategyIntersection;
+}
+
+/**
+ * Represents a AnyEventConsumptionStrategy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class AnyEventConsumptionStrategy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the AnyEventConsumptionStrategy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the AnyEventConsumptionStrategy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.AnyEventConsumptionStrategy & object;
+    if (isObject(model)) {
+      if (typeof model.any === 'object') self.any = new _AnyEventConsumptionStrategyConfiguration(model.any);
+    }
+    getLifecycleHooks('AnyEventConsumptionStrategy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AnyEventConsumptionStrategy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AnyEventConsumptionStrategy(this as any) as AnyEventConsumptionStrategyIntersection;
+    validate('AnyEventConsumptionStrategy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AnyEventConsumptionStrategy.
+   * Creates a copy of the AnyEventConsumptionStrategy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AnyEventConsumptionStrategy instance.
+   */
+  normalize(): AnyEventConsumptionStrategy & Specification.AnyEventConsumptionStrategy {
+    const copy = new AnyEventConsumptionStrategy(this as any) as AnyEventConsumptionStrategyIntersection;
+    return getLifecycleHooks('AnyEventConsumptionStrategy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AnyEventConsumptionStrategy = AnyEventConsumptionStrategy as AnyEventConsumptionStrategyConstructor;
diff --git a/src/lib/generated/classes/async-api-arguments.ts b/src/lib/generated/classes/async-api-arguments.ts
new file mode 100644
index 0000000..bb6f514
--- /dev/null
+++ b/src/lib/generated/classes/async-api-arguments.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { _WithAsyncAPIPayload } from './with-async-api-payload';
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the AsyncApiArguments class and type
+ */
+export type AsyncApiArgumentsIntersection = AsyncApiArguments & Specification.AsyncApiArguments;
+
+/**
+ * Represents a constructor for the intersection of the AsyncApiArguments class and type
+ */
+export interface AsyncApiArgumentsConstructor {
+  new (model?: Partial): AsyncApiArgumentsIntersection;
+}
+
+/**
+ * Represents a AsyncApiArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class AsyncApiArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the AsyncApiArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the AsyncApiArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.AsyncApiArguments & object;
+    if (isObject(model)) {
+      if (typeof model.document === 'object') self.document = new _ExternalResource(model.document);
+      if (typeof model.payload === 'object') self.payload = new _WithAsyncAPIPayload(model.payload);
+      if (typeof model.authentication === 'object')
+        self.authentication = new _ReferenceableAuthenticationPolicy(model.authentication);
+    }
+    getLifecycleHooks('AsyncApiArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AsyncApiArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AsyncApiArguments(this as any) as AsyncApiArgumentsIntersection;
+    validate('AsyncApiArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AsyncApiArguments.
+   * Creates a copy of the AsyncApiArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AsyncApiArguments instance.
+   */
+  normalize(): AsyncApiArguments & Specification.AsyncApiArguments {
+    const copy = new AsyncApiArguments(this as any) as AsyncApiArgumentsIntersection;
+    return getLifecycleHooks('AsyncApiArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AsyncApiArguments = AsyncApiArguments as AsyncApiArgumentsConstructor;
diff --git a/src/lib/generated/classes/authentication-policy-reference.ts b/src/lib/generated/classes/authentication-policy-reference.ts
new file mode 100644
index 0000000..4546777
--- /dev/null
+++ b/src/lib/generated/classes/authentication-policy-reference.ts
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the AuthenticationPolicyReference class and type
+ */
+export type AuthenticationPolicyReferenceIntersection = AuthenticationPolicyReference &
+  Specification.AuthenticationPolicyReference;
+
+/**
+ * Represents a constructor for the intersection of the AuthenticationPolicyReference class and type
+ */
+export interface AuthenticationPolicyReferenceConstructor {
+  new (model?: Partial): AuthenticationPolicyReferenceIntersection;
+}
+
+/**
+ * Represents a AuthenticationPolicyReference with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class AuthenticationPolicyReference extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the AuthenticationPolicyReference class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the AuthenticationPolicyReference.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('AuthenticationPolicyReference')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AuthenticationPolicyReference.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AuthenticationPolicyReference(this as any) as AuthenticationPolicyReferenceIntersection;
+    validate('AuthenticationPolicyReference', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AuthenticationPolicyReference.
+   * Creates a copy of the AuthenticationPolicyReference, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AuthenticationPolicyReference instance.
+   */
+  normalize(): AuthenticationPolicyReference & Specification.AuthenticationPolicyReference {
+    const copy = new AuthenticationPolicyReference(this as any) as AuthenticationPolicyReferenceIntersection;
+    return getLifecycleHooks('AuthenticationPolicyReference')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AuthenticationPolicyReference = AuthenticationPolicyReference as AuthenticationPolicyReferenceConstructor;
diff --git a/src/lib/generated/classes/authentication-policy.ts b/src/lib/generated/classes/authentication-policy.ts
new file mode 100644
index 0000000..939df06
--- /dev/null
+++ b/src/lib/generated/classes/authentication-policy.ts
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _BasicAuthenticationPolicyConfiguration } from './basic-authentication-policy-configuration';
+import { _BearerAuthenticationPolicyConfiguration } from './bearer-authentication-policy-configuration';
+import { _DigestAuthenticationPolicyConfiguration } from './digest-authentication-policy-configuration';
+import { _OAuth2AuthenticationPolicyConfiguration } from './oauth2-authentication-policy-configuration';
+import { _OpenIdConnectAuthenticationPolicyConfiguration } from './open-id-connect-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the AuthenticationPolicy class and type
+ */
+export type AuthenticationPolicyIntersection = AuthenticationPolicy & Specification.AuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the AuthenticationPolicy class and type
+ */
+export interface AuthenticationPolicyConstructor {
+  new (model?: Partial): AuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a AuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class AuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the AuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the AuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.AuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.BasicAuthenticationPolicy).basic === 'object')
+        (self as Specification.BasicAuthenticationPolicy).basic = new _BasicAuthenticationPolicyConfiguration(
+          (model as Specification.BasicAuthenticationPolicy)
+            .basic as Specification.BasicAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.BearerAuthenticationPolicy).bearer === 'object')
+        (self as Specification.BearerAuthenticationPolicy).bearer = new _BearerAuthenticationPolicyConfiguration(
+          (model as Specification.BearerAuthenticationPolicy)
+            .bearer as Specification.BearerAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.DigestAuthenticationPolicy).digest === 'object')
+        (self as Specification.DigestAuthenticationPolicy).digest = new _DigestAuthenticationPolicyConfiguration(
+          (model as Specification.DigestAuthenticationPolicy)
+            .digest as Specification.DigestAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.OAuth2AuthenticationPolicy).oauth2 === 'object')
+        (self as Specification.OAuth2AuthenticationPolicy).oauth2 = new _OAuth2AuthenticationPolicyConfiguration(
+          (model as Specification.OAuth2AuthenticationPolicy)
+            .oauth2 as Specification.OAuth2AuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.OpenIdConnectAuthenticationPolicy).oidc === 'object')
+        (self as Specification.OpenIdConnectAuthenticationPolicy).oidc =
+          new _OpenIdConnectAuthenticationPolicyConfiguration(
+            (model as Specification.OpenIdConnectAuthenticationPolicy)
+              .oidc as Specification.OpenIdConnectAuthenticationPolicyConfiguration,
+          );
+    }
+    getLifecycleHooks('AuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the AuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new AuthenticationPolicy(this as any) as AuthenticationPolicyIntersection;
+    validate('AuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the AuthenticationPolicy.
+   * Creates a copy of the AuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the AuthenticationPolicy instance.
+   */
+  normalize(): AuthenticationPolicy & Specification.AuthenticationPolicy {
+    const copy = new AuthenticationPolicy(this as any) as AuthenticationPolicyIntersection;
+    return getLifecycleHooks('AuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _AuthenticationPolicy = AuthenticationPolicy as AuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/basic-authentication-policy-configuration.ts b/src/lib/generated/classes/basic-authentication-policy-configuration.ts
new file mode 100644
index 0000000..991e82d
--- /dev/null
+++ b/src/lib/generated/classes/basic-authentication-policy-configuration.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the BasicAuthenticationPolicyConfiguration class and type
+ */
+export type BasicAuthenticationPolicyConfigurationIntersection = BasicAuthenticationPolicyConfiguration &
+  Specification.BasicAuthenticationPolicyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the BasicAuthenticationPolicyConfiguration class and type
+ */
+export interface BasicAuthenticationPolicyConfigurationConstructor {
+  new (
+    model?: Partial,
+  ): BasicAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * Represents a BasicAuthenticationPolicyConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BasicAuthenticationPolicyConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BasicAuthenticationPolicyConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BasicAuthenticationPolicyConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('BasicAuthenticationPolicyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BasicAuthenticationPolicyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BasicAuthenticationPolicyConfiguration(
+      this as any,
+    ) as BasicAuthenticationPolicyConfigurationIntersection;
+    validate('BasicAuthenticationPolicyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BasicAuthenticationPolicyConfiguration.
+   * Creates a copy of the BasicAuthenticationPolicyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BasicAuthenticationPolicyConfiguration instance.
+   */
+  normalize(): BasicAuthenticationPolicyConfiguration & Specification.BasicAuthenticationPolicyConfiguration {
+    const copy = new BasicAuthenticationPolicyConfiguration(
+      this as any,
+    ) as BasicAuthenticationPolicyConfigurationIntersection;
+    return getLifecycleHooks('BasicAuthenticationPolicyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BasicAuthenticationPolicyConfiguration =
+  BasicAuthenticationPolicyConfiguration as BasicAuthenticationPolicyConfigurationConstructor;
diff --git a/src/lib/generated/classes/basic-authentication-policy.ts b/src/lib/generated/classes/basic-authentication-policy.ts
new file mode 100644
index 0000000..932b1e0
--- /dev/null
+++ b/src/lib/generated/classes/basic-authentication-policy.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _BasicAuthenticationPolicyConfiguration } from './basic-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the BasicAuthenticationPolicy class and type
+ */
+export type BasicAuthenticationPolicyIntersection = BasicAuthenticationPolicy & Specification.BasicAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the BasicAuthenticationPolicy class and type
+ */
+export interface BasicAuthenticationPolicyConstructor {
+  new (model?: Partial): BasicAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a BasicAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BasicAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BasicAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BasicAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.BasicAuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.basic === 'object') self.basic = new _BasicAuthenticationPolicyConfiguration(model.basic);
+    }
+    getLifecycleHooks('BasicAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BasicAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BasicAuthenticationPolicy(this as any) as BasicAuthenticationPolicyIntersection;
+    validate('BasicAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BasicAuthenticationPolicy.
+   * Creates a copy of the BasicAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BasicAuthenticationPolicy instance.
+   */
+  normalize(): BasicAuthenticationPolicy & Specification.BasicAuthenticationPolicy {
+    const copy = new BasicAuthenticationPolicy(this as any) as BasicAuthenticationPolicyIntersection;
+    return getLifecycleHooks('BasicAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BasicAuthenticationPolicy = BasicAuthenticationPolicy as BasicAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/basic-authentication-properties.ts b/src/lib/generated/classes/basic-authentication-properties.ts
new file mode 100644
index 0000000..32a740b
--- /dev/null
+++ b/src/lib/generated/classes/basic-authentication-properties.ts
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the BasicAuthenticationProperties class and type
+ */
+export type BasicAuthenticationPropertiesIntersection = BasicAuthenticationProperties &
+  Specification.BasicAuthenticationProperties;
+
+/**
+ * Represents a constructor for the intersection of the BasicAuthenticationProperties class and type
+ */
+export interface BasicAuthenticationPropertiesConstructor {
+  new (model?: Partial): BasicAuthenticationPropertiesIntersection;
+}
+
+/**
+ * Represents a BasicAuthenticationProperties with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BasicAuthenticationProperties extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BasicAuthenticationProperties class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BasicAuthenticationProperties.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('BasicAuthenticationProperties')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BasicAuthenticationProperties.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BasicAuthenticationProperties(this as any) as BasicAuthenticationPropertiesIntersection;
+    validate('BasicAuthenticationProperties', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BasicAuthenticationProperties.
+   * Creates a copy of the BasicAuthenticationProperties, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BasicAuthenticationProperties instance.
+   */
+  normalize(): BasicAuthenticationProperties & Specification.BasicAuthenticationProperties {
+    const copy = new BasicAuthenticationProperties(this as any) as BasicAuthenticationPropertiesIntersection;
+    return getLifecycleHooks('BasicAuthenticationProperties')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BasicAuthenticationProperties = BasicAuthenticationProperties as BasicAuthenticationPropertiesConstructor;
diff --git a/src/lib/generated/classes/bearer-authentication-policy-configuration.ts b/src/lib/generated/classes/bearer-authentication-policy-configuration.ts
new file mode 100644
index 0000000..a142b1e
--- /dev/null
+++ b/src/lib/generated/classes/bearer-authentication-policy-configuration.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the BearerAuthenticationPolicyConfiguration class and type
+ */
+export type BearerAuthenticationPolicyConfigurationIntersection = BearerAuthenticationPolicyConfiguration &
+  Specification.BearerAuthenticationPolicyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the BearerAuthenticationPolicyConfiguration class and type
+ */
+export interface BearerAuthenticationPolicyConfigurationConstructor {
+  new (
+    model?: Partial,
+  ): BearerAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * Represents a BearerAuthenticationPolicyConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BearerAuthenticationPolicyConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BearerAuthenticationPolicyConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BearerAuthenticationPolicyConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('BearerAuthenticationPolicyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BearerAuthenticationPolicyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BearerAuthenticationPolicyConfiguration(
+      this as any,
+    ) as BearerAuthenticationPolicyConfigurationIntersection;
+    validate('BearerAuthenticationPolicyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BearerAuthenticationPolicyConfiguration.
+   * Creates a copy of the BearerAuthenticationPolicyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BearerAuthenticationPolicyConfiguration instance.
+   */
+  normalize(): BearerAuthenticationPolicyConfiguration & Specification.BearerAuthenticationPolicyConfiguration {
+    const copy = new BearerAuthenticationPolicyConfiguration(
+      this as any,
+    ) as BearerAuthenticationPolicyConfigurationIntersection;
+    return getLifecycleHooks('BearerAuthenticationPolicyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BearerAuthenticationPolicyConfiguration =
+  BearerAuthenticationPolicyConfiguration as BearerAuthenticationPolicyConfigurationConstructor;
diff --git a/src/lib/generated/classes/bearer-authentication-policy.ts b/src/lib/generated/classes/bearer-authentication-policy.ts
new file mode 100644
index 0000000..0cf5940
--- /dev/null
+++ b/src/lib/generated/classes/bearer-authentication-policy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _BearerAuthenticationPolicyConfiguration } from './bearer-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the BearerAuthenticationPolicy class and type
+ */
+export type BearerAuthenticationPolicyIntersection = BearerAuthenticationPolicy &
+  Specification.BearerAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the BearerAuthenticationPolicy class and type
+ */
+export interface BearerAuthenticationPolicyConstructor {
+  new (model?: Partial): BearerAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a BearerAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BearerAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BearerAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BearerAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.BearerAuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.bearer === 'object') self.bearer = new _BearerAuthenticationPolicyConfiguration(model.bearer);
+    }
+    getLifecycleHooks('BearerAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BearerAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BearerAuthenticationPolicy(this as any) as BearerAuthenticationPolicyIntersection;
+    validate('BearerAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BearerAuthenticationPolicy.
+   * Creates a copy of the BearerAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BearerAuthenticationPolicy instance.
+   */
+  normalize(): BearerAuthenticationPolicy & Specification.BearerAuthenticationPolicy {
+    const copy = new BearerAuthenticationPolicy(this as any) as BearerAuthenticationPolicyIntersection;
+    return getLifecycleHooks('BearerAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BearerAuthenticationPolicy = BearerAuthenticationPolicy as BearerAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/bearer-authentication-properties.ts b/src/lib/generated/classes/bearer-authentication-properties.ts
new file mode 100644
index 0000000..6283395
--- /dev/null
+++ b/src/lib/generated/classes/bearer-authentication-properties.ts
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the BearerAuthenticationProperties class and type
+ */
+export type BearerAuthenticationPropertiesIntersection = BearerAuthenticationProperties &
+  Specification.BearerAuthenticationProperties;
+
+/**
+ * Represents a constructor for the intersection of the BearerAuthenticationProperties class and type
+ */
+export interface BearerAuthenticationPropertiesConstructor {
+  new (model?: Partial): BearerAuthenticationPropertiesIntersection;
+}
+
+/**
+ * Represents a BearerAuthenticationProperties with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class BearerAuthenticationProperties extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the BearerAuthenticationProperties class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the BearerAuthenticationProperties.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('BearerAuthenticationProperties')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the BearerAuthenticationProperties.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new BearerAuthenticationProperties(this as any) as BearerAuthenticationPropertiesIntersection;
+    validate('BearerAuthenticationProperties', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the BearerAuthenticationProperties.
+   * Creates a copy of the BearerAuthenticationProperties, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the BearerAuthenticationProperties instance.
+   */
+  normalize(): BearerAuthenticationProperties & Specification.BearerAuthenticationProperties {
+    const copy = new BearerAuthenticationProperties(this as any) as BearerAuthenticationPropertiesIntersection;
+    return getLifecycleHooks('BearerAuthenticationProperties')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _BearerAuthenticationProperties =
+  BearerAuthenticationProperties as BearerAuthenticationPropertiesConstructor;
diff --git a/src/lib/generated/classes/call-async-api.ts b/src/lib/generated/classes/call-async-api.ts
new file mode 100644
index 0000000..d0105d3
--- /dev/null
+++ b/src/lib/generated/classes/call-async-api.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _AsyncApiArguments } from './async-api-arguments';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallAsyncAPI class and type
+ */
+export type CallAsyncAPIIntersection = CallAsyncAPI & Specification.CallAsyncAPI;
+
+/**
+ * Represents a constructor for the intersection of the CallAsyncAPI class and type
+ */
+export interface CallAsyncAPIConstructor {
+  new (model?: Partial): CallAsyncAPIIntersection;
+}
+
+/**
+ * Represents a CallAsyncAPI with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallAsyncAPI extends _TaskBase {
+  /**
+   * Instanciates a new instance of the CallAsyncAPI class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallAsyncAPI.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallAsyncAPI & object;
+    if (isObject(model)) {
+      self.call = 'asyncapi' as const;
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.with === 'object') self.with = new _AsyncApiArguments(model.with);
+    }
+    getLifecycleHooks('CallAsyncAPI')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallAsyncAPI.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallAsyncAPI(this as any) as CallAsyncAPIIntersection;
+    validate('CallAsyncAPI', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallAsyncAPI.
+   * Creates a copy of the CallAsyncAPI, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallAsyncAPI instance.
+   */
+  normalize(): CallAsyncAPI & Specification.CallAsyncAPI {
+    const copy = new CallAsyncAPI(this as any) as CallAsyncAPIIntersection;
+    return getLifecycleHooks('CallAsyncAPI')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallAsyncAPI = CallAsyncAPI as CallAsyncAPIConstructor;
diff --git a/src/lib/generated/classes/call-function.ts b/src/lib/generated/classes/call-function.ts
new file mode 100644
index 0000000..802bd49
--- /dev/null
+++ b/src/lib/generated/classes/call-function.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _FunctionArguments } from './function-arguments';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallFunction class and type
+ */
+export type CallFunctionIntersection = CallFunction & Specification.CallFunction;
+
+/**
+ * Represents a constructor for the intersection of the CallFunction class and type
+ */
+export interface CallFunctionConstructor {
+  new (model?: Partial): CallFunctionIntersection;
+}
+
+/**
+ * Represents a CallFunction with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallFunction extends _TaskBase {
+  /**
+   * Instanciates a new instance of the CallFunction class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallFunction.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallFunction & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.with === 'object') self.with = new _FunctionArguments(model.with);
+    }
+    getLifecycleHooks('CallFunction')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallFunction.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallFunction(this as any) as CallFunctionIntersection;
+    validate('CallFunction', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallFunction.
+   * Creates a copy of the CallFunction, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallFunction instance.
+   */
+  normalize(): CallFunction & Specification.CallFunction {
+    const copy = new CallFunction(this as any) as CallFunctionIntersection;
+    return getLifecycleHooks('CallFunction')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallFunction = CallFunction as CallFunctionConstructor;
diff --git a/src/lib/generated/classes/call-grpc.ts b/src/lib/generated/classes/call-grpc.ts
new file mode 100644
index 0000000..8bbaa13
--- /dev/null
+++ b/src/lib/generated/classes/call-grpc.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _GRPCArguments } from './grpc-arguments';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallGRPC class and type
+ */
+export type CallGRPCIntersection = CallGRPC & Specification.CallGRPC;
+
+/**
+ * Represents a constructor for the intersection of the CallGRPC class and type
+ */
+export interface CallGRPCConstructor {
+  new (model?: Partial): CallGRPCIntersection;
+}
+
+/**
+ * Represents a CallGRPC with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallGRPC extends _TaskBase {
+  /**
+   * Instanciates a new instance of the CallGRPC class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallGRPC.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallGRPC & object;
+    if (isObject(model)) {
+      self.call = 'grpc' as const;
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.with === 'object') self.with = new _GRPCArguments(model.with);
+    }
+    getLifecycleHooks('CallGRPC')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallGRPC.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallGRPC(this as any) as CallGRPCIntersection;
+    validate('CallGRPC', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallGRPC.
+   * Creates a copy of the CallGRPC, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallGRPC instance.
+   */
+  normalize(): CallGRPC & Specification.CallGRPC {
+    const copy = new CallGRPC(this as any) as CallGRPCIntersection;
+    return getLifecycleHooks('CallGRPC')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallGRPC = CallGRPC as CallGRPCConstructor;
diff --git a/src/lib/generated/classes/call-http.ts b/src/lib/generated/classes/call-http.ts
new file mode 100644
index 0000000..1c11b37
--- /dev/null
+++ b/src/lib/generated/classes/call-http.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _HTTPArguments } from './http-arguments';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallHTTP class and type
+ */
+export type CallHTTPIntersection = CallHTTP & Specification.CallHTTP;
+
+/**
+ * Represents a constructor for the intersection of the CallHTTP class and type
+ */
+export interface CallHTTPConstructor {
+  new (model?: Partial): CallHTTPIntersection;
+}
+
+/**
+ * Represents a CallHTTP with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallHTTP extends _TaskBase {
+  /**
+   * Instanciates a new instance of the CallHTTP class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallHTTP.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallHTTP & object;
+    if (isObject(model)) {
+      self.call = 'http' as const;
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.with === 'object') self.with = new _HTTPArguments(model.with);
+    }
+    getLifecycleHooks('CallHTTP')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallHTTP.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallHTTP(this as any) as CallHTTPIntersection;
+    validate('CallHTTP', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallHTTP.
+   * Creates a copy of the CallHTTP, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallHTTP instance.
+   */
+  normalize(): CallHTTP & Specification.CallHTTP {
+    const copy = new CallHTTP(this as any) as CallHTTPIntersection;
+    return getLifecycleHooks('CallHTTP')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallHTTP = CallHTTP as CallHTTPConstructor;
diff --git a/src/lib/generated/classes/call-open-api.ts b/src/lib/generated/classes/call-open-api.ts
new file mode 100644
index 0000000..2c89f67
--- /dev/null
+++ b/src/lib/generated/classes/call-open-api.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _OpenAPIArguments } from './open-api-arguments';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallOpenAPI class and type
+ */
+export type CallOpenAPIIntersection = CallOpenAPI & Specification.CallOpenAPI;
+
+/**
+ * Represents a constructor for the intersection of the CallOpenAPI class and type
+ */
+export interface CallOpenAPIConstructor {
+  new (model?: Partial): CallOpenAPIIntersection;
+}
+
+/**
+ * Represents a CallOpenAPI with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallOpenAPI extends _TaskBase {
+  /**
+   * Instanciates a new instance of the CallOpenAPI class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallOpenAPI.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallOpenAPI & object;
+    if (isObject(model)) {
+      self.call = 'openapi' as const;
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.with === 'object') self.with = new _OpenAPIArguments(model.with);
+    }
+    getLifecycleHooks('CallOpenAPI')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallOpenAPI.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallOpenAPI(this as any) as CallOpenAPIIntersection;
+    validate('CallOpenAPI', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallOpenAPI.
+   * Creates a copy of the CallOpenAPI, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallOpenAPI instance.
+   */
+  normalize(): CallOpenAPI & Specification.CallOpenAPI {
+    const copy = new CallOpenAPI(this as any) as CallOpenAPIIntersection;
+    return getLifecycleHooks('CallOpenAPI')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallOpenAPI = CallOpenAPI as CallOpenAPIConstructor;
diff --git a/src/lib/generated/classes/call-task.ts b/src/lib/generated/classes/call-task.ts
new file mode 100644
index 0000000..cc1cc3c
--- /dev/null
+++ b/src/lib/generated/classes/call-task.ts
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the CallTask class and type
+ */
+export type CallTaskIntersection = CallTask & Specification.CallTask;
+
+/**
+ * Represents a constructor for the intersection of the CallTask class and type
+ */
+export interface CallTaskConstructor {
+  new (model?: Partial): CallTaskIntersection;
+}
+
+/**
+ * Represents a CallTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CallTask extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the CallTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CallTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.CallTask & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.TaskBase).input === 'object')
+        (self as Specification.TaskBase).input = new _Input(
+          (model as Specification.TaskBase).input as Specification.Input,
+        );
+      if (typeof (model as Specification.TaskBase).output === 'object')
+        (self as Specification.TaskBase).output = new _Output(
+          (model as Specification.TaskBase).output as Specification.Output,
+        );
+      if (typeof (model as Specification.TaskBase).export === 'object')
+        (self as Specification.TaskBase).export = new _Export(
+          (model as Specification.TaskBase).export as Specification.Export,
+        );
+      if (typeof (model as Specification.TaskBase).timeout === 'object')
+        (self as Specification.TaskBase).timeout = new _TaskBaseTimeout(
+          (model as Specification.TaskBase).timeout as Specification.TaskBaseTimeout,
+        );
+      if (typeof (model as Specification.TaskBase).metadata === 'object')
+        (self as Specification.TaskBase).metadata = new _TaskMetadata(
+          (model as Specification.TaskBase).metadata as Specification.TaskMetadata,
+        );
+    }
+    getLifecycleHooks('CallTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CallTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CallTask(this as any) as CallTaskIntersection;
+    validate('CallTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CallTask.
+   * Creates a copy of the CallTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CallTask instance.
+   */
+  normalize(): CallTask & Specification.CallTask {
+    const copy = new CallTask(this as any) as CallTaskIntersection;
+    return getLifecycleHooks('CallTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CallTask = CallTask as CallTaskConstructor;
diff --git a/src/lib/generated/classes/catalog.ts b/src/lib/generated/classes/catalog.ts
new file mode 100644
index 0000000..e806b71
--- /dev/null
+++ b/src/lib/generated/classes/catalog.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Endpoint } from './endpoint';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Catalog class and type
+ */
+export type CatalogIntersection = Catalog & Specification.Catalog;
+
+/**
+ * Represents a constructor for the intersection of the Catalog class and type
+ */
+export interface CatalogConstructor {
+  new (model?: Partial): CatalogIntersection;
+}
+
+/**
+ * Represents a Catalog with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Catalog extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Catalog class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Catalog.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Catalog & object;
+    if (isObject(model)) {
+      if (typeof model.endpoint === 'object') self.endpoint = new _Endpoint(model.endpoint);
+    }
+    getLifecycleHooks('Catalog')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Catalog.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Catalog(this as any) as CatalogIntersection;
+    validate('Catalog', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Catalog.
+   * Creates a copy of the Catalog, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Catalog instance.
+   */
+  normalize(): Catalog & Specification.Catalog {
+    const copy = new Catalog(this as any) as CatalogIntersection;
+    return getLifecycleHooks('Catalog')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Catalog = Catalog as CatalogConstructor;
diff --git a/src/lib/generated/classes/catch-errors.ts b/src/lib/generated/classes/catch-errors.ts
new file mode 100644
index 0000000..2d43eaa
--- /dev/null
+++ b/src/lib/generated/classes/catch-errors.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the CatchErrors class and type
+ */
+export type CatchErrorsIntersection = CatchErrors & Specification.CatchErrors;
+
+/**
+ * Represents a constructor for the intersection of the CatchErrors class and type
+ */
+export interface CatchErrorsConstructor {
+  new (model?: Partial): CatchErrorsIntersection;
+}
+
+/**
+ * Represents a CatchErrors with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class CatchErrors extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the CatchErrors class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the CatchErrors.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('CatchErrors')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the CatchErrors.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new CatchErrors(this as any) as CatchErrorsIntersection;
+    validate('CatchErrors', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the CatchErrors.
+   * Creates a copy of the CatchErrors, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the CatchErrors instance.
+   */
+  normalize(): CatchErrors & Specification.CatchErrors {
+    const copy = new CatchErrors(this as any) as CatchErrorsIntersection;
+    return getLifecycleHooks('CatchErrors')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _CatchErrors = CatchErrors as CatchErrorsConstructor;
diff --git a/src/lib/generated/classes/constant-backoff.ts b/src/lib/generated/classes/constant-backoff.ts
new file mode 100644
index 0000000..0d0ce02
--- /dev/null
+++ b/src/lib/generated/classes/constant-backoff.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ConstantBackoff class and type
+ */
+export type ConstantBackoffIntersection = ConstantBackoff & Specification.ConstantBackoff;
+
+/**
+ * Represents a constructor for the intersection of the ConstantBackoff class and type
+ */
+export interface ConstantBackoffConstructor {
+  new (model?: Partial): ConstantBackoffIntersection;
+}
+
+/**
+ * Represents a ConstantBackoff with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ConstantBackoff extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ConstantBackoff class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ConstantBackoff.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ConstantBackoff')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ConstantBackoff.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ConstantBackoff(this as any) as ConstantBackoffIntersection;
+    validate('ConstantBackoff', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ConstantBackoff.
+   * Creates a copy of the ConstantBackoff, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ConstantBackoff instance.
+   */
+  normalize(): ConstantBackoff & Specification.ConstantBackoff {
+    const copy = new ConstantBackoff(this as any) as ConstantBackoffIntersection;
+    return getLifecycleHooks('ConstantBackoff')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ConstantBackoff = ConstantBackoff as ConstantBackoffConstructor;
diff --git a/src/lib/generated/classes/container-environment.ts b/src/lib/generated/classes/container-environment.ts
new file mode 100644
index 0000000..664daa3
--- /dev/null
+++ b/src/lib/generated/classes/container-environment.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ContainerEnvironment class and type
+ */
+export type ContainerEnvironmentIntersection = ContainerEnvironment & Specification.ContainerEnvironment;
+
+/**
+ * Represents a constructor for the intersection of the ContainerEnvironment class and type
+ */
+export interface ContainerEnvironmentConstructor {
+  new (model?: Partial): ContainerEnvironmentIntersection;
+}
+
+/**
+ * Represents a ContainerEnvironment with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ContainerEnvironment extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ContainerEnvironment class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ContainerEnvironment.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ContainerEnvironment')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ContainerEnvironment.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ContainerEnvironment(this as any) as ContainerEnvironmentIntersection;
+    validate('ContainerEnvironment', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ContainerEnvironment.
+   * Creates a copy of the ContainerEnvironment, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ContainerEnvironment instance.
+   */
+  normalize(): ContainerEnvironment & Specification.ContainerEnvironment {
+    const copy = new ContainerEnvironment(this as any) as ContainerEnvironmentIntersection;
+    return getLifecycleHooks('ContainerEnvironment')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ContainerEnvironment = ContainerEnvironment as ContainerEnvironmentConstructor;
diff --git a/src/lib/generated/classes/container-ports.ts b/src/lib/generated/classes/container-ports.ts
new file mode 100644
index 0000000..fd9615b
--- /dev/null
+++ b/src/lib/generated/classes/container-ports.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ContainerPorts class and type
+ */
+export type ContainerPortsIntersection = ContainerPorts & Specification.ContainerPorts;
+
+/**
+ * Represents a constructor for the intersection of the ContainerPorts class and type
+ */
+export interface ContainerPortsConstructor {
+  new (model?: Partial): ContainerPortsIntersection;
+}
+
+/**
+ * Represents a ContainerPorts with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ContainerPorts extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ContainerPorts class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ContainerPorts.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ContainerPorts')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ContainerPorts.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ContainerPorts(this as any) as ContainerPortsIntersection;
+    validate('ContainerPorts', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ContainerPorts.
+   * Creates a copy of the ContainerPorts, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ContainerPorts instance.
+   */
+  normalize(): ContainerPorts & Specification.ContainerPorts {
+    const copy = new ContainerPorts(this as any) as ContainerPortsIntersection;
+    return getLifecycleHooks('ContainerPorts')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ContainerPorts = ContainerPorts as ContainerPortsConstructor;
diff --git a/src/lib/generated/classes/container-volumes.ts b/src/lib/generated/classes/container-volumes.ts
new file mode 100644
index 0000000..14636b5
--- /dev/null
+++ b/src/lib/generated/classes/container-volumes.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ContainerVolumes class and type
+ */
+export type ContainerVolumesIntersection = ContainerVolumes & Specification.ContainerVolumes;
+
+/**
+ * Represents a constructor for the intersection of the ContainerVolumes class and type
+ */
+export interface ContainerVolumesConstructor {
+  new (model?: Partial): ContainerVolumesIntersection;
+}
+
+/**
+ * Represents a ContainerVolumes with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ContainerVolumes extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ContainerVolumes class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ContainerVolumes.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ContainerVolumes')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ContainerVolumes.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ContainerVolumes(this as any) as ContainerVolumesIntersection;
+    validate('ContainerVolumes', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ContainerVolumes.
+   * Creates a copy of the ContainerVolumes, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ContainerVolumes instance.
+   */
+  normalize(): ContainerVolumes & Specification.ContainerVolumes {
+    const copy = new ContainerVolumes(this as any) as ContainerVolumesIntersection;
+    return getLifecycleHooks('ContainerVolumes')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ContainerVolumes = ContainerVolumes as ContainerVolumesConstructor;
diff --git a/src/lib/generated/classes/container.ts b/src/lib/generated/classes/container.ts
new file mode 100644
index 0000000..000b05d
--- /dev/null
+++ b/src/lib/generated/classes/container.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ContainerPorts } from './container-ports';
+import { _ContainerVolumes } from './container-volumes';
+import { _ContainerEnvironment } from './container-environment';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Container class and type
+ */
+export type ContainerIntersection = Container & Specification.Container;
+
+/**
+ * Represents a constructor for the intersection of the Container class and type
+ */
+export interface ContainerConstructor {
+  new (model?: Partial): ContainerIntersection;
+}
+
+/**
+ * Represents a Container with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Container extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Container class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Container.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Container & object;
+    if (isObject(model)) {
+      if (typeof model.ports === 'object') self.ports = new _ContainerPorts(model.ports);
+      if (typeof model.volumes === 'object') self.volumes = new _ContainerVolumes(model.volumes);
+      if (typeof model.environment === 'object') self.environment = new _ContainerEnvironment(model.environment);
+    }
+    getLifecycleHooks('Container')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Container.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Container(this as any) as ContainerIntersection;
+    validate('Container', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Container.
+   * Creates a copy of the Container, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Container instance.
+   */
+  normalize(): Container & Specification.Container {
+    const copy = new Container(this as any) as ContainerIntersection;
+    return getLifecycleHooks('Container')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Container = Container as ContainerConstructor;
diff --git a/src/lib/generated/classes/digest-authentication-policy-configuration.ts b/src/lib/generated/classes/digest-authentication-policy-configuration.ts
new file mode 100644
index 0000000..5b3de79
--- /dev/null
+++ b/src/lib/generated/classes/digest-authentication-policy-configuration.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the DigestAuthenticationPolicyConfiguration class and type
+ */
+export type DigestAuthenticationPolicyConfigurationIntersection = DigestAuthenticationPolicyConfiguration &
+  Specification.DigestAuthenticationPolicyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the DigestAuthenticationPolicyConfiguration class and type
+ */
+export interface DigestAuthenticationPolicyConfigurationConstructor {
+  new (
+    model?: Partial,
+  ): DigestAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * Represents a DigestAuthenticationPolicyConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class DigestAuthenticationPolicyConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the DigestAuthenticationPolicyConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the DigestAuthenticationPolicyConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('DigestAuthenticationPolicyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the DigestAuthenticationPolicyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new DigestAuthenticationPolicyConfiguration(
+      this as any,
+    ) as DigestAuthenticationPolicyConfigurationIntersection;
+    validate('DigestAuthenticationPolicyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the DigestAuthenticationPolicyConfiguration.
+   * Creates a copy of the DigestAuthenticationPolicyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the DigestAuthenticationPolicyConfiguration instance.
+   */
+  normalize(): DigestAuthenticationPolicyConfiguration & Specification.DigestAuthenticationPolicyConfiguration {
+    const copy = new DigestAuthenticationPolicyConfiguration(
+      this as any,
+    ) as DigestAuthenticationPolicyConfigurationIntersection;
+    return getLifecycleHooks('DigestAuthenticationPolicyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _DigestAuthenticationPolicyConfiguration =
+  DigestAuthenticationPolicyConfiguration as DigestAuthenticationPolicyConfigurationConstructor;
diff --git a/src/lib/generated/classes/digest-authentication-policy.ts b/src/lib/generated/classes/digest-authentication-policy.ts
new file mode 100644
index 0000000..60ca2ad
--- /dev/null
+++ b/src/lib/generated/classes/digest-authentication-policy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _DigestAuthenticationPolicyConfiguration } from './digest-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the DigestAuthenticationPolicy class and type
+ */
+export type DigestAuthenticationPolicyIntersection = DigestAuthenticationPolicy &
+  Specification.DigestAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the DigestAuthenticationPolicy class and type
+ */
+export interface DigestAuthenticationPolicyConstructor {
+  new (model?: Partial): DigestAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a DigestAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class DigestAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the DigestAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the DigestAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.DigestAuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.digest === 'object') self.digest = new _DigestAuthenticationPolicyConfiguration(model.digest);
+    }
+    getLifecycleHooks('DigestAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the DigestAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new DigestAuthenticationPolicy(this as any) as DigestAuthenticationPolicyIntersection;
+    validate('DigestAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the DigestAuthenticationPolicy.
+   * Creates a copy of the DigestAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the DigestAuthenticationPolicy instance.
+   */
+  normalize(): DigestAuthenticationPolicy & Specification.DigestAuthenticationPolicy {
+    const copy = new DigestAuthenticationPolicy(this as any) as DigestAuthenticationPolicyIntersection;
+    return getLifecycleHooks('DigestAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _DigestAuthenticationPolicy = DigestAuthenticationPolicy as DigestAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/digest-authentication-properties.ts b/src/lib/generated/classes/digest-authentication-properties.ts
new file mode 100644
index 0000000..c0529b4
--- /dev/null
+++ b/src/lib/generated/classes/digest-authentication-properties.ts
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the DigestAuthenticationProperties class and type
+ */
+export type DigestAuthenticationPropertiesIntersection = DigestAuthenticationProperties &
+  Specification.DigestAuthenticationProperties;
+
+/**
+ * Represents a constructor for the intersection of the DigestAuthenticationProperties class and type
+ */
+export interface DigestAuthenticationPropertiesConstructor {
+  new (model?: Partial): DigestAuthenticationPropertiesIntersection;
+}
+
+/**
+ * Represents a DigestAuthenticationProperties with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class DigestAuthenticationProperties extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the DigestAuthenticationProperties class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the DigestAuthenticationProperties.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('DigestAuthenticationProperties')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the DigestAuthenticationProperties.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new DigestAuthenticationProperties(this as any) as DigestAuthenticationPropertiesIntersection;
+    validate('DigestAuthenticationProperties', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the DigestAuthenticationProperties.
+   * Creates a copy of the DigestAuthenticationProperties, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the DigestAuthenticationProperties instance.
+   */
+  normalize(): DigestAuthenticationProperties & Specification.DigestAuthenticationProperties {
+    const copy = new DigestAuthenticationProperties(this as any) as DigestAuthenticationPropertiesIntersection;
+    return getLifecycleHooks('DigestAuthenticationProperties')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _DigestAuthenticationProperties =
+  DigestAuthenticationProperties as DigestAuthenticationPropertiesConstructor;
diff --git a/src/lib/generated/classes/do-task.ts b/src/lib/generated/classes/do-task.ts
new file mode 100644
index 0000000..2568b0e
--- /dev/null
+++ b/src/lib/generated/classes/do-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _TaskList } from './task-list';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the DoTask class and type
+ */
+export type DoTaskIntersection = DoTask & Specification.DoTask;
+
+/**
+ * Represents a constructor for the intersection of the DoTask class and type
+ */
+export interface DoTaskConstructor {
+  new (model?: Partial): DoTaskIntersection;
+}
+
+/**
+ * Represents a DoTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class DoTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the DoTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the DoTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.DoTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.do === 'object') self.do = new _TaskList(model.do);
+    }
+    getLifecycleHooks('DoTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the DoTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new DoTask(this as any) as DoTaskIntersection;
+    validate('DoTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the DoTask.
+   * Creates a copy of the DoTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the DoTask instance.
+   */
+  normalize(): DoTask & Specification.DoTask {
+    const copy = new DoTask(this as any) as DoTaskIntersection;
+    return getLifecycleHooks('DoTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _DoTask = DoTask as DoTaskConstructor;
diff --git a/src/lib/generated/classes/document.ts b/src/lib/generated/classes/document.ts
new file mode 100644
index 0000000..f7f773c
--- /dev/null
+++ b/src/lib/generated/classes/document.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _WorkflowTags } from './workflow-tags';
+import { _WorkflowMetadata } from './workflow-metadata';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Document class and type
+ */
+export type DocumentIntersection = Document & Specification.Document;
+
+/**
+ * Represents a constructor for the intersection of the Document class and type
+ */
+export interface DocumentConstructor {
+  new (model?: Partial): DocumentIntersection;
+}
+
+/**
+ * Represents a Document with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Document extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Document class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Document.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Document & object;
+    if (isObject(model)) {
+      if (typeof model.tags === 'object') self.tags = new _WorkflowTags(model.tags);
+      if (typeof model.metadata === 'object') self.metadata = new _WorkflowMetadata(model.metadata);
+    }
+    getLifecycleHooks('Document')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Document.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Document(this as any) as DocumentIntersection;
+    validate('Document', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Document.
+   * Creates a copy of the Document, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Document instance.
+   */
+  normalize(): Document & Specification.Document {
+    const copy = new Document(this as any) as DocumentIntersection;
+    return getLifecycleHooks('Document')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Document = Document as DocumentConstructor;
diff --git a/src/lib/generated/classes/duration-inline.ts b/src/lib/generated/classes/duration-inline.ts
new file mode 100644
index 0000000..14d16e6
--- /dev/null
+++ b/src/lib/generated/classes/duration-inline.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the DurationInline class and type
+ */
+export type DurationInlineIntersection = DurationInline & Specification.DurationInline;
+
+/**
+ * Represents a constructor for the intersection of the DurationInline class and type
+ */
+export interface DurationInlineConstructor {
+  new (model?: Partial): DurationInlineIntersection;
+}
+
+/**
+ * Represents a DurationInline with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class DurationInline extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the DurationInline class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the DurationInline.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('DurationInline')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the DurationInline.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new DurationInline(this as any) as DurationInlineIntersection;
+    validate('DurationInline', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the DurationInline.
+   * Creates a copy of the DurationInline, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the DurationInline instance.
+   */
+  normalize(): DurationInline & Specification.DurationInline {
+    const copy = new DurationInline(this as any) as DurationInlineIntersection;
+    return getLifecycleHooks('DurationInline')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _DurationInline = DurationInline as DurationInlineConstructor;
diff --git a/src/lib/generated/classes/duration.ts b/src/lib/generated/classes/duration.ts
new file mode 100644
index 0000000..0df5591
--- /dev/null
+++ b/src/lib/generated/classes/duration.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the Duration class and type
+ */
+export type DurationIntersection = Duration & Specification.Duration;
+
+/**
+ * Represents a constructor for the intersection of the Duration class and type
+ */
+export interface DurationConstructor {
+  new (model?: Partial): DurationIntersection;
+}
+
+/**
+ * Represents a Duration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Duration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Duration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Duration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('Duration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Duration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Duration(this as any) as DurationIntersection;
+    validate('Duration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Duration.
+   * Creates a copy of the Duration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Duration instance.
+   */
+  normalize(): Duration & Specification.Duration {
+    const copy = new Duration(this as any) as DurationIntersection;
+    return getLifecycleHooks('Duration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Duration = Duration as DurationConstructor;
diff --git a/src/lib/generated/classes/emit-event-definition.ts b/src/lib/generated/classes/emit-event-definition.ts
new file mode 100644
index 0000000..d388f3d
--- /dev/null
+++ b/src/lib/generated/classes/emit-event-definition.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EmitEventWith } from './emit-event-with';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EmitEventDefinition class and type
+ */
+export type EmitEventDefinitionIntersection = EmitEventDefinition & Specification.EmitEventDefinition;
+
+/**
+ * Represents a constructor for the intersection of the EmitEventDefinition class and type
+ */
+export interface EmitEventDefinitionConstructor {
+  new (model?: Partial): EmitEventDefinitionIntersection;
+}
+
+/**
+ * Represents a EmitEventDefinition with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EmitEventDefinition extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EmitEventDefinition class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EmitEventDefinition.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EmitEventDefinition & object;
+    if (isObject(model)) {
+      if (typeof model.with === 'object') self.with = new _EmitEventWith(model.with);
+    }
+    getLifecycleHooks('EmitEventDefinition')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EmitEventDefinition.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EmitEventDefinition(this as any) as EmitEventDefinitionIntersection;
+    validate('EmitEventDefinition', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EmitEventDefinition.
+   * Creates a copy of the EmitEventDefinition, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EmitEventDefinition instance.
+   */
+  normalize(): EmitEventDefinition & Specification.EmitEventDefinition {
+    const copy = new EmitEventDefinition(this as any) as EmitEventDefinitionIntersection;
+    return getLifecycleHooks('EmitEventDefinition')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EmitEventDefinition = EmitEventDefinition as EmitEventDefinitionConstructor;
diff --git a/src/lib/generated/classes/emit-event-with.ts b/src/lib/generated/classes/emit-event-with.ts
new file mode 100644
index 0000000..45ccbf6
--- /dev/null
+++ b/src/lib/generated/classes/emit-event-with.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EmitEventWith class and type
+ */
+export type EmitEventWithIntersection = EmitEventWith & Specification.EmitEventWith;
+
+/**
+ * Represents a constructor for the intersection of the EmitEventWith class and type
+ */
+export interface EmitEventWithConstructor {
+  new (model?: Partial): EmitEventWithIntersection;
+}
+
+/**
+ * Represents a EmitEventWith with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EmitEventWith extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EmitEventWith class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EmitEventWith.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EmitEventWith')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EmitEventWith.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EmitEventWith(this as any) as EmitEventWithIntersection;
+    validate('EmitEventWith', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EmitEventWith.
+   * Creates a copy of the EmitEventWith, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EmitEventWith instance.
+   */
+  normalize(): EmitEventWith & Specification.EmitEventWith {
+    const copy = new EmitEventWith(this as any) as EmitEventWithIntersection;
+    return getLifecycleHooks('EmitEventWith')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EmitEventWith = EmitEventWith as EmitEventWithConstructor;
diff --git a/src/lib/generated/classes/emit-task-configuration.ts b/src/lib/generated/classes/emit-task-configuration.ts
new file mode 100644
index 0000000..c081588
--- /dev/null
+++ b/src/lib/generated/classes/emit-task-configuration.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EmitEventDefinition } from './emit-event-definition';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EmitTaskConfiguration class and type
+ */
+export type EmitTaskConfigurationIntersection = EmitTaskConfiguration & Specification.EmitTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the EmitTaskConfiguration class and type
+ */
+export interface EmitTaskConfigurationConstructor {
+  new (model?: Partial): EmitTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a EmitTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EmitTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EmitTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EmitTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EmitTaskConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.event === 'object') self.event = new _EmitEventDefinition(model.event);
+    }
+    getLifecycleHooks('EmitTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EmitTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EmitTaskConfiguration(this as any) as EmitTaskConfigurationIntersection;
+    validate('EmitTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EmitTaskConfiguration.
+   * Creates a copy of the EmitTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EmitTaskConfiguration instance.
+   */
+  normalize(): EmitTaskConfiguration & Specification.EmitTaskConfiguration {
+    const copy = new EmitTaskConfiguration(this as any) as EmitTaskConfigurationIntersection;
+    return getLifecycleHooks('EmitTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EmitTaskConfiguration = EmitTaskConfiguration as EmitTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/emit-task.ts b/src/lib/generated/classes/emit-task.ts
new file mode 100644
index 0000000..4890334
--- /dev/null
+++ b/src/lib/generated/classes/emit-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _EmitTaskConfiguration } from './emit-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EmitTask class and type
+ */
+export type EmitTaskIntersection = EmitTask & Specification.EmitTask;
+
+/**
+ * Represents a constructor for the intersection of the EmitTask class and type
+ */
+export interface EmitTaskConstructor {
+  new (model?: Partial): EmitTaskIntersection;
+}
+
+/**
+ * Represents a EmitTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EmitTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the EmitTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EmitTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EmitTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.emit === 'object') self.emit = new _EmitTaskConfiguration(model.emit);
+    }
+    getLifecycleHooks('EmitTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EmitTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EmitTask(this as any) as EmitTaskIntersection;
+    validate('EmitTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EmitTask.
+   * Creates a copy of the EmitTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EmitTask instance.
+   */
+  normalize(): EmitTask & Specification.EmitTask {
+    const copy = new EmitTask(this as any) as EmitTaskIntersection;
+    return getLifecycleHooks('EmitTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EmitTask = EmitTask as EmitTaskConstructor;
diff --git a/src/lib/generated/classes/endpoint-configuration.ts b/src/lib/generated/classes/endpoint-configuration.ts
new file mode 100644
index 0000000..401f12c
--- /dev/null
+++ b/src/lib/generated/classes/endpoint-configuration.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EndpointConfiguration class and type
+ */
+export type EndpointConfigurationIntersection = EndpointConfiguration & Specification.EndpointConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the EndpointConfiguration class and type
+ */
+export interface EndpointConfigurationConstructor {
+  new (model?: Partial): EndpointConfigurationIntersection;
+}
+
+/**
+ * Represents a EndpointConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EndpointConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EndpointConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EndpointConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EndpointConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.authentication === 'object')
+        self.authentication = new _ReferenceableAuthenticationPolicy(model.authentication);
+    }
+    getLifecycleHooks('EndpointConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EndpointConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EndpointConfiguration(this as any) as EndpointConfigurationIntersection;
+    validate('EndpointConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EndpointConfiguration.
+   * Creates a copy of the EndpointConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EndpointConfiguration instance.
+   */
+  normalize(): EndpointConfiguration & Specification.EndpointConfiguration {
+    const copy = new EndpointConfiguration(this as any) as EndpointConfigurationIntersection;
+    return getLifecycleHooks('EndpointConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EndpointConfiguration = EndpointConfiguration as EndpointConfigurationConstructor;
diff --git a/src/lib/generated/classes/endpoint-uri.ts b/src/lib/generated/classes/endpoint-uri.ts
new file mode 100644
index 0000000..ab7a36f
--- /dev/null
+++ b/src/lib/generated/classes/endpoint-uri.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EndpointUri class and type
+ */
+export type EndpointUriIntersection = EndpointUri & Specification.EndpointUri;
+
+/**
+ * Represents a constructor for the intersection of the EndpointUri class and type
+ */
+export interface EndpointUriConstructor {
+  new (model?: Partial): EndpointUriIntersection;
+}
+
+/**
+ * Represents a EndpointUri with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EndpointUri extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EndpointUri class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EndpointUri.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EndpointUri')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EndpointUri.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EndpointUri(this as any) as EndpointUriIntersection;
+    validate('EndpointUri', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EndpointUri.
+   * Creates a copy of the EndpointUri, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EndpointUri instance.
+   */
+  normalize(): EndpointUri & Specification.EndpointUri {
+    const copy = new EndpointUri(this as any) as EndpointUriIntersection;
+    return getLifecycleHooks('EndpointUri')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EndpointUri = EndpointUri as EndpointUriConstructor;
diff --git a/src/lib/generated/classes/endpoint.ts b/src/lib/generated/classes/endpoint.ts
new file mode 100644
index 0000000..84af5d5
--- /dev/null
+++ b/src/lib/generated/classes/endpoint.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Endpoint class and type
+ */
+export type EndpointIntersection = Endpoint & Specification.Endpoint;
+
+/**
+ * Represents a constructor for the intersection of the Endpoint class and type
+ */
+export interface EndpointConstructor {
+  new (model?: Partial): EndpointIntersection;
+}
+
+/**
+ * Represents a Endpoint with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Endpoint extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Endpoint class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Endpoint.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Endpoint & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.EndpointConfiguration).authentication === 'object')
+        (self as Specification.EndpointConfiguration).authentication = new _ReferenceableAuthenticationPolicy(
+          (model as Specification.EndpointConfiguration)
+            .authentication as Specification.ReferenceableAuthenticationPolicy,
+        );
+    }
+    getLifecycleHooks('Endpoint')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Endpoint.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Endpoint(this as any) as EndpointIntersection;
+    validate('Endpoint', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Endpoint.
+   * Creates a copy of the Endpoint, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Endpoint instance.
+   */
+  normalize(): Endpoint & Specification.Endpoint {
+    const copy = new Endpoint(this as any) as EndpointIntersection;
+    return getLifecycleHooks('Endpoint')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Endpoint = Endpoint as EndpointConstructor;
diff --git a/src/lib/generated/classes/error-instance.ts b/src/lib/generated/classes/error-instance.ts
new file mode 100644
index 0000000..0a70432
--- /dev/null
+++ b/src/lib/generated/classes/error-instance.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ErrorInstance class and type
+ */
+export type ErrorInstanceIntersection = ErrorInstance & Specification.ErrorInstance;
+
+/**
+ * Represents a constructor for the intersection of the ErrorInstance class and type
+ */
+export interface ErrorInstanceConstructor {
+  new (model?: Partial): ErrorInstanceIntersection;
+}
+
+/**
+ * Represents a ErrorInstance with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ErrorInstance extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ErrorInstance class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ErrorInstance.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ErrorInstance')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ErrorInstance.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ErrorInstance(this as any) as ErrorInstanceIntersection;
+    validate('ErrorInstance', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ErrorInstance.
+   * Creates a copy of the ErrorInstance, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ErrorInstance instance.
+   */
+  normalize(): ErrorInstance & Specification.ErrorInstance {
+    const copy = new ErrorInstance(this as any) as ErrorInstanceIntersection;
+    return getLifecycleHooks('ErrorInstance')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ErrorInstance = ErrorInstance as ErrorInstanceConstructor;
diff --git a/src/lib/generated/classes/error-type.ts b/src/lib/generated/classes/error-type.ts
new file mode 100644
index 0000000..ba3e72d
--- /dev/null
+++ b/src/lib/generated/classes/error-type.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ErrorType class and type
+ */
+export type ErrorTypeIntersection = ErrorType & Specification.ErrorType;
+
+/**
+ * Represents a constructor for the intersection of the ErrorType class and type
+ */
+export interface ErrorTypeConstructor {
+  new (model?: Partial): ErrorTypeIntersection;
+}
+
+/**
+ * Represents a ErrorType with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ErrorType extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ErrorType class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ErrorType.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ErrorType')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ErrorType.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ErrorType(this as any) as ErrorTypeIntersection;
+    validate('ErrorType', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ErrorType.
+   * Creates a copy of the ErrorType, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ErrorType instance.
+   */
+  normalize(): ErrorType & Specification.ErrorType {
+    const copy = new ErrorType(this as any) as ErrorTypeIntersection;
+    return getLifecycleHooks('ErrorType')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ErrorType = ErrorType as ErrorTypeConstructor;
diff --git a/src/lib/generated/classes/error.ts b/src/lib/generated/classes/error.ts
new file mode 100644
index 0000000..19e1fbb
--- /dev/null
+++ b/src/lib/generated/classes/error.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the Error class and type
+ */
+export type ErrorIntersection = Error & Specification.Error;
+
+/**
+ * Represents a constructor for the intersection of the Error class and type
+ */
+export interface ErrorConstructor {
+  new (model?: Partial): ErrorIntersection;
+}
+
+/**
+ * Represents a Error with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Error extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Error class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Error.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('Error')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Error.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Error(this as any) as ErrorIntersection;
+    validate('Error', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Error.
+   * Creates a copy of the Error, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Error instance.
+   */
+  normalize(): Error & Specification.Error {
+    const copy = new Error(this as any) as ErrorIntersection;
+    return getLifecycleHooks('Error')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Error = Error as ErrorConstructor;
diff --git a/src/lib/generated/classes/event-consumption-strategy.ts b/src/lib/generated/classes/event-consumption-strategy.ts
new file mode 100644
index 0000000..798e328
--- /dev/null
+++ b/src/lib/generated/classes/event-consumption-strategy.ts
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _AllEventConsumptionStrategyConfiguration } from './all-event-consumption-strategy-configuration';
+import { _AnyEventConsumptionStrategyConfiguration } from './any-event-consumption-strategy-configuration';
+import { _EventFilter } from './event-filter';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EventConsumptionStrategy class and type
+ */
+export type EventConsumptionStrategyIntersection = EventConsumptionStrategy & Specification.EventConsumptionStrategy;
+
+/**
+ * Represents a constructor for the intersection of the EventConsumptionStrategy class and type
+ */
+export interface EventConsumptionStrategyConstructor {
+  new (model?: Partial): EventConsumptionStrategyIntersection;
+}
+
+/**
+ * Represents a EventConsumptionStrategy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventConsumptionStrategy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventConsumptionStrategy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventConsumptionStrategy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EventConsumptionStrategy & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.AllEventConsumptionStrategy).all === 'object')
+        (self as Specification.AllEventConsumptionStrategy).all = new _AllEventConsumptionStrategyConfiguration(
+          (model as Specification.AllEventConsumptionStrategy)
+            .all as Specification.AllEventConsumptionStrategyConfiguration,
+        );
+      if (typeof (model as Specification.AnyEventConsumptionStrategy).any === 'object')
+        (self as Specification.AnyEventConsumptionStrategy).any = new _AnyEventConsumptionStrategyConfiguration(
+          (model as Specification.AnyEventConsumptionStrategy)
+            .any as Specification.AnyEventConsumptionStrategyConfiguration,
+        );
+      if (typeof (model as Specification.OneEventConsumptionStrategy).one === 'object')
+        (self as Specification.OneEventConsumptionStrategy).one = new _EventFilter(
+          (model as Specification.OneEventConsumptionStrategy).one as Specification.EventFilter,
+        );
+    }
+    getLifecycleHooks('EventConsumptionStrategy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventConsumptionStrategy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventConsumptionStrategy(this as any) as EventConsumptionStrategyIntersection;
+    validate('EventConsumptionStrategy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventConsumptionStrategy.
+   * Creates a copy of the EventConsumptionStrategy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventConsumptionStrategy instance.
+   */
+  normalize(): EventConsumptionStrategy & Specification.EventConsumptionStrategy {
+    const copy = new EventConsumptionStrategy(this as any) as EventConsumptionStrategyIntersection;
+    return getLifecycleHooks('EventConsumptionStrategy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventConsumptionStrategy = EventConsumptionStrategy as EventConsumptionStrategyConstructor;
diff --git a/src/lib/generated/classes/event-dataschema.ts b/src/lib/generated/classes/event-dataschema.ts
new file mode 100644
index 0000000..20d0f62
--- /dev/null
+++ b/src/lib/generated/classes/event-dataschema.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EventDataschema class and type
+ */
+export type EventDataschemaIntersection = EventDataschema & Specification.EventDataschema;
+
+/**
+ * Represents a constructor for the intersection of the EventDataschema class and type
+ */
+export interface EventDataschemaConstructor {
+  new (model?: Partial): EventDataschemaIntersection;
+}
+
+/**
+ * Represents a EventDataschema with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventDataschema extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventDataschema class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventDataschema.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EventDataschema')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventDataschema.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventDataschema(this as any) as EventDataschemaIntersection;
+    validate('EventDataschema', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventDataschema.
+   * Creates a copy of the EventDataschema, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventDataschema instance.
+   */
+  normalize(): EventDataschema & Specification.EventDataschema {
+    const copy = new EventDataschema(this as any) as EventDataschemaIntersection;
+    return getLifecycleHooks('EventDataschema')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventDataschema = EventDataschema as EventDataschemaConstructor;
diff --git a/src/lib/generated/classes/event-filter-correlate.ts b/src/lib/generated/classes/event-filter-correlate.ts
new file mode 100644
index 0000000..b03b20e
--- /dev/null
+++ b/src/lib/generated/classes/event-filter-correlate.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EventFilterCorrelate class and type
+ */
+export type EventFilterCorrelateIntersection = EventFilterCorrelate & Specification.EventFilterCorrelate;
+
+/**
+ * Represents a constructor for the intersection of the EventFilterCorrelate class and type
+ */
+export interface EventFilterCorrelateConstructor {
+  new (model?: Partial): EventFilterCorrelateIntersection;
+}
+
+/**
+ * Represents a EventFilterCorrelate with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventFilterCorrelate extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventFilterCorrelate class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventFilterCorrelate.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EventFilterCorrelate')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventFilterCorrelate.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventFilterCorrelate(this as any) as EventFilterCorrelateIntersection;
+    validate('EventFilterCorrelate', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventFilterCorrelate.
+   * Creates a copy of the EventFilterCorrelate, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventFilterCorrelate instance.
+   */
+  normalize(): EventFilterCorrelate & Specification.EventFilterCorrelate {
+    const copy = new EventFilterCorrelate(this as any) as EventFilterCorrelateIntersection;
+    return getLifecycleHooks('EventFilterCorrelate')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventFilterCorrelate = EventFilterCorrelate as EventFilterCorrelateConstructor;
diff --git a/src/lib/generated/classes/event-filter.ts b/src/lib/generated/classes/event-filter.ts
new file mode 100644
index 0000000..1427b76
--- /dev/null
+++ b/src/lib/generated/classes/event-filter.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _WithEvent } from './with-event';
+import { _EventFilterCorrelate } from './event-filter-correlate';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the EventFilter class and type
+ */
+export type EventFilterIntersection = EventFilter & Specification.EventFilter;
+
+/**
+ * Represents a constructor for the intersection of the EventFilter class and type
+ */
+export interface EventFilterConstructor {
+  new (model?: Partial): EventFilterIntersection;
+}
+
+/**
+ * Represents a EventFilter with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventFilter extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventFilter class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventFilter.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.EventFilter & object;
+    if (isObject(model)) {
+      if (typeof model.with === 'object') self.with = new _WithEvent(model.with);
+      if (typeof model.correlate === 'object') self.correlate = new _EventFilterCorrelate(model.correlate);
+    }
+    getLifecycleHooks('EventFilter')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventFilter.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventFilter(this as any) as EventFilterIntersection;
+    validate('EventFilter', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventFilter.
+   * Creates a copy of the EventFilter, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventFilter instance.
+   */
+  normalize(): EventFilter & Specification.EventFilter {
+    const copy = new EventFilter(this as any) as EventFilterIntersection;
+    return getLifecycleHooks('EventFilter')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventFilter = EventFilter as EventFilterConstructor;
diff --git a/src/lib/generated/classes/event-source.ts b/src/lib/generated/classes/event-source.ts
new file mode 100644
index 0000000..595ee33
--- /dev/null
+++ b/src/lib/generated/classes/event-source.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EventSource class and type
+ */
+export type EventSourceIntersection = EventSource & Specification.EventSource;
+
+/**
+ * Represents a constructor for the intersection of the EventSource class and type
+ */
+export interface EventSourceConstructor {
+  new (model?: Partial): EventSourceIntersection;
+}
+
+/**
+ * Represents a EventSource with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventSource extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventSource class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventSource.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EventSource')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventSource.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventSource(this as any) as EventSourceIntersection;
+    validate('EventSource', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventSource.
+   * Creates a copy of the EventSource, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventSource instance.
+   */
+  normalize(): EventSource & Specification.EventSource {
+    const copy = new EventSource(this as any) as EventSourceIntersection;
+    return getLifecycleHooks('EventSource')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventSource = EventSource as EventSourceConstructor;
diff --git a/src/lib/generated/classes/event-time.ts b/src/lib/generated/classes/event-time.ts
new file mode 100644
index 0000000..114daa3
--- /dev/null
+++ b/src/lib/generated/classes/event-time.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the EventTime class and type
+ */
+export type EventTimeIntersection = EventTime & Specification.EventTime;
+
+/**
+ * Represents a constructor for the intersection of the EventTime class and type
+ */
+export interface EventTimeConstructor {
+  new (model?: Partial): EventTimeIntersection;
+}
+
+/**
+ * Represents a EventTime with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class EventTime extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the EventTime class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the EventTime.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('EventTime')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the EventTime.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new EventTime(this as any) as EventTimeIntersection;
+    validate('EventTime', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the EventTime.
+   * Creates a copy of the EventTime, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the EventTime instance.
+   */
+  normalize(): EventTime & Specification.EventTime {
+    const copy = new EventTime(this as any) as EventTimeIntersection;
+    return getLifecycleHooks('EventTime')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _EventTime = EventTime as EventTimeConstructor;
diff --git a/src/lib/generated/classes/exponential-back-off.ts b/src/lib/generated/classes/exponential-back-off.ts
new file mode 100644
index 0000000..a83adad
--- /dev/null
+++ b/src/lib/generated/classes/exponential-back-off.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ExponentialBackOff class and type
+ */
+export type ExponentialBackOffIntersection = ExponentialBackOff & Specification.ExponentialBackOff;
+
+/**
+ * Represents a constructor for the intersection of the ExponentialBackOff class and type
+ */
+export interface ExponentialBackOffConstructor {
+  new (model?: Partial): ExponentialBackOffIntersection;
+}
+
+/**
+ * Represents a ExponentialBackOff with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ExponentialBackOff extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ExponentialBackOff class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ExponentialBackOff.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ExponentialBackOff')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ExponentialBackOff.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ExponentialBackOff(this as any) as ExponentialBackOffIntersection;
+    validate('ExponentialBackOff', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ExponentialBackOff.
+   * Creates a copy of the ExponentialBackOff, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ExponentialBackOff instance.
+   */
+  normalize(): ExponentialBackOff & Specification.ExponentialBackOff {
+    const copy = new ExponentialBackOff(this as any) as ExponentialBackOffIntersection;
+    return getLifecycleHooks('ExponentialBackOff')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ExponentialBackOff = ExponentialBackOff as ExponentialBackOffConstructor;
diff --git a/src/lib/generated/classes/export-as.ts b/src/lib/generated/classes/export-as.ts
new file mode 100644
index 0000000..64d67d3
--- /dev/null
+++ b/src/lib/generated/classes/export-as.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ExportAs class and type
+ */
+export type ExportAsIntersection = ExportAs & Specification.ExportAs;
+
+/**
+ * Represents a constructor for the intersection of the ExportAs class and type
+ */
+export interface ExportAsConstructor {
+  new (model?: Partial): ExportAsIntersection;
+}
+
+/**
+ * Represents a ExportAs with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ExportAs extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ExportAs class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ExportAs.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ExportAs')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ExportAs.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ExportAs(this as any) as ExportAsIntersection;
+    validate('ExportAs', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ExportAs.
+   * Creates a copy of the ExportAs, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ExportAs instance.
+   */
+  normalize(): ExportAs & Specification.ExportAs {
+    const copy = new ExportAs(this as any) as ExportAsIntersection;
+    return getLifecycleHooks('ExportAs')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ExportAs = ExportAs as ExportAsConstructor;
diff --git a/src/lib/generated/classes/export.ts b/src/lib/generated/classes/export.ts
new file mode 100644
index 0000000..fc645f6
--- /dev/null
+++ b/src/lib/generated/classes/export.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Schema } from './schema';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Export class and type
+ */
+export type ExportIntersection = Export & Specification.Export;
+
+/**
+ * Represents a constructor for the intersection of the Export class and type
+ */
+export interface ExportConstructor {
+  new (model?: Partial): ExportIntersection;
+}
+
+/**
+ * Represents a Export with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Export extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Export class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Export.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Export & object;
+    if (isObject(model)) {
+      if (typeof model.schema === 'object') self.schema = new _Schema(model.schema);
+    }
+    getLifecycleHooks('Export')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Export.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Export(this as any) as ExportIntersection;
+    validate('Export', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Export.
+   * Creates a copy of the Export, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Export instance.
+   */
+  normalize(): Export & Specification.Export {
+    const copy = new Export(this as any) as ExportIntersection;
+    return getLifecycleHooks('Export')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Export = Export as ExportConstructor;
diff --git a/src/lib/generated/classes/extension-item.ts b/src/lib/generated/classes/extension-item.ts
new file mode 100644
index 0000000..8fb07d6
--- /dev/null
+++ b/src/lib/generated/classes/extension-item.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Extension } from './extension';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ExtensionItem class and type
+ */
+export type ExtensionItemIntersection = ExtensionItem & Specification.ExtensionItem;
+
+/**
+ * Represents a constructor for the intersection of the ExtensionItem class and type
+ */
+export interface ExtensionItemConstructor {
+  new (model?: Partial): ExtensionItemIntersection;
+}
+
+/**
+ * Represents a ExtensionItem with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ExtensionItem extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ExtensionItem class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ExtensionItem.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ExtensionItem & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Extension(value);
+        });
+    }
+    getLifecycleHooks('ExtensionItem')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ExtensionItem.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ExtensionItem(this as any) as ExtensionItemIntersection;
+    validate('ExtensionItem', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ExtensionItem.
+   * Creates a copy of the ExtensionItem, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ExtensionItem instance.
+   */
+  normalize(): ExtensionItem & Specification.ExtensionItem {
+    const copy = new ExtensionItem(this as any) as ExtensionItemIntersection;
+    return getLifecycleHooks('ExtensionItem')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ExtensionItem = ExtensionItem as ExtensionItemConstructor;
diff --git a/src/lib/generated/classes/extension.ts b/src/lib/generated/classes/extension.ts
new file mode 100644
index 0000000..c742e43
--- /dev/null
+++ b/src/lib/generated/classes/extension.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _TaskList } from './task-list';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Extension class and type
+ */
+export type ExtensionIntersection = Extension & Specification.Extension;
+
+/**
+ * Represents a constructor for the intersection of the Extension class and type
+ */
+export interface ExtensionConstructor {
+  new (model?: Partial): ExtensionIntersection;
+}
+
+/**
+ * Represents a Extension with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Extension extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Extension class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Extension.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Extension & object;
+    if (isObject(model)) {
+      if (typeof model.before === 'object') self.before = new _TaskList(model.before);
+      if (typeof model.after === 'object') self.after = new _TaskList(model.after);
+    }
+    getLifecycleHooks('Extension')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Extension.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Extension(this as any) as ExtensionIntersection;
+    validate('Extension', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Extension.
+   * Creates a copy of the Extension, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Extension instance.
+   */
+  normalize(): Extension & Specification.Extension {
+    const copy = new Extension(this as any) as ExtensionIntersection;
+    return getLifecycleHooks('Extension')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Extension = Extension as ExtensionConstructor;
diff --git a/src/lib/generated/classes/external-resource.ts b/src/lib/generated/classes/external-resource.ts
new file mode 100644
index 0000000..0cc08f3
--- /dev/null
+++ b/src/lib/generated/classes/external-resource.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Endpoint } from './endpoint';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ExternalResource class and type
+ */
+export type ExternalResourceIntersection = ExternalResource & Specification.ExternalResource;
+
+/**
+ * Represents a constructor for the intersection of the ExternalResource class and type
+ */
+export interface ExternalResourceConstructor {
+  new (model?: Partial): ExternalResourceIntersection;
+}
+
+/**
+ * Represents a ExternalResource with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ExternalResource extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ExternalResource class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ExternalResource.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ExternalResource & object;
+    if (isObject(model)) {
+      if (typeof model.endpoint === 'object') self.endpoint = new _Endpoint(model.endpoint);
+    }
+    getLifecycleHooks('ExternalResource')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ExternalResource.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ExternalResource(this as any) as ExternalResourceIntersection;
+    validate('ExternalResource', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ExternalResource.
+   * Creates a copy of the ExternalResource, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ExternalResource instance.
+   */
+  normalize(): ExternalResource & Specification.ExternalResource {
+    const copy = new ExternalResource(this as any) as ExternalResourceIntersection;
+    return getLifecycleHooks('ExternalResource')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ExternalResource = ExternalResource as ExternalResourceConstructor;
diff --git a/src/lib/generated/classes/external-script.ts b/src/lib/generated/classes/external-script.ts
new file mode 100644
index 0000000..71bfdcb
--- /dev/null
+++ b/src/lib/generated/classes/external-script.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ExternalScript class and type
+ */
+export type ExternalScriptIntersection = ExternalScript & Specification.ExternalScript;
+
+/**
+ * Represents a constructor for the intersection of the ExternalScript class and type
+ */
+export interface ExternalScriptConstructor {
+  new (model?: Partial): ExternalScriptIntersection;
+}
+
+/**
+ * Represents a ExternalScript with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ExternalScript extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ExternalScript class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ExternalScript.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ExternalScript & object;
+    if (isObject(model)) {
+      if (typeof model.source === 'object') self.source = new _ExternalResource(model.source);
+    }
+    getLifecycleHooks('ExternalScript')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ExternalScript.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ExternalScript(this as any) as ExternalScriptIntersection;
+    validate('ExternalScript', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ExternalScript.
+   * Creates a copy of the ExternalScript, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ExternalScript instance.
+   */
+  normalize(): ExternalScript & Specification.ExternalScript {
+    const copy = new ExternalScript(this as any) as ExternalScriptIntersection;
+    return getLifecycleHooks('ExternalScript')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ExternalScript = ExternalScript as ExternalScriptConstructor;
diff --git a/src/lib/generated/classes/flow-directive.ts b/src/lib/generated/classes/flow-directive.ts
new file mode 100644
index 0000000..6366f15
--- /dev/null
+++ b/src/lib/generated/classes/flow-directive.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the FlowDirective class and type
+ */
+export type FlowDirectiveIntersection = FlowDirective & Specification.FlowDirective;
+
+/**
+ * Represents a constructor for the intersection of the FlowDirective class and type
+ */
+export interface FlowDirectiveConstructor {
+  new (model?: Partial): FlowDirectiveIntersection;
+}
+
+/**
+ * Represents a FlowDirective with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class FlowDirective extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the FlowDirective class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the FlowDirective.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('FlowDirective')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the FlowDirective.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new FlowDirective(this as any) as FlowDirectiveIntersection;
+    validate('FlowDirective', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the FlowDirective.
+   * Creates a copy of the FlowDirective, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the FlowDirective instance.
+   */
+  normalize(): FlowDirective & Specification.FlowDirective {
+    const copy = new FlowDirective(this as any) as FlowDirectiveIntersection;
+    return getLifecycleHooks('FlowDirective')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _FlowDirective = FlowDirective as FlowDirectiveConstructor;
diff --git a/src/lib/generated/classes/for-task-configuration.ts b/src/lib/generated/classes/for-task-configuration.ts
new file mode 100644
index 0000000..3588b7f
--- /dev/null
+++ b/src/lib/generated/classes/for-task-configuration.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ForTaskConfiguration class and type
+ */
+export type ForTaskConfigurationIntersection = ForTaskConfiguration & Specification.ForTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the ForTaskConfiguration class and type
+ */
+export interface ForTaskConfigurationConstructor {
+  new (model?: Partial): ForTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a ForTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ForTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ForTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ForTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ForTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ForTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ForTaskConfiguration(this as any) as ForTaskConfigurationIntersection;
+    validate('ForTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ForTaskConfiguration.
+   * Creates a copy of the ForTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ForTaskConfiguration instance.
+   */
+  normalize(): ForTaskConfiguration & Specification.ForTaskConfiguration {
+    const copy = new ForTaskConfiguration(this as any) as ForTaskConfigurationIntersection;
+    return getLifecycleHooks('ForTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ForTaskConfiguration = ForTaskConfiguration as ForTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/for-task.ts b/src/lib/generated/classes/for-task.ts
new file mode 100644
index 0000000..d86ac77
--- /dev/null
+++ b/src/lib/generated/classes/for-task.ts
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _ForTaskConfiguration } from './for-task-configuration';
+import { _TaskList } from './task-list';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ForTask class and type
+ */
+export type ForTaskIntersection = ForTask & Specification.ForTask;
+
+/**
+ * Represents a constructor for the intersection of the ForTask class and type
+ */
+export interface ForTaskConstructor {
+  new (model?: Partial): ForTaskIntersection;
+}
+
+/**
+ * Represents a ForTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ForTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the ForTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ForTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ForTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.for === 'object') self.for = new _ForTaskConfiguration(model.for);
+      if (typeof model.do === 'object') self.do = new _TaskList(model.do);
+    }
+    getLifecycleHooks('ForTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ForTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ForTask(this as any) as ForTaskIntersection;
+    validate('ForTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ForTask.
+   * Creates a copy of the ForTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ForTask instance.
+   */
+  normalize(): ForTask & Specification.ForTask {
+    const copy = new ForTask(this as any) as ForTaskIntersection;
+    return getLifecycleHooks('ForTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ForTask = ForTask as ForTaskConstructor;
diff --git a/src/lib/generated/classes/fork-task-configuration.ts b/src/lib/generated/classes/fork-task-configuration.ts
new file mode 100644
index 0000000..3f78d58
--- /dev/null
+++ b/src/lib/generated/classes/fork-task-configuration.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _TaskList } from './task-list';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ForkTaskConfiguration class and type
+ */
+export type ForkTaskConfigurationIntersection = ForkTaskConfiguration & Specification.ForkTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the ForkTaskConfiguration class and type
+ */
+export interface ForkTaskConfigurationConstructor {
+  new (model?: Partial): ForkTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a ForkTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ForkTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ForkTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ForkTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ForkTaskConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.branches === 'object') self.branches = new _TaskList(model.branches);
+    }
+    getLifecycleHooks('ForkTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ForkTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ForkTaskConfiguration(this as any) as ForkTaskConfigurationIntersection;
+    validate('ForkTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ForkTaskConfiguration.
+   * Creates a copy of the ForkTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ForkTaskConfiguration instance.
+   */
+  normalize(): ForkTaskConfiguration & Specification.ForkTaskConfiguration {
+    const copy = new ForkTaskConfiguration(this as any) as ForkTaskConfigurationIntersection;
+    return getLifecycleHooks('ForkTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ForkTaskConfiguration = ForkTaskConfiguration as ForkTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/fork-task.ts b/src/lib/generated/classes/fork-task.ts
new file mode 100644
index 0000000..652ba64
--- /dev/null
+++ b/src/lib/generated/classes/fork-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _ForkTaskConfiguration } from './fork-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ForkTask class and type
+ */
+export type ForkTaskIntersection = ForkTask & Specification.ForkTask;
+
+/**
+ * Represents a constructor for the intersection of the ForkTask class and type
+ */
+export interface ForkTaskConstructor {
+  new (model?: Partial): ForkTaskIntersection;
+}
+
+/**
+ * Represents a ForkTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ForkTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the ForkTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ForkTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ForkTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.fork === 'object') self.fork = new _ForkTaskConfiguration(model.fork);
+    }
+    getLifecycleHooks('ForkTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ForkTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ForkTask(this as any) as ForkTaskIntersection;
+    validate('ForkTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ForkTask.
+   * Creates a copy of the ForkTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ForkTask instance.
+   */
+  normalize(): ForkTask & Specification.ForkTask {
+    const copy = new ForkTask(this as any) as ForkTaskIntersection;
+    return getLifecycleHooks('ForkTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ForkTask = ForkTask as ForkTaskConstructor;
diff --git a/src/lib/generated/classes/function-arguments.ts b/src/lib/generated/classes/function-arguments.ts
new file mode 100644
index 0000000..7e67622
--- /dev/null
+++ b/src/lib/generated/classes/function-arguments.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the FunctionArguments class and type
+ */
+export type FunctionArgumentsIntersection = FunctionArguments & Specification.FunctionArguments;
+
+/**
+ * Represents a constructor for the intersection of the FunctionArguments class and type
+ */
+export interface FunctionArgumentsConstructor {
+  new (model?: Partial): FunctionArgumentsIntersection;
+}
+
+/**
+ * Represents a FunctionArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class FunctionArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the FunctionArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the FunctionArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('FunctionArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the FunctionArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new FunctionArguments(this as any) as FunctionArgumentsIntersection;
+    validate('FunctionArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the FunctionArguments.
+   * Creates a copy of the FunctionArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the FunctionArguments instance.
+   */
+  normalize(): FunctionArguments & Specification.FunctionArguments {
+    const copy = new FunctionArguments(this as any) as FunctionArgumentsIntersection;
+    return getLifecycleHooks('FunctionArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _FunctionArguments = FunctionArguments as FunctionArgumentsConstructor;
diff --git a/src/lib/generated/classes/grpc-arguments.ts b/src/lib/generated/classes/grpc-arguments.ts
new file mode 100644
index 0000000..86de5bf
--- /dev/null
+++ b/src/lib/generated/classes/grpc-arguments.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { _WithGRPCService } from './with-grpc-service';
+import { _WithGRPCArguments } from './with-grpc-arguments';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the GRPCArguments class and type
+ */
+export type GRPCArgumentsIntersection = GRPCArguments & Specification.GRPCArguments;
+
+/**
+ * Represents a constructor for the intersection of the GRPCArguments class and type
+ */
+export interface GRPCArgumentsConstructor {
+  new (model?: Partial): GRPCArgumentsIntersection;
+}
+
+/**
+ * Represents a GRPCArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class GRPCArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the GRPCArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the GRPCArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.GRPCArguments & object;
+    if (isObject(model)) {
+      if (typeof model.proto === 'object') self.proto = new _ExternalResource(model.proto);
+      if (typeof model.service === 'object') self.service = new _WithGRPCService(model.service);
+      if (typeof model.arguments === 'object') self.arguments = new _WithGRPCArguments(model.arguments);
+    }
+    getLifecycleHooks('GRPCArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the GRPCArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new GRPCArguments(this as any) as GRPCArgumentsIntersection;
+    validate('GRPCArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the GRPCArguments.
+   * Creates a copy of the GRPCArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the GRPCArguments instance.
+   */
+  normalize(): GRPCArguments & Specification.GRPCArguments {
+    const copy = new GRPCArguments(this as any) as GRPCArgumentsIntersection;
+    return getLifecycleHooks('GRPCArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _GRPCArguments = GRPCArguments as GRPCArgumentsConstructor;
diff --git a/src/lib/generated/classes/http-arguments.ts b/src/lib/generated/classes/http-arguments.ts
new file mode 100644
index 0000000..1b87348
--- /dev/null
+++ b/src/lib/generated/classes/http-arguments.ts
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Endpoint } from './endpoint';
+import { _WithHTTPHeaders } from './with-http-headers';
+import { _WithHTTPBody } from './with-http-body';
+import { _WithHTTPQuery } from './with-http-query';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the HTTPArguments class and type
+ */
+export type HTTPArgumentsIntersection = HTTPArguments & Specification.HTTPArguments;
+
+/**
+ * Represents a constructor for the intersection of the HTTPArguments class and type
+ */
+export interface HTTPArgumentsConstructor {
+  new (model?: Partial): HTTPArgumentsIntersection;
+}
+
+/**
+ * Represents a HTTPArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class HTTPArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the HTTPArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the HTTPArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.HTTPArguments & object;
+    if (isObject(model)) {
+      if (typeof model.endpoint === 'object') self.endpoint = new _Endpoint(model.endpoint);
+      if (typeof model.headers === 'object') self.headers = new _WithHTTPHeaders(model.headers);
+      if (typeof model.body === 'object') self.body = new _WithHTTPBody(model.body);
+      if (typeof model.query === 'object') self.query = new _WithHTTPQuery(model.query);
+    }
+    getLifecycleHooks('HTTPArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the HTTPArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new HTTPArguments(this as any) as HTTPArgumentsIntersection;
+    validate('HTTPArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the HTTPArguments.
+   * Creates a copy of the HTTPArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the HTTPArguments instance.
+   */
+  normalize(): HTTPArguments & Specification.HTTPArguments {
+    const copy = new HTTPArguments(this as any) as HTTPArgumentsIntersection;
+    return getLifecycleHooks('HTTPArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _HTTPArguments = HTTPArguments as HTTPArgumentsConstructor;
diff --git a/src/lib/generated/classes/index.ts b/src/lib/generated/classes/index.ts
new file mode 100644
index 0000000..955ab02
--- /dev/null
+++ b/src/lib/generated/classes/index.ts
@@ -0,0 +1,329 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { _AllEventConsumptionStrategy } from './all-event-consumption-strategy';
+import { _AllEventConsumptionStrategyConfiguration } from './all-event-consumption-strategy-configuration';
+import { _AnyEventConsumptionStrategy } from './any-event-consumption-strategy';
+import { _AnyEventConsumptionStrategyConfiguration } from './any-event-consumption-strategy-configuration';
+import { _AsyncApiArguments } from './async-api-arguments';
+import { _AuthenticationPolicy } from './authentication-policy';
+import { _AuthenticationPolicyReference } from './authentication-policy-reference';
+import { _BasicAuthenticationPolicy } from './basic-authentication-policy';
+import { _BasicAuthenticationPolicyConfiguration } from './basic-authentication-policy-configuration';
+import { _BasicAuthenticationProperties } from './basic-authentication-properties';
+import { _BearerAuthenticationPolicy } from './bearer-authentication-policy';
+import { _BearerAuthenticationPolicyConfiguration } from './bearer-authentication-policy-configuration';
+import { _BearerAuthenticationProperties } from './bearer-authentication-properties';
+import { _CallAsyncAPI } from './call-async-api';
+import { _CallFunction } from './call-function';
+import { _CallGRPC } from './call-grpc';
+import { _CallHTTP } from './call-http';
+import { _CallOpenAPI } from './call-open-api';
+import { _CallTask } from './call-task';
+import { _Catalog } from './catalog';
+import { _CatchErrors } from './catch-errors';
+import { _ConstantBackoff } from './constant-backoff';
+import { _Container } from './container';
+import { _ContainerEnvironment } from './container-environment';
+import { _ContainerPorts } from './container-ports';
+import { _ContainerVolumes } from './container-volumes';
+import { _DigestAuthenticationPolicy } from './digest-authentication-policy';
+import { _DigestAuthenticationPolicyConfiguration } from './digest-authentication-policy-configuration';
+import { _DigestAuthenticationProperties } from './digest-authentication-properties';
+import { _Document } from './document';
+import { _DoTask } from './do-task';
+import { _Duration } from './duration';
+import { _DurationInline } from './duration-inline';
+import { _EmitEventDefinition } from './emit-event-definition';
+import { _EmitEventWith } from './emit-event-with';
+import { _EmitTask } from './emit-task';
+import { _EmitTaskConfiguration } from './emit-task-configuration';
+import { _Endpoint } from './endpoint';
+import { _EndpointConfiguration } from './endpoint-configuration';
+import { _EndpointUri } from './endpoint-uri';
+import { _Error } from './error';
+import { _ErrorInstance } from './error-instance';
+import { _ErrorType } from './error-type';
+import { _EventConsumptionStrategy } from './event-consumption-strategy';
+import { _EventDataschema } from './event-dataschema';
+import { _EventFilter } from './event-filter';
+import { _EventFilterCorrelate } from './event-filter-correlate';
+import { _EventSource } from './event-source';
+import { _EventTime } from './event-time';
+import { _ExponentialBackOff } from './exponential-back-off';
+import { _Export } from './export';
+import { _ExportAs } from './export-as';
+import { _Extension } from './extension';
+import { _ExtensionItem } from './extension-item';
+import { _ExternalResource } from './external-resource';
+import { _ExternalScript } from './external-script';
+import { _FlowDirective } from './flow-directive';
+import { _ForkTask } from './fork-task';
+import { _ForkTaskConfiguration } from './fork-task-configuration';
+import { _ForTask } from './for-task';
+import { _ForTaskConfiguration } from './for-task-configuration';
+import { _FunctionArguments } from './function-arguments';
+import { _GRPCArguments } from './grpc-arguments';
+import { _HTTPArguments } from './http-arguments';
+import { _InlineScript } from './inline-script';
+import { _Input } from './input';
+import { _InputFrom } from './input-from';
+import { _LinearBackoff } from './linear-backoff';
+import { _ListenTask } from './listen-task';
+import { _ListenTaskConfiguration } from './listen-task-configuration';
+import { _OAuth2AutenthicationData } from './oauth2-autenthication-data';
+import { _OAuth2AutenthicationDataAudiences } from './oauth2-autenthication-data-audiences';
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2AutenthicationDataScopes } from './oauth2-autenthication-data-scopes';
+import { _OAuth2AuthenticationPolicy } from './oauth2-authentication-policy';
+import { _OAuth2AuthenticationPolicyConfiguration } from './oauth2-authentication-policy-configuration';
+import { _OAuth2AuthenticationPropertiesEndpoints } from './oauth2-authentication-properties-endpoints';
+import { _OAuth2ConnectAuthenticationProperties } from './oauth2-connect-authentication-properties';
+import { _OAuth2Issuers } from './oauth2-issuers';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OneEventConsumptionStrategy } from './one-event-consumption-strategy';
+import { _OpenAPIArguments } from './open-api-arguments';
+import { _OpenIdConnectAuthenticationPolicy } from './open-id-connect-authentication-policy';
+import { _OpenIdConnectAuthenticationPolicyConfiguration } from './open-id-connect-authentication-policy-configuration';
+import { _OpenIdConnectAuthenticationProperties } from './open-id-connect-authentication-properties';
+import { _Output } from './output';
+import { _OutputAs } from './output-as';
+import { _RaiseTask } from './raise-task';
+import { _RaiseTaskConfiguration } from './raise-task-configuration';
+import { _RaiseTaskRaiseError } from './raise-task-raise-error';
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { _RetryBackoff } from './retry-backoff';
+import { _RetryLimit } from './retry-limit';
+import { _RetryLimitAttempt } from './retry-limit-attempt';
+import { _RetryPolicy } from './retry-policy';
+import { _RetryPolicyJitter } from './retry-policy-jitter';
+import { _RunContainer } from './run-container';
+import { _RunScript } from './run-script';
+import { _RunShell } from './run-shell';
+import { _RunTask } from './run-task';
+import { _RunTaskConfiguration } from './run-task-configuration';
+import { _RuntimeExpression } from './runtime-expression';
+import { _RunWorkflow } from './run-workflow';
+import { _Schedule } from './schedule';
+import { _Schema } from './schema';
+import { _SchemaExternal } from './schema-external';
+import { _SchemaInline } from './schema-inline';
+import { _Script } from './script';
+import { _SecretBasedAuthenticationPolicy } from './secret-based-authentication-policy';
+import { _SetTask } from './set-task';
+import { _SetTaskConfiguration } from './set-task-configuration';
+import { _Shell } from './shell';
+import { _ShellArguments } from './shell-arguments';
+import { _ShellEnvironment } from './shell-environment';
+import { _SubflowConfiguration } from './subflow-configuration';
+import { _SubflowInput } from './subflow-input';
+import { _SwitchCase } from './switch-case';
+import { _SwitchItem } from './switch-item';
+import { _SwitchTask } from './switch-task';
+import { _SwitchTaskConfiguration } from './switch-task-configuration';
+import { _Task } from './task';
+import { _TaskBase } from './task-base';
+import { _TaskBaseIf } from './task-base-if';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskItem } from './task-item';
+import { _TaskList } from './task-list';
+import { _TaskMetadata } from './task-metadata';
+import { _Timeout } from './timeout';
+import { _TryTask } from './try-task';
+import { _TryTaskCatch } from './try-task-catch';
+import { _TryTaskCatchRetry } from './try-task-catch-retry';
+import { _UriTemplate } from './uri-template';
+import { _Use } from './use';
+import { _UseAuthentications } from './use-authentications';
+import { _UseCatalogs } from './use-catalogs';
+import { _UseErrors } from './use-errors';
+import { _UseExtensions } from './use-extensions';
+import { _UseFunctions } from './use-functions';
+import { _UseRetries } from './use-retries';
+import { _UseSecrets } from './use-secrets';
+import { _UseTimeouts } from './use-timeouts';
+import { _WaitTask } from './wait-task';
+import { _WithAsyncAPIPayload } from './with-async-api-payload';
+import { _WithEvent } from './with-event';
+import { _WithGRPCArguments } from './with-grpc-arguments';
+import { _WithGRPCService } from './with-grpc-service';
+import { _WithHTTPBody } from './with-http-body';
+import { _WithHTTPHeaders } from './with-http-headers';
+import { _WithHTTPQuery } from './with-http-query';
+import { _WithOpenAPIParameters } from './with-open-api-parameters';
+import { _Workflow } from './workflow';
+import { _WorkflowMetadata } from './workflow-metadata';
+import { _WorkflowTags } from './workflow-tags';
+import { _WorkflowTimeout } from './workflow-timeout';
+
+export const Classes = {
+  AllEventConsumptionStrategy: _AllEventConsumptionStrategy,
+  AllEventConsumptionStrategyConfiguration: _AllEventConsumptionStrategyConfiguration,
+  AnyEventConsumptionStrategy: _AnyEventConsumptionStrategy,
+  AnyEventConsumptionStrategyConfiguration: _AnyEventConsumptionStrategyConfiguration,
+  AsyncApiArguments: _AsyncApiArguments,
+  AuthenticationPolicy: _AuthenticationPolicy,
+  AuthenticationPolicyReference: _AuthenticationPolicyReference,
+  BasicAuthenticationPolicy: _BasicAuthenticationPolicy,
+  BasicAuthenticationPolicyConfiguration: _BasicAuthenticationPolicyConfiguration,
+  BasicAuthenticationProperties: _BasicAuthenticationProperties,
+  BearerAuthenticationPolicy: _BearerAuthenticationPolicy,
+  BearerAuthenticationPolicyConfiguration: _BearerAuthenticationPolicyConfiguration,
+  BearerAuthenticationProperties: _BearerAuthenticationProperties,
+  CallAsyncAPI: _CallAsyncAPI,
+  CallFunction: _CallFunction,
+  CallGRPC: _CallGRPC,
+  CallHTTP: _CallHTTP,
+  CallOpenAPI: _CallOpenAPI,
+  CallTask: _CallTask,
+  Catalog: _Catalog,
+  CatchErrors: _CatchErrors,
+  ConstantBackoff: _ConstantBackoff,
+  Container: _Container,
+  ContainerEnvironment: _ContainerEnvironment,
+  ContainerPorts: _ContainerPorts,
+  ContainerVolumes: _ContainerVolumes,
+  DigestAuthenticationPolicy: _DigestAuthenticationPolicy,
+  DigestAuthenticationPolicyConfiguration: _DigestAuthenticationPolicyConfiguration,
+  DigestAuthenticationProperties: _DigestAuthenticationProperties,
+  Document: _Document,
+  DoTask: _DoTask,
+  Duration: _Duration,
+  DurationInline: _DurationInline,
+  EmitEventDefinition: _EmitEventDefinition,
+  EmitEventWith: _EmitEventWith,
+  EmitTask: _EmitTask,
+  EmitTaskConfiguration: _EmitTaskConfiguration,
+  Endpoint: _Endpoint,
+  EndpointConfiguration: _EndpointConfiguration,
+  EndpointUri: _EndpointUri,
+  Error: _Error,
+  ErrorInstance: _ErrorInstance,
+  ErrorType: _ErrorType,
+  EventConsumptionStrategy: _EventConsumptionStrategy,
+  EventDataschema: _EventDataschema,
+  EventFilter: _EventFilter,
+  EventFilterCorrelate: _EventFilterCorrelate,
+  EventSource: _EventSource,
+  EventTime: _EventTime,
+  ExponentialBackOff: _ExponentialBackOff,
+  Export: _Export,
+  ExportAs: _ExportAs,
+  Extension: _Extension,
+  ExtensionItem: _ExtensionItem,
+  ExternalResource: _ExternalResource,
+  ExternalScript: _ExternalScript,
+  FlowDirective: _FlowDirective,
+  ForkTask: _ForkTask,
+  ForkTaskConfiguration: _ForkTaskConfiguration,
+  ForTask: _ForTask,
+  ForTaskConfiguration: _ForTaskConfiguration,
+  FunctionArguments: _FunctionArguments,
+  GRPCArguments: _GRPCArguments,
+  HTTPArguments: _HTTPArguments,
+  InlineScript: _InlineScript,
+  Input: _Input,
+  InputFrom: _InputFrom,
+  LinearBackoff: _LinearBackoff,
+  ListenTask: _ListenTask,
+  ListenTaskConfiguration: _ListenTaskConfiguration,
+  OAuth2AutenthicationData: _OAuth2AutenthicationData,
+  OAuth2AutenthicationDataAudiences: _OAuth2AutenthicationDataAudiences,
+  OAuth2AutenthicationDataClient: _OAuth2AutenthicationDataClient,
+  OAuth2AutenthicationDataScopes: _OAuth2AutenthicationDataScopes,
+  OAuth2AuthenticationPolicy: _OAuth2AuthenticationPolicy,
+  OAuth2AuthenticationPolicyConfiguration: _OAuth2AuthenticationPolicyConfiguration,
+  OAuth2AuthenticationPropertiesEndpoints: _OAuth2AuthenticationPropertiesEndpoints,
+  OAuth2ConnectAuthenticationProperties: _OAuth2ConnectAuthenticationProperties,
+  OAuth2Issuers: _OAuth2Issuers,
+  OAuth2TokenDefinition: _OAuth2TokenDefinition,
+  OAuth2TokenRequest: _OAuth2TokenRequest,
+  OneEventConsumptionStrategy: _OneEventConsumptionStrategy,
+  OpenAPIArguments: _OpenAPIArguments,
+  OpenIdConnectAuthenticationPolicy: _OpenIdConnectAuthenticationPolicy,
+  OpenIdConnectAuthenticationPolicyConfiguration: _OpenIdConnectAuthenticationPolicyConfiguration,
+  OpenIdConnectAuthenticationProperties: _OpenIdConnectAuthenticationProperties,
+  Output: _Output,
+  OutputAs: _OutputAs,
+  RaiseTask: _RaiseTask,
+  RaiseTaskConfiguration: _RaiseTaskConfiguration,
+  RaiseTaskRaiseError: _RaiseTaskRaiseError,
+  ReferenceableAuthenticationPolicy: _ReferenceableAuthenticationPolicy,
+  RetryBackoff: _RetryBackoff,
+  RetryLimit: _RetryLimit,
+  RetryLimitAttempt: _RetryLimitAttempt,
+  RetryPolicy: _RetryPolicy,
+  RetryPolicyJitter: _RetryPolicyJitter,
+  RunContainer: _RunContainer,
+  RunScript: _RunScript,
+  RunShell: _RunShell,
+  RunTask: _RunTask,
+  RunTaskConfiguration: _RunTaskConfiguration,
+  RuntimeExpression: _RuntimeExpression,
+  RunWorkflow: _RunWorkflow,
+  Schedule: _Schedule,
+  Schema: _Schema,
+  SchemaExternal: _SchemaExternal,
+  SchemaInline: _SchemaInline,
+  Script: _Script,
+  SecretBasedAuthenticationPolicy: _SecretBasedAuthenticationPolicy,
+  SetTask: _SetTask,
+  SetTaskConfiguration: _SetTaskConfiguration,
+  Shell: _Shell,
+  ShellArguments: _ShellArguments,
+  ShellEnvironment: _ShellEnvironment,
+  SubflowConfiguration: _SubflowConfiguration,
+  SubflowInput: _SubflowInput,
+  SwitchCase: _SwitchCase,
+  SwitchItem: _SwitchItem,
+  SwitchTask: _SwitchTask,
+  SwitchTaskConfiguration: _SwitchTaskConfiguration,
+  Task: _Task,
+  TaskBase: _TaskBase,
+  TaskBaseIf: _TaskBaseIf,
+  TaskBaseTimeout: _TaskBaseTimeout,
+  TaskItem: _TaskItem,
+  TaskList: _TaskList,
+  TaskMetadata: _TaskMetadata,
+  Timeout: _Timeout,
+  TryTask: _TryTask,
+  TryTaskCatch: _TryTaskCatch,
+  TryTaskCatchRetry: _TryTaskCatchRetry,
+  UriTemplate: _UriTemplate,
+  Use: _Use,
+  UseAuthentications: _UseAuthentications,
+  UseCatalogs: _UseCatalogs,
+  UseErrors: _UseErrors,
+  UseExtensions: _UseExtensions,
+  UseFunctions: _UseFunctions,
+  UseRetries: _UseRetries,
+  UseSecrets: _UseSecrets,
+  UseTimeouts: _UseTimeouts,
+  WaitTask: _WaitTask,
+  WithAsyncAPIPayload: _WithAsyncAPIPayload,
+  WithEvent: _WithEvent,
+  WithGRPCArguments: _WithGRPCArguments,
+  WithGRPCService: _WithGRPCService,
+  WithHTTPBody: _WithHTTPBody,
+  WithHTTPHeaders: _WithHTTPHeaders,
+  WithHTTPQuery: _WithHTTPQuery,
+  WithOpenAPIParameters: _WithOpenAPIParameters,
+  Workflow: _Workflow,
+  WorkflowMetadata: _WorkflowMetadata,
+  WorkflowTags: _WorkflowTags,
+  WorkflowTimeout: _WorkflowTimeout,
+};
diff --git a/src/lib/generated/classes/inline-script.ts b/src/lib/generated/classes/inline-script.ts
new file mode 100644
index 0000000..ea52b31
--- /dev/null
+++ b/src/lib/generated/classes/inline-script.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the InlineScript class and type
+ */
+export type InlineScriptIntersection = InlineScript & Specification.InlineScript;
+
+/**
+ * Represents a constructor for the intersection of the InlineScript class and type
+ */
+export interface InlineScriptConstructor {
+  new (model?: Partial): InlineScriptIntersection;
+}
+
+/**
+ * Represents a InlineScript with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class InlineScript extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the InlineScript class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the InlineScript.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('InlineScript')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the InlineScript.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new InlineScript(this as any) as InlineScriptIntersection;
+    validate('InlineScript', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the InlineScript.
+   * Creates a copy of the InlineScript, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the InlineScript instance.
+   */
+  normalize(): InlineScript & Specification.InlineScript {
+    const copy = new InlineScript(this as any) as InlineScriptIntersection;
+    return getLifecycleHooks('InlineScript')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _InlineScript = InlineScript as InlineScriptConstructor;
diff --git a/src/lib/generated/classes/input-from.ts b/src/lib/generated/classes/input-from.ts
new file mode 100644
index 0000000..6683b96
--- /dev/null
+++ b/src/lib/generated/classes/input-from.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the InputFrom class and type
+ */
+export type InputFromIntersection = InputFrom & Specification.InputFrom;
+
+/**
+ * Represents a constructor for the intersection of the InputFrom class and type
+ */
+export interface InputFromConstructor {
+  new (model?: Partial): InputFromIntersection;
+}
+
+/**
+ * Represents a InputFrom with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class InputFrom extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the InputFrom class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the InputFrom.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('InputFrom')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the InputFrom.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new InputFrom(this as any) as InputFromIntersection;
+    validate('InputFrom', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the InputFrom.
+   * Creates a copy of the InputFrom, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the InputFrom instance.
+   */
+  normalize(): InputFrom & Specification.InputFrom {
+    const copy = new InputFrom(this as any) as InputFromIntersection;
+    return getLifecycleHooks('InputFrom')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _InputFrom = InputFrom as InputFromConstructor;
diff --git a/src/lib/generated/classes/input.ts b/src/lib/generated/classes/input.ts
new file mode 100644
index 0000000..a8f8a22
--- /dev/null
+++ b/src/lib/generated/classes/input.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Schema } from './schema';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Input class and type
+ */
+export type InputIntersection = Input & Specification.Input;
+
+/**
+ * Represents a constructor for the intersection of the Input class and type
+ */
+export interface InputConstructor {
+  new (model?: Partial): InputIntersection;
+}
+
+/**
+ * Represents a Input with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Input extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Input class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Input.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Input & object;
+    if (isObject(model)) {
+      if (typeof model.schema === 'object') self.schema = new _Schema(model.schema);
+    }
+    getLifecycleHooks('Input')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Input.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Input(this as any) as InputIntersection;
+    validate('Input', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Input.
+   * Creates a copy of the Input, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Input instance.
+   */
+  normalize(): Input & Specification.Input {
+    const copy = new Input(this as any) as InputIntersection;
+    return getLifecycleHooks('Input')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Input = Input as InputConstructor;
diff --git a/src/lib/generated/classes/linear-backoff.ts b/src/lib/generated/classes/linear-backoff.ts
new file mode 100644
index 0000000..069627e
--- /dev/null
+++ b/src/lib/generated/classes/linear-backoff.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the LinearBackoff class and type
+ */
+export type LinearBackoffIntersection = LinearBackoff & Specification.LinearBackoff;
+
+/**
+ * Represents a constructor for the intersection of the LinearBackoff class and type
+ */
+export interface LinearBackoffConstructor {
+  new (model?: Partial): LinearBackoffIntersection;
+}
+
+/**
+ * Represents a LinearBackoff with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class LinearBackoff extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the LinearBackoff class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the LinearBackoff.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('LinearBackoff')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the LinearBackoff.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new LinearBackoff(this as any) as LinearBackoffIntersection;
+    validate('LinearBackoff', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the LinearBackoff.
+   * Creates a copy of the LinearBackoff, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the LinearBackoff instance.
+   */
+  normalize(): LinearBackoff & Specification.LinearBackoff {
+    const copy = new LinearBackoff(this as any) as LinearBackoffIntersection;
+    return getLifecycleHooks('LinearBackoff')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _LinearBackoff = LinearBackoff as LinearBackoffConstructor;
diff --git a/src/lib/generated/classes/listen-task-configuration.ts b/src/lib/generated/classes/listen-task-configuration.ts
new file mode 100644
index 0000000..1e47efe
--- /dev/null
+++ b/src/lib/generated/classes/listen-task-configuration.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EventConsumptionStrategy } from './event-consumption-strategy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ListenTaskConfiguration class and type
+ */
+export type ListenTaskConfigurationIntersection = ListenTaskConfiguration & Specification.ListenTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the ListenTaskConfiguration class and type
+ */
+export interface ListenTaskConfigurationConstructor {
+  new (model?: Partial): ListenTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a ListenTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ListenTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ListenTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ListenTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ListenTaskConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.to === 'object') self.to = new _EventConsumptionStrategy(model.to);
+    }
+    getLifecycleHooks('ListenTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ListenTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ListenTaskConfiguration(this as any) as ListenTaskConfigurationIntersection;
+    validate('ListenTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ListenTaskConfiguration.
+   * Creates a copy of the ListenTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ListenTaskConfiguration instance.
+   */
+  normalize(): ListenTaskConfiguration & Specification.ListenTaskConfiguration {
+    const copy = new ListenTaskConfiguration(this as any) as ListenTaskConfigurationIntersection;
+    return getLifecycleHooks('ListenTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ListenTaskConfiguration = ListenTaskConfiguration as ListenTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/listen-task.ts b/src/lib/generated/classes/listen-task.ts
new file mode 100644
index 0000000..4dd62e0
--- /dev/null
+++ b/src/lib/generated/classes/listen-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _ListenTaskConfiguration } from './listen-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ListenTask class and type
+ */
+export type ListenTaskIntersection = ListenTask & Specification.ListenTask;
+
+/**
+ * Represents a constructor for the intersection of the ListenTask class and type
+ */
+export interface ListenTaskConstructor {
+  new (model?: Partial): ListenTaskIntersection;
+}
+
+/**
+ * Represents a ListenTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ListenTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the ListenTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ListenTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ListenTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.listen === 'object') self.listen = new _ListenTaskConfiguration(model.listen);
+    }
+    getLifecycleHooks('ListenTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ListenTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ListenTask(this as any) as ListenTaskIntersection;
+    validate('ListenTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ListenTask.
+   * Creates a copy of the ListenTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ListenTask instance.
+   */
+  normalize(): ListenTask & Specification.ListenTask {
+    const copy = new ListenTask(this as any) as ListenTaskIntersection;
+    return getLifecycleHooks('ListenTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ListenTask = ListenTask as ListenTaskConstructor;
diff --git a/src/lib/generated/classes/oauth2-autenthication-data-audiences.ts b/src/lib/generated/classes/oauth2-autenthication-data-audiences.ts
new file mode 100644
index 0000000..58c5cab
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-autenthication-data-audiences.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2AutenthicationDataAudiences class and type
+ */
+export type OAuth2AutenthicationDataAudiencesIntersection = OAuth2AutenthicationDataAudiences &
+  Specification.OAuth2AutenthicationDataAudiences;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AutenthicationDataAudiences class and type
+ */
+export interface OAuth2AutenthicationDataAudiencesConstructor {
+  new (model?: Array | number): OAuth2AutenthicationDataAudiencesIntersection;
+}
+
+/**
+ * Represents a collection of string.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class OAuth2AutenthicationDataAudiences extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the OAuth2AutenthicationDataAudiences class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(item));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(OAuth2AutenthicationDataAudiences.prototype));
+    getLifecycleHooks('OAuth2AutenthicationDataAudiences')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AutenthicationDataAudiences.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AutenthicationDataAudiences(this);
+    validate('OAuth2AutenthicationDataAudiences', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AutenthicationDataAudiences.
+   * Creates a copy of the OAuth2AutenthicationDataAudiences, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AutenthicationDataAudiences instance.
+   */
+  normalize(): OAuth2AutenthicationDataAudiences {
+    const copy = new OAuth2AutenthicationDataAudiences(this);
+    return getLifecycleHooks('OAuth2AutenthicationDataAudiences')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AutenthicationDataAudiences =
+  OAuth2AutenthicationDataAudiences as unknown as OAuth2AutenthicationDataAudiencesConstructor;
+//export const _OAuth2AutenthicationDataAudiences = OAuth2AutenthicationDataAudiences; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/oauth2-autenthication-data-client.ts b/src/lib/generated/classes/oauth2-autenthication-data-client.ts
new file mode 100644
index 0000000..ae48238
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-autenthication-data-client.ts
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2AutenthicationDataClient class and type
+ */
+export type OAuth2AutenthicationDataClientIntersection = OAuth2AutenthicationDataClient &
+  Specification.OAuth2AutenthicationDataClient;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AutenthicationDataClient class and type
+ */
+export interface OAuth2AutenthicationDataClientConstructor {
+  new (model?: Partial): OAuth2AutenthicationDataClientIntersection;
+}
+
+/**
+ * Represents a OAuth2AutenthicationDataClient with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2AutenthicationDataClient extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2AutenthicationDataClient class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2AutenthicationDataClient.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('OAuth2AutenthicationDataClient')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AutenthicationDataClient.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AutenthicationDataClient(this as any) as OAuth2AutenthicationDataClientIntersection;
+    validate('OAuth2AutenthicationDataClient', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AutenthicationDataClient.
+   * Creates a copy of the OAuth2AutenthicationDataClient, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AutenthicationDataClient instance.
+   */
+  normalize(): OAuth2AutenthicationDataClient & Specification.OAuth2AutenthicationDataClient {
+    const copy = new OAuth2AutenthicationDataClient(this as any) as OAuth2AutenthicationDataClientIntersection;
+    return getLifecycleHooks('OAuth2AutenthicationDataClient')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AutenthicationDataClient =
+  OAuth2AutenthicationDataClient as OAuth2AutenthicationDataClientConstructor;
diff --git a/src/lib/generated/classes/oauth2-autenthication-data-scopes.ts b/src/lib/generated/classes/oauth2-autenthication-data-scopes.ts
new file mode 100644
index 0000000..acc0c84
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-autenthication-data-scopes.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2AutenthicationDataScopes class and type
+ */
+export type OAuth2AutenthicationDataScopesIntersection = OAuth2AutenthicationDataScopes &
+  Specification.OAuth2AutenthicationDataScopes;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AutenthicationDataScopes class and type
+ */
+export interface OAuth2AutenthicationDataScopesConstructor {
+  new (model?: Array | number): OAuth2AutenthicationDataScopesIntersection;
+}
+
+/**
+ * Represents a collection of string.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class OAuth2AutenthicationDataScopes extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the OAuth2AutenthicationDataScopes class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(item));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(OAuth2AutenthicationDataScopes.prototype));
+    getLifecycleHooks('OAuth2AutenthicationDataScopes')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AutenthicationDataScopes.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AutenthicationDataScopes(this);
+    validate('OAuth2AutenthicationDataScopes', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AutenthicationDataScopes.
+   * Creates a copy of the OAuth2AutenthicationDataScopes, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AutenthicationDataScopes instance.
+   */
+  normalize(): OAuth2AutenthicationDataScopes {
+    const copy = new OAuth2AutenthicationDataScopes(this);
+    return getLifecycleHooks('OAuth2AutenthicationDataScopes')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AutenthicationDataScopes =
+  OAuth2AutenthicationDataScopes as unknown as OAuth2AutenthicationDataScopesConstructor;
+//export const _OAuth2AutenthicationDataScopes = OAuth2AutenthicationDataScopes; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/oauth2-autenthication-data.ts b/src/lib/generated/classes/oauth2-autenthication-data.ts
new file mode 100644
index 0000000..b36eb5b
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-autenthication-data.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OAuth2AutenthicationData class and type
+ */
+export type OAuth2AutenthicationDataIntersection = OAuth2AutenthicationData & Specification.OAuth2AutenthicationData;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AutenthicationData class and type
+ */
+export interface OAuth2AutenthicationDataConstructor {
+  new (model?: Partial): OAuth2AutenthicationDataIntersection;
+}
+
+/**
+ * Represents a OAuth2AutenthicationData with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2AutenthicationData extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2AutenthicationData class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2AutenthicationData.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OAuth2AutenthicationData & object;
+    if (isObject(model)) {
+      if (typeof model.client === 'object') self.client = new _OAuth2AutenthicationDataClient(model.client);
+      if (typeof model.request === 'object') self.request = new _OAuth2TokenRequest(model.request);
+      if (typeof model.subject === 'object') self.subject = new _OAuth2TokenDefinition(model.subject);
+      if (typeof model.actor === 'object') self.actor = new _OAuth2TokenDefinition(model.actor);
+    }
+    getLifecycleHooks('OAuth2AutenthicationData')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AutenthicationData.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AutenthicationData(this as any) as OAuth2AutenthicationDataIntersection;
+    validate('OAuth2AutenthicationData', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AutenthicationData.
+   * Creates a copy of the OAuth2AutenthicationData, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AutenthicationData instance.
+   */
+  normalize(): OAuth2AutenthicationData & Specification.OAuth2AutenthicationData {
+    const copy = new OAuth2AutenthicationData(this as any) as OAuth2AutenthicationDataIntersection;
+    return getLifecycleHooks('OAuth2AutenthicationData')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AutenthicationData = OAuth2AutenthicationData as OAuth2AutenthicationDataConstructor;
diff --git a/src/lib/generated/classes/oauth2-authentication-policy-configuration.ts b/src/lib/generated/classes/oauth2-authentication-policy-configuration.ts
new file mode 100644
index 0000000..bb576e8
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-authentication-policy-configuration.ts
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { _OAuth2AuthenticationPropertiesEndpoints } from './oauth2-authentication-properties-endpoints';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OAuth2AuthenticationPolicyConfiguration class and type
+ */
+export type OAuth2AuthenticationPolicyConfigurationIntersection = OAuth2AuthenticationPolicyConfiguration &
+  Specification.OAuth2AuthenticationPolicyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AuthenticationPolicyConfiguration class and type
+ */
+export interface OAuth2AuthenticationPolicyConfigurationConstructor {
+  new (
+    model?: Partial,
+  ): OAuth2AuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * Represents a OAuth2AuthenticationPolicyConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2AuthenticationPolicyConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2AuthenticationPolicyConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2AuthenticationPolicyConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OAuth2AuthenticationPolicyConfiguration & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.OAuth2AutenthicationData).client === 'object')
+        (self as Specification.OAuth2AutenthicationData).client = new _OAuth2AutenthicationDataClient(
+          (model as Specification.OAuth2AutenthicationData).client as Specification.OAuth2AutenthicationDataClient,
+        );
+      if (typeof (model as Specification.OAuth2AutenthicationData).request === 'object')
+        (self as Specification.OAuth2AutenthicationData).request = new _OAuth2TokenRequest(
+          (model as Specification.OAuth2AutenthicationData).request as Specification.OAuth2TokenRequest,
+        );
+      if (typeof (model as Specification.OAuth2AutenthicationData).subject === 'object')
+        (self as Specification.OAuth2AutenthicationData).subject = new _OAuth2TokenDefinition(
+          (model as Specification.OAuth2AutenthicationData).subject as Specification.OAuth2TokenDefinition,
+        );
+      if (typeof (model as Specification.OAuth2AutenthicationData).actor === 'object')
+        (self as Specification.OAuth2AutenthicationData).actor = new _OAuth2TokenDefinition(
+          (model as Specification.OAuth2AutenthicationData).actor as Specification.OAuth2TokenDefinition,
+        );
+      if (
+        typeof (model as { [k: string]: unknown; endpoints?: Specification.OAuth2AuthenticationPropertiesEndpoints })
+          .endpoints === 'object'
+      )
+        (
+          self as { [k: string]: unknown; endpoints?: Specification.OAuth2AuthenticationPropertiesEndpoints }
+        ).endpoints = new _OAuth2AuthenticationPropertiesEndpoints(
+          (model as { [k: string]: unknown; endpoints?: Specification.OAuth2AuthenticationPropertiesEndpoints })
+            .endpoints as Specification.OAuth2AuthenticationPropertiesEndpoints,
+        );
+    }
+    getLifecycleHooks('OAuth2AuthenticationPolicyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AuthenticationPolicyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AuthenticationPolicyConfiguration(
+      this as any,
+    ) as OAuth2AuthenticationPolicyConfigurationIntersection;
+    validate('OAuth2AuthenticationPolicyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AuthenticationPolicyConfiguration.
+   * Creates a copy of the OAuth2AuthenticationPolicyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AuthenticationPolicyConfiguration instance.
+   */
+  normalize(): OAuth2AuthenticationPolicyConfiguration & Specification.OAuth2AuthenticationPolicyConfiguration {
+    const copy = new OAuth2AuthenticationPolicyConfiguration(
+      this as any,
+    ) as OAuth2AuthenticationPolicyConfigurationIntersection;
+    return getLifecycleHooks('OAuth2AuthenticationPolicyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AuthenticationPolicyConfiguration =
+  OAuth2AuthenticationPolicyConfiguration as OAuth2AuthenticationPolicyConfigurationConstructor;
diff --git a/src/lib/generated/classes/oauth2-authentication-policy.ts b/src/lib/generated/classes/oauth2-authentication-policy.ts
new file mode 100644
index 0000000..9291289
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-authentication-policy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AuthenticationPolicyConfiguration } from './oauth2-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OAuth2AuthenticationPolicy class and type
+ */
+export type OAuth2AuthenticationPolicyIntersection = OAuth2AuthenticationPolicy &
+  Specification.OAuth2AuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AuthenticationPolicy class and type
+ */
+export interface OAuth2AuthenticationPolicyConstructor {
+  new (model?: Partial): OAuth2AuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a OAuth2AuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2AuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2AuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2AuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OAuth2AuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.oauth2 === 'object') self.oauth2 = new _OAuth2AuthenticationPolicyConfiguration(model.oauth2);
+    }
+    getLifecycleHooks('OAuth2AuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AuthenticationPolicy(this as any) as OAuth2AuthenticationPolicyIntersection;
+    validate('OAuth2AuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AuthenticationPolicy.
+   * Creates a copy of the OAuth2AuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AuthenticationPolicy instance.
+   */
+  normalize(): OAuth2AuthenticationPolicy & Specification.OAuth2AuthenticationPolicy {
+    const copy = new OAuth2AuthenticationPolicy(this as any) as OAuth2AuthenticationPolicyIntersection;
+    return getLifecycleHooks('OAuth2AuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AuthenticationPolicy = OAuth2AuthenticationPolicy as OAuth2AuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/oauth2-authentication-properties-endpoints.ts b/src/lib/generated/classes/oauth2-authentication-properties-endpoints.ts
new file mode 100644
index 0000000..d4ebba4
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-authentication-properties-endpoints.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2AuthenticationPropertiesEndpoints class and type
+ */
+export type OAuth2AuthenticationPropertiesEndpointsIntersection = OAuth2AuthenticationPropertiesEndpoints &
+  Specification.OAuth2AuthenticationPropertiesEndpoints;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2AuthenticationPropertiesEndpoints class and type
+ */
+export interface OAuth2AuthenticationPropertiesEndpointsConstructor {
+  new (
+    model?: Partial,
+  ): OAuth2AuthenticationPropertiesEndpointsIntersection;
+}
+
+/**
+ * Represents a OAuth2AuthenticationPropertiesEndpoints with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2AuthenticationPropertiesEndpoints extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2AuthenticationPropertiesEndpoints class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2AuthenticationPropertiesEndpoints.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('OAuth2AuthenticationPropertiesEndpoints')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2AuthenticationPropertiesEndpoints.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2AuthenticationPropertiesEndpoints(
+      this as any,
+    ) as OAuth2AuthenticationPropertiesEndpointsIntersection;
+    validate('OAuth2AuthenticationPropertiesEndpoints', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2AuthenticationPropertiesEndpoints.
+   * Creates a copy of the OAuth2AuthenticationPropertiesEndpoints, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2AuthenticationPropertiesEndpoints instance.
+   */
+  normalize(): OAuth2AuthenticationPropertiesEndpoints & Specification.OAuth2AuthenticationPropertiesEndpoints {
+    const copy = new OAuth2AuthenticationPropertiesEndpoints(
+      this as any,
+    ) as OAuth2AuthenticationPropertiesEndpointsIntersection;
+    return getLifecycleHooks('OAuth2AuthenticationPropertiesEndpoints')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2AuthenticationPropertiesEndpoints =
+  OAuth2AuthenticationPropertiesEndpoints as OAuth2AuthenticationPropertiesEndpointsConstructor;
diff --git a/src/lib/generated/classes/oauth2-connect-authentication-properties.ts b/src/lib/generated/classes/oauth2-connect-authentication-properties.ts
new file mode 100644
index 0000000..d7edf07
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-connect-authentication-properties.ts
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { _OAuth2AuthenticationPropertiesEndpoints } from './oauth2-authentication-properties-endpoints';
+import { _OAuth2AutenthicationData } from './oauth2-autenthication-data';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OAuth2ConnectAuthenticationProperties class and type
+ */
+export type OAuth2ConnectAuthenticationPropertiesIntersection = OAuth2ConnectAuthenticationProperties &
+  Specification.OAuth2ConnectAuthenticationProperties;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2ConnectAuthenticationProperties class and type
+ */
+export interface OAuth2ConnectAuthenticationPropertiesConstructor {
+  new (
+    model?: Partial,
+  ): OAuth2ConnectAuthenticationPropertiesIntersection;
+}
+
+/**
+ * Represents a OAuth2ConnectAuthenticationProperties with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2ConnectAuthenticationProperties extends _OAuth2AutenthicationData {
+  /**
+   * Instanciates a new instance of the OAuth2ConnectAuthenticationProperties class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2ConnectAuthenticationProperties.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OAuth2ConnectAuthenticationProperties & object;
+    if (isObject(model)) {
+      if (typeof model.client === 'object') self.client = new _OAuth2AutenthicationDataClient(model.client);
+      if (typeof model.request === 'object') self.request = new _OAuth2TokenRequest(model.request);
+      if (typeof model.subject === 'object') self.subject = new _OAuth2TokenDefinition(model.subject);
+      if (typeof model.actor === 'object') self.actor = new _OAuth2TokenDefinition(model.actor);
+      if (typeof model.endpoints === 'object')
+        self.endpoints = new _OAuth2AuthenticationPropertiesEndpoints(model.endpoints);
+    }
+    getLifecycleHooks('OAuth2ConnectAuthenticationProperties')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2ConnectAuthenticationProperties.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2ConnectAuthenticationProperties(
+      this as any,
+    ) as OAuth2ConnectAuthenticationPropertiesIntersection;
+    validate('OAuth2ConnectAuthenticationProperties', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2ConnectAuthenticationProperties.
+   * Creates a copy of the OAuth2ConnectAuthenticationProperties, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2ConnectAuthenticationProperties instance.
+   */
+  normalize(): OAuth2ConnectAuthenticationProperties & Specification.OAuth2ConnectAuthenticationProperties {
+    const copy = new OAuth2ConnectAuthenticationProperties(
+      this as any,
+    ) as OAuth2ConnectAuthenticationPropertiesIntersection;
+    return getLifecycleHooks('OAuth2ConnectAuthenticationProperties')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2ConnectAuthenticationProperties =
+  OAuth2ConnectAuthenticationProperties as OAuth2ConnectAuthenticationPropertiesConstructor;
diff --git a/src/lib/generated/classes/oauth2-issuers.ts b/src/lib/generated/classes/oauth2-issuers.ts
new file mode 100644
index 0000000..a960713
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-issuers.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2Issuers class and type
+ */
+export type OAuth2IssuersIntersection = OAuth2Issuers & Specification.OAuth2Issuers;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2Issuers class and type
+ */
+export interface OAuth2IssuersConstructor {
+  new (model?: Array | number): OAuth2IssuersIntersection;
+}
+
+/**
+ * Represents a collection of string.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class OAuth2Issuers extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the OAuth2Issuers class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(item));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(OAuth2Issuers.prototype));
+    getLifecycleHooks('OAuth2Issuers')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2Issuers.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2Issuers(this);
+    validate('OAuth2Issuers', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2Issuers.
+   * Creates a copy of the OAuth2Issuers, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2Issuers instance.
+   */
+  normalize(): OAuth2Issuers {
+    const copy = new OAuth2Issuers(this);
+    return getLifecycleHooks('OAuth2Issuers')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2Issuers = OAuth2Issuers as unknown as OAuth2IssuersConstructor;
+//export const _OAuth2Issuers = OAuth2Issuers; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/oauth2-token-definition.ts b/src/lib/generated/classes/oauth2-token-definition.ts
new file mode 100644
index 0000000..6c9b54d
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-token-definition.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2TokenDefinition class and type
+ */
+export type OAuth2TokenDefinitionIntersection = OAuth2TokenDefinition & Specification.OAuth2TokenDefinition;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2TokenDefinition class and type
+ */
+export interface OAuth2TokenDefinitionConstructor {
+  new (model?: Partial): OAuth2TokenDefinitionIntersection;
+}
+
+/**
+ * Represents a OAuth2TokenDefinition with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2TokenDefinition extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2TokenDefinition class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2TokenDefinition.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('OAuth2TokenDefinition')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2TokenDefinition.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2TokenDefinition(this as any) as OAuth2TokenDefinitionIntersection;
+    validate('OAuth2TokenDefinition', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2TokenDefinition.
+   * Creates a copy of the OAuth2TokenDefinition, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2TokenDefinition instance.
+   */
+  normalize(): OAuth2TokenDefinition & Specification.OAuth2TokenDefinition {
+    const copy = new OAuth2TokenDefinition(this as any) as OAuth2TokenDefinitionIntersection;
+    return getLifecycleHooks('OAuth2TokenDefinition')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2TokenDefinition = OAuth2TokenDefinition as OAuth2TokenDefinitionConstructor;
diff --git a/src/lib/generated/classes/oauth2-token-request.ts b/src/lib/generated/classes/oauth2-token-request.ts
new file mode 100644
index 0000000..89781a2
--- /dev/null
+++ b/src/lib/generated/classes/oauth2-token-request.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OAuth2TokenRequest class and type
+ */
+export type OAuth2TokenRequestIntersection = OAuth2TokenRequest & Specification.OAuth2TokenRequest;
+
+/**
+ * Represents a constructor for the intersection of the OAuth2TokenRequest class and type
+ */
+export interface OAuth2TokenRequestConstructor {
+  new (model?: Partial): OAuth2TokenRequestIntersection;
+}
+
+/**
+ * Represents a OAuth2TokenRequest with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OAuth2TokenRequest extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OAuth2TokenRequest class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OAuth2TokenRequest.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('OAuth2TokenRequest')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OAuth2TokenRequest.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OAuth2TokenRequest(this as any) as OAuth2TokenRequestIntersection;
+    validate('OAuth2TokenRequest', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OAuth2TokenRequest.
+   * Creates a copy of the OAuth2TokenRequest, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OAuth2TokenRequest instance.
+   */
+  normalize(): OAuth2TokenRequest & Specification.OAuth2TokenRequest {
+    const copy = new OAuth2TokenRequest(this as any) as OAuth2TokenRequestIntersection;
+    return getLifecycleHooks('OAuth2TokenRequest')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OAuth2TokenRequest = OAuth2TokenRequest as OAuth2TokenRequestConstructor;
diff --git a/src/lib/generated/classes/one-event-consumption-strategy.ts b/src/lib/generated/classes/one-event-consumption-strategy.ts
new file mode 100644
index 0000000..b494f48
--- /dev/null
+++ b/src/lib/generated/classes/one-event-consumption-strategy.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _EventFilter } from './event-filter';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OneEventConsumptionStrategy class and type
+ */
+export type OneEventConsumptionStrategyIntersection = OneEventConsumptionStrategy &
+  Specification.OneEventConsumptionStrategy;
+
+/**
+ * Represents a constructor for the intersection of the OneEventConsumptionStrategy class and type
+ */
+export interface OneEventConsumptionStrategyConstructor {
+  new (model?: Partial): OneEventConsumptionStrategyIntersection;
+}
+
+/**
+ * Represents a OneEventConsumptionStrategy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OneEventConsumptionStrategy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OneEventConsumptionStrategy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OneEventConsumptionStrategy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OneEventConsumptionStrategy & object;
+    if (isObject(model)) {
+      if (typeof model.one === 'object') self.one = new _EventFilter(model.one);
+    }
+    getLifecycleHooks('OneEventConsumptionStrategy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OneEventConsumptionStrategy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OneEventConsumptionStrategy(this as any) as OneEventConsumptionStrategyIntersection;
+    validate('OneEventConsumptionStrategy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OneEventConsumptionStrategy.
+   * Creates a copy of the OneEventConsumptionStrategy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OneEventConsumptionStrategy instance.
+   */
+  normalize(): OneEventConsumptionStrategy & Specification.OneEventConsumptionStrategy {
+    const copy = new OneEventConsumptionStrategy(this as any) as OneEventConsumptionStrategyIntersection;
+    return getLifecycleHooks('OneEventConsumptionStrategy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OneEventConsumptionStrategy = OneEventConsumptionStrategy as OneEventConsumptionStrategyConstructor;
diff --git a/src/lib/generated/classes/open-api-arguments.ts b/src/lib/generated/classes/open-api-arguments.ts
new file mode 100644
index 0000000..bfa0a68
--- /dev/null
+++ b/src/lib/generated/classes/open-api-arguments.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { _WithOpenAPIParameters } from './with-open-api-parameters';
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OpenAPIArguments class and type
+ */
+export type OpenAPIArgumentsIntersection = OpenAPIArguments & Specification.OpenAPIArguments;
+
+/**
+ * Represents a constructor for the intersection of the OpenAPIArguments class and type
+ */
+export interface OpenAPIArgumentsConstructor {
+  new (model?: Partial): OpenAPIArgumentsIntersection;
+}
+
+/**
+ * Represents a OpenAPIArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OpenAPIArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OpenAPIArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OpenAPIArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OpenAPIArguments & object;
+    if (isObject(model)) {
+      if (typeof model.document === 'object') self.document = new _ExternalResource(model.document);
+      if (typeof model.parameters === 'object') self.parameters = new _WithOpenAPIParameters(model.parameters);
+      if (typeof model.authentication === 'object')
+        self.authentication = new _ReferenceableAuthenticationPolicy(model.authentication);
+    }
+    getLifecycleHooks('OpenAPIArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OpenAPIArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OpenAPIArguments(this as any) as OpenAPIArgumentsIntersection;
+    validate('OpenAPIArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OpenAPIArguments.
+   * Creates a copy of the OpenAPIArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OpenAPIArguments instance.
+   */
+  normalize(): OpenAPIArguments & Specification.OpenAPIArguments {
+    const copy = new OpenAPIArguments(this as any) as OpenAPIArgumentsIntersection;
+    return getLifecycleHooks('OpenAPIArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OpenAPIArguments = OpenAPIArguments as OpenAPIArgumentsConstructor;
diff --git a/src/lib/generated/classes/open-id-connect-authentication-policy-configuration.ts b/src/lib/generated/classes/open-id-connect-authentication-policy-configuration.ts
new file mode 100644
index 0000000..5026e98
--- /dev/null
+++ b/src/lib/generated/classes/open-id-connect-authentication-policy-configuration.ts
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OpenIdConnectAuthenticationPolicyConfiguration class and type
+ */
+export type OpenIdConnectAuthenticationPolicyConfigurationIntersection =
+  OpenIdConnectAuthenticationPolicyConfiguration & Specification.OpenIdConnectAuthenticationPolicyConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the OpenIdConnectAuthenticationPolicyConfiguration class and type
+ */
+export interface OpenIdConnectAuthenticationPolicyConfigurationConstructor {
+  new (
+    model?: Partial,
+  ): OpenIdConnectAuthenticationPolicyConfigurationIntersection;
+}
+
+/**
+ * Represents a OpenIdConnectAuthenticationPolicyConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OpenIdConnectAuthenticationPolicyConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OpenIdConnectAuthenticationPolicyConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OpenIdConnectAuthenticationPolicyConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OpenIdConnectAuthenticationPolicyConfiguration & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.OpenIdConnectAuthenticationProperties).client === 'object')
+        (self as Specification.OpenIdConnectAuthenticationProperties).client = new _OAuth2AutenthicationDataClient(
+          (model as Specification.OpenIdConnectAuthenticationProperties)
+            .client as Specification.OAuth2AutenthicationDataClient,
+        );
+      if (typeof (model as Specification.OpenIdConnectAuthenticationProperties).request === 'object')
+        (self as Specification.OpenIdConnectAuthenticationProperties).request = new _OAuth2TokenRequest(
+          (model as Specification.OpenIdConnectAuthenticationProperties).request as Specification.OAuth2TokenRequest,
+        );
+      if (typeof (model as Specification.OpenIdConnectAuthenticationProperties).subject === 'object')
+        (self as Specification.OpenIdConnectAuthenticationProperties).subject = new _OAuth2TokenDefinition(
+          (model as Specification.OpenIdConnectAuthenticationProperties).subject as Specification.OAuth2TokenDefinition,
+        );
+      if (typeof (model as Specification.OpenIdConnectAuthenticationProperties).actor === 'object')
+        (self as Specification.OpenIdConnectAuthenticationProperties).actor = new _OAuth2TokenDefinition(
+          (model as Specification.OpenIdConnectAuthenticationProperties).actor as Specification.OAuth2TokenDefinition,
+        );
+    }
+    getLifecycleHooks('OpenIdConnectAuthenticationPolicyConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OpenIdConnectAuthenticationPolicyConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OpenIdConnectAuthenticationPolicyConfiguration(
+      this as any,
+    ) as OpenIdConnectAuthenticationPolicyConfigurationIntersection;
+    validate('OpenIdConnectAuthenticationPolicyConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OpenIdConnectAuthenticationPolicyConfiguration.
+   * Creates a copy of the OpenIdConnectAuthenticationPolicyConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OpenIdConnectAuthenticationPolicyConfiguration instance.
+   */
+  normalize(): OpenIdConnectAuthenticationPolicyConfiguration &
+    Specification.OpenIdConnectAuthenticationPolicyConfiguration {
+    const copy = new OpenIdConnectAuthenticationPolicyConfiguration(
+      this as any,
+    ) as OpenIdConnectAuthenticationPolicyConfigurationIntersection;
+    return getLifecycleHooks('OpenIdConnectAuthenticationPolicyConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OpenIdConnectAuthenticationPolicyConfiguration =
+  OpenIdConnectAuthenticationPolicyConfiguration as OpenIdConnectAuthenticationPolicyConfigurationConstructor;
diff --git a/src/lib/generated/classes/open-id-connect-authentication-policy.ts b/src/lib/generated/classes/open-id-connect-authentication-policy.ts
new file mode 100644
index 0000000..2e27b54
--- /dev/null
+++ b/src/lib/generated/classes/open-id-connect-authentication-policy.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OpenIdConnectAuthenticationPolicyConfiguration } from './open-id-connect-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OpenIdConnectAuthenticationPolicy class and type
+ */
+export type OpenIdConnectAuthenticationPolicyIntersection = OpenIdConnectAuthenticationPolicy &
+  Specification.OpenIdConnectAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the OpenIdConnectAuthenticationPolicy class and type
+ */
+export interface OpenIdConnectAuthenticationPolicyConstructor {
+  new (model?: Partial): OpenIdConnectAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a OpenIdConnectAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OpenIdConnectAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OpenIdConnectAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OpenIdConnectAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OpenIdConnectAuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.oidc === 'object') self.oidc = new _OpenIdConnectAuthenticationPolicyConfiguration(model.oidc);
+    }
+    getLifecycleHooks('OpenIdConnectAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OpenIdConnectAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OpenIdConnectAuthenticationPolicy(this as any) as OpenIdConnectAuthenticationPolicyIntersection;
+    validate('OpenIdConnectAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OpenIdConnectAuthenticationPolicy.
+   * Creates a copy of the OpenIdConnectAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OpenIdConnectAuthenticationPolicy instance.
+   */
+  normalize(): OpenIdConnectAuthenticationPolicy & Specification.OpenIdConnectAuthenticationPolicy {
+    const copy = new OpenIdConnectAuthenticationPolicy(this as any) as OpenIdConnectAuthenticationPolicyIntersection;
+    return getLifecycleHooks('OpenIdConnectAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OpenIdConnectAuthenticationPolicy =
+  OpenIdConnectAuthenticationPolicy as OpenIdConnectAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/open-id-connect-authentication-properties.ts b/src/lib/generated/classes/open-id-connect-authentication-properties.ts
new file mode 100644
index 0000000..e571dd9
--- /dev/null
+++ b/src/lib/generated/classes/open-id-connect-authentication-properties.ts
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _OAuth2AutenthicationDataClient } from './oauth2-autenthication-data-client';
+import { _OAuth2TokenRequest } from './oauth2-token-request';
+import { _OAuth2TokenDefinition } from './oauth2-token-definition';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the OpenIdConnectAuthenticationProperties class and type
+ */
+export type OpenIdConnectAuthenticationPropertiesIntersection = OpenIdConnectAuthenticationProperties &
+  Specification.OpenIdConnectAuthenticationProperties;
+
+/**
+ * Represents a constructor for the intersection of the OpenIdConnectAuthenticationProperties class and type
+ */
+export interface OpenIdConnectAuthenticationPropertiesConstructor {
+  new (
+    model?: Partial,
+  ): OpenIdConnectAuthenticationPropertiesIntersection;
+}
+
+/**
+ * Represents a OpenIdConnectAuthenticationProperties with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OpenIdConnectAuthenticationProperties extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OpenIdConnectAuthenticationProperties class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OpenIdConnectAuthenticationProperties.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.OpenIdConnectAuthenticationProperties & object;
+    if (isObject(model)) {
+      if (typeof model.client === 'object') self.client = new _OAuth2AutenthicationDataClient(model.client);
+      if (typeof model.request === 'object') self.request = new _OAuth2TokenRequest(model.request);
+      if (typeof model.subject === 'object') self.subject = new _OAuth2TokenDefinition(model.subject);
+      if (typeof model.actor === 'object') self.actor = new _OAuth2TokenDefinition(model.actor);
+    }
+    getLifecycleHooks('OpenIdConnectAuthenticationProperties')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OpenIdConnectAuthenticationProperties.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OpenIdConnectAuthenticationProperties(
+      this as any,
+    ) as OpenIdConnectAuthenticationPropertiesIntersection;
+    validate('OpenIdConnectAuthenticationProperties', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OpenIdConnectAuthenticationProperties.
+   * Creates a copy of the OpenIdConnectAuthenticationProperties, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OpenIdConnectAuthenticationProperties instance.
+   */
+  normalize(): OpenIdConnectAuthenticationProperties & Specification.OpenIdConnectAuthenticationProperties {
+    const copy = new OpenIdConnectAuthenticationProperties(
+      this as any,
+    ) as OpenIdConnectAuthenticationPropertiesIntersection;
+    return getLifecycleHooks('OpenIdConnectAuthenticationProperties')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OpenIdConnectAuthenticationProperties =
+  OpenIdConnectAuthenticationProperties as OpenIdConnectAuthenticationPropertiesConstructor;
diff --git a/src/lib/generated/classes/output-as.ts b/src/lib/generated/classes/output-as.ts
new file mode 100644
index 0000000..dc5cbec
--- /dev/null
+++ b/src/lib/generated/classes/output-as.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the OutputAs class and type
+ */
+export type OutputAsIntersection = OutputAs & Specification.OutputAs;
+
+/**
+ * Represents a constructor for the intersection of the OutputAs class and type
+ */
+export interface OutputAsConstructor {
+  new (model?: Partial): OutputAsIntersection;
+}
+
+/**
+ * Represents a OutputAs with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class OutputAs extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the OutputAs class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the OutputAs.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('OutputAs')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the OutputAs.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new OutputAs(this as any) as OutputAsIntersection;
+    validate('OutputAs', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the OutputAs.
+   * Creates a copy of the OutputAs, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the OutputAs instance.
+   */
+  normalize(): OutputAs & Specification.OutputAs {
+    const copy = new OutputAs(this as any) as OutputAsIntersection;
+    return getLifecycleHooks('OutputAs')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _OutputAs = OutputAs as OutputAsConstructor;
diff --git a/src/lib/generated/classes/output.ts b/src/lib/generated/classes/output.ts
new file mode 100644
index 0000000..a4ba152
--- /dev/null
+++ b/src/lib/generated/classes/output.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Schema } from './schema';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Output class and type
+ */
+export type OutputIntersection = Output & Specification.Output;
+
+/**
+ * Represents a constructor for the intersection of the Output class and type
+ */
+export interface OutputConstructor {
+  new (model?: Partial): OutputIntersection;
+}
+
+/**
+ * Represents a Output with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Output extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Output class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Output.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Output & object;
+    if (isObject(model)) {
+      if (typeof model.schema === 'object') self.schema = new _Schema(model.schema);
+    }
+    getLifecycleHooks('Output')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Output.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Output(this as any) as OutputIntersection;
+    validate('Output', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Output.
+   * Creates a copy of the Output, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Output instance.
+   */
+  normalize(): Output & Specification.Output {
+    const copy = new Output(this as any) as OutputIntersection;
+    return getLifecycleHooks('Output')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Output = Output as OutputConstructor;
diff --git a/src/lib/generated/classes/raise-task-configuration.ts b/src/lib/generated/classes/raise-task-configuration.ts
new file mode 100644
index 0000000..65d6897
--- /dev/null
+++ b/src/lib/generated/classes/raise-task-configuration.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _RaiseTaskRaiseError } from './raise-task-raise-error';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RaiseTaskConfiguration class and type
+ */
+export type RaiseTaskConfigurationIntersection = RaiseTaskConfiguration & Specification.RaiseTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the RaiseTaskConfiguration class and type
+ */
+export interface RaiseTaskConfigurationConstructor {
+  new (model?: Partial): RaiseTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a RaiseTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RaiseTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RaiseTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RaiseTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RaiseTaskConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.error === 'object') self.error = new _RaiseTaskRaiseError(model.error);
+    }
+    getLifecycleHooks('RaiseTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RaiseTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RaiseTaskConfiguration(this as any) as RaiseTaskConfigurationIntersection;
+    validate('RaiseTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RaiseTaskConfiguration.
+   * Creates a copy of the RaiseTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RaiseTaskConfiguration instance.
+   */
+  normalize(): RaiseTaskConfiguration & Specification.RaiseTaskConfiguration {
+    const copy = new RaiseTaskConfiguration(this as any) as RaiseTaskConfigurationIntersection;
+    return getLifecycleHooks('RaiseTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RaiseTaskConfiguration = RaiseTaskConfiguration as RaiseTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/raise-task-raise-error.ts b/src/lib/generated/classes/raise-task-raise-error.ts
new file mode 100644
index 0000000..628df2d
--- /dev/null
+++ b/src/lib/generated/classes/raise-task-raise-error.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the RaiseTaskRaiseError class and type
+ */
+export type RaiseTaskRaiseErrorIntersection = RaiseTaskRaiseError & Specification.RaiseTaskRaiseError;
+
+/**
+ * Represents a constructor for the intersection of the RaiseTaskRaiseError class and type
+ */
+export interface RaiseTaskRaiseErrorConstructor {
+  new (model?: Partial): RaiseTaskRaiseErrorIntersection;
+}
+
+/**
+ * Represents a RaiseTaskRaiseError with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RaiseTaskRaiseError extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RaiseTaskRaiseError class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RaiseTaskRaiseError.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('RaiseTaskRaiseError')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RaiseTaskRaiseError.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RaiseTaskRaiseError(this as any) as RaiseTaskRaiseErrorIntersection;
+    validate('RaiseTaskRaiseError', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RaiseTaskRaiseError.
+   * Creates a copy of the RaiseTaskRaiseError, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RaiseTaskRaiseError instance.
+   */
+  normalize(): RaiseTaskRaiseError & Specification.RaiseTaskRaiseError {
+    const copy = new RaiseTaskRaiseError(this as any) as RaiseTaskRaiseErrorIntersection;
+    return getLifecycleHooks('RaiseTaskRaiseError')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RaiseTaskRaiseError = RaiseTaskRaiseError as RaiseTaskRaiseErrorConstructor;
diff --git a/src/lib/generated/classes/raise-task.ts b/src/lib/generated/classes/raise-task.ts
new file mode 100644
index 0000000..f7b062f
--- /dev/null
+++ b/src/lib/generated/classes/raise-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _RaiseTaskConfiguration } from './raise-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RaiseTask class and type
+ */
+export type RaiseTaskIntersection = RaiseTask & Specification.RaiseTask;
+
+/**
+ * Represents a constructor for the intersection of the RaiseTask class and type
+ */
+export interface RaiseTaskConstructor {
+  new (model?: Partial): RaiseTaskIntersection;
+}
+
+/**
+ * Represents a RaiseTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RaiseTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the RaiseTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RaiseTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RaiseTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.raise === 'object') self.raise = new _RaiseTaskConfiguration(model.raise);
+    }
+    getLifecycleHooks('RaiseTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RaiseTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RaiseTask(this as any) as RaiseTaskIntersection;
+    validate('RaiseTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RaiseTask.
+   * Creates a copy of the RaiseTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RaiseTask instance.
+   */
+  normalize(): RaiseTask & Specification.RaiseTask {
+    const copy = new RaiseTask(this as any) as RaiseTaskIntersection;
+    return getLifecycleHooks('RaiseTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RaiseTask = RaiseTask as RaiseTaskConstructor;
diff --git a/src/lib/generated/classes/referenceable-authentication-policy.ts b/src/lib/generated/classes/referenceable-authentication-policy.ts
new file mode 100644
index 0000000..badbb1b
--- /dev/null
+++ b/src/lib/generated/classes/referenceable-authentication-policy.ts
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _BasicAuthenticationPolicyConfiguration } from './basic-authentication-policy-configuration';
+import { _BearerAuthenticationPolicyConfiguration } from './bearer-authentication-policy-configuration';
+import { _DigestAuthenticationPolicyConfiguration } from './digest-authentication-policy-configuration';
+import { _OAuth2AuthenticationPolicyConfiguration } from './oauth2-authentication-policy-configuration';
+import { _OpenIdConnectAuthenticationPolicyConfiguration } from './open-id-connect-authentication-policy-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the ReferenceableAuthenticationPolicy class and type
+ */
+export type ReferenceableAuthenticationPolicyIntersection = ReferenceableAuthenticationPolicy &
+  Specification.ReferenceableAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the ReferenceableAuthenticationPolicy class and type
+ */
+export interface ReferenceableAuthenticationPolicyConstructor {
+  new (model?: Partial): ReferenceableAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a ReferenceableAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ReferenceableAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ReferenceableAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ReferenceableAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.ReferenceableAuthenticationPolicy & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.BasicAuthenticationPolicy).basic === 'object')
+        (self as Specification.BasicAuthenticationPolicy).basic = new _BasicAuthenticationPolicyConfiguration(
+          (model as Specification.BasicAuthenticationPolicy)
+            .basic as Specification.BasicAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.BearerAuthenticationPolicy).bearer === 'object')
+        (self as Specification.BearerAuthenticationPolicy).bearer = new _BearerAuthenticationPolicyConfiguration(
+          (model as Specification.BearerAuthenticationPolicy)
+            .bearer as Specification.BearerAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.DigestAuthenticationPolicy).digest === 'object')
+        (self as Specification.DigestAuthenticationPolicy).digest = new _DigestAuthenticationPolicyConfiguration(
+          (model as Specification.DigestAuthenticationPolicy)
+            .digest as Specification.DigestAuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.OAuth2AuthenticationPolicy).oauth2 === 'object')
+        (self as Specification.OAuth2AuthenticationPolicy).oauth2 = new _OAuth2AuthenticationPolicyConfiguration(
+          (model as Specification.OAuth2AuthenticationPolicy)
+            .oauth2 as Specification.OAuth2AuthenticationPolicyConfiguration,
+        );
+      if (typeof (model as Specification.OpenIdConnectAuthenticationPolicy).oidc === 'object')
+        (self as Specification.OpenIdConnectAuthenticationPolicy).oidc =
+          new _OpenIdConnectAuthenticationPolicyConfiguration(
+            (model as Specification.OpenIdConnectAuthenticationPolicy)
+              .oidc as Specification.OpenIdConnectAuthenticationPolicyConfiguration,
+          );
+    }
+    getLifecycleHooks('ReferenceableAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ReferenceableAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ReferenceableAuthenticationPolicy(this as any) as ReferenceableAuthenticationPolicyIntersection;
+    validate('ReferenceableAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ReferenceableAuthenticationPolicy.
+   * Creates a copy of the ReferenceableAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ReferenceableAuthenticationPolicy instance.
+   */
+  normalize(): ReferenceableAuthenticationPolicy & Specification.ReferenceableAuthenticationPolicy {
+    const copy = new ReferenceableAuthenticationPolicy(this as any) as ReferenceableAuthenticationPolicyIntersection;
+    return getLifecycleHooks('ReferenceableAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ReferenceableAuthenticationPolicy =
+  ReferenceableAuthenticationPolicy as ReferenceableAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/retry-backoff.ts b/src/lib/generated/classes/retry-backoff.ts
new file mode 100644
index 0000000..bed48e7
--- /dev/null
+++ b/src/lib/generated/classes/retry-backoff.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the RetryBackoff class and type
+ */
+export type RetryBackoffIntersection = RetryBackoff & Specification.RetryBackoff;
+
+/**
+ * Represents a constructor for the intersection of the RetryBackoff class and type
+ */
+export interface RetryBackoffConstructor {
+  new (model?: Partial): RetryBackoffIntersection;
+}
+
+/**
+ * Represents a RetryBackoff with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RetryBackoff extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RetryBackoff class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RetryBackoff.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('RetryBackoff')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RetryBackoff.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RetryBackoff(this as any) as RetryBackoffIntersection;
+    validate('RetryBackoff', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RetryBackoff.
+   * Creates a copy of the RetryBackoff, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RetryBackoff instance.
+   */
+  normalize(): RetryBackoff & Specification.RetryBackoff {
+    const copy = new RetryBackoff(this as any) as RetryBackoffIntersection;
+    return getLifecycleHooks('RetryBackoff')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RetryBackoff = RetryBackoff as RetryBackoffConstructor;
diff --git a/src/lib/generated/classes/retry-limit-attempt.ts b/src/lib/generated/classes/retry-limit-attempt.ts
new file mode 100644
index 0000000..e48b9e7
--- /dev/null
+++ b/src/lib/generated/classes/retry-limit-attempt.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RetryLimitAttempt class and type
+ */
+export type RetryLimitAttemptIntersection = RetryLimitAttempt & Specification.RetryLimitAttempt;
+
+/**
+ * Represents a constructor for the intersection of the RetryLimitAttempt class and type
+ */
+export interface RetryLimitAttemptConstructor {
+  new (model?: Partial): RetryLimitAttemptIntersection;
+}
+
+/**
+ * Represents a RetryLimitAttempt with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RetryLimitAttempt extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RetryLimitAttempt class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RetryLimitAttempt.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RetryLimitAttempt & object;
+    if (isObject(model)) {
+      if (typeof model.duration === 'object') self.duration = new _Duration(model.duration);
+    }
+    getLifecycleHooks('RetryLimitAttempt')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RetryLimitAttempt.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RetryLimitAttempt(this as any) as RetryLimitAttemptIntersection;
+    validate('RetryLimitAttempt', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RetryLimitAttempt.
+   * Creates a copy of the RetryLimitAttempt, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RetryLimitAttempt instance.
+   */
+  normalize(): RetryLimitAttempt & Specification.RetryLimitAttempt {
+    const copy = new RetryLimitAttempt(this as any) as RetryLimitAttemptIntersection;
+    return getLifecycleHooks('RetryLimitAttempt')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RetryLimitAttempt = RetryLimitAttempt as RetryLimitAttemptConstructor;
diff --git a/src/lib/generated/classes/retry-limit.ts b/src/lib/generated/classes/retry-limit.ts
new file mode 100644
index 0000000..d745e86
--- /dev/null
+++ b/src/lib/generated/classes/retry-limit.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _RetryLimitAttempt } from './retry-limit-attempt';
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RetryLimit class and type
+ */
+export type RetryLimitIntersection = RetryLimit & Specification.RetryLimit;
+
+/**
+ * Represents a constructor for the intersection of the RetryLimit class and type
+ */
+export interface RetryLimitConstructor {
+  new (model?: Partial): RetryLimitIntersection;
+}
+
+/**
+ * Represents a RetryLimit with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RetryLimit extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RetryLimit class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RetryLimit.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RetryLimit & object;
+    if (isObject(model)) {
+      if (typeof model.attempt === 'object') self.attempt = new _RetryLimitAttempt(model.attempt);
+      if (typeof model.duration === 'object') self.duration = new _Duration(model.duration);
+    }
+    getLifecycleHooks('RetryLimit')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RetryLimit.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RetryLimit(this as any) as RetryLimitIntersection;
+    validate('RetryLimit', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RetryLimit.
+   * Creates a copy of the RetryLimit, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RetryLimit instance.
+   */
+  normalize(): RetryLimit & Specification.RetryLimit {
+    const copy = new RetryLimit(this as any) as RetryLimitIntersection;
+    return getLifecycleHooks('RetryLimit')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RetryLimit = RetryLimit as RetryLimitConstructor;
diff --git a/src/lib/generated/classes/retry-policy-jitter.ts b/src/lib/generated/classes/retry-policy-jitter.ts
new file mode 100644
index 0000000..c805979
--- /dev/null
+++ b/src/lib/generated/classes/retry-policy-jitter.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RetryPolicyJitter class and type
+ */
+export type RetryPolicyJitterIntersection = RetryPolicyJitter & Specification.RetryPolicyJitter;
+
+/**
+ * Represents a constructor for the intersection of the RetryPolicyJitter class and type
+ */
+export interface RetryPolicyJitterConstructor {
+  new (model?: Partial): RetryPolicyJitterIntersection;
+}
+
+/**
+ * Represents a RetryPolicyJitter with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RetryPolicyJitter extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RetryPolicyJitter class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RetryPolicyJitter.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RetryPolicyJitter & object;
+    if (isObject(model)) {
+      if (typeof model.from === 'object') self.from = new _Duration(model.from);
+      if (typeof model.to === 'object') self.to = new _Duration(model.to);
+    }
+    getLifecycleHooks('RetryPolicyJitter')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RetryPolicyJitter.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RetryPolicyJitter(this as any) as RetryPolicyJitterIntersection;
+    validate('RetryPolicyJitter', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RetryPolicyJitter.
+   * Creates a copy of the RetryPolicyJitter, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RetryPolicyJitter instance.
+   */
+  normalize(): RetryPolicyJitter & Specification.RetryPolicyJitter {
+    const copy = new RetryPolicyJitter(this as any) as RetryPolicyJitterIntersection;
+    return getLifecycleHooks('RetryPolicyJitter')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RetryPolicyJitter = RetryPolicyJitter as RetryPolicyJitterConstructor;
diff --git a/src/lib/generated/classes/retry-policy.ts b/src/lib/generated/classes/retry-policy.ts
new file mode 100644
index 0000000..2678380
--- /dev/null
+++ b/src/lib/generated/classes/retry-policy.ts
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { _RetryBackoff } from './retry-backoff';
+import { _RetryLimit } from './retry-limit';
+import { _RetryPolicyJitter } from './retry-policy-jitter';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RetryPolicy class and type
+ */
+export type RetryPolicyIntersection = RetryPolicy & Specification.RetryPolicy;
+
+/**
+ * Represents a constructor for the intersection of the RetryPolicy class and type
+ */
+export interface RetryPolicyConstructor {
+  new (model?: Partial): RetryPolicyIntersection;
+}
+
+/**
+ * Represents a RetryPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RetryPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RetryPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RetryPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RetryPolicy & object;
+    if (isObject(model)) {
+      if (typeof model.delay === 'object') self.delay = new _Duration(model.delay);
+      if (typeof model.backoff === 'object') self.backoff = new _RetryBackoff(model.backoff);
+      if (typeof model.limit === 'object') self.limit = new _RetryLimit(model.limit);
+      if (typeof model.jitter === 'object') self.jitter = new _RetryPolicyJitter(model.jitter);
+    }
+    getLifecycleHooks('RetryPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RetryPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RetryPolicy(this as any) as RetryPolicyIntersection;
+    validate('RetryPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RetryPolicy.
+   * Creates a copy of the RetryPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RetryPolicy instance.
+   */
+  normalize(): RetryPolicy & Specification.RetryPolicy {
+    const copy = new RetryPolicy(this as any) as RetryPolicyIntersection;
+    return getLifecycleHooks('RetryPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RetryPolicy = RetryPolicy as RetryPolicyConstructor;
diff --git a/src/lib/generated/classes/run-container.ts b/src/lib/generated/classes/run-container.ts
new file mode 100644
index 0000000..2bb9dc0
--- /dev/null
+++ b/src/lib/generated/classes/run-container.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Container } from './container';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunContainer class and type
+ */
+export type RunContainerIntersection = RunContainer & Specification.RunContainer;
+
+/**
+ * Represents a constructor for the intersection of the RunContainer class and type
+ */
+export interface RunContainerConstructor {
+  new (model?: Partial): RunContainerIntersection;
+}
+
+/**
+ * Represents a RunContainer with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunContainer extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RunContainer class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunContainer.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunContainer & object;
+    if (isObject(model)) {
+      if (typeof model.container === 'object') self.container = new _Container(model.container);
+    }
+    getLifecycleHooks('RunContainer')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunContainer.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunContainer(this as any) as RunContainerIntersection;
+    validate('RunContainer', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunContainer.
+   * Creates a copy of the RunContainer, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunContainer instance.
+   */
+  normalize(): RunContainer & Specification.RunContainer {
+    const copy = new RunContainer(this as any) as RunContainerIntersection;
+    return getLifecycleHooks('RunContainer')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunContainer = RunContainer as RunContainerConstructor;
diff --git a/src/lib/generated/classes/run-script.ts b/src/lib/generated/classes/run-script.ts
new file mode 100644
index 0000000..0e5c829
--- /dev/null
+++ b/src/lib/generated/classes/run-script.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Script } from './script';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunScript class and type
+ */
+export type RunScriptIntersection = RunScript & Specification.RunScript;
+
+/**
+ * Represents a constructor for the intersection of the RunScript class and type
+ */
+export interface RunScriptConstructor {
+  new (model?: Partial): RunScriptIntersection;
+}
+
+/**
+ * Represents a RunScript with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunScript extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RunScript class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunScript.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunScript & object;
+    if (isObject(model)) {
+      if (typeof model.script === 'object') self.script = new _Script(model.script);
+    }
+    getLifecycleHooks('RunScript')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunScript.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunScript(this as any) as RunScriptIntersection;
+    validate('RunScript', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunScript.
+   * Creates a copy of the RunScript, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunScript instance.
+   */
+  normalize(): RunScript & Specification.RunScript {
+    const copy = new RunScript(this as any) as RunScriptIntersection;
+    return getLifecycleHooks('RunScript')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunScript = RunScript as RunScriptConstructor;
diff --git a/src/lib/generated/classes/run-shell.ts b/src/lib/generated/classes/run-shell.ts
new file mode 100644
index 0000000..8d641e4
--- /dev/null
+++ b/src/lib/generated/classes/run-shell.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Shell } from './shell';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunShell class and type
+ */
+export type RunShellIntersection = RunShell & Specification.RunShell;
+
+/**
+ * Represents a constructor for the intersection of the RunShell class and type
+ */
+export interface RunShellConstructor {
+  new (model?: Partial): RunShellIntersection;
+}
+
+/**
+ * Represents a RunShell with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunShell extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RunShell class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunShell.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunShell & object;
+    if (isObject(model)) {
+      if (typeof model.shell === 'object') self.shell = new _Shell(model.shell);
+    }
+    getLifecycleHooks('RunShell')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunShell.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunShell(this as any) as RunShellIntersection;
+    validate('RunShell', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunShell.
+   * Creates a copy of the RunShell, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunShell instance.
+   */
+  normalize(): RunShell & Specification.RunShell {
+    const copy = new RunShell(this as any) as RunShellIntersection;
+    return getLifecycleHooks('RunShell')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunShell = RunShell as RunShellConstructor;
diff --git a/src/lib/generated/classes/run-task-configuration.ts b/src/lib/generated/classes/run-task-configuration.ts
new file mode 100644
index 0000000..7a47583
--- /dev/null
+++ b/src/lib/generated/classes/run-task-configuration.ts
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Container } from './container';
+import { _Script } from './script';
+import { _Shell } from './shell';
+import { _SubflowConfiguration } from './subflow-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunTaskConfiguration class and type
+ */
+export type RunTaskConfigurationIntersection = RunTaskConfiguration & Specification.RunTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the RunTaskConfiguration class and type
+ */
+export interface RunTaskConfigurationConstructor {
+  new (model?: Partial): RunTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a RunTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RunTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunTaskConfiguration & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.RunContainer).container === 'object')
+        (self as Specification.RunContainer).container = new _Container(
+          (model as Specification.RunContainer).container as Specification.Container,
+        );
+      if (typeof (model as Specification.RunScript).script === 'object')
+        (self as Specification.RunScript).script = new _Script(
+          (model as Specification.RunScript).script as Specification.Script,
+        );
+      if (typeof (model as Specification.RunShell).shell === 'object')
+        (self as Specification.RunShell).shell = new _Shell(
+          (model as Specification.RunShell).shell as Specification.Shell,
+        );
+      if (typeof (model as Specification.RunWorkflow).workflow === 'object')
+        (self as Specification.RunWorkflow).workflow = new _SubflowConfiguration(
+          (model as Specification.RunWorkflow).workflow as Specification.SubflowConfiguration,
+        );
+    }
+    getLifecycleHooks('RunTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunTaskConfiguration(this as any) as RunTaskConfigurationIntersection;
+    validate('RunTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunTaskConfiguration.
+   * Creates a copy of the RunTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunTaskConfiguration instance.
+   */
+  normalize(): RunTaskConfiguration & Specification.RunTaskConfiguration {
+    const copy = new RunTaskConfiguration(this as any) as RunTaskConfigurationIntersection;
+    return getLifecycleHooks('RunTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunTaskConfiguration = RunTaskConfiguration as RunTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/run-task.ts b/src/lib/generated/classes/run-task.ts
new file mode 100644
index 0000000..986e239
--- /dev/null
+++ b/src/lib/generated/classes/run-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _RunTaskConfiguration } from './run-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunTask class and type
+ */
+export type RunTaskIntersection = RunTask & Specification.RunTask;
+
+/**
+ * Represents a constructor for the intersection of the RunTask class and type
+ */
+export interface RunTaskConstructor {
+  new (model?: Partial): RunTaskIntersection;
+}
+
+/**
+ * Represents a RunTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the RunTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.run === 'object') self.run = new _RunTaskConfiguration(model.run);
+    }
+    getLifecycleHooks('RunTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunTask(this as any) as RunTaskIntersection;
+    validate('RunTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunTask.
+   * Creates a copy of the RunTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunTask instance.
+   */
+  normalize(): RunTask & Specification.RunTask {
+    const copy = new RunTask(this as any) as RunTaskIntersection;
+    return getLifecycleHooks('RunTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunTask = RunTask as RunTaskConstructor;
diff --git a/src/lib/generated/classes/run-workflow.ts b/src/lib/generated/classes/run-workflow.ts
new file mode 100644
index 0000000..6094086
--- /dev/null
+++ b/src/lib/generated/classes/run-workflow.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _SubflowConfiguration } from './subflow-configuration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the RunWorkflow class and type
+ */
+export type RunWorkflowIntersection = RunWorkflow & Specification.RunWorkflow;
+
+/**
+ * Represents a constructor for the intersection of the RunWorkflow class and type
+ */
+export interface RunWorkflowConstructor {
+  new (model?: Partial): RunWorkflowIntersection;
+}
+
+/**
+ * Represents a RunWorkflow with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RunWorkflow extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RunWorkflow class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RunWorkflow.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.RunWorkflow & object;
+    if (isObject(model)) {
+      if (typeof model.workflow === 'object') self.workflow = new _SubflowConfiguration(model.workflow);
+    }
+    getLifecycleHooks('RunWorkflow')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RunWorkflow.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RunWorkflow(this as any) as RunWorkflowIntersection;
+    validate('RunWorkflow', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RunWorkflow.
+   * Creates a copy of the RunWorkflow, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RunWorkflow instance.
+   */
+  normalize(): RunWorkflow & Specification.RunWorkflow {
+    const copy = new RunWorkflow(this as any) as RunWorkflowIntersection;
+    return getLifecycleHooks('RunWorkflow')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RunWorkflow = RunWorkflow as RunWorkflowConstructor;
diff --git a/src/lib/generated/classes/runtime-expression.ts b/src/lib/generated/classes/runtime-expression.ts
new file mode 100644
index 0000000..ec80d13
--- /dev/null
+++ b/src/lib/generated/classes/runtime-expression.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the RuntimeExpression class and type
+ */
+export type RuntimeExpressionIntersection = RuntimeExpression & Specification.RuntimeExpression;
+
+/**
+ * Represents a constructor for the intersection of the RuntimeExpression class and type
+ */
+export interface RuntimeExpressionConstructor {
+  new (model?: Partial): RuntimeExpressionIntersection;
+}
+
+/**
+ * Represents a RuntimeExpression with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class RuntimeExpression extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the RuntimeExpression class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the RuntimeExpression.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('RuntimeExpression')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the RuntimeExpression.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new RuntimeExpression(this as any) as RuntimeExpressionIntersection;
+    validate('RuntimeExpression', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the RuntimeExpression.
+   * Creates a copy of the RuntimeExpression, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the RuntimeExpression instance.
+   */
+  normalize(): RuntimeExpression & Specification.RuntimeExpression {
+    const copy = new RuntimeExpression(this as any) as RuntimeExpressionIntersection;
+    return getLifecycleHooks('RuntimeExpression')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _RuntimeExpression = RuntimeExpression as RuntimeExpressionConstructor;
diff --git a/src/lib/generated/classes/schedule.ts b/src/lib/generated/classes/schedule.ts
new file mode 100644
index 0000000..60c9088
--- /dev/null
+++ b/src/lib/generated/classes/schedule.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { _EventConsumptionStrategy } from './event-consumption-strategy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Schedule class and type
+ */
+export type ScheduleIntersection = Schedule & Specification.Schedule;
+
+/**
+ * Represents a constructor for the intersection of the Schedule class and type
+ */
+export interface ScheduleConstructor {
+  new (model?: Partial): ScheduleIntersection;
+}
+
+/**
+ * Represents a Schedule with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Schedule extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Schedule class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Schedule.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Schedule & object;
+    if (isObject(model)) {
+      if (typeof model.every === 'object') self.every = new _Duration(model.every);
+      if (typeof model.after === 'object') self.after = new _Duration(model.after);
+      if (typeof model.on === 'object') self.on = new _EventConsumptionStrategy(model.on);
+    }
+    getLifecycleHooks('Schedule')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Schedule.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Schedule(this as any) as ScheduleIntersection;
+    validate('Schedule', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Schedule.
+   * Creates a copy of the Schedule, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Schedule instance.
+   */
+  normalize(): Schedule & Specification.Schedule {
+    const copy = new Schedule(this as any) as ScheduleIntersection;
+    return getLifecycleHooks('Schedule')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Schedule = Schedule as ScheduleConstructor;
diff --git a/src/lib/generated/classes/schema-external.ts b/src/lib/generated/classes/schema-external.ts
new file mode 100644
index 0000000..2c33cc5
--- /dev/null
+++ b/src/lib/generated/classes/schema-external.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the SchemaExternal class and type
+ */
+export type SchemaExternalIntersection = SchemaExternal & Specification.SchemaExternal;
+
+/**
+ * Represents a constructor for the intersection of the SchemaExternal class and type
+ */
+export interface SchemaExternalConstructor {
+  new (model?: Partial): SchemaExternalIntersection;
+}
+
+/**
+ * Represents a SchemaExternal with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SchemaExternal extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SchemaExternal class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SchemaExternal.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.SchemaExternal & object;
+    if (isObject(model)) {
+      if (typeof model.resource === 'object') self.resource = new _ExternalResource(model.resource);
+    }
+    getLifecycleHooks('SchemaExternal')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SchemaExternal.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SchemaExternal(this as any) as SchemaExternalIntersection;
+    validate('SchemaExternal', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SchemaExternal.
+   * Creates a copy of the SchemaExternal, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SchemaExternal instance.
+   */
+  normalize(): SchemaExternal & Specification.SchemaExternal {
+    const copy = new SchemaExternal(this as any) as SchemaExternalIntersection;
+    return getLifecycleHooks('SchemaExternal')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SchemaExternal = SchemaExternal as SchemaExternalConstructor;
diff --git a/src/lib/generated/classes/schema-inline.ts b/src/lib/generated/classes/schema-inline.ts
new file mode 100644
index 0000000..4a66913
--- /dev/null
+++ b/src/lib/generated/classes/schema-inline.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SchemaInline class and type
+ */
+export type SchemaInlineIntersection = SchemaInline & Specification.SchemaInline;
+
+/**
+ * Represents a constructor for the intersection of the SchemaInline class and type
+ */
+export interface SchemaInlineConstructor {
+  new (model?: Partial): SchemaInlineIntersection;
+}
+
+/**
+ * Represents a SchemaInline with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SchemaInline extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SchemaInline class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SchemaInline.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('SchemaInline')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SchemaInline.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SchemaInline(this as any) as SchemaInlineIntersection;
+    validate('SchemaInline', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SchemaInline.
+   * Creates a copy of the SchemaInline, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SchemaInline instance.
+   */
+  normalize(): SchemaInline & Specification.SchemaInline {
+    const copy = new SchemaInline(this as any) as SchemaInlineIntersection;
+    return getLifecycleHooks('SchemaInline')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SchemaInline = SchemaInline as SchemaInlineConstructor;
diff --git a/src/lib/generated/classes/schema.ts b/src/lib/generated/classes/schema.ts
new file mode 100644
index 0000000..038d5af
--- /dev/null
+++ b/src/lib/generated/classes/schema.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Schema class and type
+ */
+export type SchemaIntersection = Schema & Specification.Schema;
+
+/**
+ * Represents a constructor for the intersection of the Schema class and type
+ */
+export interface SchemaConstructor {
+  new (model?: Partial): SchemaIntersection;
+}
+
+/**
+ * Represents a Schema with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Schema extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Schema class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Schema.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Schema & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.SchemaExternal).resource === 'object')
+        (self as Specification.SchemaExternal).resource = new _ExternalResource(
+          (model as Specification.SchemaExternal).resource as Specification.ExternalResource,
+        );
+    }
+    getLifecycleHooks('Schema')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Schema.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Schema(this as any) as SchemaIntersection;
+    validate('Schema', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Schema.
+   * Creates a copy of the Schema, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Schema instance.
+   */
+  normalize(): Schema & Specification.Schema {
+    const copy = new Schema(this as any) as SchemaIntersection;
+    return getLifecycleHooks('Schema')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Schema = Schema as SchemaConstructor;
diff --git a/src/lib/generated/classes/script.ts b/src/lib/generated/classes/script.ts
new file mode 100644
index 0000000..40d83f6
--- /dev/null
+++ b/src/lib/generated/classes/script.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExternalResource } from './external-resource';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Script class and type
+ */
+export type ScriptIntersection = Script & Specification.Script;
+
+/**
+ * Represents a constructor for the intersection of the Script class and type
+ */
+export interface ScriptConstructor {
+  new (model?: Partial): ScriptIntersection;
+}
+
+/**
+ * Represents a Script with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Script extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Script class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Script.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Script & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.ExternalScript).source === 'object')
+        (self as Specification.ExternalScript).source = new _ExternalResource(
+          (model as Specification.ExternalScript).source as Specification.ExternalResource,
+        );
+    }
+    getLifecycleHooks('Script')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Script.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Script(this as any) as ScriptIntersection;
+    validate('Script', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Script.
+   * Creates a copy of the Script, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Script instance.
+   */
+  normalize(): Script & Specification.Script {
+    const copy = new Script(this as any) as ScriptIntersection;
+    return getLifecycleHooks('Script')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Script = Script as ScriptConstructor;
diff --git a/src/lib/generated/classes/secret-based-authentication-policy.ts b/src/lib/generated/classes/secret-based-authentication-policy.ts
new file mode 100644
index 0000000..773ee55
--- /dev/null
+++ b/src/lib/generated/classes/secret-based-authentication-policy.ts
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SecretBasedAuthenticationPolicy class and type
+ */
+export type SecretBasedAuthenticationPolicyIntersection = SecretBasedAuthenticationPolicy &
+  Specification.SecretBasedAuthenticationPolicy;
+
+/**
+ * Represents a constructor for the intersection of the SecretBasedAuthenticationPolicy class and type
+ */
+export interface SecretBasedAuthenticationPolicyConstructor {
+  new (model?: Partial): SecretBasedAuthenticationPolicyIntersection;
+}
+
+/**
+ * Represents a SecretBasedAuthenticationPolicy with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SecretBasedAuthenticationPolicy extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SecretBasedAuthenticationPolicy class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SecretBasedAuthenticationPolicy.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('SecretBasedAuthenticationPolicy')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SecretBasedAuthenticationPolicy.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SecretBasedAuthenticationPolicy(this as any) as SecretBasedAuthenticationPolicyIntersection;
+    validate('SecretBasedAuthenticationPolicy', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SecretBasedAuthenticationPolicy.
+   * Creates a copy of the SecretBasedAuthenticationPolicy, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SecretBasedAuthenticationPolicy instance.
+   */
+  normalize(): SecretBasedAuthenticationPolicy & Specification.SecretBasedAuthenticationPolicy {
+    const copy = new SecretBasedAuthenticationPolicy(this as any) as SecretBasedAuthenticationPolicyIntersection;
+    return getLifecycleHooks('SecretBasedAuthenticationPolicy')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SecretBasedAuthenticationPolicy =
+  SecretBasedAuthenticationPolicy as SecretBasedAuthenticationPolicyConstructor;
diff --git a/src/lib/generated/classes/set-task-configuration.ts b/src/lib/generated/classes/set-task-configuration.ts
new file mode 100644
index 0000000..8e7e17a
--- /dev/null
+++ b/src/lib/generated/classes/set-task-configuration.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SetTaskConfiguration class and type
+ */
+export type SetTaskConfigurationIntersection = SetTaskConfiguration & Specification.SetTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the SetTaskConfiguration class and type
+ */
+export interface SetTaskConfigurationConstructor {
+  new (model?: Partial): SetTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a SetTaskConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SetTaskConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SetTaskConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SetTaskConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('SetTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SetTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SetTaskConfiguration(this as any) as SetTaskConfigurationIntersection;
+    validate('SetTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SetTaskConfiguration.
+   * Creates a copy of the SetTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SetTaskConfiguration instance.
+   */
+  normalize(): SetTaskConfiguration & Specification.SetTaskConfiguration {
+    const copy = new SetTaskConfiguration(this as any) as SetTaskConfigurationIntersection;
+    return getLifecycleHooks('SetTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SetTaskConfiguration = SetTaskConfiguration as SetTaskConfigurationConstructor;
diff --git a/src/lib/generated/classes/set-task.ts b/src/lib/generated/classes/set-task.ts
new file mode 100644
index 0000000..c1bb182
--- /dev/null
+++ b/src/lib/generated/classes/set-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _SetTaskConfiguration } from './set-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the SetTask class and type
+ */
+export type SetTaskIntersection = SetTask & Specification.SetTask;
+
+/**
+ * Represents a constructor for the intersection of the SetTask class and type
+ */
+export interface SetTaskConstructor {
+  new (model?: Partial): SetTaskIntersection;
+}
+
+/**
+ * Represents a SetTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SetTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the SetTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SetTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.SetTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.set === 'object') self.set = new _SetTaskConfiguration(model.set);
+    }
+    getLifecycleHooks('SetTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SetTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SetTask(this as any) as SetTaskIntersection;
+    validate('SetTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SetTask.
+   * Creates a copy of the SetTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SetTask instance.
+   */
+  normalize(): SetTask & Specification.SetTask {
+    const copy = new SetTask(this as any) as SetTaskIntersection;
+    return getLifecycleHooks('SetTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SetTask = SetTask as SetTaskConstructor;
diff --git a/src/lib/generated/classes/shell-arguments.ts b/src/lib/generated/classes/shell-arguments.ts
new file mode 100644
index 0000000..25e0c1b
--- /dev/null
+++ b/src/lib/generated/classes/shell-arguments.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ShellArguments class and type
+ */
+export type ShellArgumentsIntersection = ShellArguments & Specification.ShellArguments;
+
+/**
+ * Represents a constructor for the intersection of the ShellArguments class and type
+ */
+export interface ShellArgumentsConstructor {
+  new (model?: Partial): ShellArgumentsIntersection;
+}
+
+/**
+ * Represents a ShellArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ShellArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ShellArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ShellArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ShellArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ShellArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ShellArguments(this as any) as ShellArgumentsIntersection;
+    validate('ShellArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ShellArguments.
+   * Creates a copy of the ShellArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ShellArguments instance.
+   */
+  normalize(): ShellArguments & Specification.ShellArguments {
+    const copy = new ShellArguments(this as any) as ShellArgumentsIntersection;
+    return getLifecycleHooks('ShellArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ShellArguments = ShellArguments as ShellArgumentsConstructor;
diff --git a/src/lib/generated/classes/shell-environment.ts b/src/lib/generated/classes/shell-environment.ts
new file mode 100644
index 0000000..8053bf2
--- /dev/null
+++ b/src/lib/generated/classes/shell-environment.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the ShellEnvironment class and type
+ */
+export type ShellEnvironmentIntersection = ShellEnvironment & Specification.ShellEnvironment;
+
+/**
+ * Represents a constructor for the intersection of the ShellEnvironment class and type
+ */
+export interface ShellEnvironmentConstructor {
+  new (model?: Partial): ShellEnvironmentIntersection;
+}
+
+/**
+ * Represents a ShellEnvironment with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class ShellEnvironment extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the ShellEnvironment class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the ShellEnvironment.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('ShellEnvironment')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the ShellEnvironment.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new ShellEnvironment(this as any) as ShellEnvironmentIntersection;
+    validate('ShellEnvironment', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the ShellEnvironment.
+   * Creates a copy of the ShellEnvironment, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the ShellEnvironment instance.
+   */
+  normalize(): ShellEnvironment & Specification.ShellEnvironment {
+    const copy = new ShellEnvironment(this as any) as ShellEnvironmentIntersection;
+    return getLifecycleHooks('ShellEnvironment')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _ShellEnvironment = ShellEnvironment as ShellEnvironmentConstructor;
diff --git a/src/lib/generated/classes/shell.ts b/src/lib/generated/classes/shell.ts
new file mode 100644
index 0000000..1036fc3
--- /dev/null
+++ b/src/lib/generated/classes/shell.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ShellArguments } from './shell-arguments';
+import { _ShellEnvironment } from './shell-environment';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Shell class and type
+ */
+export type ShellIntersection = Shell & Specification.Shell;
+
+/**
+ * Represents a constructor for the intersection of the Shell class and type
+ */
+export interface ShellConstructor {
+  new (model?: Partial): ShellIntersection;
+}
+
+/**
+ * Represents a Shell with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Shell extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Shell class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Shell.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Shell & object;
+    if (isObject(model)) {
+      if (typeof model.arguments === 'object') self.arguments = new _ShellArguments(model.arguments);
+      if (typeof model.environment === 'object') self.environment = new _ShellEnvironment(model.environment);
+    }
+    getLifecycleHooks('Shell')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Shell.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Shell(this as any) as ShellIntersection;
+    validate('Shell', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Shell.
+   * Creates a copy of the Shell, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Shell instance.
+   */
+  normalize(): Shell & Specification.Shell {
+    const copy = new Shell(this as any) as ShellIntersection;
+    return getLifecycleHooks('Shell')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Shell = Shell as ShellConstructor;
diff --git a/src/lib/generated/classes/subflow-configuration.ts b/src/lib/generated/classes/subflow-configuration.ts
new file mode 100644
index 0000000..908ddba
--- /dev/null
+++ b/src/lib/generated/classes/subflow-configuration.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _SubflowInput } from './subflow-input';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the SubflowConfiguration class and type
+ */
+export type SubflowConfigurationIntersection = SubflowConfiguration & Specification.SubflowConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the SubflowConfiguration class and type
+ */
+export interface SubflowConfigurationConstructor {
+  new (model?: Partial): SubflowConfigurationIntersection;
+}
+
+/**
+ * Represents a SubflowConfiguration with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SubflowConfiguration extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SubflowConfiguration class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SubflowConfiguration.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.SubflowConfiguration & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _SubflowInput(model.input);
+    }
+    getLifecycleHooks('SubflowConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SubflowConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SubflowConfiguration(this as any) as SubflowConfigurationIntersection;
+    validate('SubflowConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SubflowConfiguration.
+   * Creates a copy of the SubflowConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SubflowConfiguration instance.
+   */
+  normalize(): SubflowConfiguration & Specification.SubflowConfiguration {
+    const copy = new SubflowConfiguration(this as any) as SubflowConfigurationIntersection;
+    return getLifecycleHooks('SubflowConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SubflowConfiguration = SubflowConfiguration as SubflowConfigurationConstructor;
diff --git a/src/lib/generated/classes/subflow-input.ts b/src/lib/generated/classes/subflow-input.ts
new file mode 100644
index 0000000..eb6ea84
--- /dev/null
+++ b/src/lib/generated/classes/subflow-input.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SubflowInput class and type
+ */
+export type SubflowInputIntersection = SubflowInput & Specification.SubflowInput;
+
+/**
+ * Represents a constructor for the intersection of the SubflowInput class and type
+ */
+export interface SubflowInputConstructor {
+  new (model?: Partial): SubflowInputIntersection;
+}
+
+/**
+ * Represents a SubflowInput with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SubflowInput extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SubflowInput class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SubflowInput.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('SubflowInput')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SubflowInput.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SubflowInput(this as any) as SubflowInputIntersection;
+    validate('SubflowInput', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SubflowInput.
+   * Creates a copy of the SubflowInput, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SubflowInput instance.
+   */
+  normalize(): SubflowInput & Specification.SubflowInput {
+    const copy = new SubflowInput(this as any) as SubflowInputIntersection;
+    return getLifecycleHooks('SubflowInput')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SubflowInput = SubflowInput as SubflowInputConstructor;
diff --git a/src/lib/generated/classes/switch-case.ts b/src/lib/generated/classes/switch-case.ts
new file mode 100644
index 0000000..975a208
--- /dev/null
+++ b/src/lib/generated/classes/switch-case.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SwitchCase class and type
+ */
+export type SwitchCaseIntersection = SwitchCase & Specification.SwitchCase;
+
+/**
+ * Represents a constructor for the intersection of the SwitchCase class and type
+ */
+export interface SwitchCaseConstructor {
+  new (model?: Partial): SwitchCaseIntersection;
+}
+
+/**
+ * Represents a SwitchCase with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SwitchCase extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SwitchCase class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SwitchCase.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('SwitchCase')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SwitchCase.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SwitchCase(this as any) as SwitchCaseIntersection;
+    validate('SwitchCase', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SwitchCase.
+   * Creates a copy of the SwitchCase, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SwitchCase instance.
+   */
+  normalize(): SwitchCase & Specification.SwitchCase {
+    const copy = new SwitchCase(this as any) as SwitchCaseIntersection;
+    return getLifecycleHooks('SwitchCase')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SwitchCase = SwitchCase as SwitchCaseConstructor;
diff --git a/src/lib/generated/classes/switch-item.ts b/src/lib/generated/classes/switch-item.ts
new file mode 100644
index 0000000..245ddb7
--- /dev/null
+++ b/src/lib/generated/classes/switch-item.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _SwitchCase } from './switch-case';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the SwitchItem class and type
+ */
+export type SwitchItemIntersection = SwitchItem & Specification.SwitchItem;
+
+/**
+ * Represents a constructor for the intersection of the SwitchItem class and type
+ */
+export interface SwitchItemConstructor {
+  new (model?: Partial): SwitchItemIntersection;
+}
+
+/**
+ * Represents a SwitchItem with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SwitchItem extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the SwitchItem class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SwitchItem.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.SwitchItem & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _SwitchCase(value);
+        });
+    }
+    getLifecycleHooks('SwitchItem')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SwitchItem.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SwitchItem(this as any) as SwitchItemIntersection;
+    validate('SwitchItem', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SwitchItem.
+   * Creates a copy of the SwitchItem, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SwitchItem instance.
+   */
+  normalize(): SwitchItem & Specification.SwitchItem {
+    const copy = new SwitchItem(this as any) as SwitchItemIntersection;
+    return getLifecycleHooks('SwitchItem')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SwitchItem = SwitchItem as SwitchItemConstructor;
diff --git a/src/lib/generated/classes/switch-task-configuration.ts b/src/lib/generated/classes/switch-task-configuration.ts
new file mode 100644
index 0000000..647c5cb
--- /dev/null
+++ b/src/lib/generated/classes/switch-task-configuration.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _SwitchItem } from './switch-item';
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the SwitchTaskConfiguration class and type
+ */
+export type SwitchTaskConfigurationIntersection = SwitchTaskConfiguration & Specification.SwitchTaskConfiguration;
+
+/**
+ * Represents a constructor for the intersection of the SwitchTaskConfiguration class and type
+ */
+export interface SwitchTaskConfigurationConstructor {
+  new (model?: Array | number): SwitchTaskConfigurationIntersection;
+}
+
+/**
+ * Represents a collection of Specification.SwitchItem.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class SwitchTaskConfiguration extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the SwitchTaskConfiguration class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(new _SwitchItem(item)));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(SwitchTaskConfiguration.prototype));
+    getLifecycleHooks('SwitchTaskConfiguration')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SwitchTaskConfiguration.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SwitchTaskConfiguration(this);
+    validate('SwitchTaskConfiguration', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SwitchTaskConfiguration.
+   * Creates a copy of the SwitchTaskConfiguration, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SwitchTaskConfiguration instance.
+   */
+  normalize(): SwitchTaskConfiguration {
+    const copy = new SwitchTaskConfiguration(this);
+    return getLifecycleHooks('SwitchTaskConfiguration')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SwitchTaskConfiguration = SwitchTaskConfiguration as unknown as SwitchTaskConfigurationConstructor;
+//export const _SwitchTaskConfiguration = SwitchTaskConfiguration; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/switch-task.ts b/src/lib/generated/classes/switch-task.ts
new file mode 100644
index 0000000..cf3a21a
--- /dev/null
+++ b/src/lib/generated/classes/switch-task.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _SwitchTaskConfiguration } from './switch-task-configuration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the SwitchTask class and type
+ */
+export type SwitchTaskIntersection = SwitchTask & Specification.SwitchTask;
+
+/**
+ * Represents a constructor for the intersection of the SwitchTask class and type
+ */
+export interface SwitchTaskConstructor {
+  new (model?: Partial): SwitchTaskIntersection;
+}
+
+/**
+ * Represents a SwitchTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class SwitchTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the SwitchTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the SwitchTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.SwitchTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.switch === 'object')
+        self.switch = new _SwitchTaskConfiguration(model.switch) as unknown as Specification.SwitchTaskConfiguration;
+    }
+    getLifecycleHooks('SwitchTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the SwitchTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new SwitchTask(this as any) as SwitchTaskIntersection;
+    validate('SwitchTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the SwitchTask.
+   * Creates a copy of the SwitchTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the SwitchTask instance.
+   */
+  normalize(): SwitchTask & Specification.SwitchTask {
+    const copy = new SwitchTask(this as any) as SwitchTaskIntersection;
+    return getLifecycleHooks('SwitchTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _SwitchTask = SwitchTask as SwitchTaskConstructor;
diff --git a/src/lib/generated/classes/task-base-if.ts b/src/lib/generated/classes/task-base-if.ts
new file mode 100644
index 0000000..c47e03a
--- /dev/null
+++ b/src/lib/generated/classes/task-base-if.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the TaskBaseIf class and type
+ */
+export type TaskBaseIfIntersection = TaskBaseIf & Specification.TaskBaseIf;
+
+/**
+ * Represents a constructor for the intersection of the TaskBaseIf class and type
+ */
+export interface TaskBaseIfConstructor {
+  new (model?: Partial): TaskBaseIfIntersection;
+}
+
+/**
+ * Represents a TaskBaseIf with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TaskBaseIf extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TaskBaseIf class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TaskBaseIf.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('TaskBaseIf')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskBaseIf.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskBaseIf(this as any) as TaskBaseIfIntersection;
+    validate('TaskBaseIf', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskBaseIf.
+   * Creates a copy of the TaskBaseIf, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskBaseIf instance.
+   */
+  normalize(): TaskBaseIf & Specification.TaskBaseIf {
+    const copy = new TaskBaseIf(this as any) as TaskBaseIfIntersection;
+    return getLifecycleHooks('TaskBaseIf')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskBaseIf = TaskBaseIf as TaskBaseIfConstructor;
diff --git a/src/lib/generated/classes/task-base-timeout.ts b/src/lib/generated/classes/task-base-timeout.ts
new file mode 100644
index 0000000..aa59a83
--- /dev/null
+++ b/src/lib/generated/classes/task-base-timeout.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TaskBaseTimeout class and type
+ */
+export type TaskBaseTimeoutIntersection = TaskBaseTimeout & Specification.TaskBaseTimeout;
+
+/**
+ * Represents a constructor for the intersection of the TaskBaseTimeout class and type
+ */
+export interface TaskBaseTimeoutConstructor {
+  new (model?: Partial): TaskBaseTimeoutIntersection;
+}
+
+/**
+ * Represents a TaskBaseTimeout with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TaskBaseTimeout extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TaskBaseTimeout class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TaskBaseTimeout.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TaskBaseTimeout & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.Timeout).after === 'object')
+        (self as Specification.Timeout).after = new _Duration(
+          (model as Specification.Timeout).after as Specification.Duration,
+        );
+    }
+    getLifecycleHooks('TaskBaseTimeout')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskBaseTimeout.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskBaseTimeout(this as any) as TaskBaseTimeoutIntersection;
+    validate('TaskBaseTimeout', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskBaseTimeout.
+   * Creates a copy of the TaskBaseTimeout, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskBaseTimeout instance.
+   */
+  normalize(): TaskBaseTimeout & Specification.TaskBaseTimeout {
+    const copy = new TaskBaseTimeout(this as any) as TaskBaseTimeoutIntersection;
+    return getLifecycleHooks('TaskBaseTimeout')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskBaseTimeout = TaskBaseTimeout as TaskBaseTimeoutConstructor;
diff --git a/src/lib/generated/classes/task-base.ts b/src/lib/generated/classes/task-base.ts
new file mode 100644
index 0000000..3078df3
--- /dev/null
+++ b/src/lib/generated/classes/task-base.ts
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TaskBase class and type
+ */
+export type TaskBaseIntersection = TaskBase & Specification.TaskBase;
+
+/**
+ * Represents a constructor for the intersection of the TaskBase class and type
+ */
+export interface TaskBaseConstructor {
+  new (model?: Partial): TaskBaseIntersection;
+}
+
+/**
+ * Represents a TaskBase with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TaskBase extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TaskBase class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TaskBase.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TaskBase & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+    }
+    getLifecycleHooks('TaskBase')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskBase.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskBase(this as any) as TaskBaseIntersection;
+    validate('TaskBase', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskBase.
+   * Creates a copy of the TaskBase, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskBase instance.
+   */
+  normalize(): TaskBase & Specification.TaskBase {
+    const copy = new TaskBase(this as any) as TaskBaseIntersection;
+    return getLifecycleHooks('TaskBase')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskBase = TaskBase as TaskBaseConstructor;
diff --git a/src/lib/generated/classes/task-item.ts b/src/lib/generated/classes/task-item.ts
new file mode 100644
index 0000000..d430168
--- /dev/null
+++ b/src/lib/generated/classes/task-item.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Task } from './task';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TaskItem class and type
+ */
+export type TaskItemIntersection = TaskItem & Specification.TaskItem;
+
+/**
+ * Represents a constructor for the intersection of the TaskItem class and type
+ */
+export interface TaskItemConstructor {
+  new (model?: Partial): TaskItemIntersection;
+}
+
+/**
+ * Represents a TaskItem with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TaskItem extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TaskItem class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TaskItem.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TaskItem & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Task(value);
+        });
+    }
+    getLifecycleHooks('TaskItem')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskItem.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskItem(this as any) as TaskItemIntersection;
+    validate('TaskItem', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskItem.
+   * Creates a copy of the TaskItem, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskItem instance.
+   */
+  normalize(): TaskItem & Specification.TaskItem {
+    const copy = new TaskItem(this as any) as TaskItemIntersection;
+    return getLifecycleHooks('TaskItem')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskItem = TaskItem as TaskItemConstructor;
diff --git a/src/lib/generated/classes/task-list.ts b/src/lib/generated/classes/task-list.ts
new file mode 100644
index 0000000..3b39a89
--- /dev/null
+++ b/src/lib/generated/classes/task-list.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _TaskItem } from './task-item';
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the TaskList class and type
+ */
+export type TaskListIntersection = TaskList & Specification.TaskList;
+
+/**
+ * Represents a constructor for the intersection of the TaskList class and type
+ */
+export interface TaskListConstructor {
+  new (model?: Array | number): TaskListIntersection;
+}
+
+/**
+ * Represents a collection of Specification.TaskItem.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class TaskList extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the TaskList class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(new _TaskItem(item)));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(TaskList.prototype));
+    getLifecycleHooks('TaskList')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskList.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskList(this);
+    validate('TaskList', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskList.
+   * Creates a copy of the TaskList, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskList instance.
+   */
+  normalize(): TaskList {
+    const copy = new TaskList(this);
+    return getLifecycleHooks('TaskList')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskList = TaskList as unknown as TaskListConstructor;
+//export const _TaskList = TaskList; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/task-metadata.ts b/src/lib/generated/classes/task-metadata.ts
new file mode 100644
index 0000000..837f73d
--- /dev/null
+++ b/src/lib/generated/classes/task-metadata.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the TaskMetadata class and type
+ */
+export type TaskMetadataIntersection = TaskMetadata & Specification.TaskMetadata;
+
+/**
+ * Represents a constructor for the intersection of the TaskMetadata class and type
+ */
+export interface TaskMetadataConstructor {
+  new (model?: Partial): TaskMetadataIntersection;
+}
+
+/**
+ * Represents a TaskMetadata with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TaskMetadata extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TaskMetadata class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TaskMetadata.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('TaskMetadata')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TaskMetadata.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TaskMetadata(this as any) as TaskMetadataIntersection;
+    validate('TaskMetadata', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TaskMetadata.
+   * Creates a copy of the TaskMetadata, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TaskMetadata instance.
+   */
+  normalize(): TaskMetadata & Specification.TaskMetadata {
+    const copy = new TaskMetadata(this as any) as TaskMetadataIntersection;
+    return getLifecycleHooks('TaskMetadata')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TaskMetadata = TaskMetadata as TaskMetadataConstructor;
diff --git a/src/lib/generated/classes/task.ts b/src/lib/generated/classes/task.ts
new file mode 100644
index 0000000..036274b
--- /dev/null
+++ b/src/lib/generated/classes/task.ts
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _ForkTaskConfiguration } from './fork-task-configuration';
+import { _EmitTaskConfiguration } from './emit-task-configuration';
+import { _ForTaskConfiguration } from './for-task-configuration';
+import { _ListenTaskConfiguration } from './listen-task-configuration';
+import { _RaiseTaskConfiguration } from './raise-task-configuration';
+import { _RunTaskConfiguration } from './run-task-configuration';
+import { _SetTaskConfiguration } from './set-task-configuration';
+import { _SwitchTaskConfiguration } from './switch-task-configuration';
+import { _TaskList } from './task-list';
+import { _TryTaskCatch } from './try-task-catch';
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Task class and type
+ */
+export type TaskIntersection = Task & Specification.Task;
+
+/**
+ * Represents a constructor for the intersection of the Task class and type
+ */
+export interface TaskConstructor {
+  new (model?: Partial): TaskIntersection;
+}
+
+/**
+ * Represents a Task with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Task extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Task class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Task.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Task & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.TaskBase).input === 'object')
+        (self as Specification.TaskBase).input = new _Input(
+          (model as Specification.TaskBase).input as Specification.Input,
+        );
+      if (typeof (model as Specification.TaskBase).output === 'object')
+        (self as Specification.TaskBase).output = new _Output(
+          (model as Specification.TaskBase).output as Specification.Output,
+        );
+      if (typeof (model as Specification.TaskBase).export === 'object')
+        (self as Specification.TaskBase).export = new _Export(
+          (model as Specification.TaskBase).export as Specification.Export,
+        );
+      if (typeof (model as Specification.TaskBase).timeout === 'object')
+        (self as Specification.TaskBase).timeout = new _TaskBaseTimeout(
+          (model as Specification.TaskBase).timeout as Specification.TaskBaseTimeout,
+        );
+      if (typeof (model as Specification.TaskBase).metadata === 'object')
+        (self as Specification.TaskBase).metadata = new _TaskMetadata(
+          (model as Specification.TaskBase).metadata as Specification.TaskMetadata,
+        );
+      if (typeof (model as { [k: string]: unknown; fork?: Specification.ForkTaskConfiguration }).fork === 'object')
+        (self as { [k: string]: unknown; fork?: Specification.ForkTaskConfiguration }).fork =
+          new _ForkTaskConfiguration(
+            (model as { [k: string]: unknown; fork?: Specification.ForkTaskConfiguration })
+              .fork as Specification.ForkTaskConfiguration,
+          );
+      if (typeof (model as { [k: string]: unknown; emit?: Specification.EmitTaskConfiguration }).emit === 'object')
+        (self as { [k: string]: unknown; emit?: Specification.EmitTaskConfiguration }).emit =
+          new _EmitTaskConfiguration(
+            (model as { [k: string]: unknown; emit?: Specification.EmitTaskConfiguration })
+              .emit as Specification.EmitTaskConfiguration,
+          );
+      if (
+        typeof (
+          model as {
+            [k: string]: unknown;
+            for?: Specification.ForTaskConfiguration;
+            while?: string;
+            do?: Specification.TaskList;
+          }
+        ).for === 'object'
+      )
+        (
+          self as {
+            [k: string]: unknown;
+            for?: Specification.ForTaskConfiguration;
+            while?: string;
+            do?: Specification.TaskList;
+          }
+        ).for = new _ForTaskConfiguration(
+          (
+            model as {
+              [k: string]: unknown;
+              for?: Specification.ForTaskConfiguration;
+              while?: string;
+              do?: Specification.TaskList;
+            }
+          ).for as Specification.ForTaskConfiguration,
+        );
+      if (
+        typeof (model as { [k: string]: unknown; listen?: Specification.ListenTaskConfiguration }).listen === 'object'
+      )
+        (self as { [k: string]: unknown; listen?: Specification.ListenTaskConfiguration }).listen =
+          new _ListenTaskConfiguration(
+            (model as { [k: string]: unknown; listen?: Specification.ListenTaskConfiguration })
+              .listen as Specification.ListenTaskConfiguration,
+          );
+      if (typeof (model as { [k: string]: unknown; raise?: Specification.RaiseTaskConfiguration }).raise === 'object')
+        (self as { [k: string]: unknown; raise?: Specification.RaiseTaskConfiguration }).raise =
+          new _RaiseTaskConfiguration(
+            (model as { [k: string]: unknown; raise?: Specification.RaiseTaskConfiguration })
+              .raise as Specification.RaiseTaskConfiguration,
+          );
+      if (typeof (model as { [k: string]: unknown; run?: Specification.RunTaskConfiguration }).run === 'object')
+        (self as { [k: string]: unknown; run?: Specification.RunTaskConfiguration }).run = new _RunTaskConfiguration(
+          (model as { [k: string]: unknown; run?: Specification.RunTaskConfiguration })
+            .run as Specification.RunTaskConfiguration,
+        );
+      if (typeof (model as { [k: string]: unknown; set?: Specification.SetTaskConfiguration }).set === 'object')
+        (self as { [k: string]: unknown; set?: Specification.SetTaskConfiguration }).set = new _SetTaskConfiguration(
+          (model as { [k: string]: unknown; set?: Specification.SetTaskConfiguration })
+            .set as Specification.SetTaskConfiguration,
+        );
+      if (
+        typeof (model as { [k: string]: unknown; switch?: Specification.SwitchTaskConfiguration }).switch === 'object'
+      )
+        (self as { [k: string]: unknown; switch?: Specification.SwitchTaskConfiguration }).switch =
+          new _SwitchTaskConfiguration(
+            (model as { [k: string]: unknown; switch?: Specification.SwitchTaskConfiguration })
+              .switch as Specification.SwitchTaskConfiguration,
+          ) as unknown as Specification.SwitchTaskConfiguration;
+      if (
+        typeof (model as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch })
+          .try === 'object'
+      )
+        (self as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch }).try =
+          new _TaskList(
+            (model as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch })
+              .try as Specification.TaskList,
+          );
+      if (
+        typeof (model as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch })
+          .catch === 'object'
+      )
+        (self as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch }).catch =
+          new _TryTaskCatch(
+            (model as { [k: string]: unknown; try?: Specification.TaskList; catch?: Specification.TryTaskCatch })
+              .catch as Specification.TryTaskCatch,
+          );
+      if (typeof (model as { [k: string]: unknown; wait?: Specification.Duration }).wait === 'object')
+        (self as { [k: string]: unknown; wait?: Specification.Duration }).wait = new _Duration(
+          (model as { [k: string]: unknown; wait?: Specification.Duration }).wait as Specification.Duration,
+        );
+    }
+    getLifecycleHooks('Task')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Task.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Task(this as any) as TaskIntersection;
+    validate('Task', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Task.
+   * Creates a copy of the Task, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Task instance.
+   */
+  normalize(): Task & Specification.Task {
+    const copy = new Task(this as any) as TaskIntersection;
+    return getLifecycleHooks('Task')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Task = Task as TaskConstructor;
diff --git a/src/lib/generated/classes/timeout.ts b/src/lib/generated/classes/timeout.ts
new file mode 100644
index 0000000..4d9795d
--- /dev/null
+++ b/src/lib/generated/classes/timeout.ts
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Timeout class and type
+ */
+export type TimeoutIntersection = Timeout & Specification.Timeout;
+
+/**
+ * Represents a constructor for the intersection of the Timeout class and type
+ */
+export interface TimeoutConstructor {
+  new (model?: Partial): TimeoutIntersection;
+}
+
+/**
+ * Represents a Timeout with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Timeout extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Timeout class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Timeout.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Timeout & object;
+    if (isObject(model)) {
+      if (typeof model.after === 'object') self.after = new _Duration(model.after);
+    }
+    getLifecycleHooks('Timeout')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Timeout.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Timeout(this as any) as TimeoutIntersection;
+    validate('Timeout', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Timeout.
+   * Creates a copy of the Timeout, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Timeout instance.
+   */
+  normalize(): Timeout & Specification.Timeout {
+    const copy = new Timeout(this as any) as TimeoutIntersection;
+    return getLifecycleHooks('Timeout')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Timeout = Timeout as TimeoutConstructor;
diff --git a/src/lib/generated/classes/try-task-catch-retry.ts b/src/lib/generated/classes/try-task-catch-retry.ts
new file mode 100644
index 0000000..dd3db21
--- /dev/null
+++ b/src/lib/generated/classes/try-task-catch-retry.ts
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { _RetryBackoff } from './retry-backoff';
+import { _RetryLimit } from './retry-limit';
+import { _RetryPolicyJitter } from './retry-policy-jitter';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TryTaskCatchRetry class and type
+ */
+export type TryTaskCatchRetryIntersection = TryTaskCatchRetry & Specification.TryTaskCatchRetry;
+
+/**
+ * Represents a constructor for the intersection of the TryTaskCatchRetry class and type
+ */
+export interface TryTaskCatchRetryConstructor {
+  new (model?: Partial): TryTaskCatchRetryIntersection;
+}
+
+/**
+ * Represents a TryTaskCatchRetry with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TryTaskCatchRetry extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TryTaskCatchRetry class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TryTaskCatchRetry.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TryTaskCatchRetry & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.RetryPolicy).delay === 'object')
+        (self as Specification.RetryPolicy).delay = new _Duration(
+          (model as Specification.RetryPolicy).delay as Specification.Duration,
+        );
+      if (typeof (model as Specification.RetryPolicy).backoff === 'object')
+        (self as Specification.RetryPolicy).backoff = new _RetryBackoff(
+          (model as Specification.RetryPolicy).backoff as Specification.RetryBackoff,
+        );
+      if (typeof (model as Specification.RetryPolicy).limit === 'object')
+        (self as Specification.RetryPolicy).limit = new _RetryLimit(
+          (model as Specification.RetryPolicy).limit as Specification.RetryLimit,
+        );
+      if (typeof (model as Specification.RetryPolicy).jitter === 'object')
+        (self as Specification.RetryPolicy).jitter = new _RetryPolicyJitter(
+          (model as Specification.RetryPolicy).jitter as Specification.RetryPolicyJitter,
+        );
+    }
+    getLifecycleHooks('TryTaskCatchRetry')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TryTaskCatchRetry.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TryTaskCatchRetry(this as any) as TryTaskCatchRetryIntersection;
+    validate('TryTaskCatchRetry', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TryTaskCatchRetry.
+   * Creates a copy of the TryTaskCatchRetry, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TryTaskCatchRetry instance.
+   */
+  normalize(): TryTaskCatchRetry & Specification.TryTaskCatchRetry {
+    const copy = new TryTaskCatchRetry(this as any) as TryTaskCatchRetryIntersection;
+    return getLifecycleHooks('TryTaskCatchRetry')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TryTaskCatchRetry = TryTaskCatchRetry as TryTaskCatchRetryConstructor;
diff --git a/src/lib/generated/classes/try-task-catch.ts b/src/lib/generated/classes/try-task-catch.ts
new file mode 100644
index 0000000..33dfdc4
--- /dev/null
+++ b/src/lib/generated/classes/try-task-catch.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _CatchErrors } from './catch-errors';
+import { _TryTaskCatchRetry } from './try-task-catch-retry';
+import { _TaskList } from './task-list';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TryTaskCatch class and type
+ */
+export type TryTaskCatchIntersection = TryTaskCatch & Specification.TryTaskCatch;
+
+/**
+ * Represents a constructor for the intersection of the TryTaskCatch class and type
+ */
+export interface TryTaskCatchConstructor {
+  new (model?: Partial): TryTaskCatchIntersection;
+}
+
+/**
+ * Represents a TryTaskCatch with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TryTaskCatch extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the TryTaskCatch class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TryTaskCatch.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TryTaskCatch & object;
+    if (isObject(model)) {
+      if (typeof model.errors === 'object') self.errors = new _CatchErrors(model.errors);
+      if (typeof model.retry === 'object') self.retry = new _TryTaskCatchRetry(model.retry);
+      if (typeof model.do === 'object') self.do = new _TaskList(model.do);
+    }
+    getLifecycleHooks('TryTaskCatch')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TryTaskCatch.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TryTaskCatch(this as any) as TryTaskCatchIntersection;
+    validate('TryTaskCatch', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TryTaskCatch.
+   * Creates a copy of the TryTaskCatch, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TryTaskCatch instance.
+   */
+  normalize(): TryTaskCatch & Specification.TryTaskCatch {
+    const copy = new TryTaskCatch(this as any) as TryTaskCatchIntersection;
+    return getLifecycleHooks('TryTaskCatch')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TryTaskCatch = TryTaskCatch as TryTaskCatchConstructor;
diff --git a/src/lib/generated/classes/try-task.ts b/src/lib/generated/classes/try-task.ts
new file mode 100644
index 0000000..3786201
--- /dev/null
+++ b/src/lib/generated/classes/try-task.ts
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _TaskList } from './task-list';
+import { _TryTaskCatch } from './try-task-catch';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the TryTask class and type
+ */
+export type TryTaskIntersection = TryTask & Specification.TryTask;
+
+/**
+ * Represents a constructor for the intersection of the TryTask class and type
+ */
+export interface TryTaskConstructor {
+  new (model?: Partial): TryTaskIntersection;
+}
+
+/**
+ * Represents a TryTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class TryTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the TryTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the TryTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.TryTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.try === 'object') self.try = new _TaskList(model.try);
+      if (typeof model.catch === 'object') self.catch = new _TryTaskCatch(model.catch);
+    }
+    getLifecycleHooks('TryTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the TryTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new TryTask(this as any) as TryTaskIntersection;
+    validate('TryTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the TryTask.
+   * Creates a copy of the TryTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the TryTask instance.
+   */
+  normalize(): TryTask & Specification.TryTask {
+    const copy = new TryTask(this as any) as TryTaskIntersection;
+    return getLifecycleHooks('TryTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _TryTask = TryTask as TryTaskConstructor;
diff --git a/src/lib/generated/classes/uri-template.ts b/src/lib/generated/classes/uri-template.ts
new file mode 100644
index 0000000..4819ae1
--- /dev/null
+++ b/src/lib/generated/classes/uri-template.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the UriTemplate class and type
+ */
+export type UriTemplateIntersection = UriTemplate & Specification.UriTemplate;
+
+/**
+ * Represents a constructor for the intersection of the UriTemplate class and type
+ */
+export interface UriTemplateConstructor {
+  new (model?: Partial): UriTemplateIntersection;
+}
+
+/**
+ * Represents a UriTemplate with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UriTemplate extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UriTemplate class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UriTemplate.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('UriTemplate')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UriTemplate.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UriTemplate(this as any) as UriTemplateIntersection;
+    validate('UriTemplate', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UriTemplate.
+   * Creates a copy of the UriTemplate, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UriTemplate instance.
+   */
+  normalize(): UriTemplate & Specification.UriTemplate {
+    const copy = new UriTemplate(this as any) as UriTemplateIntersection;
+    return getLifecycleHooks('UriTemplate')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UriTemplate = UriTemplate as UriTemplateConstructor;
diff --git a/src/lib/generated/classes/use-authentications.ts b/src/lib/generated/classes/use-authentications.ts
new file mode 100644
index 0000000..b5a4a85
--- /dev/null
+++ b/src/lib/generated/classes/use-authentications.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _AuthenticationPolicy } from './authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseAuthentications class and type
+ */
+export type UseAuthenticationsIntersection = UseAuthentications & Specification.UseAuthentications;
+
+/**
+ * Represents a constructor for the intersection of the UseAuthentications class and type
+ */
+export interface UseAuthenticationsConstructor {
+  new (model?: Partial): UseAuthenticationsIntersection;
+}
+
+/**
+ * Represents a UseAuthentications with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseAuthentications extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseAuthentications class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseAuthentications.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseAuthentications & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _AuthenticationPolicy(value);
+        });
+    }
+    getLifecycleHooks('UseAuthentications')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseAuthentications.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseAuthentications(this as any) as UseAuthenticationsIntersection;
+    validate('UseAuthentications', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseAuthentications.
+   * Creates a copy of the UseAuthentications, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseAuthentications instance.
+   */
+  normalize(): UseAuthentications & Specification.UseAuthentications {
+    const copy = new UseAuthentications(this as any) as UseAuthenticationsIntersection;
+    return getLifecycleHooks('UseAuthentications')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseAuthentications = UseAuthentications as UseAuthenticationsConstructor;
diff --git a/src/lib/generated/classes/use-catalogs.ts b/src/lib/generated/classes/use-catalogs.ts
new file mode 100644
index 0000000..47fe2bc
--- /dev/null
+++ b/src/lib/generated/classes/use-catalogs.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Catalog } from './catalog';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseCatalogs class and type
+ */
+export type UseCatalogsIntersection = UseCatalogs & Specification.UseCatalogs;
+
+/**
+ * Represents a constructor for the intersection of the UseCatalogs class and type
+ */
+export interface UseCatalogsConstructor {
+  new (model?: Partial): UseCatalogsIntersection;
+}
+
+/**
+ * Represents a UseCatalogs with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseCatalogs extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseCatalogs class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseCatalogs.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseCatalogs & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Catalog(value);
+        });
+    }
+    getLifecycleHooks('UseCatalogs')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseCatalogs.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseCatalogs(this as any) as UseCatalogsIntersection;
+    validate('UseCatalogs', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseCatalogs.
+   * Creates a copy of the UseCatalogs, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseCatalogs instance.
+   */
+  normalize(): UseCatalogs & Specification.UseCatalogs {
+    const copy = new UseCatalogs(this as any) as UseCatalogsIntersection;
+    return getLifecycleHooks('UseCatalogs')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseCatalogs = UseCatalogs as UseCatalogsConstructor;
diff --git a/src/lib/generated/classes/use-errors.ts b/src/lib/generated/classes/use-errors.ts
new file mode 100644
index 0000000..94a5717
--- /dev/null
+++ b/src/lib/generated/classes/use-errors.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Error } from './error';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseErrors class and type
+ */
+export type UseErrorsIntersection = UseErrors & Specification.UseErrors;
+
+/**
+ * Represents a constructor for the intersection of the UseErrors class and type
+ */
+export interface UseErrorsConstructor {
+  new (model?: Partial): UseErrorsIntersection;
+}
+
+/**
+ * Represents a UseErrors with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseErrors extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseErrors class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseErrors.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseErrors & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Error(value);
+        });
+    }
+    getLifecycleHooks('UseErrors')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseErrors.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseErrors(this as any) as UseErrorsIntersection;
+    validate('UseErrors', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseErrors.
+   * Creates a copy of the UseErrors, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseErrors instance.
+   */
+  normalize(): UseErrors & Specification.UseErrors {
+    const copy = new UseErrors(this as any) as UseErrorsIntersection;
+    return getLifecycleHooks('UseErrors')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseErrors = UseErrors as UseErrorsConstructor;
diff --git a/src/lib/generated/classes/use-extensions.ts b/src/lib/generated/classes/use-extensions.ts
new file mode 100644
index 0000000..3fcf01b
--- /dev/null
+++ b/src/lib/generated/classes/use-extensions.ts
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ExtensionItem } from './extension-item';
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the UseExtensions class and type
+ */
+export type UseExtensionsIntersection = UseExtensions & Specification.UseExtensions;
+
+/**
+ * Represents a constructor for the intersection of the UseExtensions class and type
+ */
+export interface UseExtensionsConstructor {
+  new (model?: Array | number): UseExtensionsIntersection;
+}
+
+/**
+ * Represents a collection of Specification.ExtensionItem.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class UseExtensions extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the UseExtensions class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(new _ExtensionItem(item)));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(UseExtensions.prototype));
+    getLifecycleHooks('UseExtensions')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseExtensions.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseExtensions(this);
+    validate('UseExtensions', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseExtensions.
+   * Creates a copy of the UseExtensions, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseExtensions instance.
+   */
+  normalize(): UseExtensions {
+    const copy = new UseExtensions(this);
+    return getLifecycleHooks('UseExtensions')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseExtensions = UseExtensions as unknown as UseExtensionsConstructor;
+//export const _UseExtensions = UseExtensions; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/use-functions.ts b/src/lib/generated/classes/use-functions.ts
new file mode 100644
index 0000000..2a26e86
--- /dev/null
+++ b/src/lib/generated/classes/use-functions.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Task } from './task';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseFunctions class and type
+ */
+export type UseFunctionsIntersection = UseFunctions & Specification.UseFunctions;
+
+/**
+ * Represents a constructor for the intersection of the UseFunctions class and type
+ */
+export interface UseFunctionsConstructor {
+  new (model?: Partial): UseFunctionsIntersection;
+}
+
+/**
+ * Represents a UseFunctions with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseFunctions extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseFunctions class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseFunctions.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseFunctions & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Task(value);
+        });
+    }
+    getLifecycleHooks('UseFunctions')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseFunctions.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseFunctions(this as any) as UseFunctionsIntersection;
+    validate('UseFunctions', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseFunctions.
+   * Creates a copy of the UseFunctions, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseFunctions instance.
+   */
+  normalize(): UseFunctions & Specification.UseFunctions {
+    const copy = new UseFunctions(this as any) as UseFunctionsIntersection;
+    return getLifecycleHooks('UseFunctions')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseFunctions = UseFunctions as UseFunctionsConstructor;
diff --git a/src/lib/generated/classes/use-retries.ts b/src/lib/generated/classes/use-retries.ts
new file mode 100644
index 0000000..f75132f
--- /dev/null
+++ b/src/lib/generated/classes/use-retries.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _RetryPolicy } from './retry-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseRetries class and type
+ */
+export type UseRetriesIntersection = UseRetries & Specification.UseRetries;
+
+/**
+ * Represents a constructor for the intersection of the UseRetries class and type
+ */
+export interface UseRetriesConstructor {
+  new (model?: Partial): UseRetriesIntersection;
+}
+
+/**
+ * Represents a UseRetries with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseRetries extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseRetries class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseRetries.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseRetries & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _RetryPolicy(value);
+        });
+    }
+    getLifecycleHooks('UseRetries')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseRetries.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseRetries(this as any) as UseRetriesIntersection;
+    validate('UseRetries', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseRetries.
+   * Creates a copy of the UseRetries, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseRetries instance.
+   */
+  normalize(): UseRetries & Specification.UseRetries {
+    const copy = new UseRetries(this as any) as UseRetriesIntersection;
+    return getLifecycleHooks('UseRetries')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseRetries = UseRetries as UseRetriesConstructor;
diff --git a/src/lib/generated/classes/use-secrets.ts b/src/lib/generated/classes/use-secrets.ts
new file mode 100644
index 0000000..c49c15a
--- /dev/null
+++ b/src/lib/generated/classes/use-secrets.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { Specification } from '../definitions';
+import { ArrayHydrator } from '../../hydrator';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the UseSecrets class and type
+ */
+export type UseSecretsIntersection = UseSecrets & Specification.UseSecrets;
+
+/**
+ * Represents a constructor for the intersection of the UseSecrets class and type
+ */
+export interface UseSecretsConstructor {
+  new (model?: Array | number): UseSecretsIntersection;
+}
+
+/**
+ * Represents a collection of string.
+ * Inherits from ArrayHydrator to handle array-specific hydration.
+ */
+export class UseSecrets extends ArrayHydrator {
+  /**
+   * Constructs a new instance of the UseSecrets class.
+   *
+   * @param model - Optional parameter which can be an array of objects or a number representing the array length.
+   */
+  constructor(model?: Array | number) {
+    super(model);
+    if (Array.isArray(model)) {
+      if (model?.length) {
+        this.splice(0, this.length);
+        model.forEach((item) => this.push(item));
+      }
+    }
+    Object.setPrototypeOf(this, Object.create(UseSecrets.prototype));
+    getLifecycleHooks('UseSecrets')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseSecrets.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseSecrets(this);
+    validate('UseSecrets', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseSecrets.
+   * Creates a copy of the UseSecrets, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseSecrets instance.
+   */
+  normalize(): UseSecrets {
+    const copy = new UseSecrets(this);
+    return getLifecycleHooks('UseSecrets')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseSecrets = UseSecrets as unknown as UseSecretsConstructor;
+//export const _UseSecrets = UseSecrets; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes
diff --git a/src/lib/generated/classes/use-timeouts.ts b/src/lib/generated/classes/use-timeouts.ts
new file mode 100644
index 0000000..2931bc8
--- /dev/null
+++ b/src/lib/generated/classes/use-timeouts.ts
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Timeout } from './timeout';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the UseTimeouts class and type
+ */
+export type UseTimeoutsIntersection = UseTimeouts & Specification.UseTimeouts;
+
+/**
+ * Represents a constructor for the intersection of the UseTimeouts class and type
+ */
+export interface UseTimeoutsConstructor {
+  new (model?: Partial): UseTimeoutsIntersection;
+}
+
+/**
+ * Represents a UseTimeouts with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class UseTimeouts extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the UseTimeouts class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the UseTimeouts.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.UseTimeouts & object;
+    if (isObject(model)) {
+      const knownProperties: string[] = [];
+      Object.entries(model)
+        .filter(([key]) => !knownProperties.includes(key))
+        .forEach(([key, value]) => {
+          self[key] = new _Timeout(value);
+        });
+    }
+    getLifecycleHooks('UseTimeouts')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the UseTimeouts.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new UseTimeouts(this as any) as UseTimeoutsIntersection;
+    validate('UseTimeouts', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the UseTimeouts.
+   * Creates a copy of the UseTimeouts, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the UseTimeouts instance.
+   */
+  normalize(): UseTimeouts & Specification.UseTimeouts {
+    const copy = new UseTimeouts(this as any) as UseTimeoutsIntersection;
+    return getLifecycleHooks('UseTimeouts')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _UseTimeouts = UseTimeouts as UseTimeoutsConstructor;
diff --git a/src/lib/generated/classes/use.ts b/src/lib/generated/classes/use.ts
new file mode 100644
index 0000000..6af0c91
--- /dev/null
+++ b/src/lib/generated/classes/use.ts
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _UseAuthentications } from './use-authentications';
+import { _UseErrors } from './use-errors';
+import { _UseExtensions } from './use-extensions';
+import { _UseFunctions } from './use-functions';
+import { _UseRetries } from './use-retries';
+import { _UseTimeouts } from './use-timeouts';
+import { _UseCatalogs } from './use-catalogs';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the Use class and type
+ */
+export type UseIntersection = Use & Specification.Use;
+
+/**
+ * Represents a constructor for the intersection of the Use class and type
+ */
+export interface UseConstructor {
+  new (model?: Partial): UseIntersection;
+}
+
+/**
+ * Represents a Use with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Use extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Use class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Use.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Use & object;
+    if (isObject(model)) {
+      if (typeof model.authentications === 'object')
+        self.authentications = new _UseAuthentications(model.authentications);
+      if (typeof model.errors === 'object') self.errors = new _UseErrors(model.errors);
+      if (typeof model.extensions === 'object') self.extensions = new _UseExtensions(model.extensions);
+      if (typeof model.functions === 'object') self.functions = new _UseFunctions(model.functions);
+      if (typeof model.retries === 'object') self.retries = new _UseRetries(model.retries);
+      if (typeof model.timeouts === 'object') self.timeouts = new _UseTimeouts(model.timeouts);
+      if (typeof model.catalogs === 'object') self.catalogs = new _UseCatalogs(model.catalogs);
+    }
+    getLifecycleHooks('Use')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Use.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Use(this as any) as UseIntersection;
+    validate('Use', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Use.
+   * Creates a copy of the Use, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Use instance.
+   */
+  normalize(): Use & Specification.Use {
+    const copy = new Use(this as any) as UseIntersection;
+    return getLifecycleHooks('Use')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _Use = Use as UseConstructor;
diff --git a/src/lib/generated/classes/wait-task.ts b/src/lib/generated/classes/wait-task.ts
new file mode 100644
index 0000000..eba13a8
--- /dev/null
+++ b/src/lib/generated/classes/wait-task.ts
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Input } from './input';
+import { _Output } from './output';
+import { _Export } from './export';
+import { _TaskBaseTimeout } from './task-base-timeout';
+import { _TaskMetadata } from './task-metadata';
+import { _Duration } from './duration';
+import { _TaskBase } from './task-base';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the WaitTask class and type
+ */
+export type WaitTaskIntersection = WaitTask & Specification.WaitTask;
+
+/**
+ * Represents a constructor for the intersection of the WaitTask class and type
+ */
+export interface WaitTaskConstructor {
+  new (model?: Partial): WaitTaskIntersection;
+}
+
+/**
+ * Represents a WaitTask with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WaitTask extends _TaskBase {
+  /**
+   * Instanciates a new instance of the WaitTask class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WaitTask.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.WaitTask & object;
+    if (isObject(model)) {
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.export === 'object') self.export = new _Export(model.export);
+      if (typeof model.timeout === 'object') self.timeout = new _TaskBaseTimeout(model.timeout);
+      if (typeof model.metadata === 'object') self.metadata = new _TaskMetadata(model.metadata);
+      if (typeof model.wait === 'object') self.wait = new _Duration(model.wait);
+    }
+    getLifecycleHooks('WaitTask')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WaitTask.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WaitTask(this as any) as WaitTaskIntersection;
+    validate('WaitTask', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WaitTask.
+   * Creates a copy of the WaitTask, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WaitTask instance.
+   */
+  normalize(): WaitTask & Specification.WaitTask {
+    const copy = new WaitTask(this as any) as WaitTaskIntersection;
+    return getLifecycleHooks('WaitTask')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WaitTask = WaitTask as WaitTaskConstructor;
diff --git a/src/lib/generated/classes/with-async-api-payload.ts b/src/lib/generated/classes/with-async-api-payload.ts
new file mode 100644
index 0000000..25f8213
--- /dev/null
+++ b/src/lib/generated/classes/with-async-api-payload.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithAsyncAPIPayload class and type
+ */
+export type WithAsyncAPIPayloadIntersection = WithAsyncAPIPayload & Specification.WithAsyncAPIPayload;
+
+/**
+ * Represents a constructor for the intersection of the WithAsyncAPIPayload class and type
+ */
+export interface WithAsyncAPIPayloadConstructor {
+  new (model?: Partial): WithAsyncAPIPayloadIntersection;
+}
+
+/**
+ * Represents a WithAsyncAPIPayload with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithAsyncAPIPayload extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithAsyncAPIPayload class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithAsyncAPIPayload.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithAsyncAPIPayload')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithAsyncAPIPayload.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithAsyncAPIPayload(this as any) as WithAsyncAPIPayloadIntersection;
+    validate('WithAsyncAPIPayload', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithAsyncAPIPayload.
+   * Creates a copy of the WithAsyncAPIPayload, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithAsyncAPIPayload instance.
+   */
+  normalize(): WithAsyncAPIPayload & Specification.WithAsyncAPIPayload {
+    const copy = new WithAsyncAPIPayload(this as any) as WithAsyncAPIPayloadIntersection;
+    return getLifecycleHooks('WithAsyncAPIPayload')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithAsyncAPIPayload = WithAsyncAPIPayload as WithAsyncAPIPayloadConstructor;
diff --git a/src/lib/generated/classes/with-event.ts b/src/lib/generated/classes/with-event.ts
new file mode 100644
index 0000000..defc4b8
--- /dev/null
+++ b/src/lib/generated/classes/with-event.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithEvent class and type
+ */
+export type WithEventIntersection = WithEvent & Specification.WithEvent;
+
+/**
+ * Represents a constructor for the intersection of the WithEvent class and type
+ */
+export interface WithEventConstructor {
+  new (model?: Partial): WithEventIntersection;
+}
+
+/**
+ * Represents a WithEvent with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithEvent extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithEvent class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithEvent.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithEvent')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithEvent.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithEvent(this as any) as WithEventIntersection;
+    validate('WithEvent', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithEvent.
+   * Creates a copy of the WithEvent, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithEvent instance.
+   */
+  normalize(): WithEvent & Specification.WithEvent {
+    const copy = new WithEvent(this as any) as WithEventIntersection;
+    return getLifecycleHooks('WithEvent')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithEvent = WithEvent as WithEventConstructor;
diff --git a/src/lib/generated/classes/with-grpc-arguments.ts b/src/lib/generated/classes/with-grpc-arguments.ts
new file mode 100644
index 0000000..6964420
--- /dev/null
+++ b/src/lib/generated/classes/with-grpc-arguments.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithGRPCArguments class and type
+ */
+export type WithGRPCArgumentsIntersection = WithGRPCArguments & Specification.WithGRPCArguments;
+
+/**
+ * Represents a constructor for the intersection of the WithGRPCArguments class and type
+ */
+export interface WithGRPCArgumentsConstructor {
+  new (model?: Partial): WithGRPCArgumentsIntersection;
+}
+
+/**
+ * Represents a WithGRPCArguments with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithGRPCArguments extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithGRPCArguments class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithGRPCArguments.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithGRPCArguments')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithGRPCArguments.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithGRPCArguments(this as any) as WithGRPCArgumentsIntersection;
+    validate('WithGRPCArguments', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithGRPCArguments.
+   * Creates a copy of the WithGRPCArguments, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithGRPCArguments instance.
+   */
+  normalize(): WithGRPCArguments & Specification.WithGRPCArguments {
+    const copy = new WithGRPCArguments(this as any) as WithGRPCArgumentsIntersection;
+    return getLifecycleHooks('WithGRPCArguments')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithGRPCArguments = WithGRPCArguments as WithGRPCArgumentsConstructor;
diff --git a/src/lib/generated/classes/with-grpc-service.ts b/src/lib/generated/classes/with-grpc-service.ts
new file mode 100644
index 0000000..3bdcd93
--- /dev/null
+++ b/src/lib/generated/classes/with-grpc-service.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _ReferenceableAuthenticationPolicy } from './referenceable-authentication-policy';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the WithGRPCService class and type
+ */
+export type WithGRPCServiceIntersection = WithGRPCService & Specification.WithGRPCService;
+
+/**
+ * Represents a constructor for the intersection of the WithGRPCService class and type
+ */
+export interface WithGRPCServiceConstructor {
+  new (model?: Partial): WithGRPCServiceIntersection;
+}
+
+/**
+ * Represents a WithGRPCService with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithGRPCService extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithGRPCService class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithGRPCService.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.WithGRPCService & object;
+    if (isObject(model)) {
+      if (typeof model.authentication === 'object')
+        self.authentication = new _ReferenceableAuthenticationPolicy(model.authentication);
+    }
+    getLifecycleHooks('WithGRPCService')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithGRPCService.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithGRPCService(this as any) as WithGRPCServiceIntersection;
+    validate('WithGRPCService', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithGRPCService.
+   * Creates a copy of the WithGRPCService, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithGRPCService instance.
+   */
+  normalize(): WithGRPCService & Specification.WithGRPCService {
+    const copy = new WithGRPCService(this as any) as WithGRPCServiceIntersection;
+    return getLifecycleHooks('WithGRPCService')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithGRPCService = WithGRPCService as WithGRPCServiceConstructor;
diff --git a/src/lib/generated/classes/with-http-body.ts b/src/lib/generated/classes/with-http-body.ts
new file mode 100644
index 0000000..761837b
--- /dev/null
+++ b/src/lib/generated/classes/with-http-body.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithHTTPBody class and type
+ */
+export type WithHTTPBodyIntersection = WithHTTPBody & Specification.WithHTTPBody;
+
+/**
+ * Represents a constructor for the intersection of the WithHTTPBody class and type
+ */
+export interface WithHTTPBodyConstructor {
+  new (model?: Partial): WithHTTPBodyIntersection;
+}
+
+/**
+ * Represents a WithHTTPBody with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithHTTPBody extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithHTTPBody class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithHTTPBody.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithHTTPBody')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithHTTPBody.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithHTTPBody(this as any) as WithHTTPBodyIntersection;
+    validate('WithHTTPBody', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithHTTPBody.
+   * Creates a copy of the WithHTTPBody, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithHTTPBody instance.
+   */
+  normalize(): WithHTTPBody & Specification.WithHTTPBody {
+    const copy = new WithHTTPBody(this as any) as WithHTTPBodyIntersection;
+    return getLifecycleHooks('WithHTTPBody')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithHTTPBody = WithHTTPBody as WithHTTPBodyConstructor;
diff --git a/src/lib/generated/classes/with-http-headers.ts b/src/lib/generated/classes/with-http-headers.ts
new file mode 100644
index 0000000..df03ce2
--- /dev/null
+++ b/src/lib/generated/classes/with-http-headers.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithHTTPHeaders class and type
+ */
+export type WithHTTPHeadersIntersection = WithHTTPHeaders & Specification.WithHTTPHeaders;
+
+/**
+ * Represents a constructor for the intersection of the WithHTTPHeaders class and type
+ */
+export interface WithHTTPHeadersConstructor {
+  new (model?: Partial): WithHTTPHeadersIntersection;
+}
+
+/**
+ * Represents a WithHTTPHeaders with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithHTTPHeaders extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithHTTPHeaders class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithHTTPHeaders.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithHTTPHeaders')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithHTTPHeaders.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithHTTPHeaders(this as any) as WithHTTPHeadersIntersection;
+    validate('WithHTTPHeaders', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithHTTPHeaders.
+   * Creates a copy of the WithHTTPHeaders, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithHTTPHeaders instance.
+   */
+  normalize(): WithHTTPHeaders & Specification.WithHTTPHeaders {
+    const copy = new WithHTTPHeaders(this as any) as WithHTTPHeadersIntersection;
+    return getLifecycleHooks('WithHTTPHeaders')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithHTTPHeaders = WithHTTPHeaders as WithHTTPHeadersConstructor;
diff --git a/src/lib/generated/classes/with-http-query.ts b/src/lib/generated/classes/with-http-query.ts
new file mode 100644
index 0000000..b6346a0
--- /dev/null
+++ b/src/lib/generated/classes/with-http-query.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithHTTPQuery class and type
+ */
+export type WithHTTPQueryIntersection = WithHTTPQuery & Specification.WithHTTPQuery;
+
+/**
+ * Represents a constructor for the intersection of the WithHTTPQuery class and type
+ */
+export interface WithHTTPQueryConstructor {
+  new (model?: Partial): WithHTTPQueryIntersection;
+}
+
+/**
+ * Represents a WithHTTPQuery with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithHTTPQuery extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithHTTPQuery class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithHTTPQuery.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithHTTPQuery')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithHTTPQuery.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithHTTPQuery(this as any) as WithHTTPQueryIntersection;
+    validate('WithHTTPQuery', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithHTTPQuery.
+   * Creates a copy of the WithHTTPQuery, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithHTTPQuery instance.
+   */
+  normalize(): WithHTTPQuery & Specification.WithHTTPQuery {
+    const copy = new WithHTTPQuery(this as any) as WithHTTPQueryIntersection;
+    return getLifecycleHooks('WithHTTPQuery')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithHTTPQuery = WithHTTPQuery as WithHTTPQueryConstructor;
diff --git a/src/lib/generated/classes/with-open-api-parameters.ts b/src/lib/generated/classes/with-open-api-parameters.ts
new file mode 100644
index 0000000..66b4ca0
--- /dev/null
+++ b/src/lib/generated/classes/with-open-api-parameters.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WithOpenAPIParameters class and type
+ */
+export type WithOpenAPIParametersIntersection = WithOpenAPIParameters & Specification.WithOpenAPIParameters;
+
+/**
+ * Represents a constructor for the intersection of the WithOpenAPIParameters class and type
+ */
+export interface WithOpenAPIParametersConstructor {
+  new (model?: Partial): WithOpenAPIParametersIntersection;
+}
+
+/**
+ * Represents a WithOpenAPIParameters with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WithOpenAPIParameters extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WithOpenAPIParameters class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WithOpenAPIParameters.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WithOpenAPIParameters')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WithOpenAPIParameters.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WithOpenAPIParameters(this as any) as WithOpenAPIParametersIntersection;
+    validate('WithOpenAPIParameters', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WithOpenAPIParameters.
+   * Creates a copy of the WithOpenAPIParameters, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WithOpenAPIParameters instance.
+   */
+  normalize(): WithOpenAPIParameters & Specification.WithOpenAPIParameters {
+    const copy = new WithOpenAPIParameters(this as any) as WithOpenAPIParametersIntersection;
+    return getLifecycleHooks('WithOpenAPIParameters')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WithOpenAPIParameters = WithOpenAPIParameters as WithOpenAPIParametersConstructor;
diff --git a/src/lib/generated/classes/workflow-metadata.ts b/src/lib/generated/classes/workflow-metadata.ts
new file mode 100644
index 0000000..cc6ea30
--- /dev/null
+++ b/src/lib/generated/classes/workflow-metadata.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WorkflowMetadata class and type
+ */
+export type WorkflowMetadataIntersection = WorkflowMetadata & Specification.WorkflowMetadata;
+
+/**
+ * Represents a constructor for the intersection of the WorkflowMetadata class and type
+ */
+export interface WorkflowMetadataConstructor {
+  new (model?: Partial): WorkflowMetadataIntersection;
+}
+
+/**
+ * Represents a WorkflowMetadata with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WorkflowMetadata extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WorkflowMetadata class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WorkflowMetadata.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WorkflowMetadata')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WorkflowMetadata.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WorkflowMetadata(this as any) as WorkflowMetadataIntersection;
+    validate('WorkflowMetadata', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WorkflowMetadata.
+   * Creates a copy of the WorkflowMetadata, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WorkflowMetadata instance.
+   */
+  normalize(): WorkflowMetadata & Specification.WorkflowMetadata {
+    const copy = new WorkflowMetadata(this as any) as WorkflowMetadataIntersection;
+    return getLifecycleHooks('WorkflowMetadata')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WorkflowMetadata = WorkflowMetadata as WorkflowMetadataConstructor;
diff --git a/src/lib/generated/classes/workflow-tags.ts b/src/lib/generated/classes/workflow-tags.ts
new file mode 100644
index 0000000..8412c3e
--- /dev/null
+++ b/src/lib/generated/classes/workflow-tags.ts
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+
+/**
+ * Represents the intersection between the WorkflowTags class and type
+ */
+export type WorkflowTagsIntersection = WorkflowTags & Specification.WorkflowTags;
+
+/**
+ * Represents a constructor for the intersection of the WorkflowTags class and type
+ */
+export interface WorkflowTagsConstructor {
+  new (model?: Partial): WorkflowTagsIntersection;
+}
+
+/**
+ * Represents a WorkflowTags with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WorkflowTags extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WorkflowTags class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WorkflowTags.
+   */
+  constructor(model?: Partial) {
+    super(model);
+
+    getLifecycleHooks('WorkflowTags')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WorkflowTags.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WorkflowTags(this as any) as WorkflowTagsIntersection;
+    validate('WorkflowTags', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WorkflowTags.
+   * Creates a copy of the WorkflowTags, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WorkflowTags instance.
+   */
+  normalize(): WorkflowTags & Specification.WorkflowTags {
+    const copy = new WorkflowTags(this as any) as WorkflowTagsIntersection;
+    return getLifecycleHooks('WorkflowTags')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WorkflowTags = WorkflowTags as WorkflowTagsConstructor;
diff --git a/src/lib/generated/classes/workflow-timeout.ts b/src/lib/generated/classes/workflow-timeout.ts
new file mode 100644
index 0000000..1280908
--- /dev/null
+++ b/src/lib/generated/classes/workflow-timeout.ts
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Duration } from './duration';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+
+/**
+ * Represents the intersection between the WorkflowTimeout class and type
+ */
+export type WorkflowTimeoutIntersection = WorkflowTimeout & Specification.WorkflowTimeout;
+
+/**
+ * Represents a constructor for the intersection of the WorkflowTimeout class and type
+ */
+export interface WorkflowTimeoutConstructor {
+  new (model?: Partial): WorkflowTimeoutIntersection;
+}
+
+/**
+ * Represents a WorkflowTimeout with methods for validation and normalization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class WorkflowTimeout extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the WorkflowTimeout class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the WorkflowTimeout.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.WorkflowTimeout & object;
+    if (isObject(model)) {
+      if (typeof (model as Specification.Timeout).after === 'object')
+        (self as Specification.Timeout).after = new _Duration(
+          (model as Specification.Timeout).after as Specification.Duration,
+        );
+    }
+    getLifecycleHooks('WorkflowTimeout')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the WorkflowTimeout.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new WorkflowTimeout(this as any) as WorkflowTimeoutIntersection;
+    validate('WorkflowTimeout', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the WorkflowTimeout.
+   * Creates a copy of the WorkflowTimeout, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the WorkflowTimeout instance.
+   */
+  normalize(): WorkflowTimeout & Specification.WorkflowTimeout {
+    const copy = new WorkflowTimeout(this as any) as WorkflowTimeoutIntersection;
+    return getLifecycleHooks('WorkflowTimeout')?.normalize?.(copy) || copy;
+  }
+}
+
+export const _WorkflowTimeout = WorkflowTimeout as WorkflowTimeoutConstructor;
diff --git a/src/lib/generated/classes/workflow.ts b/src/lib/generated/classes/workflow.ts
new file mode 100644
index 0000000..f1c1b8b
--- /dev/null
+++ b/src/lib/generated/classes/workflow.ts
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+import { _Document } from './document';
+import { _Input } from './input';
+import { _Use } from './use';
+import { _TaskList } from './task-list';
+import { _WorkflowTimeout } from './workflow-timeout';
+import { _Output } from './output';
+import { _Schedule } from './schedule';
+import { ObjectHydrator } from '../../hydrator';
+import { Specification } from '../definitions';
+import { getLifecycleHooks } from '../../lifecycle-hooks';
+import { validate } from '../../validation';
+import { isObject } from '../../utils';
+import * as yaml from 'js-yaml';
+
+/**
+ * Represents the intersection between the Workflow class and type
+ */
+export type WorkflowIntersection = Workflow & Specification.Workflow;
+
+/**
+ * Represents a constructor for the intersection of the Workflow class and type
+ */
+export interface WorkflowConstructor {
+  new (model?: Partial): WorkflowIntersection;
+}
+
+/**
+ * Represents a Workflow with methods for validation normalization, and serialization.
+ * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model.
+ */
+export class Workflow extends ObjectHydrator {
+  /**
+   * Instanciates a new instance of the Workflow class.
+   * Initializes properties based on the provided model if it is an object.
+   *
+   * @param model - Optional partial model object to initialize the Workflow.
+   */
+  constructor(model?: Partial) {
+    super(model);
+    const self = this as unknown as Specification.Workflow & object;
+    if (isObject(model)) {
+      if (typeof model.document === 'object') self.document = new _Document(model.document);
+      if (typeof model.input === 'object') self.input = new _Input(model.input);
+      if (typeof model.use === 'object') self.use = new _Use(model.use);
+      if (typeof model.do === 'object') self.do = new _TaskList(model.do);
+      if (typeof model.timeout === 'object') self.timeout = new _WorkflowTimeout(model.timeout);
+      if (typeof model.output === 'object') self.output = new _Output(model.output);
+      if (typeof model.schedule === 'object') self.schedule = new _Schedule(model.schedule);
+    }
+    getLifecycleHooks('Workflow')?.constructor?.(this);
+  }
+
+  /**
+   * Validates the current instance of the Workflow.
+   * Throws if invalid.
+   */
+  validate(workflow?: Partial) {
+    const copy = new Workflow(this as any) as WorkflowIntersection;
+    validate('Workflow', copy, workflow);
+  }
+
+  /**
+   * Normalizes the current instance of the Workflow.
+   * Creates a copy of the Workflow, invokes normalization hooks if available, and returns the normalized copy.
+   *
+   * @returns A normalized version of the Workflow instance.
+   */
+  normalize(): Workflow & Specification.Workflow {
+    const copy = new Workflow(this as any) as WorkflowIntersection;
+    return getLifecycleHooks('Workflow')?.normalize?.(copy) || copy;
+  }
+
+  static deserialize(text: string): WorkflowIntersection {
+    const model = yaml.load(text) as Partial;
+    validate('Workflow', model);
+    return new Workflow(model) as WorkflowIntersection;
+  }
+
+  static serialize(
+    model: Partial,
+    format: 'yaml' | 'json' = 'yaml',
+    normalize: boolean = true,
+  ): string {
+    const workflow = new Workflow(model);
+    workflow.validate();
+    const normalized = normalize ? workflow.normalize() : workflow;
+    if (format === 'json') {
+      return JSON.stringify(normalized);
+    }
+    return yaml.dump(normalized);
+  }
+
+  /**
+   * Serializes the workflow to YAML or JSON
+   * @param format The format, 'yaml' or 'json', default is 'yaml'
+   * @param normalize If the workflow should be normalized before serialization, default true
+   * @returns A string representation of the workflow
+   */
+  serialize(format: 'yaml' | 'json' = 'yaml', normalize: boolean = true): string {
+    return Workflow.serialize(this as unknown as WorkflowIntersection, format, normalize);
+  }
+}
+
+export const _Workflow = Workflow as WorkflowConstructor & {
+  /**
+   * Deserializes the provided string as a Workflow
+   * @param text The YAML or JSON representation of a workflow
+   * @returns A new Workflow instance
+   */
+  deserialize(text: string): WorkflowIntersection;
+
+  /**
+   * Serializes the provided Workflow to YAML or JSON
+   * @param workflow The workflow to serialize
+   * @param format The format, 'yaml' or 'json', default is 'yaml'
+   * @param normalize If the workflow should be normalized before serialization, default true
+   * @returns A string representation of the workflow
+   */
+  serialize(workflow: Partial, format?: 'yaml' | 'json', normalize?: boolean): string;
+};
diff --git a/src/lib/validation/README.md b/src/lib/generated/definitions/README.md
similarity index 100%
rename from src/lib/validation/README.md
rename to src/lib/generated/definitions/README.md
diff --git a/src/lib/definitions/index.ts b/src/lib/generated/definitions/index.ts
similarity index 99%
rename from src/lib/definitions/index.ts
rename to src/lib/generated/definitions/index.ts
index eae5388..ed0f6e7 100644
--- a/src/lib/definitions/index.ts
+++ b/src/lib/generated/definitions/index.ts
@@ -13,4 +13,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 export * as Specification from './specification';
diff --git a/src/lib/generated/definitions/specification.ts b/src/lib/generated/definitions/specification.ts
new file mode 100644
index 0000000..fd1b22b
--- /dev/null
+++ b/src/lib/generated/definitions/specification.ts
@@ -0,0 +1,1326 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+/**
+ * Represents the definition of a schema.
+ */
+export type Schema = SchemaInline | SchemaExternal;
+/**
+ * Represents an endpoint.
+ */
+export type Endpoint = RuntimeExpression | UriTemplate | EndpointConfiguration;
+/**
+ * A runtime expression.
+ */
+export type RuntimeExpression = string;
+export type UriTemplate = string;
+/**
+ * The endpoint's URI.
+ */
+export type EndpointUri = UriTemplate | RuntimeExpression;
+/**
+ * Represents a referenceable authentication policy.
+ */
+export type ReferenceableAuthenticationPolicy = AuthenticationPolicyReference | AuthenticationPolicy;
+/**
+ * Defines an authentication policy.
+ */
+export type AuthenticationPolicy =
+  | BasicAuthenticationPolicy
+  | BearerAuthenticationPolicy
+  | DigestAuthenticationPolicy
+  | OAuth2AuthenticationPolicy
+  | OpenIdConnectAuthenticationPolicy;
+/**
+ * The configuration of the basic authentication policy.
+ */
+export type BasicAuthenticationPolicyConfiguration = BasicAuthenticationProperties | SecretBasedAuthenticationPolicy;
+/**
+ * The configuration of the bearer authentication policy.
+ */
+export type BearerAuthenticationPolicyConfiguration = BearerAuthenticationProperties | SecretBasedAuthenticationPolicy;
+/**
+ * The configuration of the digest authentication policy.
+ */
+export type DigestAuthenticationPolicyConfiguration = DigestAuthenticationProperties | SecretBasedAuthenticationPolicy;
+/**
+ * The configuration of the OAuth2 authentication policy.
+ */
+export type OAuth2AuthenticationPolicyConfiguration =
+  | OAuth2ConnectAuthenticationProperties
+  | SecretBasedAuthenticationPolicy;
+/**
+ * The inline configuration of the OAuth2 authentication policy.
+ */
+export type OAuth2ConnectAuthenticationProperties = OAuth2AutenthicationData & {
+  endpoints?: OAuth2AuthenticationPropertiesEndpoints;
+  [k: string]: unknown;
+};
+/**
+ * A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.
+ */
+export type OAuth2Issuers = string[];
+/**
+ * The scopes, if any, to request the token for.
+ */
+export type OAuth2AutenthicationDataScopes = string[];
+/**
+ * The audiences, if any, to request the token for.
+ */
+export type OAuth2AutenthicationDataAudiences = string[];
+/**
+ * The configuration of the OpenIdConnect authentication policy.
+ */
+export type OpenIdConnectAuthenticationPolicyConfiguration =
+  | OpenIdConnectAuthenticationProperties
+  | SecretBasedAuthenticationPolicy;
+/**
+ * A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.
+ */
+export type InputFrom =
+  | string
+  | {
+      [k: string]: unknown;
+    };
+/**
+ * A URI reference that identifies the error type.
+ */
+export type ErrorType = UriTemplate | RuntimeExpression;
+/**
+ * A JSON Pointer used to reference the component the error originates from.
+ */
+export type ErrorInstance = RuntimeExpression;
+/**
+ * A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.
+ */
+export type Task =
+  | CallTask
+  | DoTask
+  | ForkTask
+  | EmitTask
+  | ForTask
+  | ListenTask
+  | RaiseTask
+  | RunTask
+  | SetTask
+  | SwitchTask
+  | TryTask
+  | WaitTask;
+/**
+ * Defines the call to perform.
+ */
+export type CallTask = CallAsyncAPI | CallGRPC | CallHTTP | CallOpenAPI | CallFunction;
+/**
+ * Defines the AsyncAPI call to perform.
+ */
+export type CallAsyncAPI = TaskBase & {
+  call?: 'asyncapi';
+  with?: AsyncApiArguments;
+  [k: string]: unknown;
+};
+/**
+ * A runtime expression, if any, used to determine whether or not the task should be run.
+ */
+export type TaskBaseIf = string;
+/**
+ * A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.
+ */
+export type OutputAs =
+  | string
+  | {
+      [k: string]: unknown;
+    };
+/**
+ * A runtime expression, if any, used to export the output data to the context.
+ */
+export type ExportAs =
+  | string
+  | {
+      [k: string]: unknown;
+    };
+export type TaskBaseTimeout = Timeout | string;
+export type Duration = DurationInline | string;
+/**
+ * Represents different transition options for a workflow.
+ */
+export type FlowDirective = ('continue' | 'exit' | 'end') | string;
+/**
+ * Defines the GRPC call to perform.
+ */
+export type CallGRPC = TaskBase & {
+  call?: 'grpc';
+  with?: GRPCArguments;
+  [k: string]: unknown;
+};
+/**
+ * Defines the HTTP call to perform.
+ */
+export type CallHTTP = TaskBase & {
+  call?: 'http';
+  with?: HTTPArguments;
+  [k: string]: unknown;
+};
+/**
+ * Defines the OpenAPI call to perform.
+ */
+export type CallOpenAPI = TaskBase & {
+  call?: 'openapi';
+  with?: OpenAPIArguments;
+  [k: string]: unknown;
+};
+/**
+ * Defines the function call to perform.
+ */
+export type CallFunction = TaskBase & {
+  /**
+   * The name of the function to call.
+   */
+  call?: string;
+  with?: FunctionArguments;
+  [k: string]: unknown;
+};
+/**
+ * Allows to execute a list of tasks in sequence.
+ */
+export type DoTask = TaskBase & {
+  do?: TaskList;
+  [k: string]: unknown;
+};
+/**
+ * Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.
+ */
+export type ForkTask = TaskBase & {
+  fork?: ForkTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.
+ */
+export type EmitTask = TaskBase & {
+  emit?: EmitTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * Identifies the context in which an event happened.
+ */
+export type EventSource = UriTemplate | RuntimeExpression;
+/**
+ * When the event occured.
+ */
+export type EventTime = RuntimeExpression;
+/**
+ * The schema describing the event format.
+ */
+export type EventDataschema = UriTemplate | RuntimeExpression;
+/**
+ * Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.
+ */
+export type ForTask = TaskBase & {
+  for?: ForTaskConfiguration;
+  /**
+   * A runtime expression that represents the condition, if any, that must be met for the iteration to continue.
+   */
+  while?: string;
+  do?: TaskList;
+  [k: string]: unknown;
+};
+/**
+ * Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.
+ */
+export type ListenTask = TaskBase & {
+  listen?: ListenTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * Describe the event consumption strategy to adopt.
+ */
+export type EventConsumptionStrategy =
+  | AllEventConsumptionStrategy
+  | AnyEventConsumptionStrategy
+  | OneEventConsumptionStrategy;
+/**
+ * A list containing all the events that must be consumed.
+ */
+export type AllEventConsumptionStrategyConfiguration = EventFilter[];
+/**
+ * A list containing any of the events to consume.
+ */
+export type AnyEventConsumptionStrategyConfiguration = EventFilter[];
+/**
+ * Intentionally triggers and propagates errors.
+ */
+export type RaiseTask = TaskBase & {
+  raise?: RaiseTaskConfiguration;
+  [k: string]: unknown;
+};
+export type RaiseTaskRaiseError = Error | string;
+/**
+ * Provides the capability to execute external containers, shell commands, scripts, or workflows.
+ */
+export type RunTask = TaskBase & {
+  run?: RunTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * The configuration of the process to execute.
+ */
+export type RunTaskConfiguration = RunContainer | RunScript | RunShell | RunWorkflow;
+/**
+ * The configuration of the script to run.
+ */
+export type Script = InlineScript | ExternalScript;
+/**
+ * A task used to set data.
+ */
+export type SetTask = TaskBase & {
+  set?: SetTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.
+ */
+export type SwitchTask = TaskBase & {
+  switch?: SwitchTaskConfiguration;
+  [k: string]: unknown;
+};
+/**
+ * The definition of the switch to use.
+ *
+ * @minItems 1
+ */
+export type SwitchTaskConfiguration = [SwitchItem, ...SwitchItem[]];
+/**
+ * Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.
+ */
+export type TryTask = TaskBase & {
+  try?: TaskList;
+  catch?: TryTaskCatch;
+  [k: string]: unknown;
+};
+export type TryTaskCatchRetry = RetryPolicy | string;
+/**
+ * The retry duration backoff.
+ */
+export type RetryBackoff = ConstantBackoff | ExponentialBackOff | LinearBackoff;
+/**
+ * Allows workflows to pause or delay their execution for a specified period of time.
+ */
+export type WaitTask = TaskBase & {
+  wait?: Duration;
+  [k: string]: unknown;
+};
+/**
+ * List of named tasks to perform.
+ */
+export type TaskList = TaskItem[];
+/**
+ * The workflow's extensions.
+ */
+export type UseExtensions = ExtensionItem[];
+/**
+ * The workflow's reusable secrets.
+ */
+export type UseSecrets = string[];
+export type WorkflowTimeout = Timeout | string;
+
+/**
+ * Serverless Workflow DSL - Workflow Schema.
+ */
+export interface Workflow {
+  document: Document;
+  input?: Input;
+  use?: Use;
+  do: TaskList;
+  timeout?: WorkflowTimeout;
+  output?: Output;
+  schedule?: Schedule;
+  [k: string]: unknown;
+}
+/**
+ * Documents the workflow.
+ */
+export interface Document {
+  /**
+   * The version of the DSL used by the workflow.
+   */
+  dsl: string;
+  /**
+   * The workflow's namespace.
+   */
+  namespace: string;
+  /**
+   * The workflow's name.
+   */
+  name: string;
+  /**
+   * The workflow's semantic version.
+   */
+  version: string;
+  /**
+   * The workflow's title.
+   */
+  title?: string;
+  /**
+   * The workflow's Markdown summary.
+   */
+  summary?: string;
+  tags?: WorkflowTags;
+  metadata?: WorkflowMetadata;
+}
+/**
+ * A key/value mapping of the workflow's tags, if any.
+ */
+export interface WorkflowTags {
+  [k: string]: unknown;
+}
+/**
+ * Holds additional information about the workflow.
+ */
+export interface WorkflowMetadata {
+  [k: string]: unknown;
+}
+/**
+ * Configures the input of a workflow or task.
+ */
+export interface Input {
+  schema?: Schema;
+  from?: InputFrom;
+}
+export interface SchemaInline {
+  /**
+   * The schema's inline definition.
+   */
+  document: {
+    [k: string]: unknown;
+  };
+  [k: string]: unknown;
+}
+export interface SchemaExternal {
+  resource: ExternalResource;
+  [k: string]: unknown;
+}
+/**
+ * Represents an external resource.
+ */
+export interface ExternalResource {
+  /**
+   * The name of the external resource, if any.
+   */
+  name?: string;
+  endpoint: Endpoint;
+}
+export interface EndpointConfiguration {
+  uri: EndpointUri;
+  authentication?: ReferenceableAuthenticationPolicy;
+}
+/**
+ * The reference of the authentication policy to use.
+ */
+export interface AuthenticationPolicyReference {
+  /**
+   * The name of the authentication policy to use.
+   */
+  use: string;
+  [k: string]: unknown;
+}
+/**
+ * Use basic authentication.
+ */
+export interface BasicAuthenticationPolicy {
+  basic: BasicAuthenticationPolicyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * Inline configuration of the basic authentication policy.
+ */
+export interface BasicAuthenticationProperties {
+  /**
+   * The username to use.
+   */
+  username: string;
+  /**
+   * The password to use.
+   */
+  password: string;
+  [k: string]: unknown;
+}
+/**
+ * Represents an authentication policy based on secrets.
+ */
+export interface SecretBasedAuthenticationPolicy {
+  /**
+   * The name of the authentication policy to use.
+   */
+  use: string;
+}
+/**
+ * Use bearer authentication.
+ */
+export interface BearerAuthenticationPolicy {
+  bearer: BearerAuthenticationPolicyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * Inline configuration of the bearer authentication policy.
+ */
+export interface BearerAuthenticationProperties {
+  /**
+   * The bearer token to use.
+   */
+  token: string;
+  [k: string]: unknown;
+}
+/**
+ * Use digest authentication.
+ */
+export interface DigestAuthenticationPolicy {
+  digest: DigestAuthenticationPolicyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * Inline configuration of the digest authentication policy.
+ */
+export interface DigestAuthenticationProperties {
+  /**
+   * The username to use.
+   */
+  username: string;
+  /**
+   * The password to use.
+   */
+  password: string;
+  [k: string]: unknown;
+}
+/**
+ * Use OAuth2 authentication.
+ */
+export interface OAuth2AuthenticationPolicy {
+  oauth2: OAuth2AuthenticationPolicyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * Inline configuration of the OAuth2 authentication policy.
+ */
+export interface OAuth2AutenthicationData {
+  authority?: UriTemplate;
+  /**
+   * The grant type to use.
+   */
+  grant?:
+    | 'authorization_code'
+    | 'client_credentials'
+    | 'password'
+    | 'refresh_token'
+    | 'urn:ietf:params:oauth:grant-type:token-exchange';
+  client?: OAuth2AutenthicationDataClient;
+  request?: OAuth2TokenRequest;
+  issuers?: OAuth2Issuers;
+  scopes?: OAuth2AutenthicationDataScopes;
+  audiences?: OAuth2AutenthicationDataAudiences;
+  /**
+   * The username to use. Used only if the grant type is Password.
+   */
+  username?: string;
+  /**
+   * The password to use. Used only if the grant type is Password.
+   */
+  password?: string;
+  subject?: OAuth2TokenDefinition;
+  actor?: OAuth2TokenDefinition;
+  [k: string]: unknown;
+}
+/**
+ * The definition of an OAuth2 client.
+ */
+export interface OAuth2AutenthicationDataClient {
+  /**
+   * The client id to use.
+   */
+  id?: string;
+  /**
+   * The client secret to use, if any.
+   */
+  secret?: string;
+  /**
+   * A JWT containing a signed assertion with your application credentials.
+   */
+  assertion?: string;
+  /**
+   * The authentication method to use to authenticate the client.
+   */
+  authentication?: 'client_secret_basic' | 'client_secret_post' | 'client_secret_jwt' | 'private_key_jwt' | 'none';
+}
+/**
+ * The configuration of an OAuth2 token request
+ */
+export interface OAuth2TokenRequest {
+  encoding?: 'application/x-www-form-urlencoded' | 'application/json';
+  [k: string]: unknown;
+}
+/**
+ * Represents an OAuth2 token.
+ */
+export interface OAuth2TokenDefinition {
+  /**
+   * The security token to use.
+   */
+  token: string;
+  /**
+   * The type of the security token to use.
+   */
+  type: string;
+}
+/**
+ * The endpoint configurations for OAuth2.
+ */
+export interface OAuth2AuthenticationPropertiesEndpoints {
+  /**
+   * The relative path to the token endpoint. Defaults to `/oauth2/token`.
+   */
+  token?: string;
+  /**
+   * The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`.
+   */
+  revocation?: string;
+  /**
+   * The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`.
+   */
+  introspection?: string;
+  [k: string]: unknown;
+}
+/**
+ * Use OpenIdConnect authentication.
+ */
+export interface OpenIdConnectAuthenticationPolicy {
+  oidc: OpenIdConnectAuthenticationPolicyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * Inline configuration of the OAuth2 authentication policy.
+ */
+export interface OpenIdConnectAuthenticationProperties {
+  authority?: UriTemplate;
+  /**
+   * The grant type to use.
+   */
+  grant?:
+    | 'authorization_code'
+    | 'client_credentials'
+    | 'password'
+    | 'refresh_token'
+    | 'urn:ietf:params:oauth:grant-type:token-exchange';
+  client?: OAuth2AutenthicationDataClient;
+  request?: OAuth2TokenRequest;
+  issuers?: OAuth2Issuers;
+  scopes?: OAuth2AutenthicationDataScopes;
+  audiences?: OAuth2AutenthicationDataAudiences;
+  /**
+   * The username to use. Used only if the grant type is Password.
+   */
+  username?: string;
+  /**
+   * The password to use. Used only if the grant type is Password.
+   */
+  password?: string;
+  subject?: OAuth2TokenDefinition;
+  actor?: OAuth2TokenDefinition;
+}
+/**
+ * Defines the workflow's reusable components.
+ */
+export interface Use {
+  authentications?: UseAuthentications;
+  errors?: UseErrors;
+  extensions?: UseExtensions;
+  functions?: UseFunctions;
+  retries?: UseRetries;
+  secrets?: UseSecrets;
+  timeouts?: UseTimeouts;
+  catalogs?: UseCatalogs;
+}
+/**
+ * The workflow's reusable authentication policies.
+ */
+export interface UseAuthentications {
+  [k: string]: AuthenticationPolicy;
+}
+/**
+ * The workflow's reusable errors.
+ */
+export interface UseErrors {
+  [k: string]: Error;
+}
+/**
+ * Represents an error.
+ */
+export interface Error {
+  type: ErrorType;
+  /**
+   * The status code generated by the origin for this occurrence of the error.
+   */
+  status: number;
+  instance?: ErrorInstance;
+  /**
+   * A short, human-readable summary of the error.
+   */
+  title?: string;
+  /**
+   * A human-readable explanation specific to this occurrence of the error.
+   */
+  detail?: string;
+}
+export interface ExtensionItem {
+  [k: string]: Extension;
+}
+/**
+ * The definition of an extension.
+ */
+export interface Extension {
+  /**
+   * The type of task to extend.
+   */
+  extend:
+    | 'call'
+    | 'composite'
+    | 'emit'
+    | 'for'
+    | 'listen'
+    | 'raise'
+    | 'run'
+    | 'set'
+    | 'switch'
+    | 'try'
+    | 'wait'
+    | 'all';
+  /**
+   * A runtime expression, if any, used to determine whether or not the extension should apply in the specified context.
+   */
+  when?: string;
+  before?: TaskList;
+  after?: TaskList;
+}
+export interface TaskItem {
+  [k: string]: Task;
+}
+/**
+ * An object inherited by all tasks.
+ */
+export interface TaskBase {
+  if?: TaskBaseIf;
+  input?: Input;
+  output?: Output;
+  export?: Export;
+  timeout?: TaskBaseTimeout;
+  then?: FlowDirective;
+  metadata?: TaskMetadata;
+  [k: string]: unknown;
+}
+/**
+ * Configures the output of a workflow or task.
+ */
+export interface Output {
+  schema?: Schema;
+  as?: OutputAs;
+}
+/**
+ * Set the content of the context. .
+ */
+export interface Export {
+  schema?: Schema;
+  as?: ExportAs;
+}
+/**
+ * The definition of a timeout.
+ */
+export interface Timeout {
+  after: Duration;
+}
+/**
+ * The inline definition of a duration.
+ */
+export interface DurationInline {
+  /**
+   * Number of days, if any.
+   */
+  days?: number;
+  /**
+   * Number of days, if any.
+   */
+  hours?: number;
+  /**
+   * Number of minutes, if any.
+   */
+  minutes?: number;
+  /**
+   * Number of seconds, if any.
+   */
+  seconds?: number;
+  /**
+   * Number of milliseconds, if any.
+   */
+  milliseconds?: number;
+}
+/**
+ * Holds additional information about the task.
+ */
+export interface TaskMetadata {
+  [k: string]: unknown;
+}
+/**
+ * The Async API call arguments.
+ */
+export interface AsyncApiArguments {
+  document: ExternalResource;
+  /**
+   * A reference to the AsyncAPI operation to call.
+   */
+  operationRef: string;
+  /**
+   * A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel.
+   */
+  server?: string;
+  /**
+   * The name of the message to use. If not set, defaults to the first message defined by the operation.
+   */
+  message?: string;
+  /**
+   * The name of the binding to use. If not set, defaults to the first binding defined by the operation.
+   */
+  binding?: string;
+  payload?: WithAsyncAPIPayload;
+  authentication?: ReferenceableAuthenticationPolicy;
+}
+/**
+ * The payload to call the AsyncAPI operation with, if any.
+ */
+export interface WithAsyncAPIPayload {
+  [k: string]: unknown;
+}
+/**
+ * The GRPC call arguments.
+ */
+export interface GRPCArguments {
+  proto: ExternalResource;
+  service: WithGRPCService;
+  /**
+   * The name of the method to call on the defined GRPC service.
+   */
+  method: string;
+  arguments?: WithGRPCArguments;
+}
+export interface WithGRPCService {
+  /**
+   * The name of the GRPC service to call.
+   */
+  name: string;
+  /**
+   * The hostname of the GRPC service to call.
+   */
+  host: string;
+  /**
+   * The port number of the GRPC service to call.
+   */
+  port?: number;
+  authentication?: ReferenceableAuthenticationPolicy;
+}
+/**
+ * The arguments, if any, to call the method with.
+ */
+export interface WithGRPCArguments {
+  [k: string]: unknown;
+}
+/**
+ * The HTTP call arguments.
+ */
+export interface HTTPArguments {
+  /**
+   * The HTTP method of the HTTP request to perform.
+   */
+  method: string;
+  endpoint: Endpoint;
+  headers?: WithHTTPHeaders;
+  body?: WithHTTPBody;
+  query?: WithHTTPQuery;
+  /**
+   * The http call output format. Defaults to 'content'.
+   */
+  output?: 'raw' | 'content' | 'response';
+}
+/**
+ * A name/value mapping of the headers, if any, of the HTTP request to perform.
+ */
+export interface WithHTTPHeaders {
+  [k: string]: unknown;
+}
+/**
+ * The body, if any, of the HTTP request to perform.
+ */
+export interface WithHTTPBody {
+  [k: string]: unknown;
+}
+/**
+ * A name/value mapping of the query parameters, if any, of the HTTP request to perform.
+ */
+export interface WithHTTPQuery {
+  [k: string]: unknown;
+}
+/**
+ * The OpenAPI call arguments.
+ */
+export interface OpenAPIArguments {
+  document: ExternalResource;
+  /**
+   * The id of the OpenAPI operation to call.
+   */
+  operationId: string;
+  parameters?: WithOpenAPIParameters;
+  authentication?: ReferenceableAuthenticationPolicy;
+  /**
+   * The http call output format. Defaults to 'content'.
+   */
+  output?: 'raw' | 'content' | 'response';
+}
+/**
+ * A name/value mapping of the parameters of the OpenAPI operation to call.
+ */
+export interface WithOpenAPIParameters {
+  [k: string]: unknown;
+}
+/**
+ * A name/value mapping of the parameters, if any, to call the function with.
+ */
+export interface FunctionArguments {
+  [k: string]: unknown;
+}
+/**
+ * The configuration of the branches to perform concurrently.
+ */
+export interface ForkTaskConfiguration {
+  branches: TaskList;
+  /**
+   * Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.
+   */
+  compete?: boolean;
+}
+/**
+ * The configuration of an event's emission.
+ */
+export interface EmitTaskConfiguration {
+  event: EmitEventDefinition;
+}
+/**
+ * The definition of the event to emit.
+ */
+export interface EmitEventDefinition {
+  with?: EmitEventWith;
+  [k: string]: unknown;
+}
+/**
+ * Defines the properties of event to emit.
+ */
+export interface EmitEventWith {
+  /**
+   * The event's unique identifier.
+   */
+  id?: string;
+  source: EventSource;
+  /**
+   * This attribute contains a value describing the type of event related to the originating occurrence.
+   */
+  type: string;
+  time?: EventTime;
+  /**
+   * The subject of the event.
+   */
+  subject?: string;
+  /**
+   * Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format.
+   */
+  datacontenttype?: string;
+  dataschema?: EventDataschema;
+  [k: string]: unknown;
+}
+/**
+ * The definition of the loop that iterates over a range of values.
+ */
+export interface ForTaskConfiguration {
+  /**
+   * The name of the variable used to store the current item being enumerated.
+   */
+  each?: string;
+  /**
+   * A runtime expression used to get the collection to enumerate.
+   */
+  in: string;
+  /**
+   * The name of the variable used to store the index of the current item being enumerated.
+   */
+  at?: string;
+}
+/**
+ * The configuration of the listener to use.
+ */
+export interface ListenTaskConfiguration {
+  to: EventConsumptionStrategy;
+}
+export interface AllEventConsumptionStrategy {
+  all: AllEventConsumptionStrategyConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.
+ */
+export interface EventFilter {
+  with: WithEvent;
+  correlate?: EventFilterCorrelate;
+}
+/**
+ * An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.
+ */
+export interface WithEvent {
+  /**
+   * The event's unique identifier.
+   */
+  id?: string;
+  source?: EventSource;
+  /**
+   * This attribute contains a value describing the type of event related to the originating occurrence.
+   */
+  type?: string;
+  time?: EventTime;
+  /**
+   * The subject of the event.
+   */
+  subject?: string;
+  /**
+   * Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format.
+   */
+  datacontenttype?: string;
+  dataschema?: EventDataschema;
+  [k: string]: unknown;
+}
+/**
+ * A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.
+ */
+export interface EventFilterCorrelate {
+  [k: string]: {
+    /**
+     * A runtime expression used to extract the correlation value from the filtered event.
+     */
+    from: string;
+    /**
+     * A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation.
+     */
+    expect?: string;
+    [k: string]: unknown;
+  };
+}
+export interface AnyEventConsumptionStrategy {
+  any: AnyEventConsumptionStrategyConfiguration;
+  [k: string]: unknown;
+}
+export interface OneEventConsumptionStrategy {
+  one: EventFilter;
+  [k: string]: unknown;
+}
+/**
+ * The definition of the error to raise.
+ */
+export interface RaiseTaskConfiguration {
+  error: RaiseTaskRaiseError;
+}
+/**
+ * Enables the execution of external processes encapsulated within a containerized environment.
+ */
+export interface RunContainer {
+  container: Container;
+  [k: string]: unknown;
+}
+/**
+ * The configuration of the container to run.
+ */
+export interface Container {
+  /**
+   * The name of the container image to run.
+   */
+  image: string;
+  /**
+   * The command, if any, to execute on the container.
+   */
+  command?: string;
+  ports?: ContainerPorts;
+  volumes?: ContainerVolumes;
+  environment?: ContainerEnvironment;
+}
+/**
+ * The container's port mappings, if any.
+ */
+export interface ContainerPorts {
+  [k: string]: unknown;
+}
+/**
+ * The container's volume mappings, if any.
+ */
+export interface ContainerVolumes {
+  [k: string]: unknown;
+}
+/**
+ * A key/value mapping of the environment variables, if any, to use when running the configured process.
+ */
+export interface ContainerEnvironment {
+  [k: string]: unknown;
+}
+/**
+ * Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.
+ */
+export interface RunScript {
+  script: Script;
+  [k: string]: unknown;
+}
+/**
+ * The script's code.
+ */
+export interface InlineScript {
+  code: string;
+  [k: string]: unknown;
+}
+/**
+ * The script's resource.
+ */
+export interface ExternalScript {
+  source: ExternalResource;
+  [k: string]: unknown;
+}
+/**
+ * Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.
+ */
+export interface RunShell {
+  shell: Shell;
+  [k: string]: unknown;
+}
+/**
+ * The configuration of the shell command to run.
+ */
+export interface Shell {
+  /**
+   * The shell command to run.
+   */
+  command: string;
+  arguments?: ShellArguments;
+  environment?: ShellEnvironment;
+}
+/**
+ * A list of the arguments of the shell command to run.
+ */
+export interface ShellArguments {
+  [k: string]: unknown;
+}
+/**
+ * A key/value mapping of the environment variables, if any, to use when running the configured process.
+ */
+export interface ShellEnvironment {
+  [k: string]: unknown;
+}
+/**
+ * Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.
+ */
+export interface RunWorkflow {
+  workflow: SubflowConfiguration;
+  [k: string]: unknown;
+}
+/**
+ * The configuration of the workflow to run.
+ */
+export interface SubflowConfiguration {
+  /**
+   * The namespace the workflow to run belongs to.
+   */
+  namespace: string;
+  /**
+   * The name of the workflow to run.
+   */
+  name: string;
+  /**
+   * The version of the workflow to run. Defaults to latest.
+   */
+  version: string;
+  input?: SubflowInput;
+}
+/**
+ * The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.
+ */
+export interface SubflowInput {
+  [k: string]: unknown;
+}
+/**
+ * The data to set.
+ */
+export interface SetTaskConfiguration {
+  [k: string]: unknown;
+}
+export interface SwitchItem {
+  [k: string]: SwitchCase;
+}
+/**
+ * The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.
+ */
+export interface SwitchCase {
+  /**
+   * A runtime expression used to determine whether or not the case matches.
+   */
+  when?: string;
+  then: FlowDirective;
+  [k: string]: unknown;
+}
+/**
+ * The object used to define the errors to catch.
+ */
+export interface TryTaskCatch {
+  errors?: CatchErrors;
+  /**
+   * The name of the runtime expression variable to save the error as. Defaults to 'error'.
+   */
+  as?: string;
+  /**
+   * A runtime expression used to determine whether or not to catch the filtered error.
+   */
+  when?: string;
+  /**
+   * A runtime expression used to determine whether or not to catch the filtered error.
+   */
+  exceptWhen?: string;
+  retry?: TryTaskCatchRetry;
+  do?: TaskList;
+}
+/**
+ * The configuration of a concept used to catch errors.
+ */
+export interface CatchErrors {
+  [k: string]: unknown;
+}
+/**
+ * Defines a retry policy.
+ */
+export interface RetryPolicy {
+  /**
+   * A runtime expression, if any, used to determine whether or not to retry running the task, in a given context.
+   */
+  when?: string;
+  /**
+   * A runtime expression used to determine whether or not to retry running the task, in a given context.
+   */
+  exceptWhen?: string;
+  delay?: Duration;
+  backoff?: RetryBackoff;
+  limit?: RetryLimit;
+  jitter?: RetryPolicyJitter;
+}
+export interface ConstantBackoff {
+  /**
+   * The definition of the constant backoff to use, if any.
+   */
+  constant: {
+    [k: string]: unknown;
+  };
+  [k: string]: unknown;
+}
+export interface ExponentialBackOff {
+  /**
+   * The definition of the exponential backoff to use, if any.
+   */
+  exponential: {
+    [k: string]: unknown;
+  };
+  [k: string]: unknown;
+}
+export interface LinearBackoff {
+  /**
+   * The definition of the linear backoff to use, if any.
+   */
+  linear: {
+    [k: string]: unknown;
+  };
+  [k: string]: unknown;
+}
+/**
+ * The retry limit, if any.
+ */
+export interface RetryLimit {
+  attempt?: RetryLimitAttempt;
+  duration?: Duration;
+}
+export interface RetryLimitAttempt {
+  /**
+   * The maximum amount of retry attempts, if any.
+   */
+  count?: number;
+  duration?: Duration;
+}
+/**
+ * The parameters, if any, that control the randomness or variability of the delay between retry attempts.
+ */
+export interface RetryPolicyJitter {
+  from: Duration;
+  to: Duration;
+}
+/**
+ * The workflow's reusable functions.
+ */
+export interface UseFunctions {
+  [k: string]: Task;
+}
+/**
+ * The workflow's reusable retry policies.
+ */
+export interface UseRetries {
+  [k: string]: RetryPolicy;
+}
+/**
+ * The workflow's reusable timeouts.
+ */
+export interface UseTimeouts {
+  [k: string]: Timeout;
+}
+/**
+ * The workflow's reusable catalogs.
+ */
+export interface UseCatalogs {
+  [k: string]: Catalog;
+}
+/**
+ * The definition of a resource catalog
+ */
+export interface Catalog {
+  endpoint: Endpoint;
+}
+/**
+ * Schedules the workflow.
+ */
+export interface Schedule {
+  every?: Duration;
+  /**
+   * Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight.
+   */
+  cron?: string;
+  after?: Duration;
+  on?: EventConsumptionStrategy;
+}
diff --git a/src/lib/generated/schema/README.md b/src/lib/generated/schema/README.md
new file mode 100644
index 0000000..7d5a864
--- /dev/null
+++ b/src/lib/generated/schema/README.md
@@ -0,0 +1,2 @@
+# Auto generated notice
+This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.
\ No newline at end of file
diff --git a/src/lib/generated/schema/__internal_workflow.json b/src/lib/generated/schema/__internal_workflow.json
new file mode 100644
index 0000000..d33df4b
--- /dev/null
+++ b/src/lib/generated/schema/__internal_workflow.json
@@ -0,0 +1,2310 @@
+{
+  "$id": "https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json",
+  "$schema": "https://json-schema.org/draft/2020-12/schema",
+  "description": "Serverless Workflow DSL - Workflow Schema.",
+  "type": "object",
+  "required": [
+    "document",
+    "do"
+  ],
+  "properties": {
+    "document": {
+      "type": "object",
+      "title": "Document",
+      "description": "Documents the workflow.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "dsl": {
+          "type": "string",
+          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
+          "description": "The version of the DSL used by the workflow."
+        },
+        "namespace": {
+          "type": "string",
+          "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
+          "description": "The workflow's namespace."
+        },
+        "name": {
+          "type": "string",
+          "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
+          "description": "The workflow's name."
+        },
+        "version": {
+          "type": "string",
+          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
+          "description": "The workflow's semantic version."
+        },
+        "title": {
+          "type": "string",
+          "description": "The workflow's title."
+        },
+        "summary": {
+          "type": "string",
+          "description": "The workflow's Markdown summary."
+        },
+        "tags": {
+          "type": "object",
+          "title": "WorkflowTags",
+          "description": "A key/value mapping of the workflow's tags, if any.",
+          "additionalProperties": true
+        },
+        "metadata": {
+          "type": "object",
+          "title": "WorkflowMetadata",
+          "description": "Holds additional information about the workflow.",
+          "additionalProperties": true
+        }
+      },
+      "required": [
+        "dsl",
+        "namespace",
+        "name",
+        "version"
+      ]
+    },
+    "input": {
+      "$ref": "#/$defs/input",
+      "title": "Input",
+      "description": "Configures the workflow's input.",
+      "type": "object"
+    },
+    "use": {
+      "type": "object",
+      "title": "Use",
+      "description": "Defines the workflow's reusable components.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "authentications": {
+          "type": "object",
+          "title": "UseAuthentications",
+          "description": "The workflow's reusable authentication policies.",
+          "additionalProperties": {
+            "$ref": "#/$defs/authenticationPolicy"
+          }
+        },
+        "errors": {
+          "type": "object",
+          "title": "UseErrors",
+          "description": "The workflow's reusable errors.",
+          "additionalProperties": {
+            "$ref": "#/$defs/error"
+          }
+        },
+        "extensions": {
+          "type": "array",
+          "title": "UseExtensions",
+          "description": "The workflow's extensions.",
+          "items": {
+            "type": "object",
+            "title": "ExtensionItem",
+            "minProperties": 1,
+            "maxProperties": 1,
+            "additionalProperties": {
+              "$ref": "#/$defs/extension"
+            }
+          }
+        },
+        "functions": {
+          "type": "object",
+          "title": "UseFunctions",
+          "description": "The workflow's reusable functions.",
+          "additionalProperties": {
+            "$ref": "#/$defs/task"
+          }
+        },
+        "retries": {
+          "type": "object",
+          "title": "UseRetries",
+          "description": "The workflow's reusable retry policies.",
+          "additionalProperties": {
+            "$ref": "#/$defs/retryPolicy"
+          }
+        },
+        "secrets": {
+          "type": "array",
+          "title": "UseSecrets",
+          "description": "The workflow's reusable secrets.",
+          "items": {
+            "type": "string",
+            "description": "The workflow's secrets."
+          }
+        },
+        "timeouts": {
+          "type": "object",
+          "title": "UseTimeouts",
+          "description": "The workflow's reusable timeouts.",
+          "additionalProperties": {
+            "$ref": "#/$defs/timeout"
+          }
+        },
+        "catalogs": {
+          "type": "object",
+          "title": "UseCatalogs",
+          "description": "The workflow's reusable catalogs.",
+          "additionalProperties": {
+            "$ref": "#/$defs/catalog"
+          }
+        }
+      }
+    },
+    "do": {
+      "$ref": "#/$defs/taskList",
+      "title": "Do",
+      "description": "Defines the task(s) the workflow must perform.",
+      "type": "object"
+    },
+    "timeout": {
+      "oneOf": [
+        {
+          "$ref": "#/$defs/timeout",
+          "title": "TimeoutDefinition",
+          "description": "The workflow's timeout configuration, if any.",
+          "type": "object"
+        },
+        {
+          "type": "string",
+          "description": "The name of the workflow's timeout, if any."
+        }
+      ],
+      "title": "WorkflowTimeout"
+    },
+    "output": {
+      "$ref": "#/$defs/output",
+      "title": "Output",
+      "description": "Configures the workflow's output.",
+      "type": "object"
+    },
+    "schedule": {
+      "type": "object",
+      "title": "Schedule",
+      "description": "Schedules the workflow.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "every": {
+          "$ref": "#/$defs/duration",
+          "title": "ScheduleEvery",
+          "description": "Specifies the duration of the interval at which the workflow should be executed.",
+          "type": "object"
+        },
+        "cron": {
+          "type": "string",
+          "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight."
+        },
+        "after": {
+          "$ref": "#/$defs/duration",
+          "title": "ScheduleAfter",
+          "description": "Specifies a delay duration that the workflow must wait before starting again after it completes.",
+          "type": "object"
+        },
+        "on": {
+          "$ref": "#/$defs/eventConsumptionStrategy",
+          "title": "ScheduleOn",
+          "description": "Specifies the events that trigger the workflow execution.",
+          "type": "object"
+        }
+      }
+    }
+  },
+  "$defs": {
+    "taskList": {
+      "title": "TaskList",
+      "description": "List of named tasks to perform.",
+      "type": "array",
+      "items": {
+        "type": "object",
+        "title": "TaskItem",
+        "minProperties": 1,
+        "maxProperties": 1,
+        "additionalProperties": {
+          "$ref": "#/$defs/task"
+        }
+      }
+    },
+    "taskBase": {
+      "type": "object",
+      "title": "TaskBase",
+      "description": "An object inherited by all tasks.",
+      "properties": {
+        "if": {
+          "type": "string",
+          "title": "TaskBaseIf",
+          "description": "A runtime expression, if any, used to determine whether or not the task should be run."
+        },
+        "input": {
+          "$ref": "#/$defs/input",
+          "title": "TaskBaseInput",
+          "description": "Configure the task's input.",
+          "type": "object"
+        },
+        "output": {
+          "$ref": "#/$defs/output",
+          "title": "TaskBaseOutput",
+          "description": "Configure the task's output.",
+          "type": "object"
+        },
+        "export": {
+          "$ref": "#/$defs/export",
+          "title": "TaskBaseExport",
+          "description": "Export task output to context.",
+          "type": "object"
+        },
+        "timeout": {
+          "oneOf": [
+            {
+              "$ref": "#/$defs/timeout",
+              "title": "TaskTimeoutDefinition",
+              "description": "The task's timeout configuration, if any.",
+              "type": "object"
+            },
+            {
+              "type": "string",
+              "description": "The name of the task's timeout, if any."
+            }
+          ],
+          "title": "TaskBaseTimeout"
+        },
+        "then": {
+          "$ref": "#/$defs/flowDirective",
+          "title": "TaskBaseThen",
+          "description": "The flow directive to be performed upon completion of the task.",
+          "type": "object"
+        },
+        "metadata": {
+          "type": "object",
+          "title": "TaskMetadata",
+          "description": "Holds additional information about the task.",
+          "additionalProperties": true
+        }
+      }
+    },
+    "task": {
+      "title": "Task",
+      "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "$ref": "#/$defs/callTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/doTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/forkTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/emitTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/forTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/listenTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/raiseTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/runTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/setTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/switchTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/tryTask",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/waitTask",
+          "type": "object"
+        }
+      ]
+    },
+    "callTask": {
+      "title": "CallTask",
+      "description": "Defines the call to perform.",
+      "oneOf": [
+        {
+          "title": "CallAsyncAPI",
+          "description": "Defines the AsyncAPI call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "required": [
+            "call",
+            "with"
+          ],
+          "unevaluatedProperties": false,
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "asyncapi"
+            },
+            "with": {
+              "type": "object",
+              "title": "AsyncApiArguments",
+              "description": "The Async API call arguments.",
+              "properties": {
+                "document": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithAsyncAPIDocument",
+                  "description": "The document that defines the AsyncAPI operation to call.",
+                  "type": "object"
+                },
+                "operationRef": {
+                  "type": "string",
+                  "description": "A reference to the AsyncAPI operation to call."
+                },
+                "server": {
+                  "type": "string",
+                  "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel."
+                },
+                "message": {
+                  "type": "string",
+                  "description": "The name of the message to use. If not set, defaults to the first message defined by the operation."
+                },
+                "binding": {
+                  "type": "string",
+                  "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation."
+                },
+                "payload": {
+                  "type": "object",
+                  "title": "WithAsyncAPIPayload",
+                  "description": "The payload to call the AsyncAPI operation with, if any."
+                },
+                "authentication": {
+                  "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                  "title": "WithAsyncAPIAuthentication",
+                  "description": "The authentication policy, if any, to use when calling the AsyncAPI operation.",
+                  "type": "object"
+                }
+              },
+              "required": [
+                "document",
+                "operationRef"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallGRPC",
+          "description": "Defines the GRPC call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "grpc"
+            },
+            "with": {
+              "type": "object",
+              "title": "GRPCArguments",
+              "description": "The GRPC call arguments.",
+              "properties": {
+                "proto": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithGRPCProto",
+                  "description": "The proto resource that describes the GRPC service to call.",
+                  "type": "object"
+                },
+                "service": {
+                  "type": "object",
+                  "title": "WithGRPCService",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "name": {
+                      "type": "string",
+                      "description": "The name of the GRPC service to call."
+                    },
+                    "host": {
+                      "type": "string",
+                      "description": "The hostname of the GRPC service to call.",
+                      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
+                    },
+                    "port": {
+                      "type": "integer",
+                      "description": "The port number of the GRPC service to call.",
+                      "minimum": 0,
+                      "maximum": 65535
+                    },
+                    "authentication": {
+                      "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                      "title": "WithGRPCServiceAuthentication",
+                      "description": "The endpoint's authentication policy, if any.",
+                      "type": "object"
+                    }
+                  },
+                  "required": [
+                    "name",
+                    "host"
+                  ]
+                },
+                "method": {
+                  "type": "string",
+                  "description": "The name of the method to call on the defined GRPC service."
+                },
+                "arguments": {
+                  "type": "object",
+                  "title": "WithGRPCArguments",
+                  "description": "The arguments, if any, to call the method with.",
+                  "additionalProperties": true
+                }
+              },
+              "required": [
+                "proto",
+                "service",
+                "method"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallHTTP",
+          "description": "Defines the HTTP call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "http"
+            },
+            "with": {
+              "type": "object",
+              "title": "HTTPArguments",
+              "description": "The HTTP call arguments.",
+              "properties": {
+                "method": {
+                  "type": "string",
+                  "description": "The HTTP method of the HTTP request to perform."
+                },
+                "endpoint": {
+                  "title": "WithHTTPEndpoint",
+                  "description": "The HTTP endpoint to send the request to.",
+                  "$ref": "#/$defs/endpoint",
+                  "type": "object"
+                },
+                "headers": {
+                  "type": "object",
+                  "title": "WithHTTPHeaders",
+                  "description": "A name/value mapping of the headers, if any, of the HTTP request to perform."
+                },
+                "body": {
+                  "title": "WithHTTPBody",
+                  "description": "The body, if any, of the HTTP request to perform.",
+                  "type": "object"
+                },
+                "query": {
+                  "type": "object",
+                  "title": "WithHTTPQuery",
+                  "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.",
+                  "additionalProperties": true
+                },
+                "output": {
+                  "type": "string",
+                  "description": "The http call output format. Defaults to 'content'.",
+                  "enum": [
+                    "raw",
+                    "content",
+                    "response"
+                  ]
+                }
+              },
+              "required": [
+                "method",
+                "endpoint"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallOpenAPI",
+          "description": "Defines the OpenAPI call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "openapi"
+            },
+            "with": {
+              "type": "object",
+              "title": "OpenAPIArguments",
+              "description": "The OpenAPI call arguments.",
+              "properties": {
+                "document": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithOpenAPIDocument",
+                  "description": "The document that defines the OpenAPI operation to call.",
+                  "type": "object"
+                },
+                "operationId": {
+                  "type": "string",
+                  "description": "The id of the OpenAPI operation to call."
+                },
+                "parameters": {
+                  "type": "object",
+                  "title": "WithOpenAPIParameters",
+                  "description": "A name/value mapping of the parameters of the OpenAPI operation to call.",
+                  "additionalProperties": true
+                },
+                "authentication": {
+                  "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                  "title": "WithOpenAPIAuthentication",
+                  "description": "The authentication policy, if any, to use when calling the OpenAPI operation.",
+                  "type": "object"
+                },
+                "output": {
+                  "type": "string",
+                  "enum": [
+                    "raw",
+                    "content",
+                    "response"
+                  ],
+                  "description": "The http call output format. Defaults to 'content'."
+                }
+              },
+              "required": [
+                "document",
+                "operationId"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallFunction",
+          "description": "Defines the function call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "not": {
+                "enum": [
+                  "asyncapi",
+                  "grpc",
+                  "http",
+                  "openapi"
+                ]
+              },
+              "description": "The name of the function to call."
+            },
+            "with": {
+              "type": "object",
+              "title": "FunctionArguments",
+              "description": "A name/value mapping of the parameters, if any, to call the function with.",
+              "additionalProperties": true
+            }
+          }
+        }
+      ]
+    },
+    "forkTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ForkTask",
+      "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.",
+      "unevaluatedProperties": false,
+      "required": [
+        "fork"
+      ],
+      "properties": {
+        "fork": {
+          "type": "object",
+          "title": "ForkTaskConfiguration",
+          "description": "The configuration of the branches to perform concurrently.",
+          "unevaluatedProperties": false,
+          "required": [
+            "branches"
+          ],
+          "properties": {
+            "branches": {
+              "$ref": "#/$defs/taskList",
+              "title": "ForkBranches",
+              "type": "object"
+            },
+            "compete": {
+              "type": "boolean",
+              "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.",
+              "default": false
+            }
+          }
+        }
+      }
+    },
+    "doTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "DoTask",
+      "description": "Allows to execute a list of tasks in sequence.",
+      "unevaluatedProperties": false,
+      "required": [
+        "do"
+      ],
+      "properties": {
+        "do": {
+          "$ref": "#/$defs/taskList",
+          "title": "DoTaskConfiguration",
+          "description": "The configuration of the tasks to perform sequentially.",
+          "type": "object"
+        }
+      }
+    },
+    "emitTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "EmitTask",
+      "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.",
+      "required": [
+        "emit"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "emit": {
+          "type": "object",
+          "title": "EmitTaskConfiguration",
+          "description": "The configuration of an event's emission.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "event": {
+              "type": "object",
+              "title": "EmitEventDefinition",
+              "description": "The definition of the event to emit.",
+              "properties": {
+                "with": {
+                  "$ref": "#/$defs/eventProperties",
+                  "title": "EmitEventWith",
+                  "description": "Defines the properties of event to emit.",
+                  "required": [
+                    "source",
+                    "type"
+                  ],
+                  "type": "object"
+                }
+              },
+              "additionalProperties": true
+            }
+          },
+          "required": [
+            "event"
+          ]
+        }
+      }
+    },
+    "forTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ForTask",
+      "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.",
+      "required": [
+        "for",
+        "do"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "for": {
+          "type": "object",
+          "title": "ForTaskConfiguration",
+          "description": "The definition of the loop that iterates over a range of values.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "each": {
+              "type": "string",
+              "description": "The name of the variable used to store the current item being enumerated.",
+              "default": "item"
+            },
+            "in": {
+              "type": "string",
+              "description": "A runtime expression used to get the collection to enumerate."
+            },
+            "at": {
+              "type": "string",
+              "description": "The name of the variable used to store the index of the current item being enumerated.",
+              "default": "index"
+            }
+          },
+          "required": [
+            "in"
+          ]
+        },
+        "while": {
+          "type": "string",
+          "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue."
+        },
+        "do": {
+          "$ref": "#/$defs/taskList",
+          "title": "ForTaskDo",
+          "type": "object"
+        }
+      }
+    },
+    "listenTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ListenTask",
+      "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.",
+      "required": [
+        "listen"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "listen": {
+          "type": "object",
+          "title": "ListenTaskConfiguration",
+          "description": "The configuration of the listener to use.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "to": {
+              "$ref": "#/$defs/eventConsumptionStrategy",
+              "title": "ListenTo",
+              "description": "Defines the event(s) to listen to.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "to"
+          ]
+        }
+      }
+    },
+    "raiseTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "RaiseTask",
+      "description": "Intentionally triggers and propagates errors.",
+      "required": [
+        "raise"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "raise": {
+          "type": "object",
+          "title": "RaiseTaskConfiguration",
+          "description": "The definition of the error to raise.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "error": {
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/error",
+                  "title": "RaiseErrorDefinition",
+                  "description": "Defines the error to raise.",
+                  "type": "object"
+                },
+                {
+                  "type": "string",
+                  "description": "The name of the error to raise"
+                }
+              ],
+              "title": "RaiseTaskRaiseError"
+            }
+          },
+          "required": [
+            "error"
+          ]
+        }
+      }
+    },
+    "runTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "RunTask",
+      "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.",
+      "required": [
+        "run"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "run": {
+          "type": "object",
+          "title": "RunTaskConfiguration",
+          "description": "The configuration of the process to execute.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "await": {
+              "type": "boolean",
+              "default": true,
+              "description": "Whether to await the process completion before continuing."
+            }
+          },
+          "oneOf": [
+            {
+              "title": "RunContainer",
+              "description": "Enables the execution of external processes encapsulated within a containerized environment.",
+              "properties": {
+                "container": {
+                  "type": "object",
+                  "title": "Container",
+                  "description": "The configuration of the container to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "image": {
+                      "type": "string",
+                      "description": "The name of the container image to run."
+                    },
+                    "command": {
+                      "type": "string",
+                      "description": "The command, if any, to execute on the container."
+                    },
+                    "ports": {
+                      "type": "object",
+                      "title": "ContainerPorts",
+                      "description": "The container's port mappings, if any."
+                    },
+                    "volumes": {
+                      "type": "object",
+                      "title": "ContainerVolumes",
+                      "description": "The container's volume mappings, if any."
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ContainerEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured process."
+                    }
+                  },
+                  "required": [
+                    "image"
+                  ]
+                }
+              },
+              "required": [
+                "container"
+              ],
+              "type": "object"
+            },
+            {
+              "title": "RunScript",
+              "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.",
+              "properties": {
+                "script": {
+                  "type": "object",
+                  "title": "Script",
+                  "description": "The configuration of the script to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "language": {
+                      "type": "string",
+                      "description": "The language of the script to run."
+                    },
+                    "arguments": {
+                      "type": "object",
+                      "title": "ScriptArguments",
+                      "description": "A key/value mapping of the arguments, if any, to use when running the configured script.",
+                      "additionalProperties": true
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ScriptEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "oneOf": [
+                    {
+                      "title": "InlineScript",
+                      "type": "object",
+                      "description": "The script's code.",
+                      "properties": {
+                        "code": {
+                          "type": "string"
+                        }
+                      },
+                      "required": [
+                        "code"
+                      ]
+                    },
+                    {
+                      "title": "ExternalScript",
+                      "type": "object",
+                      "description": "The script's resource.",
+                      "properties": {
+                        "source": {
+                          "$ref": "#/$defs/externalResource",
+                          "title": "ExternalScriptResource",
+                          "type": "object"
+                        }
+                      },
+                      "required": [
+                        "source"
+                      ]
+                    }
+                  ],
+                  "required": [
+                    "language"
+                  ]
+                }
+              },
+              "required": [
+                "script"
+              ],
+              "type": "object"
+            },
+            {
+              "title": "RunShell",
+              "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.",
+              "properties": {
+                "shell": {
+                  "type": "object",
+                  "title": "Shell",
+                  "description": "The configuration of the shell command to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "command": {
+                      "type": "string",
+                      "description": "The shell command to run."
+                    },
+                    "arguments": {
+                      "type": "object",
+                      "title": "ShellArguments",
+                      "description": "A list of the arguments of the shell command to run.",
+                      "additionalProperties": true
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ShellEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "required": [
+                    "command"
+                  ]
+                }
+              },
+              "required": [
+                "shell"
+              ],
+              "type": "object"
+            },
+            {
+              "title": "RunWorkflow",
+              "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.",
+              "properties": {
+                "workflow": {
+                  "type": "object",
+                  "title": "SubflowConfiguration",
+                  "description": "The configuration of the workflow to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "namespace": {
+                      "type": "string",
+                      "description": "The namespace the workflow to run belongs to."
+                    },
+                    "name": {
+                      "type": "string",
+                      "description": "The name of the workflow to run."
+                    },
+                    "version": {
+                      "type": "string",
+                      "default": "latest",
+                      "description": "The version of the workflow to run. Defaults to latest."
+                    },
+                    "input": {
+                      "type": "object",
+                      "title": "SubflowInput",
+                      "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "required": [
+                    "namespace",
+                    "name",
+                    "version"
+                  ]
+                }
+              },
+              "required": [
+                "workflow"
+              ],
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "setTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "SetTask",
+      "description": "A task used to set data.",
+      "required": [
+        "set"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "set": {
+          "type": "object",
+          "title": "SetTaskConfiguration",
+          "description": "The data to set.",
+          "minProperties": 1,
+          "additionalProperties": true
+        }
+      }
+    },
+    "switchTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "SwitchTask",
+      "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.",
+      "required": [
+        "switch"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "switch": {
+          "type": "array",
+          "title": "SwitchTaskConfiguration",
+          "description": "The definition of the switch to use.",
+          "minItems": 1,
+          "items": {
+            "type": "object",
+            "title": "SwitchItem",
+            "minProperties": 1,
+            "maxProperties": 1,
+            "additionalProperties": {
+              "type": "object",
+              "title": "SwitchCase",
+              "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.",
+              "unevaluatedProperties": false,
+              "required": [
+                "then"
+              ],
+              "properties": {
+                "when": {
+                  "type": "string",
+                  "description": "A runtime expression used to determine whether or not the case matches."
+                },
+                "then": {
+                  "$ref": "#/$defs/flowDirective",
+                  "title": "SwitchCaseOutcome",
+                  "description": "The flow directive to execute when the case matches.",
+                  "type": "object"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "tryTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "TryTask",
+      "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.",
+      "required": [
+        "try",
+        "catch"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "try": {
+          "$ref": "#/$defs/taskList",
+          "title": "TryTaskConfiguration",
+          "description": "The task(s) to perform.",
+          "type": "object"
+        },
+        "catch": {
+          "type": "object",
+          "title": "TryTaskCatch",
+          "description": "The object used to define the errors to catch.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "errors": {
+              "type": "object",
+              "title": "CatchErrors",
+              "description": "The configuration of a concept used to catch errors."
+            },
+            "as": {
+              "type": "string",
+              "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'."
+            },
+            "when": {
+              "type": "string",
+              "description": "A runtime expression used to determine whether or not to catch the filtered error."
+            },
+            "exceptWhen": {
+              "type": "string",
+              "description": "A runtime expression used to determine whether or not to catch the filtered error."
+            },
+            "retry": {
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/retryPolicy",
+                  "title": "RetryPolicyDefinition",
+                  "description": "The retry policy to use, if any, when catching errors.",
+                  "type": "object"
+                },
+                {
+                  "type": "string",
+                  "description": "The name of the retry policy to use, if any, when catching errors."
+                }
+              ],
+              "title": "TryTaskCatchRetry"
+            },
+            "do": {
+              "$ref": "#/$defs/taskList",
+              "title": "TryTaskCatchDo",
+              "description": "The definition of the task(s) to run when catching an error.",
+              "type": "object"
+            }
+          }
+        }
+      }
+    },
+    "waitTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "WaitTask",
+      "description": "Allows workflows to pause or delay their execution for a specified period of time.",
+      "required": [
+        "wait"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "wait": {
+          "$ref": "#/$defs/duration",
+          "title": "WaitTaskConfiguration",
+          "description": "The amount of time to wait.",
+          "type": "object"
+        }
+      }
+    },
+    "flowDirective": {
+      "title": "FlowDirective",
+      "description": "Represents different transition options for a workflow.",
+      "anyOf": [
+        {
+          "type": "string",
+          "enum": [
+            "continue",
+            "exit",
+            "end"
+          ],
+          "default": "continue"
+        },
+        {
+          "type": "string"
+        }
+      ]
+    },
+    "referenceableAuthenticationPolicy": {
+      "type": "object",
+      "title": "ReferenceableAuthenticationPolicy",
+      "description": "Represents a referenceable authentication policy.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "title": "AuthenticationPolicyReference",
+          "description": "The reference of the authentication policy to use.",
+          "properties": {
+            "use": {
+              "type": "string",
+              "minLength": 1,
+              "description": "The name of the authentication policy to use."
+            }
+          },
+          "required": [
+            "use"
+          ],
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/authenticationPolicy",
+          "type": "object"
+        }
+      ]
+    },
+    "secretBasedAuthenticationPolicy": {
+      "type": "object",
+      "title": "SecretBasedAuthenticationPolicy",
+      "description": "Represents an authentication policy based on secrets.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "use": {
+          "type": "string",
+          "minLength": 1,
+          "description": "The name of the authentication policy to use."
+        }
+      },
+      "required": [
+        "use"
+      ]
+    },
+    "authenticationPolicy": {
+      "type": "object",
+      "title": "AuthenticationPolicy",
+      "description": "Defines an authentication policy.",
+      "oneOf": [
+        {
+          "title": "BasicAuthenticationPolicy",
+          "description": "Use basic authentication.",
+          "properties": {
+            "basic": {
+              "type": "object",
+              "title": "BasicAuthenticationPolicyConfiguration",
+              "description": "The configuration of the basic authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "BasicAuthenticationProperties",
+                  "description": "Inline configuration of the basic authentication policy.",
+                  "properties": {
+                    "username": {
+                      "type": "string",
+                      "description": "The username to use."
+                    },
+                    "password": {
+                      "type": "string",
+                      "description": "The password to use."
+                    }
+                  },
+                  "required": [
+                    "username",
+                    "password"
+                  ],
+                  "type": "object"
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "BasicAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the basic authentication policy.",
+                  "type": "object"
+                }
+              ]
+            }
+          },
+          "required": [
+            "basic"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "BearerAuthenticationPolicy",
+          "description": "Use bearer authentication.",
+          "properties": {
+            "bearer": {
+              "type": "object",
+              "title": "BearerAuthenticationPolicyConfiguration",
+              "description": "The configuration of the bearer authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "BearerAuthenticationProperties",
+                  "description": "Inline configuration of the bearer authentication policy.",
+                  "properties": {
+                    "token": {
+                      "type": "string",
+                      "description": "The bearer token to use."
+                    }
+                  },
+                  "required": [
+                    "token"
+                  ],
+                  "type": "object"
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "BearerAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the bearer authentication policy.",
+                  "type": "object"
+                }
+              ]
+            }
+          },
+          "required": [
+            "bearer"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "DigestAuthenticationPolicy",
+          "description": "Use digest authentication.",
+          "properties": {
+            "digest": {
+              "type": "object",
+              "title": "DigestAuthenticationPolicyConfiguration",
+              "description": "The configuration of the digest authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "DigestAuthenticationProperties",
+                  "description": "Inline configuration of the digest authentication policy.",
+                  "properties": {
+                    "username": {
+                      "type": "string",
+                      "description": "The username to use."
+                    },
+                    "password": {
+                      "type": "string",
+                      "description": "The password to use."
+                    }
+                  },
+                  "required": [
+                    "username",
+                    "password"
+                  ],
+                  "type": "object"
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "DigestAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the digest authentication policy.",
+                  "type": "object"
+                }
+              ]
+            }
+          },
+          "required": [
+            "digest"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "OAuth2AuthenticationPolicy",
+          "description": "Use OAuth2 authentication.",
+          "properties": {
+            "oauth2": {
+              "type": "object",
+              "title": "OAuth2AuthenticationPolicyConfiguration",
+              "description": "The configuration of the OAuth2 authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "type": "object",
+                  "title": "OAuth2ConnectAuthenticationProperties",
+                  "description": "The inline configuration of the OAuth2 authentication policy.",
+                  "unevaluatedProperties": false,
+                  "allOf": [
+                    {
+                      "$ref": "#/$defs/oauth2AuthenticationProperties",
+                      "type": "object"
+                    },
+                    {
+                      "type": "object",
+                      "properties": {
+                        "endpoints": {
+                          "type": "object",
+                          "title": "OAuth2AuthenticationPropertiesEndpoints",
+                          "description": "The endpoint configurations for OAuth2.",
+                          "properties": {
+                            "token": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/token",
+                              "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`."
+                            },
+                            "revocation": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/revoke",
+                              "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`."
+                            },
+                            "introspection": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/introspect",
+                              "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`."
+                            }
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "OAuth2AuthenticationPolicySecret",
+                  "description": "Secret based configuration of the OAuth2 authentication policy.",
+                  "type": "object"
+                }
+              ]
+            }
+          },
+          "required": [
+            "oauth2"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "OpenIdConnectAuthenticationPolicy",
+          "description": "Use OpenIdConnect authentication.",
+          "properties": {
+            "oidc": {
+              "type": "object",
+              "title": "OpenIdConnectAuthenticationPolicyConfiguration",
+              "description": "The configuration of the OpenIdConnect authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/oauth2AuthenticationProperties",
+                  "title": "OpenIdConnectAuthenticationProperties",
+                  "description": "The inline configuration of the OpenIdConnect authentication policy.",
+                  "unevaluatedProperties": false,
+                  "type": "object",
+                  "$id": "OpenIdConnectAuthenticationProperties"
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "OpenIdConnectAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the OpenIdConnect authentication policy.",
+                  "type": "object"
+                }
+              ]
+            }
+          },
+          "required": [
+            "oidc"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "oauth2AuthenticationProperties": {
+      "type": "object",
+      "title": "OAuth2AutenthicationData",
+      "description": "Inline configuration of the OAuth2 authentication policy.",
+      "properties": {
+        "authority": {
+          "$ref": "#/$defs/uriTemplate",
+          "title": "OAuth2AutenthicationDataAuthority",
+          "description": "The URI that references the OAuth2 authority to use.",
+          "type": "object"
+        },
+        "grant": {
+          "type": "string",
+          "enum": [
+            "authorization_code",
+            "client_credentials",
+            "password",
+            "refresh_token",
+            "urn:ietf:params:oauth:grant-type:token-exchange"
+          ],
+          "description": "The grant type to use."
+        },
+        "client": {
+          "type": "object",
+          "title": "OAuth2AutenthicationDataClient",
+          "description": "The definition of an OAuth2 client.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "id": {
+              "type": "string",
+              "description": "The client id to use."
+            },
+            "secret": {
+              "type": "string",
+              "description": "The client secret to use, if any."
+            },
+            "assertion": {
+              "type": "string",
+              "description": "A JWT containing a signed assertion with your application credentials."
+            },
+            "authentication": {
+              "type": "string",
+              "enum": [
+                "client_secret_basic",
+                "client_secret_post",
+                "client_secret_jwt",
+                "private_key_jwt",
+                "none"
+              ],
+              "default": "client_secret_post",
+              "description": "The authentication method to use to authenticate the client."
+            }
+          }
+        },
+        "request": {
+          "type": "object",
+          "title": "OAuth2TokenRequest",
+          "description": "The configuration of an OAuth2 token request",
+          "properties": {
+            "encoding": {
+              "type": "string",
+              "enum": [
+                "application/x-www-form-urlencoded",
+                "application/json"
+              ],
+              "default": "application/x-www-form-urlencoded"
+            }
+          }
+        },
+        "issuers": {
+          "type": "array",
+          "title": "OAuth2Issuers",
+          "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "scopes": {
+          "type": "array",
+          "title": "OAuth2AutenthicationDataScopes",
+          "description": "The scopes, if any, to request the token for.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "audiences": {
+          "type": "array",
+          "title": "OAuth2AutenthicationDataAudiences",
+          "description": "The audiences, if any, to request the token for.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "username": {
+          "type": "string",
+          "description": "The username to use. Used only if the grant type is Password."
+        },
+        "password": {
+          "type": "string",
+          "description": "The password to use. Used only if the grant type is Password."
+        },
+        "subject": {
+          "$ref": "#/$defs/oauth2Token",
+          "title": "OAuth2AutenthicationDataSubject",
+          "description": "The security token that represents the identity of the party on behalf of whom the request is being made.",
+          "type": "object"
+        },
+        "actor": {
+          "$ref": "#/$defs/oauth2Token",
+          "title": "OAuth2AutenthicationDataActor",
+          "description": "The security token that represents the identity of the acting party.",
+          "type": "object"
+        }
+      }
+    },
+    "oauth2Token": {
+      "type": "object",
+      "title": "OAuth2TokenDefinition",
+      "description": "Represents an OAuth2 token.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "token": {
+          "type": "string",
+          "description": "The security token to use."
+        },
+        "type": {
+          "type": "string",
+          "description": "The type of the security token to use."
+        }
+      },
+      "required": [
+        "token",
+        "type"
+      ]
+    },
+    "duration": {
+      "oneOf": [
+        {
+          "type": "object",
+          "minProperties": 1,
+          "unevaluatedProperties": false,
+          "properties": {
+            "days": {
+              "type": "integer",
+              "description": "Number of days, if any."
+            },
+            "hours": {
+              "type": "integer",
+              "description": "Number of days, if any."
+            },
+            "minutes": {
+              "type": "integer",
+              "description": "Number of minutes, if any."
+            },
+            "seconds": {
+              "type": "integer",
+              "description": "Number of seconds, if any."
+            },
+            "milliseconds": {
+              "type": "integer",
+              "description": "Number of milliseconds, if any."
+            }
+          },
+          "title": "DurationInline",
+          "description": "The inline definition of a duration."
+        },
+        {
+          "type": "string",
+          "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$",
+          "description": "The ISO 8601 expression of a duration."
+        }
+      ],
+      "title": "Duration"
+    },
+    "error": {
+      "type": "object",
+      "title": "Error",
+      "description": "Represents an error.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "type": {
+          "title": "ErrorType",
+          "description": "A URI reference that identifies the error type.",
+          "oneOf": [
+            {
+              "title": "LiteralErrorType",
+              "$ref": "#/$defs/uriTemplate",
+              "description": "The literal error type.",
+              "type": "object"
+            },
+            {
+              "title": "ExpressionErrorType",
+              "$ref": "#/$defs/runtimeExpression",
+              "description": "An expression based error type.",
+              "type": "object"
+            }
+          ]
+        },
+        "status": {
+          "type": "integer",
+          "description": "The status code generated by the origin for this occurrence of the error."
+        },
+        "instance": {
+          "title": "ErrorInstance",
+          "description": "A JSON Pointer used to reference the component the error originates from.",
+          "oneOf": [
+            {
+              "description": "The literal error instance.",
+              "type": "string",
+              "format": "json-pointer"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression",
+              "title": "ExpressionErrorInstance",
+              "description": "An expression based error instance.",
+              "type": "object"
+            }
+          ]
+        },
+        "title": {
+          "type": "string",
+          "description": "A short, human-readable summary of the error."
+        },
+        "detail": {
+          "type": "string",
+          "description": "A human-readable explanation specific to this occurrence of the error."
+        }
+      },
+      "required": [
+        "type",
+        "status"
+      ]
+    },
+    "uriTemplate": {
+      "title": "UriTemplate",
+      "anyOf": [
+        {
+          "type": "string",
+          "format": "uri-template",
+          "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*"
+        },
+        {
+          "type": "string",
+          "format": "uri",
+          "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*"
+        }
+      ]
+    },
+    "endpoint": {
+      "title": "Endpoint",
+      "description": "Represents an endpoint.",
+      "oneOf": [
+        {
+          "$ref": "#/$defs/runtimeExpression",
+          "type": "object"
+        },
+        {
+          "$ref": "#/$defs/uriTemplate",
+          "type": "object"
+        },
+        {
+          "title": "EndpointConfiguration",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "properties": {
+            "uri": {
+              "title": "EndpointUri",
+              "description": "The endpoint's URI.",
+              "oneOf": [
+                {
+                  "title": "LiteralEndpointURI",
+                  "description": "The literal endpoint's URI.",
+                  "$ref": "#/$defs/uriTemplate",
+                  "type": "object"
+                },
+                {
+                  "title": "ExpressionEndpointURI",
+                  "$ref": "#/$defs/runtimeExpression",
+                  "description": "An expression based endpoint's URI.",
+                  "type": "object"
+                }
+              ]
+            },
+            "authentication": {
+              "$ref": "#/$defs/referenceableAuthenticationPolicy",
+              "title": "EndpointAuthentication",
+              "description": "The authentication policy to use.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "uri"
+          ]
+        }
+      ]
+    },
+    "eventProperties": {
+      "type": "object",
+      "title": "EventProperties",
+      "description": "Describes the properties of an event.",
+      "properties": {
+        "id": {
+          "type": "string",
+          "description": "The event's unique identifier."
+        },
+        "source": {
+          "title": "EventSource",
+          "description": "Identifies the context in which an event happened.",
+          "oneOf": [
+            {
+              "$ref": "#/$defs/uriTemplate",
+              "type": "object"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression",
+              "type": "object"
+            }
+          ]
+        },
+        "type": {
+          "type": "string",
+          "description": "This attribute contains a value describing the type of event related to the originating occurrence."
+        },
+        "time": {
+          "title": "EventTime",
+          "description": "When the event occured.",
+          "oneOf": [
+            {
+              "type": "string",
+              "format": "date-time"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression",
+              "type": "object"
+            }
+          ]
+        },
+        "subject": {
+          "type": "string",
+          "description": "The subject of the event."
+        },
+        "datacontenttype": {
+          "type": "string",
+          "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format."
+        },
+        "dataschema": {
+          "title": "EventDataschema",
+          "description": "The schema describing the event format.",
+          "oneOf": [
+            {
+              "title": "LiteralDataSchema",
+              "$ref": "#/$defs/uriTemplate",
+              "description": "The literal event data schema.",
+              "type": "object"
+            },
+            {
+              "title": "ExpressionDataSchema",
+              "$ref": "#/$defs/runtimeExpression",
+              "description": "An expression based event data schema.",
+              "type": "object"
+            }
+          ]
+        }
+      },
+      "additionalProperties": true
+    },
+    "eventConsumptionStrategy": {
+      "type": "object",
+      "title": "EventConsumptionStrategy",
+      "description": "Describe the event consumption strategy to adopt.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "title": "AllEventConsumptionStrategy",
+          "properties": {
+            "all": {
+              "type": "array",
+              "title": "AllEventConsumptionStrategyConfiguration",
+              "description": "A list containing all the events that must be consumed.",
+              "items": {
+                "$ref": "#/$defs/eventFilter"
+              }
+            }
+          },
+          "required": [
+            "all"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "AnyEventConsumptionStrategy",
+          "properties": {
+            "any": {
+              "type": "array",
+              "title": "AnyEventConsumptionStrategyConfiguration",
+              "description": "A list containing any of the events to consume.",
+              "items": {
+                "$ref": "#/$defs/eventFilter"
+              }
+            }
+          },
+          "required": [
+            "any"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "OneEventConsumptionStrategy",
+          "properties": {
+            "one": {
+              "$ref": "#/$defs/eventFilter",
+              "title": "OneEventConsumptionStrategyConfiguration",
+              "description": "The single event to consume.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "one"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "eventFilter": {
+      "type": "object",
+      "title": "EventFilter",
+      "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "with": {
+          "$ref": "#/$defs/eventProperties",
+          "minProperties": 1,
+          "title": "WithEvent",
+          "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.",
+          "type": "object"
+        },
+        "correlate": {
+          "type": "object",
+          "title": "EventFilterCorrelate",
+          "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.",
+          "additionalProperties": {
+            "type": "object",
+            "properties": {
+              "from": {
+                "type": "string",
+                "description": "A runtime expression used to extract the correlation value from the filtered event."
+              },
+              "expect": {
+                "type": "string",
+                "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation."
+              }
+            },
+            "required": [
+              "from"
+            ]
+          }
+        }
+      },
+      "required": [
+        "with"
+      ]
+    },
+    "extension": {
+      "type": "object",
+      "title": "Extension",
+      "description": "The definition of an extension.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "extend": {
+          "type": "string",
+          "enum": [
+            "call",
+            "composite",
+            "emit",
+            "for",
+            "listen",
+            "raise",
+            "run",
+            "set",
+            "switch",
+            "try",
+            "wait",
+            "all"
+          ],
+          "description": "The type of task to extend."
+        },
+        "when": {
+          "type": "string",
+          "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context."
+        },
+        "before": {
+          "$ref": "#/$defs/taskList",
+          "title": "ExtensionDoBefore",
+          "description": "The task(s) to execute before the extended task, if any.",
+          "type": "object"
+        },
+        "after": {
+          "$ref": "#/$defs/taskList",
+          "title": "ExtensionDoAfter",
+          "description": "The task(s) to execute after the extended task, if any.",
+          "type": "object"
+        }
+      },
+      "required": [
+        "extend"
+      ]
+    },
+    "externalResource": {
+      "type": "object",
+      "title": "ExternalResource",
+      "description": "Represents an external resource.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the external resource, if any."
+        },
+        "endpoint": {
+          "$ref": "#/$defs/endpoint",
+          "title": "ExternalResourceEndpoint",
+          "description": "The endpoint of the external resource.",
+          "type": "object"
+        }
+      },
+      "required": [
+        "endpoint"
+      ]
+    },
+    "input": {
+      "type": "object",
+      "title": "Input",
+      "description": "Configures the input of a workflow or task.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "InputSchema",
+          "description": "The schema used to describe and validate the input of the workflow or task.",
+          "type": "object"
+        },
+        "from": {
+          "title": "InputFrom",
+          "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "output": {
+      "type": "object",
+      "title": "Output",
+      "description": "Configures the output of a workflow or task.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "OutputSchema",
+          "description": "The schema used to describe and validate the output of the workflow or task.",
+          "type": "object"
+        },
+        "as": {
+          "title": "OutputAs",
+          "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "export": {
+      "type": "object",
+      "title": "Export",
+      "description": "Set the content of the context. .",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "ExportSchema",
+          "description": "The schema used to describe and validate the workflow context.",
+          "type": "object"
+        },
+        "as": {
+          "title": "ExportAs",
+          "description": "A runtime expression, if any, used to export the output data to the context.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "retryPolicy": {
+      "type": "object",
+      "title": "RetryPolicy",
+      "description": "Defines a retry policy.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "when": {
+          "type": "string",
+          "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context."
+        },
+        "exceptWhen": {
+          "type": "string",
+          "description": "A runtime expression used to determine whether or not to retry running the task, in a given context."
+        },
+        "delay": {
+          "$ref": "#/$defs/duration",
+          "title": "RetryDelay",
+          "description": "The duration to wait between retry attempts.",
+          "type": "object"
+        },
+        "backoff": {
+          "type": "object",
+          "title": "RetryBackoff",
+          "description": "The retry duration backoff.",
+          "unevaluatedProperties": false,
+          "oneOf": [
+            {
+              "title": "ConstantBackoff",
+              "properties": {
+                "constant": {
+                  "type": "object",
+                  "description": "The definition of the constant backoff to use, if any."
+                }
+              },
+              "required": [
+                "constant"
+              ],
+              "type": "object"
+            },
+            {
+              "title": "ExponentialBackOff",
+              "properties": {
+                "exponential": {
+                  "type": "object",
+                  "description": "The definition of the exponential backoff to use, if any."
+                }
+              },
+              "required": [
+                "exponential"
+              ],
+              "type": "object"
+            },
+            {
+              "title": "LinearBackoff",
+              "properties": {
+                "linear": {
+                  "type": "object",
+                  "description": "The definition of the linear backoff to use, if any."
+                }
+              },
+              "required": [
+                "linear"
+              ],
+              "type": "object"
+            }
+          ]
+        },
+        "limit": {
+          "type": "object",
+          "title": "RetryLimit",
+          "unevaluatedProperties": false,
+          "properties": {
+            "attempt": {
+              "type": "object",
+              "title": "RetryLimitAttempt",
+              "unevaluatedProperties": false,
+              "properties": {
+                "count": {
+                  "type": "integer",
+                  "description": "The maximum amount of retry attempts, if any."
+                },
+                "duration": {
+                  "$ref": "#/$defs/duration",
+                  "title": "RetryLimitAttemptDuration",
+                  "description": "The maximum duration for each retry attempt.",
+                  "type": "object"
+                }
+              }
+            },
+            "duration": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryLimitDuration",
+              "description": "The duration limit, if any, for all retry attempts.",
+              "type": "object"
+            }
+          },
+          "description": "The retry limit, if any."
+        },
+        "jitter": {
+          "type": "object",
+          "title": "RetryPolicyJitter",
+          "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "from": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryPolicyJitterFrom",
+              "description": "The minimum duration of the jitter range.",
+              "type": "object"
+            },
+            "to": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryPolicyJitterTo",
+              "description": "The maximum duration of the jitter range.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "from",
+            "to"
+          ]
+        }
+      }
+    },
+    "schema": {
+      "type": "object",
+      "title": "Schema",
+      "description": "Represents the definition of a schema.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "format": {
+          "type": "string",
+          "default": "json",
+          "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`."
+        }
+      },
+      "oneOf": [
+        {
+          "title": "SchemaInline",
+          "properties": {
+            "document": {
+              "description": "The schema's inline definition.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "document"
+          ],
+          "type": "object"
+        },
+        {
+          "title": "SchemaExternal",
+          "properties": {
+            "resource": {
+              "$ref": "#/$defs/externalResource",
+              "title": "SchemaExternalResource",
+              "description": "The schema's external resource.",
+              "type": "object"
+            }
+          },
+          "required": [
+            "resource"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "timeout": {
+      "type": "object",
+      "title": "Timeout",
+      "description": "The definition of a timeout.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "after": {
+          "$ref": "#/$defs/duration",
+          "title": "TimeoutAfter",
+          "description": "The duration after which to timeout.",
+          "type": "object"
+        }
+      },
+      "required": [
+        "after"
+      ]
+    },
+    "catalog": {
+      "type": "object",
+      "title": "Catalog",
+      "description": "The definition of a resource catalog",
+      "unevaluatedProperties": false,
+      "properties": {
+        "endpoint": {
+          "$ref": "#/$defs/endpoint",
+          "title": "CatalogEndpoint",
+          "description": "The root URL where the catalog is hosted",
+          "type": "object"
+        }
+      },
+      "required": [
+        "endpoint"
+      ]
+    },
+    "runtimeExpression": {
+      "type": "string",
+      "title": "RuntimeExpression",
+      "description": "A runtime expression.",
+      "pattern": "^\\s*\\$\\{.+\\}\\s*$"
+    }
+  },
+  "title": ""
+}
\ No newline at end of file
diff --git a/src/lib/generated/schema/workflow.json b/src/lib/generated/schema/workflow.json
new file mode 100644
index 0000000..59616c2
--- /dev/null
+++ b/src/lib/generated/schema/workflow.json
@@ -0,0 +1,2279 @@
+{
+  "$id": "https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json",
+  "$schema": "https://json-schema.org/draft/2020-12/schema",
+  "description": "Serverless Workflow DSL - Workflow Schema.",
+  "type": "object",
+  "required": [
+    "document",
+    "do"
+  ],
+  "properties": {
+    "document": {
+      "type": "object",
+      "title": "Document",
+      "description": "Documents the workflow.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "dsl": {
+          "type": "string",
+          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
+          "title": "WorkflowDSL",
+          "description": "The version of the DSL used by the workflow."
+        },
+        "namespace": {
+          "type": "string",
+          "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
+          "title": "WorkflowNamespace",
+          "description": "The workflow's namespace."
+        },
+        "name": {
+          "type": "string",
+          "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
+          "title": "WorkflowName",
+          "description": "The workflow's name."
+        },
+        "version": {
+          "type": "string",
+          "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
+          "title": "WorkflowVersion",
+          "description": "The workflow's semantic version."
+        },
+        "title": {
+          "type": "string",
+          "title": "WorkflowTitle",
+          "description": "The workflow's title."
+        },
+        "summary": {
+          "type": "string",
+          "title": "WorkflowSummary",
+          "description": "The workflow's Markdown summary."
+        },
+        "tags": {
+          "type": "object",
+          "title": "WorkflowTags",
+          "description": "A key/value mapping of the workflow's tags, if any.",
+          "additionalProperties": true
+        },
+        "metadata": {
+          "type": "object",
+          "title": "WorkflowMetadata",
+          "description": "Holds additional information about the workflow.",
+          "additionalProperties": true
+        }
+      },
+      "required": [
+        "dsl",
+        "namespace",
+        "name",
+        "version"
+      ]
+    },
+    "input": {
+      "$ref": "#/$defs/input",
+      "title": "Input",
+      "description": "Configures the workflow's input."
+    },
+    "use": {
+      "type": "object",
+      "title": "Use",
+      "description": "Defines the workflow's reusable components.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "authentications": {
+          "type": "object",
+          "title": "UseAuthentications",
+          "description": "The workflow's reusable authentication policies.",
+          "additionalProperties": {
+            "$ref": "#/$defs/authenticationPolicy"
+          }
+        },
+        "errors": {
+          "type": "object",
+          "title": "UseErrors",
+          "description": "The workflow's reusable errors.",
+          "additionalProperties": {
+            "$ref": "#/$defs/error"
+          }
+        },
+        "extensions": {
+          "type": "array",
+          "title": "UseExtensions",
+          "description": "The workflow's extensions.",
+          "items": {
+            "type": "object",
+            "title": "ExtensionItem",
+            "minProperties": 1,
+            "maxProperties": 1,
+            "additionalProperties": {
+              "$ref": "#/$defs/extension"
+            }
+          }
+        },
+        "functions": {
+          "type": "object",
+          "title": "UseFunctions",
+          "description": "The workflow's reusable functions.",
+          "additionalProperties": {
+            "$ref": "#/$defs/task"
+          }
+        },
+        "retries": {
+          "type": "object",
+          "title": "UseRetries",
+          "description": "The workflow's reusable retry policies.",
+          "additionalProperties": {
+            "$ref": "#/$defs/retryPolicy"
+          }
+        },
+        "secrets": {
+          "type": "array",
+          "title": "UseSecrets",
+          "description": "The workflow's reusable secrets.",
+          "items": {
+            "type": "string",
+            "description": "The workflow's secrets."
+          }
+        },
+        "timeouts": {
+          "type": "object",
+          "title": "UseTimeouts",
+          "description": "The workflow's reusable timeouts.",
+          "additionalProperties": {
+            "$ref": "#/$defs/timeout"
+          }
+        },
+        "catalogs": {
+          "type": "object",
+          "title": "UseCatalogs",
+          "description": "The workflow's reusable catalogs.",
+          "additionalProperties": {
+            "$ref": "#/$defs/catalog"
+          }
+        }
+      }
+    },
+    "do": {
+      "$ref": "#/$defs/taskList",
+      "title": "Do",
+      "description": "Defines the task(s) the workflow must perform."
+    },
+    "timeout": {
+      "oneOf": [
+        {
+          "$ref": "#/$defs/timeout",
+          "title": "TimeoutDefinition",
+          "description": "The workflow's timeout configuration, if any."
+        },
+        {
+          "type": "string",
+          "title": "TimeoutReference",
+          "description": "The name of the workflow's timeout, if any."
+        }
+      ]
+    },
+    "output": {
+      "$ref": "#/$defs/output",
+      "title": "Output",
+      "description": "Configures the workflow's output."
+    },
+    "schedule": {
+      "type": "object",
+      "title": "Schedule",
+      "description": "Schedules the workflow.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "every": {
+          "$ref": "#/$defs/duration",
+          "title": "ScheduleEvery",
+          "description": "Specifies the duration of the interval at which the workflow should be executed."
+        },
+        "cron": {
+          "type": "string",
+          "title": "ScheduleCron",
+          "description": "Specifies the schedule using a cron expression, e.g., '0 0 * * *' for daily at midnight."
+        },
+        "after": {
+          "$ref": "#/$defs/duration",
+          "title": "ScheduleAfter",
+          "description": "Specifies a delay duration that the workflow must wait before starting again after it completes."
+        },
+        "on": {
+          "$ref": "#/$defs/eventConsumptionStrategy",
+          "title": "ScheduleOn",
+          "description": "Specifies the events that trigger the workflow execution."
+        }
+      }
+    }
+  },
+  "$defs": {
+    "taskList": {
+      "title": "TaskList",
+      "description": "List of named tasks to perform.",
+      "type": "array",
+      "items": {
+        "type": "object",
+        "title": "TaskItem",
+        "minProperties": 1,
+        "maxProperties": 1,
+        "additionalProperties": {
+          "$ref": "#/$defs/task"
+        }
+      }
+    },
+    "taskBase": {
+      "type": "object",
+      "title": "TaskBase",
+      "description": "An object inherited by all tasks.",
+      "properties": {
+        "if": {
+          "type": "string",
+          "title": "TaskBaseIf",
+          "description": "A runtime expression, if any, used to determine whether or not the task should be run."
+        },
+        "input": {
+          "$ref": "#/$defs/input",
+          "title": "TaskBaseInput",
+          "description": "Configure the task's input."
+        },
+        "output": {
+          "$ref": "#/$defs/output",
+          "title": "TaskBaseOutput",
+          "description": "Configure the task's output."
+        },
+        "export": {
+          "$ref": "#/$defs/export",
+          "title": "TaskBaseExport",
+          "description": "Export task output to context."
+        },
+        "timeout": {
+          "oneOf": [
+            {
+              "$ref": "#/$defs/timeout",
+              "title": "TaskTimeoutDefinition",
+              "description": "The task's timeout configuration, if any."
+            },
+            {
+              "type": "string",
+              "title": "TaskTimeoutReference",
+              "description": "The name of the task's timeout, if any."
+            }
+          ]
+        },
+        "then": {
+          "$ref": "#/$defs/flowDirective",
+          "title": "TaskBaseThen",
+          "description": "The flow directive to be performed upon completion of the task."
+        },
+        "metadata": {
+          "type": "object",
+          "title": "TaskMetadata",
+          "description": "Holds additional information about the task.",
+          "additionalProperties": true
+        }
+      }
+    },
+    "task": {
+      "title": "Task",
+      "description": "A discrete unit of work that contributes to achieving the overall objectives defined by the workflow.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "$ref": "#/$defs/callTask"
+        },
+        {
+          "$ref": "#/$defs/doTask"
+        },
+        {
+          "$ref": "#/$defs/forkTask"
+        },
+        {
+          "$ref": "#/$defs/emitTask"
+        },
+        {
+          "$ref": "#/$defs/forTask"
+        },
+        {
+          "$ref": "#/$defs/listenTask"
+        },
+        {
+          "$ref": "#/$defs/raiseTask"
+        },
+        {
+          "$ref": "#/$defs/runTask"
+        },
+        {
+          "$ref": "#/$defs/setTask"
+        },
+        {
+          "$ref": "#/$defs/switchTask"
+        },
+        {
+          "$ref": "#/$defs/tryTask"
+        },
+        {
+          "$ref": "#/$defs/waitTask"
+        }
+      ]
+    },
+    "callTask": {
+      "title": "CallTask",
+      "description": "Defines the call to perform.",
+      "oneOf": [
+        {
+          "title": "CallAsyncAPI",
+          "description": "Defines the AsyncAPI call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "required": [
+            "call",
+            "with"
+          ],
+          "unevaluatedProperties": false,
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "asyncapi"
+            },
+            "with": {
+              "type": "object",
+              "title": "AsyncApiArguments",
+              "description": "The Async API call arguments.",
+              "properties": {
+                "document": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithAsyncAPIDocument",
+                  "description": "The document that defines the AsyncAPI operation to call."
+                },
+                "operationRef": {
+                  "type": "string",
+                  "title": "WithAsyncAPIOperation",
+                  "description": "A reference to the AsyncAPI operation to call."
+                },
+                "server": {
+                  "type": "string",
+                  "title": "WithAsyncAPIServer",
+                  "description": "A a reference to the server to call the specified AsyncAPI operation on. If not set, default to the first server matching the operation's channel."
+                },
+                "message": {
+                  "type": "string",
+                  "title": "WithAsyncAPIMessage",
+                  "description": "The name of the message to use. If not set, defaults to the first message defined by the operation."
+                },
+                "binding": {
+                  "type": "string",
+                  "title": "WithAsyncAPIBinding",
+                  "description": "The name of the binding to use. If not set, defaults to the first binding defined by the operation."
+                },
+                "payload": {
+                  "type": "object",
+                  "title": "WithAsyncAPIPayload",
+                  "description": "The payload to call the AsyncAPI operation with, if any."
+                },
+                "authentication": {
+                  "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                  "title": "WithAsyncAPIAuthentication",
+                  "description": "The authentication policy, if any, to use when calling the AsyncAPI operation."
+                }
+              },
+              "required": [
+                "document",
+                "operationRef"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallGRPC",
+          "description": "Defines the GRPC call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "grpc"
+            },
+            "with": {
+              "type": "object",
+              "title": "GRPCArguments",
+              "description": "The GRPC call arguments.",
+              "properties": {
+                "proto": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithGRPCProto",
+                  "description": "The proto resource that describes the GRPC service to call."
+                },
+                "service": {
+                  "type": "object",
+                  "title": "WithGRPCService",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "name": {
+                      "type": "string",
+                      "title": "WithGRPCServiceName",
+                      "description": "The name of the GRPC service to call."
+                    },
+                    "host": {
+                      "type": "string",
+                      "title": "WithGRPCServiceHost",
+                      "description": "The hostname of the GRPC service to call.",
+                      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
+                    },
+                    "port": {
+                      "type": "integer",
+                      "title": "WithGRPCServicePost",
+                      "description": "The port number of the GRPC service to call.",
+                      "minimum": 0,
+                      "maximum": 65535
+                    },
+                    "authentication": {
+                      "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                      "title": "WithGRPCServiceAuthentication",
+                      "description": "The endpoint's authentication policy, if any."
+                    }
+                  },
+                  "required": [
+                    "name",
+                    "host"
+                  ]
+                },
+                "method": {
+                  "type": "string",
+                  "title": "WithGRPCMethod",
+                  "description": "The name of the method to call on the defined GRPC service."
+                },
+                "arguments": {
+                  "type": "object",
+                  "title": "WithGRPCArguments",
+                  "description": "The arguments, if any, to call the method with.",
+                  "additionalProperties": true
+                }
+              },
+              "required": [
+                "proto",
+                "service",
+                "method"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallHTTP",
+          "description": "Defines the HTTP call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "http"
+            },
+            "with": {
+              "type": "object",
+              "title": "HTTPArguments",
+              "description": "The HTTP call arguments.",
+              "properties": {
+                "method": {
+                  "type": "string",
+                  "title": "WithHTTPMethod",
+                  "description": "The HTTP method of the HTTP request to perform."
+                },
+                "endpoint": {
+                  "title": "WithHTTPEndpoint",
+                  "description": "The HTTP endpoint to send the request to.",
+                  "$ref": "#/$defs/endpoint"
+                },
+                "headers": {
+                  "type": "object",
+                  "title": "WithHTTPHeaders",
+                  "description": "A name/value mapping of the headers, if any, of the HTTP request to perform."
+                },
+                "body": {
+                  "title": "WithHTTPBody",
+                  "description": "The body, if any, of the HTTP request to perform."
+                },
+                "query": {
+                  "type": "object",
+                  "title": "WithHTTPQuery",
+                  "description": "A name/value mapping of the query parameters, if any, of the HTTP request to perform.",
+                  "additionalProperties": true
+                },
+                "output": {
+                  "type": "string",
+                  "title": "WithHTTPOutput",
+                  "description": "The http call output format. Defaults to 'content'.",
+                  "enum": [
+                    "raw",
+                    "content",
+                    "response"
+                  ]
+                }
+              },
+              "required": [
+                "method",
+                "endpoint"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallOpenAPI",
+          "description": "Defines the OpenAPI call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call",
+            "with"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "const": "openapi"
+            },
+            "with": {
+              "type": "object",
+              "title": "OpenAPIArguments",
+              "description": "The OpenAPI call arguments.",
+              "properties": {
+                "document": {
+                  "$ref": "#/$defs/externalResource",
+                  "title": "WithOpenAPIDocument",
+                  "description": "The document that defines the OpenAPI operation to call."
+                },
+                "operationId": {
+                  "type": "string",
+                  "title": "WithOpenAPIOperation",
+                  "description": "The id of the OpenAPI operation to call."
+                },
+                "parameters": {
+                  "type": "object",
+                  "title": "WithOpenAPIParameters",
+                  "description": "A name/value mapping of the parameters of the OpenAPI operation to call.",
+                  "additionalProperties": true
+                },
+                "authentication": {
+                  "$ref": "#/$defs/referenceableAuthenticationPolicy",
+                  "title": "WithOpenAPIAuthentication",
+                  "description": "The authentication policy, if any, to use when calling the OpenAPI operation."
+                },
+                "output": {
+                  "type": "string",
+                  "enum": [
+                    "raw",
+                    "content",
+                    "response"
+                  ],
+                  "title": "WithOpenAPIOutput",
+                  "description": "The http call output format. Defaults to 'content'."
+                }
+              },
+              "required": [
+                "document",
+                "operationId"
+              ],
+              "unevaluatedProperties": false
+            }
+          }
+        },
+        {
+          "title": "CallFunction",
+          "description": "Defines the function call to perform.",
+          "$ref": "#/$defs/taskBase",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "required": [
+            "call"
+          ],
+          "properties": {
+            "call": {
+              "type": "string",
+              "not": {
+                "enum": [
+                  "asyncapi",
+                  "grpc",
+                  "http",
+                  "openapi"
+                ]
+              },
+              "description": "The name of the function to call."
+            },
+            "with": {
+              "type": "object",
+              "title": "FunctionArguments",
+              "description": "A name/value mapping of the parameters, if any, to call the function with.",
+              "additionalProperties": true
+            }
+          }
+        }
+      ]
+    },
+    "forkTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ForkTask",
+      "description": "Allows workflows to execute multiple tasks concurrently and optionally race them against each other, with a single possible winner, which sets the task's output.",
+      "unevaluatedProperties": false,
+      "required": [
+        "fork"
+      ],
+      "properties": {
+        "fork": {
+          "type": "object",
+          "title": "ForkTaskConfiguration",
+          "description": "The configuration of the branches to perform concurrently.",
+          "unevaluatedProperties": false,
+          "required": [
+            "branches"
+          ],
+          "properties": {
+            "branches": {
+              "$ref": "#/$defs/taskList",
+              "title": "ForkBranches"
+            },
+            "compete": {
+              "type": "boolean",
+              "title": "ForkCompete",
+              "description": "Indicates whether or not the concurrent tasks are racing against each other, with a single possible winner, which sets the composite task's output.",
+              "default": false
+            }
+          }
+        }
+      }
+    },
+    "doTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "DoTask",
+      "description": "Allows to execute a list of tasks in sequence.",
+      "unevaluatedProperties": false,
+      "required": [
+        "do"
+      ],
+      "properties": {
+        "do": {
+          "$ref": "#/$defs/taskList",
+          "title": "DoTaskConfiguration",
+          "description": "The configuration of the tasks to perform sequentially."
+        }
+      }
+    },
+    "emitTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "EmitTask",
+      "description": "Allows workflows to publish events to event brokers or messaging systems, facilitating communication and coordination between different components and services.",
+      "required": [
+        "emit"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "emit": {
+          "type": "object",
+          "title": "EmitTaskConfiguration",
+          "description": "The configuration of an event's emission.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "event": {
+              "type": "object",
+              "title": "EmitEventDefinition",
+              "description": "The definition of the event to emit.",
+              "properties": {
+                "with": {
+                  "$ref": "#/$defs/eventProperties",
+                  "title": "EmitEventWith",
+                  "description": "Defines the properties of event to emit.",
+                  "required": [
+                    "source",
+                    "type"
+                  ]
+                }
+              },
+              "additionalProperties": true
+            }
+          },
+          "required": [
+            "event"
+          ]
+        }
+      }
+    },
+    "forTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ForTask",
+      "description": "Allows workflows to iterate over a collection of items, executing a defined set of subtasks for each item in the collection. This task type is instrumental in handling scenarios such as batch processing, data transformation, and repetitive operations across datasets.",
+      "required": [
+        "for",
+        "do"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "for": {
+          "type": "object",
+          "title": "ForTaskConfiguration",
+          "description": "The definition of the loop that iterates over a range of values.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "each": {
+              "type": "string",
+              "title": "ForEach",
+              "description": "The name of the variable used to store the current item being enumerated.",
+              "default": "item"
+            },
+            "in": {
+              "type": "string",
+              "title": "ForIn",
+              "description": "A runtime expression used to get the collection to enumerate."
+            },
+            "at": {
+              "type": "string",
+              "title": "ForAt",
+              "description": "The name of the variable used to store the index of the current item being enumerated.",
+              "default": "index"
+            }
+          },
+          "required": [
+            "in"
+          ]
+        },
+        "while": {
+          "type": "string",
+          "title": "While",
+          "description": "A runtime expression that represents the condition, if any, that must be met for the iteration to continue."
+        },
+        "do": {
+          "$ref": "#/$defs/taskList",
+          "title": "ForTaskDo"
+        }
+      }
+    },
+    "listenTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "ListenTask",
+      "description": "Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.",
+      "required": [
+        "listen"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "listen": {
+          "type": "object",
+          "title": "ListenTaskConfiguration",
+          "description": "The configuration of the listener to use.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "to": {
+              "$ref": "#/$defs/eventConsumptionStrategy",
+              "title": "ListenTo",
+              "description": "Defines the event(s) to listen to."
+            }
+          },
+          "required": [
+            "to"
+          ]
+        }
+      }
+    },
+    "raiseTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "RaiseTask",
+      "description": "Intentionally triggers and propagates errors.",
+      "required": [
+        "raise"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "raise": {
+          "type": "object",
+          "title": "RaiseTaskConfiguration",
+          "description": "The definition of the error to raise.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "error": {
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/error",
+                  "title": "RaiseErrorDefinition",
+                  "description": "Defines the error to raise."
+                },
+                {
+                  "type": "string",
+                  "title": "RaiseErrorReference",
+                  "description": "The name of the error to raise"
+                }
+              ]
+            }
+          },
+          "required": [
+            "error"
+          ]
+        }
+      }
+    },
+    "runTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "RunTask",
+      "description": "Provides the capability to execute external containers, shell commands, scripts, or workflows.",
+      "required": [
+        "run"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "run": {
+          "type": "object",
+          "title": "RunTaskConfiguration",
+          "description": "The configuration of the process to execute.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "await": {
+              "type": "boolean",
+              "default": true,
+              "title": "AwaitProcessCompletion",
+              "description": "Whether to await the process completion before continuing."
+            }
+          },
+          "oneOf": [
+            {
+              "title": "RunContainer",
+              "description": "Enables the execution of external processes encapsulated within a containerized environment.",
+              "properties": {
+                "container": {
+                  "type": "object",
+                  "title": "Container",
+                  "description": "The configuration of the container to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "image": {
+                      "type": "string",
+                      "title": "ContainerImage",
+                      "description": "The name of the container image to run."
+                    },
+                    "command": {
+                      "type": "string",
+                      "title": "ContainerCommand",
+                      "description": "The command, if any, to execute on the container."
+                    },
+                    "ports": {
+                      "type": "object",
+                      "title": "ContainerPorts",
+                      "description": "The container's port mappings, if any."
+                    },
+                    "volumes": {
+                      "type": "object",
+                      "title": "ContainerVolumes",
+                      "description": "The container's volume mappings, if any."
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ContainerEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured process."
+                    }
+                  },
+                  "required": [
+                    "image"
+                  ]
+                }
+              },
+              "required": [
+                "container"
+              ]
+            },
+            {
+              "title": "RunScript",
+              "description": "Enables the execution of custom scripts or code within a workflow, empowering workflows to perform specialized logic, data processing, or integration tasks by executing user-defined scripts written in various programming languages.",
+              "properties": {
+                "script": {
+                  "type": "object",
+                  "title": "Script",
+                  "description": "The configuration of the script to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "language": {
+                      "type": "string",
+                      "title": "ScriptLanguage",
+                      "description": "The language of the script to run."
+                    },
+                    "arguments": {
+                      "type": "object",
+                      "title": "ScriptArguments",
+                      "description": "A key/value mapping of the arguments, if any, to use when running the configured script.",
+                      "additionalProperties": true
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ScriptEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured script process.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "oneOf": [
+                    {
+                      "title": "InlineScript",
+                      "type": "object",
+                      "description": "The script's code.",
+                      "properties": {
+                        "code": {
+                          "type": "string",
+                          "title": "InlineScriptCode"
+                        }
+                      },
+                      "required": [
+                        "code"
+                      ]
+                    },
+                    {
+                      "title": "ExternalScript",
+                      "type": "object",
+                      "description": "The script's resource.",
+                      "properties": {
+                        "source": {
+                          "$ref": "#/$defs/externalResource",
+                          "title": "ExternalScriptResource"
+                        }
+                      },
+                      "required": [
+                        "source"
+                      ]
+                    }
+                  ],
+                  "required": [
+                    "language"
+                  ]
+                }
+              },
+              "required": [
+                "script"
+              ]
+            },
+            {
+              "title": "RunShell",
+              "description": "Enables the execution of shell commands within a workflow, enabling workflows to interact with the underlying operating system and perform system-level operations, such as file manipulation, environment configuration, or system administration tasks.",
+              "properties": {
+                "shell": {
+                  "type": "object",
+                  "title": "Shell",
+                  "description": "The configuration of the shell command to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "command": {
+                      "type": "string",
+                      "title": "ShellCommand",
+                      "description": "The shell command to run."
+                    },
+                    "arguments": {
+                      "type": "object",
+                      "title": "ShellArguments",
+                      "description": "A list of the arguments of the shell command to run.",
+                      "additionalProperties": true
+                    },
+                    "environment": {
+                      "type": "object",
+                      "title": "ShellEnvironment",
+                      "description": "A key/value mapping of the environment variables, if any, to use when running the configured process.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "required": [
+                    "command"
+                  ]
+                }
+              },
+              "required": [
+                "shell"
+              ]
+            },
+            {
+              "title": "RunWorkflow",
+              "description": "Enables the invocation and execution of nested workflows within a parent workflow, facilitating modularization, reusability, and abstraction of complex logic or business processes by encapsulating them into standalone workflow units.",
+              "properties": {
+                "workflow": {
+                  "type": "object",
+                  "title": "SubflowConfiguration",
+                  "description": "The configuration of the workflow to run.",
+                  "unevaluatedProperties": false,
+                  "properties": {
+                    "namespace": {
+                      "type": "string",
+                      "title": "SubflowNamespace",
+                      "description": "The namespace the workflow to run belongs to."
+                    },
+                    "name": {
+                      "type": "string",
+                      "title": "SubflowName",
+                      "description": "The name of the workflow to run."
+                    },
+                    "version": {
+                      "type": "string",
+                      "default": "latest",
+                      "title": "SubflowVersion",
+                      "description": "The version of the workflow to run. Defaults to latest."
+                    },
+                    "input": {
+                      "type": "object",
+                      "title": "SubflowInput",
+                      "description": "The data, if any, to pass as input to the workflow to execute. The value should be validated against the target workflow's input schema, if specified.",
+                      "additionalProperties": true
+                    }
+                  },
+                  "required": [
+                    "namespace",
+                    "name",
+                    "version"
+                  ]
+                }
+              },
+              "required": [
+                "workflow"
+              ]
+            }
+          ]
+        }
+      }
+    },
+    "setTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "SetTask",
+      "description": "A task used to set data.",
+      "required": [
+        "set"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "set": {
+          "type": "object",
+          "title": "SetTaskConfiguration",
+          "description": "The data to set.",
+          "minProperties": 1,
+          "additionalProperties": true
+        }
+      }
+    },
+    "switchTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "SwitchTask",
+      "description": "Enables conditional branching within workflows, allowing them to dynamically select different paths based on specified conditions or criteria.",
+      "required": [
+        "switch"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "switch": {
+          "type": "array",
+          "title": "SwitchTaskConfiguration",
+          "description": "The definition of the switch to use.",
+          "minItems": 1,
+          "items": {
+            "type": "object",
+            "title": "SwitchItem",
+            "minProperties": 1,
+            "maxProperties": 1,
+            "additionalProperties": {
+              "type": "object",
+              "title": "SwitchCase",
+              "description": "The definition of a case within a switch task, defining a condition and corresponding tasks to execute if the condition is met.",
+              "unevaluatedProperties": false,
+              "required": [
+                "then"
+              ],
+              "properties": {
+                "when": {
+                  "type": "string",
+                  "title": "SwitchCaseCondition",
+                  "description": "A runtime expression used to determine whether or not the case matches."
+                },
+                "then": {
+                  "$ref": "#/$defs/flowDirective",
+                  "title": "SwitchCaseOutcome",
+                  "description": "The flow directive to execute when the case matches."
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "tryTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "TryTask",
+      "description": "Serves as a mechanism within workflows to handle errors gracefully, potentially retrying failed tasks before proceeding with alternate ones.",
+      "required": [
+        "try",
+        "catch"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "try": {
+          "$ref": "#/$defs/taskList",
+          "title": "TryTaskConfiguration",
+          "description": "The task(s) to perform."
+        },
+        "catch": {
+          "type": "object",
+          "title": "TryTaskCatch",
+          "description": "The object used to define the errors to catch.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "errors": {
+              "type": "object",
+              "title": "CatchErrors",
+              "description": "The configuration of a concept used to catch errors."
+            },
+            "as": {
+              "type": "string",
+              "title": "CatchAs",
+              "description": "The name of the runtime expression variable to save the error as. Defaults to 'error'."
+            },
+            "when": {
+              "type": "string",
+              "title": "CatchWhen",
+              "description": "A runtime expression used to determine whether or not to catch the filtered error."
+            },
+            "exceptWhen": {
+              "type": "string",
+              "title": "CatchExceptWhen",
+              "description": "A runtime expression used to determine whether or not to catch the filtered error."
+            },
+            "retry": {
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/retryPolicy",
+                  "title": "RetryPolicyDefinition",
+                  "description": "The retry policy to use, if any, when catching errors."
+                },
+                {
+                  "type": "string",
+                  "title": "RetryPolicyReference",
+                  "description": "The name of the retry policy to use, if any, when catching errors."
+                }
+              ]
+            },
+            "do": {
+              "$ref": "#/$defs/taskList",
+              "title": "TryTaskCatchDo",
+              "description": "The definition of the task(s) to run when catching an error."
+            }
+          }
+        }
+      }
+    },
+    "waitTask": {
+      "type": "object",
+      "$ref": "#/$defs/taskBase",
+      "title": "WaitTask",
+      "description": "Allows workflows to pause or delay their execution for a specified period of time.",
+      "required": [
+        "wait"
+      ],
+      "unevaluatedProperties": false,
+      "properties": {
+        "wait": {
+          "$ref": "#/$defs/duration",
+          "title": "WaitTaskConfiguration",
+          "description": "The amount of time to wait."
+        }
+      }
+    },
+    "flowDirective": {
+      "title": "FlowDirective",
+      "description": "Represents different transition options for a workflow.",
+      "anyOf": [
+        {
+          "type": "string",
+          "enum": [
+            "continue",
+            "exit",
+            "end"
+          ],
+          "default": "continue"
+        },
+        {
+          "type": "string"
+        }
+      ]
+    },
+    "referenceableAuthenticationPolicy": {
+      "type": "object",
+      "title": "ReferenceableAuthenticationPolicy",
+      "description": "Represents a referenceable authentication policy.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "title": "AuthenticationPolicyReference",
+          "description": "The reference of the authentication policy to use.",
+          "properties": {
+            "use": {
+              "type": "string",
+              "minLength": 1,
+              "title": "ReferenceableAuthenticationPolicyName",
+              "description": "The name of the authentication policy to use."
+            }
+          },
+          "required": [
+            "use"
+          ]
+        },
+        {
+          "$ref": "#/$defs/authenticationPolicy"
+        }
+      ]
+    },
+    "secretBasedAuthenticationPolicy": {
+      "type": "object",
+      "title": "SecretBasedAuthenticationPolicy",
+      "description": "Represents an authentication policy based on secrets.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "use": {
+          "type": "string",
+          "minLength": 1,
+          "title": "SecretBasedAuthenticationPolicyName",
+          "description": "The name of the authentication policy to use."
+        }
+      },
+      "required": [
+        "use"
+      ]
+    },
+    "authenticationPolicy": {
+      "type": "object",
+      "title": "AuthenticationPolicy",
+      "description": "Defines an authentication policy.",
+      "oneOf": [
+        {
+          "title": "BasicAuthenticationPolicy",
+          "description": "Use basic authentication.",
+          "properties": {
+            "basic": {
+              "type": "object",
+              "title": "BasicAuthenticationPolicyConfiguration",
+              "description": "The configuration of the basic authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "BasicAuthenticationProperties",
+                  "description": "Inline configuration of the basic authentication policy.",
+                  "properties": {
+                    "username": {
+                      "type": "string",
+                      "description": "The username to use."
+                    },
+                    "password": {
+                      "type": "string",
+                      "description": "The password to use."
+                    }
+                  },
+                  "required": [
+                    "username",
+                    "password"
+                  ]
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "BasicAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the basic authentication policy."
+                }
+              ]
+            }
+          },
+          "required": [
+            "basic"
+          ]
+        },
+        {
+          "title": "BearerAuthenticationPolicy",
+          "description": "Use bearer authentication.",
+          "properties": {
+            "bearer": {
+              "type": "object",
+              "title": "BearerAuthenticationPolicyConfiguration",
+              "description": "The configuration of the bearer authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "BearerAuthenticationProperties",
+                  "description": "Inline configuration of the bearer authentication policy.",
+                  "properties": {
+                    "token": {
+                      "type": "string",
+                      "description": "The bearer token to use."
+                    }
+                  },
+                  "required": [
+                    "token"
+                  ]
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "BearerAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the bearer authentication policy."
+                }
+              ]
+            }
+          },
+          "required": [
+            "bearer"
+          ]
+        },
+        {
+          "title": "DigestAuthenticationPolicy",
+          "description": "Use digest authentication.",
+          "properties": {
+            "digest": {
+              "type": "object",
+              "title": "DigestAuthenticationPolicyConfiguration",
+              "description": "The configuration of the digest authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "title": "DigestAuthenticationProperties",
+                  "description": "Inline configuration of the digest authentication policy.",
+                  "properties": {
+                    "username": {
+                      "type": "string",
+                      "description": "The username to use."
+                    },
+                    "password": {
+                      "type": "string",
+                      "description": "The password to use."
+                    }
+                  },
+                  "required": [
+                    "username",
+                    "password"
+                  ]
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "DigestAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the digest authentication policy."
+                }
+              ]
+            }
+          },
+          "required": [
+            "digest"
+          ]
+        },
+        {
+          "title": "OAuth2AuthenticationPolicy",
+          "description": "Use OAuth2 authentication.",
+          "properties": {
+            "oauth2": {
+              "type": "object",
+              "title": "OAuth2AuthenticationPolicyConfiguration",
+              "description": "The configuration of the OAuth2 authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "type": "object",
+                  "title": "OAuth2ConnectAuthenticationProperties",
+                  "description": "The inline configuration of the OAuth2 authentication policy.",
+                  "unevaluatedProperties": false,
+                  "allOf": [
+                    {
+                      "$ref": "#/$defs/oauth2AuthenticationProperties"
+                    },
+                    {
+                      "type": "object",
+                      "properties": {
+                        "endpoints": {
+                          "type": "object",
+                          "title": "OAuth2AuthenticationPropertiesEndpoints",
+                          "description": "The endpoint configurations for OAuth2.",
+                          "properties": {
+                            "token": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/token",
+                              "title": "OAuth2TokenEndpoint",
+                              "description": "The relative path to the token endpoint. Defaults to `/oauth2/token`."
+                            },
+                            "revocation": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/revoke",
+                              "title": "OAuth2RevocationEndpoint",
+                              "description": "The relative path to the revocation endpoint. Defaults to `/oauth2/revoke`."
+                            },
+                            "introspection": {
+                              "type": "string",
+                              "format": "uri-template",
+                              "default": "/oauth2/introspect",
+                              "title": "OAuth2IntrospectionEndpoint",
+                              "description": "The relative path to the introspection endpoint. Defaults to `/oauth2/introspect`."
+                            }
+                          }
+                        }
+                      }
+                    }
+                  ]
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "OAuth2AuthenticationPolicySecret",
+                  "description": "Secret based configuration of the OAuth2 authentication policy."
+                }
+              ]
+            }
+          },
+          "required": [
+            "oauth2"
+          ]
+        },
+        {
+          "title": "OpenIdConnectAuthenticationPolicy",
+          "description": "Use OpenIdConnect authentication.",
+          "properties": {
+            "oidc": {
+              "type": "object",
+              "title": "OpenIdConnectAuthenticationPolicyConfiguration",
+              "description": "The configuration of the OpenIdConnect authentication policy.",
+              "unevaluatedProperties": false,
+              "oneOf": [
+                {
+                  "$ref": "#/$defs/oauth2AuthenticationProperties",
+                  "title": "OpenIdConnectAuthenticationProperties",
+                  "description": "The inline configuration of the OpenIdConnect authentication policy.",
+                  "unevaluatedProperties": false
+                },
+                {
+                  "$ref": "#/$defs/secretBasedAuthenticationPolicy",
+                  "title": "OpenIdConnectAuthenticationPolicySecret",
+                  "description": "Secret based configuration of the OpenIdConnect authentication policy."
+                }
+              ]
+            }
+          },
+          "required": [
+            "oidc"
+          ]
+        }
+      ]
+    },
+    "oauth2AuthenticationProperties": {
+      "type": "object",
+      "title": "OAuth2AutenthicationData",
+      "description": "Inline configuration of the OAuth2 authentication policy.",
+      "properties": {
+        "authority": {
+          "$ref": "#/$defs/uriTemplate",
+          "title": "OAuth2AutenthicationDataAuthority",
+          "description": "The URI that references the OAuth2 authority to use."
+        },
+        "grant": {
+          "type": "string",
+          "enum": [
+            "authorization_code",
+            "client_credentials",
+            "password",
+            "refresh_token",
+            "urn:ietf:params:oauth:grant-type:token-exchange"
+          ],
+          "title": "OAuth2AutenthicationDataGrant",
+          "description": "The grant type to use."
+        },
+        "client": {
+          "type": "object",
+          "title": "OAuth2AutenthicationDataClient",
+          "description": "The definition of an OAuth2 client.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "id": {
+              "type": "string",
+              "title": "ClientId",
+              "description": "The client id to use."
+            },
+            "secret": {
+              "type": "string",
+              "title": "ClientSecret",
+              "description": "The client secret to use, if any."
+            },
+            "assertion": {
+              "type": "string",
+              "title": "ClientAssertion",
+              "description": "A JWT containing a signed assertion with your application credentials."
+            },
+            "authentication": {
+              "type": "string",
+              "enum": [
+                "client_secret_basic",
+                "client_secret_post",
+                "client_secret_jwt",
+                "private_key_jwt",
+                "none"
+              ],
+              "default": "client_secret_post",
+              "title": "ClientAuthentication",
+              "description": "The authentication method to use to authenticate the client."
+            }
+          }
+        },
+        "request": {
+          "type": "object",
+          "title": "OAuth2TokenRequest",
+          "description": "The configuration of an OAuth2 token request",
+          "properties": {
+            "encoding": {
+              "type": "string",
+              "enum": [
+                "application/x-www-form-urlencoded",
+                "application/json"
+              ],
+              "default": "application/x-www-form-urlencoded",
+              "title": "Oauth2TokenRequestEncoding"
+            }
+          }
+        },
+        "issuers": {
+          "type": "array",
+          "title": "OAuth2Issuers",
+          "description": "A list that contains that contains valid issuers that will be used to check against the issuer of generated tokens.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "scopes": {
+          "type": "array",
+          "title": "OAuth2AutenthicationDataScopes",
+          "description": "The scopes, if any, to request the token for.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "audiences": {
+          "type": "array",
+          "title": "OAuth2AutenthicationDataAudiences",
+          "description": "The audiences, if any, to request the token for.",
+          "items": {
+            "type": "string"
+          }
+        },
+        "username": {
+          "type": "string",
+          "title": "OAuth2AutenthicationDataUsername",
+          "description": "The username to use. Used only if the grant type is Password."
+        },
+        "password": {
+          "type": "string",
+          "title": "OAuth2AutenthicationDataPassword",
+          "description": "The password to use. Used only if the grant type is Password."
+        },
+        "subject": {
+          "$ref": "#/$defs/oauth2Token",
+          "title": "OAuth2AutenthicationDataSubject",
+          "description": "The security token that represents the identity of the party on behalf of whom the request is being made."
+        },
+        "actor": {
+          "$ref": "#/$defs/oauth2Token",
+          "title": "OAuth2AutenthicationDataActor",
+          "description": "The security token that represents the identity of the acting party."
+        }
+      }
+    },
+    "oauth2Token": {
+      "type": "object",
+      "title": "OAuth2TokenDefinition",
+      "description": "Represents an OAuth2 token.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "token": {
+          "type": "string",
+          "title": "OAuth2Token",
+          "description": "The security token to use."
+        },
+        "type": {
+          "type": "string",
+          "title": "OAuth2TokenType",
+          "description": "The type of the security token to use."
+        }
+      },
+      "required": [
+        "token",
+        "type"
+      ]
+    },
+    "duration": {
+      "oneOf": [
+        {
+          "type": "object",
+          "minProperties": 1,
+          "unevaluatedProperties": false,
+          "properties": {
+            "days": {
+              "type": "integer",
+              "title": "DurationDays",
+              "description": "Number of days, if any."
+            },
+            "hours": {
+              "type": "integer",
+              "title": "DurationHours",
+              "description": "Number of days, if any."
+            },
+            "minutes": {
+              "type": "integer",
+              "title": "DurationMinutes",
+              "description": "Number of minutes, if any."
+            },
+            "seconds": {
+              "type": "integer",
+              "title": "DurationSeconds",
+              "description": "Number of seconds, if any."
+            },
+            "milliseconds": {
+              "type": "integer",
+              "title": "DurationMilliseconds",
+              "description": "Number of milliseconds, if any."
+            }
+          },
+          "title": "DurationInline",
+          "description": "The inline definition of a duration."
+        },
+        {
+          "type": "string",
+          "pattern": "^P(?!$)(\\d+(?:\\.\\d+)?Y)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?W)?(\\d+(?:\\.\\d+)?D)?(T(?=\\d)(\\d+(?:\\.\\d+)?H)?(\\d+(?:\\.\\d+)?M)?(\\d+(?:\\.\\d+)?S)?)?$",
+          "title": "DurationExpression",
+          "description": "The ISO 8601 expression of a duration."
+        }
+      ]
+    },
+    "error": {
+      "type": "object",
+      "title": "Error",
+      "description": "Represents an error.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "type": {
+          "title": "ErrorType",
+          "description": "A URI reference that identifies the error type.",
+          "oneOf": [
+            {
+              "title": "LiteralErrorType",
+              "$ref": "#/$defs/uriTemplate",
+              "description": "The literal error type."
+            },
+            {
+              "title": "ExpressionErrorType",
+              "$ref": "#/$defs/runtimeExpression",
+              "description": "An expression based error type."
+            }
+          ]
+        },
+        "status": {
+          "type": "integer",
+          "title": "ErrorStatus",
+          "description": "The status code generated by the origin for this occurrence of the error."
+        },
+        "instance": {
+          "title": "ErrorInstance",
+          "description": "A JSON Pointer used to reference the component the error originates from.",
+          "oneOf": [
+            {
+              "title": "LiteralErrorInstance",
+              "description": "The literal error instance.",
+              "type": "string",
+              "format": "json-pointer"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression",
+              "title": "ExpressionErrorInstance",
+              "description": "An expression based error instance."
+            }
+          ]
+        },
+        "title": {
+          "type": "string",
+          "title": "ErrorTitle",
+          "description": "A short, human-readable summary of the error."
+        },
+        "detail": {
+          "type": "string",
+          "title": "ErrorDetails",
+          "description": "A human-readable explanation specific to this occurrence of the error."
+        }
+      },
+      "required": [
+        "type",
+        "status"
+      ]
+    },
+    "uriTemplate": {
+      "title": "UriTemplate",
+      "anyOf": [
+        {
+          "title": "LiteralUriTemplate",
+          "type": "string",
+          "format": "uri-template",
+          "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*"
+        },
+        {
+          "title": "LiteralUri",
+          "type": "string",
+          "format": "uri",
+          "pattern": "^[A-Za-z][A-Za-z0-9+\\-.]*://.*"
+        }
+      ]
+    },
+    "endpoint": {
+      "title": "Endpoint",
+      "description": "Represents an endpoint.",
+      "oneOf": [
+        {
+          "$ref": "#/$defs/runtimeExpression"
+        },
+        {
+          "$ref": "#/$defs/uriTemplate"
+        },
+        {
+          "title": "EndpointConfiguration",
+          "type": "object",
+          "unevaluatedProperties": false,
+          "properties": {
+            "uri": {
+              "title": "EndpointUri",
+              "description": "The endpoint's URI.",
+              "oneOf": [
+                {
+                  "title": "LiteralEndpointURI",
+                  "description": "The literal endpoint's URI.",
+                  "$ref": "#/$defs/uriTemplate"
+                },
+                {
+                  "title": "ExpressionEndpointURI",
+                  "$ref": "#/$defs/runtimeExpression",
+                  "description": "An expression based endpoint's URI."
+                }
+              ]
+            },
+            "authentication": {
+              "$ref": "#/$defs/referenceableAuthenticationPolicy",
+              "title": "EndpointAuthentication",
+              "description": "The authentication policy to use."
+            }
+          },
+          "required": [
+            "uri"
+          ]
+        }
+      ]
+    },
+    "eventProperties": {
+      "type": "object",
+      "title": "EventProperties",
+      "description": "Describes the properties of an event.",
+      "properties": {
+        "id": {
+          "type": "string",
+          "title": "EventId",
+          "description": "The event's unique identifier."
+        },
+        "source": {
+          "title": "EventSource",
+          "description": "Identifies the context in which an event happened.",
+          "oneOf": [
+            {
+              "$ref": "#/$defs/uriTemplate"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression"
+            }
+          ]
+        },
+        "type": {
+          "type": "string",
+          "title": "EventType",
+          "description": "This attribute contains a value describing the type of event related to the originating occurrence."
+        },
+        "time": {
+          "title": "EventTime",
+          "description": "When the event occured.",
+          "oneOf": [
+            {
+              "title": "LiteralTime",
+              "type": "string",
+              "format": "date-time"
+            },
+            {
+              "$ref": "#/$defs/runtimeExpression"
+            }
+          ]
+        },
+        "subject": {
+          "type": "string",
+          "title": "EventSubject",
+          "description": "The subject of the event."
+        },
+        "datacontenttype": {
+          "type": "string",
+          "title": "EventDataContentType",
+          "description": "Content type of data value. This attribute enables data to carry any type of content, whereby format and encoding might differ from that of the chosen event format."
+        },
+        "dataschema": {
+          "title": "EventDataschema",
+          "description": "The schema describing the event format.",
+          "oneOf": [
+            {
+              "title": "LiteralDataSchema",
+              "$ref": "#/$defs/uriTemplate",
+              "description": "The literal event data schema."
+            },
+            {
+              "title": "ExpressionDataSchema",
+              "$ref": "#/$defs/runtimeExpression",
+              "description": "An expression based event data schema."
+            }
+          ]
+        }
+      },
+      "additionalProperties": true
+    },
+    "eventConsumptionStrategy": {
+      "type": "object",
+      "title": "EventConsumptionStrategy",
+      "description": "Describe the event consumption strategy to adopt.",
+      "unevaluatedProperties": false,
+      "oneOf": [
+        {
+          "title": "AllEventConsumptionStrategy",
+          "properties": {
+            "all": {
+              "type": "array",
+              "title": "AllEventConsumptionStrategyConfiguration",
+              "description": "A list containing all the events that must be consumed.",
+              "items": {
+                "$ref": "#/$defs/eventFilter"
+              }
+            }
+          },
+          "required": [
+            "all"
+          ]
+        },
+        {
+          "title": "AnyEventConsumptionStrategy",
+          "properties": {
+            "any": {
+              "type": "array",
+              "title": "AnyEventConsumptionStrategyConfiguration",
+              "description": "A list containing any of the events to consume.",
+              "items": {
+                "$ref": "#/$defs/eventFilter"
+              }
+            }
+          },
+          "required": [
+            "any"
+          ]
+        },
+        {
+          "title": "OneEventConsumptionStrategy",
+          "properties": {
+            "one": {
+              "$ref": "#/$defs/eventFilter",
+              "title": "OneEventConsumptionStrategyConfiguration",
+              "description": "The single event to consume."
+            }
+          },
+          "required": [
+            "one"
+          ]
+        }
+      ]
+    },
+    "eventFilter": {
+      "type": "object",
+      "title": "EventFilter",
+      "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "with": {
+          "$ref": "#/$defs/eventProperties",
+          "minProperties": 1,
+          "title": "WithEvent",
+          "description": "An event filter is a mechanism used to selectively process or handle events based on predefined criteria, such as event type, source, or specific attributes."
+        },
+        "correlate": {
+          "type": "object",
+          "title": "EventFilterCorrelate",
+          "description": "A correlation is a link between events and data, established by mapping event attributes to specific data attributes, allowing for coordinated processing or handling based on event characteristics.",
+          "additionalProperties": {
+            "type": "object",
+            "properties": {
+              "from": {
+                "type": "string",
+                "title": "CorrelateFrom",
+                "description": "A runtime expression used to extract the correlation value from the filtered event."
+              },
+              "expect": {
+                "type": "string",
+                "title": "CorrelateExpect",
+                "description": "A constant or a runtime expression, if any, used to determine whether or not the extracted correlation value matches expectations. If not set, the first extracted value will be used as the correlation's expectation."
+              }
+            },
+            "required": [
+              "from"
+            ]
+          }
+        }
+      },
+      "required": [
+        "with"
+      ]
+    },
+    "extension": {
+      "type": "object",
+      "title": "Extension",
+      "description": "The definition of an extension.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "extend": {
+          "type": "string",
+          "enum": [
+            "call",
+            "composite",
+            "emit",
+            "for",
+            "listen",
+            "raise",
+            "run",
+            "set",
+            "switch",
+            "try",
+            "wait",
+            "all"
+          ],
+          "title": "ExtensionTarget",
+          "description": "The type of task to extend."
+        },
+        "when": {
+          "type": "string",
+          "title": "ExtensionCondition",
+          "description": "A runtime expression, if any, used to determine whether or not the extension should apply in the specified context."
+        },
+        "before": {
+          "$ref": "#/$defs/taskList",
+          "title": "ExtensionDoBefore",
+          "description": "The task(s) to execute before the extended task, if any."
+        },
+        "after": {
+          "$ref": "#/$defs/taskList",
+          "title": "ExtensionDoAfter",
+          "description": "The task(s) to execute after the extended task, if any."
+        }
+      },
+      "required": [
+        "extend"
+      ]
+    },
+    "externalResource": {
+      "type": "object",
+      "title": "ExternalResource",
+      "description": "Represents an external resource.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "name": {
+          "type": "string",
+          "title": "ExternalResourceName",
+          "description": "The name of the external resource, if any."
+        },
+        "endpoint": {
+          "$ref": "#/$defs/endpoint",
+          "title": "ExternalResourceEndpoint",
+          "description": "The endpoint of the external resource."
+        }
+      },
+      "required": [
+        "endpoint"
+      ]
+    },
+    "input": {
+      "type": "object",
+      "title": "Input",
+      "description": "Configures the input of a workflow or task.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "InputSchema",
+          "description": "The schema used to describe and validate the input of the workflow or task."
+        },
+        "from": {
+          "title": "InputFrom",
+          "description": "A runtime expression, if any, used to mutate and/or filter the input of the workflow or task.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "output": {
+      "type": "object",
+      "title": "Output",
+      "description": "Configures the output of a workflow or task.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "OutputSchema",
+          "description": "The schema used to describe and validate the output of the workflow or task."
+        },
+        "as": {
+          "title": "OutputAs",
+          "description": "A runtime expression, if any, used to mutate and/or filter the output of the workflow or task.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "export": {
+      "type": "object",
+      "title": "Export",
+      "description": "Set the content of the context. .",
+      "unevaluatedProperties": false,
+      "properties": {
+        "schema": {
+          "$ref": "#/$defs/schema",
+          "title": "ExportSchema",
+          "description": "The schema used to describe and validate the workflow context."
+        },
+        "as": {
+          "title": "ExportAs",
+          "description": "A runtime expression, if any, used to export the output data to the context.",
+          "oneOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "object"
+            }
+          ]
+        }
+      }
+    },
+    "retryPolicy": {
+      "type": "object",
+      "title": "RetryPolicy",
+      "description": "Defines a retry policy.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "when": {
+          "type": "string",
+          "title": "RetryWhen",
+          "description": "A runtime expression, if any, used to determine whether or not to retry running the task, in a given context."
+        },
+        "exceptWhen": {
+          "type": "string",
+          "title": "RetryExcepWhen",
+          "description": "A runtime expression used to determine whether or not to retry running the task, in a given context."
+        },
+        "delay": {
+          "$ref": "#/$defs/duration",
+          "title": "RetryDelay",
+          "description": "The duration to wait between retry attempts."
+        },
+        "backoff": {
+          "type": "object",
+          "title": "RetryBackoff",
+          "description": "The retry duration backoff.",
+          "unevaluatedProperties": false,
+          "oneOf": [
+            {
+              "title": "ConstantBackoff",
+              "properties": {
+                "constant": {
+                  "type": "object",
+                  "description": "The definition of the constant backoff to use, if any."
+                }
+              },
+              "required": [
+                "constant"
+              ]
+            },
+            {
+              "title": "ExponentialBackOff",
+              "properties": {
+                "exponential": {
+                  "type": "object",
+                  "description": "The definition of the exponential backoff to use, if any."
+                }
+              },
+              "required": [
+                "exponential"
+              ]
+            },
+            {
+              "title": "LinearBackoff",
+              "properties": {
+                "linear": {
+                  "type": "object",
+                  "description": "The definition of the linear backoff to use, if any."
+                }
+              },
+              "required": [
+                "linear"
+              ]
+            }
+          ]
+        },
+        "limit": {
+          "type": "object",
+          "title": "RetryLimit",
+          "unevaluatedProperties": false,
+          "properties": {
+            "attempt": {
+              "type": "object",
+              "title": "RetryLimitAttempt",
+              "unevaluatedProperties": false,
+              "properties": {
+                "count": {
+                  "type": "integer",
+                  "title": "RetryLimitAttemptCount",
+                  "description": "The maximum amount of retry attempts, if any."
+                },
+                "duration": {
+                  "$ref": "#/$defs/duration",
+                  "title": "RetryLimitAttemptDuration",
+                  "description": "The maximum duration for each retry attempt."
+                }
+              }
+            },
+            "duration": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryLimitDuration",
+              "description": "The duration limit, if any, for all retry attempts."
+            }
+          },
+          "description": "The retry limit, if any."
+        },
+        "jitter": {
+          "type": "object",
+          "title": "RetryPolicyJitter",
+          "description": "The parameters, if any, that control the randomness or variability of the delay between retry attempts.",
+          "unevaluatedProperties": false,
+          "properties": {
+            "from": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryPolicyJitterFrom",
+              "description": "The minimum duration of the jitter range."
+            },
+            "to": {
+              "$ref": "#/$defs/duration",
+              "title": "RetryPolicyJitterTo",
+              "description": "The maximum duration of the jitter range."
+            }
+          },
+          "required": [
+            "from",
+            "to"
+          ]
+        }
+      }
+    },
+    "schema": {
+      "type": "object",
+      "title": "Schema",
+      "description": "Represents the definition of a schema.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "format": {
+          "type": "string",
+          "default": "json",
+          "title": "SchemaFormat",
+          "description": "The schema's format. Defaults to 'json'. The (optional) version of the format can be set using `{format}:{version}`."
+        }
+      },
+      "oneOf": [
+        {
+          "title": "SchemaInline",
+          "properties": {
+            "document": {
+              "description": "The schema's inline definition."
+            }
+          },
+          "required": [
+            "document"
+          ]
+        },
+        {
+          "title": "SchemaExternal",
+          "properties": {
+            "resource": {
+              "$ref": "#/$defs/externalResource",
+              "title": "SchemaExternalResource",
+              "description": "The schema's external resource."
+            }
+          },
+          "required": [
+            "resource"
+          ]
+        }
+      ]
+    },
+    "timeout": {
+      "type": "object",
+      "title": "Timeout",
+      "description": "The definition of a timeout.",
+      "unevaluatedProperties": false,
+      "properties": {
+        "after": {
+          "$ref": "#/$defs/duration",
+          "title": "TimeoutAfter",
+          "description": "The duration after which to timeout."
+        }
+      },
+      "required": [
+        "after"
+      ]
+    },
+    "catalog": {
+      "type": "object",
+      "title": "Catalog",
+      "description": "The definition of a resource catalog",
+      "unevaluatedProperties": false,
+      "properties": {
+        "endpoint": {
+          "$ref": "#/$defs/endpoint",
+          "title": "CatalogEndpoint",
+          "description": "The root URL where the catalog is hosted"
+        }
+      },
+      "required": [
+        "endpoint"
+      ]
+    },
+    "runtimeExpression": {
+      "type": "string",
+      "title": "RuntimeExpression",
+      "description": "A runtime expression.",
+      "pattern": "^\\s*\\$\\{.+\\}\\s*$"
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/lib/generated/schema/workflow.yaml b/src/lib/generated/schema/workflow.yaml
new file mode 100644
index 0000000..7c53f7b
--- /dev/null
+++ b/src/lib/generated/schema/workflow.yaml
@@ -0,0 +1,1805 @@
+$id: https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.yaml
+$schema: https://json-schema.org/draft/2020-12/schema
+description: Serverless Workflow DSL - Workflow Schema.
+type: object
+required:
+  - document
+  - do
+properties:
+  document:
+    type: object
+    title: Document
+    description: Documents the workflow.
+    unevaluatedProperties: false
+    properties:
+      dsl:
+        type: string
+        pattern: >-
+          ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
+        title: WorkflowDSL
+        description: The version of the DSL used by the workflow.
+      namespace:
+        type: string
+        pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$
+        title: WorkflowNamespace
+        description: The workflow's namespace.
+      name:
+        type: string
+        pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$
+        title: WorkflowName
+        description: The workflow's name.
+      version:
+        type: string
+        pattern: >-
+          ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
+        title: WorkflowVersion
+        description: The workflow's semantic version.
+      title:
+        type: string
+        title: WorkflowTitle
+        description: The workflow's title.
+      summary:
+        type: string
+        title: WorkflowSummary
+        description: The workflow's Markdown summary.
+      tags:
+        type: object
+        title: WorkflowTags
+        description: A key/value mapping of the workflow's tags, if any.
+        additionalProperties: true
+      metadata:
+        type: object
+        title: WorkflowMetadata
+        description: Holds additional information about the workflow.
+        additionalProperties: true
+    required:
+      - dsl
+      - namespace
+      - name
+      - version
+  input:
+    $ref: '#/$defs/input'
+    title: Input
+    description: Configures the workflow's input.
+  use:
+    type: object
+    title: Use
+    description: Defines the workflow's reusable components.
+    unevaluatedProperties: false
+    properties:
+      authentications:
+        type: object
+        title: UseAuthentications
+        description: The workflow's reusable authentication policies.
+        additionalProperties:
+          $ref: '#/$defs/authenticationPolicy'
+      errors:
+        type: object
+        title: UseErrors
+        description: The workflow's reusable errors.
+        additionalProperties:
+          $ref: '#/$defs/error'
+      extensions:
+        type: array
+        title: UseExtensions
+        description: The workflow's extensions.
+        items:
+          type: object
+          title: ExtensionItem
+          minProperties: 1
+          maxProperties: 1
+          additionalProperties:
+            $ref: '#/$defs/extension'
+      functions:
+        type: object
+        title: UseFunctions
+        description: The workflow's reusable functions.
+        additionalProperties:
+          $ref: '#/$defs/task'
+      retries:
+        type: object
+        title: UseRetries
+        description: The workflow's reusable retry policies.
+        additionalProperties:
+          $ref: '#/$defs/retryPolicy'
+      secrets:
+        type: array
+        title: UseSecrets
+        description: The workflow's reusable secrets.
+        items:
+          type: string
+          description: The workflow's secrets.
+      timeouts:
+        type: object
+        title: UseTimeouts
+        description: The workflow's reusable timeouts.
+        additionalProperties:
+          $ref: '#/$defs/timeout'
+      catalogs:
+        type: object
+        title: UseCatalogs
+        description: The workflow's reusable catalogs.
+        additionalProperties:
+          $ref: '#/$defs/catalog'
+  do:
+    $ref: '#/$defs/taskList'
+    title: Do
+    description: Defines the task(s) the workflow must perform.
+  timeout:
+    oneOf:
+      - $ref: '#/$defs/timeout'
+        title: TimeoutDefinition
+        description: The workflow's timeout configuration, if any.
+      - type: string
+        title: TimeoutReference
+        description: The name of the workflow's timeout, if any.
+  output:
+    $ref: '#/$defs/output'
+    title: Output
+    description: Configures the workflow's output.
+  schedule:
+    type: object
+    title: Schedule
+    description: Schedules the workflow.
+    unevaluatedProperties: false
+    properties:
+      every:
+        $ref: '#/$defs/duration'
+        title: ScheduleEvery
+        description: >-
+          Specifies the duration of the interval at which the workflow should be
+          executed.
+      cron:
+        type: string
+        title: ScheduleCron
+        description: >-
+          Specifies the schedule using a cron expression, e.g., '0 0 * * *' for
+          daily at midnight.
+      after:
+        $ref: '#/$defs/duration'
+        title: ScheduleAfter
+        description: >-
+          Specifies a delay duration that the workflow must wait before starting
+          again after it completes.
+      'on':
+        $ref: '#/$defs/eventConsumptionStrategy'
+        title: ScheduleOn
+        description: Specifies the events that trigger the workflow execution.
+$defs:
+  taskList:
+    title: TaskList
+    description: List of named tasks to perform.
+    type: array
+    items:
+      type: object
+      title: TaskItem
+      minProperties: 1
+      maxProperties: 1
+      additionalProperties:
+        $ref: '#/$defs/task'
+  taskBase:
+    type: object
+    title: TaskBase
+    description: An object inherited by all tasks.
+    properties:
+      if:
+        type: string
+        title: TaskBaseIf
+        description: >-
+          A runtime expression, if any, used to determine whether or not the
+          task should be run.
+      input:
+        $ref: '#/$defs/input'
+        title: TaskBaseInput
+        description: Configure the task's input.
+      output:
+        $ref: '#/$defs/output'
+        title: TaskBaseOutput
+        description: Configure the task's output.
+      export:
+        $ref: '#/$defs/export'
+        title: TaskBaseExport
+        description: Export task output to context.
+      timeout:
+        oneOf:
+          - $ref: '#/$defs/timeout'
+            title: TaskTimeoutDefinition
+            description: The task's timeout configuration, if any.
+          - type: string
+            title: TaskTimeoutReference
+            description: The name of the task's timeout, if any.
+      then:
+        $ref: '#/$defs/flowDirective'
+        title: TaskBaseThen
+        description: The flow directive to be performed upon completion of the task.
+      metadata:
+        type: object
+        title: TaskMetadata
+        description: Holds additional information about the task.
+        additionalProperties: true
+  task:
+    title: Task
+    description: >-
+      A discrete unit of work that contributes to achieving the overall
+      objectives defined by the workflow.
+    unevaluatedProperties: false
+    oneOf:
+      - $ref: '#/$defs/callTask'
+      - $ref: '#/$defs/doTask'
+      - $ref: '#/$defs/forkTask'
+      - $ref: '#/$defs/emitTask'
+      - $ref: '#/$defs/forTask'
+      - $ref: '#/$defs/listenTask'
+      - $ref: '#/$defs/raiseTask'
+      - $ref: '#/$defs/runTask'
+      - $ref: '#/$defs/setTask'
+      - $ref: '#/$defs/switchTask'
+      - $ref: '#/$defs/tryTask'
+      - $ref: '#/$defs/waitTask'
+  callTask:
+    title: CallTask
+    description: Defines the call to perform.
+    oneOf:
+      - title: CallAsyncAPI
+        description: Defines the AsyncAPI call to perform.
+        $ref: '#/$defs/taskBase'
+        type: object
+        required:
+          - call
+          - with
+        unevaluatedProperties: false
+        properties:
+          call:
+            type: string
+            const: asyncapi
+          with:
+            type: object
+            title: AsyncApiArguments
+            description: The Async API call arguments.
+            properties:
+              document:
+                $ref: '#/$defs/externalResource'
+                title: WithAsyncAPIDocument
+                description: The document that defines the AsyncAPI operation to call.
+              operationRef:
+                type: string
+                title: WithAsyncAPIOperation
+                description: A reference to the AsyncAPI operation to call.
+              server:
+                type: string
+                title: WithAsyncAPIServer
+                description: >-
+                  A a reference to the server to call the specified AsyncAPI
+                  operation on. If not set, default to the first server matching
+                  the operation's channel.
+              message:
+                type: string
+                title: WithAsyncAPIMessage
+                description: >-
+                  The name of the message to use. If not set, defaults to the
+                  first message defined by the operation.
+              binding:
+                type: string
+                title: WithAsyncAPIBinding
+                description: >-
+                  The name of the binding to use. If not set, defaults to the
+                  first binding defined by the operation.
+              payload:
+                type: object
+                title: WithAsyncAPIPayload
+                description: The payload to call the AsyncAPI operation with, if any.
+              authentication:
+                $ref: '#/$defs/referenceableAuthenticationPolicy'
+                title: WithAsyncAPIAuthentication
+                description: >-
+                  The authentication policy, if any, to use when calling the
+                  AsyncAPI operation.
+            required:
+              - document
+              - operationRef
+            unevaluatedProperties: false
+      - title: CallGRPC
+        description: Defines the GRPC call to perform.
+        $ref: '#/$defs/taskBase'
+        type: object
+        unevaluatedProperties: false
+        required:
+          - call
+          - with
+        properties:
+          call:
+            type: string
+            const: grpc
+          with:
+            type: object
+            title: GRPCArguments
+            description: The GRPC call arguments.
+            properties:
+              proto:
+                $ref: '#/$defs/externalResource'
+                title: WithGRPCProto
+                description: The proto resource that describes the GRPC service to call.
+              service:
+                type: object
+                title: WithGRPCService
+                unevaluatedProperties: false
+                properties:
+                  name:
+                    type: string
+                    title: WithGRPCServiceName
+                    description: The name of the GRPC service to call.
+                  host:
+                    type: string
+                    title: WithGRPCServiceHost
+                    description: The hostname of the GRPC service to call.
+                    pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$
+                  port:
+                    type: integer
+                    title: WithGRPCServicePost
+                    description: The port number of the GRPC service to call.
+                    minimum: 0
+                    maximum: 65535
+                  authentication:
+                    $ref: '#/$defs/referenceableAuthenticationPolicy'
+                    title: WithGRPCServiceAuthentication
+                    description: The endpoint's authentication policy, if any.
+                required:
+                  - name
+                  - host
+              method:
+                type: string
+                title: WithGRPCMethod
+                description: The name of the method to call on the defined GRPC service.
+              arguments:
+                type: object
+                title: WithGRPCArguments
+                description: The arguments, if any, to call the method with.
+                additionalProperties: true
+            required:
+              - proto
+              - service
+              - method
+            unevaluatedProperties: false
+      - title: CallHTTP
+        description: Defines the HTTP call to perform.
+        $ref: '#/$defs/taskBase'
+        type: object
+        unevaluatedProperties: false
+        required:
+          - call
+          - with
+        properties:
+          call:
+            type: string
+            const: http
+          with:
+            type: object
+            title: HTTPArguments
+            description: The HTTP call arguments.
+            properties:
+              method:
+                type: string
+                title: WithHTTPMethod
+                description: The HTTP method of the HTTP request to perform.
+              endpoint:
+                title: WithHTTPEndpoint
+                description: The HTTP endpoint to send the request to.
+                $ref: '#/$defs/endpoint'
+              headers:
+                type: object
+                title: WithHTTPHeaders
+                description: >-
+                  A name/value mapping of the headers, if any, of the HTTP
+                  request to perform.
+              body:
+                title: WithHTTPBody
+                description: The body, if any, of the HTTP request to perform.
+              query:
+                type: object
+                title: WithHTTPQuery
+                description: >-
+                  A name/value mapping of the query parameters, if any, of the
+                  HTTP request to perform.
+                additionalProperties: true
+              output:
+                type: string
+                title: WithHTTPOutput
+                description: The http call output format. Defaults to 'content'.
+                enum:
+                  - raw
+                  - content
+                  - response
+            required:
+              - method
+              - endpoint
+            unevaluatedProperties: false
+      - title: CallOpenAPI
+        description: Defines the OpenAPI call to perform.
+        $ref: '#/$defs/taskBase'
+        type: object
+        unevaluatedProperties: false
+        required:
+          - call
+          - with
+        properties:
+          call:
+            type: string
+            const: openapi
+          with:
+            type: object
+            title: OpenAPIArguments
+            description: The OpenAPI call arguments.
+            properties:
+              document:
+                $ref: '#/$defs/externalResource'
+                title: WithOpenAPIDocument
+                description: The document that defines the OpenAPI operation to call.
+              operationId:
+                type: string
+                title: WithOpenAPIOperation
+                description: The id of the OpenAPI operation to call.
+              parameters:
+                type: object
+                title: WithOpenAPIParameters
+                description: >-
+                  A name/value mapping of the parameters of the OpenAPI
+                  operation to call.
+                additionalProperties: true
+              authentication:
+                $ref: '#/$defs/referenceableAuthenticationPolicy'
+                title: WithOpenAPIAuthentication
+                description: >-
+                  The authentication policy, if any, to use when calling the
+                  OpenAPI operation.
+              output:
+                type: string
+                enum:
+                  - raw
+                  - content
+                  - response
+                title: WithOpenAPIOutput
+                description: The http call output format. Defaults to 'content'.
+            required:
+              - document
+              - operationId
+            unevaluatedProperties: false
+      - title: CallFunction
+        description: Defines the function call to perform.
+        $ref: '#/$defs/taskBase'
+        type: object
+        unevaluatedProperties: false
+        required:
+          - call
+        properties:
+          call:
+            type: string
+            not:
+              enum:
+                - asyncapi
+                - grpc
+                - http
+                - openapi
+            description: The name of the function to call.
+          with:
+            type: object
+            title: FunctionArguments
+            description: >-
+              A name/value mapping of the parameters, if any, to call the
+              function with.
+            additionalProperties: true
+  forkTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: ForkTask
+    description: >-
+      Allows workflows to execute multiple tasks concurrently and optionally
+      race them against each other, with a single possible winner, which sets
+      the task's output.
+    unevaluatedProperties: false
+    required:
+      - fork
+    properties:
+      fork:
+        type: object
+        title: ForkTaskConfiguration
+        description: The configuration of the branches to perform concurrently.
+        unevaluatedProperties: false
+        required:
+          - branches
+        properties:
+          branches:
+            $ref: '#/$defs/taskList'
+            title: ForkBranches
+          compete:
+            type: boolean
+            title: ForkCompete
+            description: >-
+              Indicates whether or not the concurrent tasks are racing against
+              each other, with a single possible winner, which sets the
+              composite task's output.
+            default: false
+  doTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: DoTask
+    description: Allows to execute a list of tasks in sequence.
+    unevaluatedProperties: false
+    required:
+      - do
+    properties:
+      do:
+        $ref: '#/$defs/taskList'
+        title: DoTaskConfiguration
+        description: The configuration of the tasks to perform sequentially.
+  emitTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: EmitTask
+    description: >-
+      Allows workflows to publish events to event brokers or messaging systems,
+      facilitating communication and coordination between different components
+      and services.
+    required:
+      - emit
+    unevaluatedProperties: false
+    properties:
+      emit:
+        type: object
+        title: EmitTaskConfiguration
+        description: The configuration of an event's emission.
+        unevaluatedProperties: false
+        properties:
+          event:
+            type: object
+            title: EmitEventDefinition
+            description: The definition of the event to emit.
+            properties:
+              with:
+                $ref: '#/$defs/eventProperties'
+                title: EmitEventWith
+                description: Defines the properties of event to emit.
+                required:
+                  - source
+                  - type
+            additionalProperties: true
+        required:
+          - event
+  forTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: ForTask
+    description: >-
+      Allows workflows to iterate over a collection of items, executing a
+      defined set of subtasks for each item in the collection. This task type is
+      instrumental in handling scenarios such as batch processing, data
+      transformation, and repetitive operations across datasets.
+    required:
+      - for
+      - do
+    unevaluatedProperties: false
+    properties:
+      for:
+        type: object
+        title: ForTaskConfiguration
+        description: The definition of the loop that iterates over a range of values.
+        unevaluatedProperties: false
+        properties:
+          each:
+            type: string
+            title: ForEach
+            description: >-
+              The name of the variable used to store the current item being
+              enumerated.
+            default: item
+          in:
+            type: string
+            title: ForIn
+            description: A runtime expression used to get the collection to enumerate.
+          at:
+            type: string
+            title: ForAt
+            description: >-
+              The name of the variable used to store the index of the current
+              item being enumerated.
+            default: index
+        required:
+          - in
+      while:
+        type: string
+        title: While
+        description: >-
+          A runtime expression that represents the condition, if any, that must
+          be met for the iteration to continue.
+      do:
+        $ref: '#/$defs/taskList'
+        title: ForTaskDo
+  listenTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: ListenTask
+    description: >-
+      Provides a mechanism for workflows to await and react to external events,
+      enabling event-driven behavior within workflow systems.
+    required:
+      - listen
+    unevaluatedProperties: false
+    properties:
+      listen:
+        type: object
+        title: ListenTaskConfiguration
+        description: The configuration of the listener to use.
+        unevaluatedProperties: false
+        properties:
+          to:
+            $ref: '#/$defs/eventConsumptionStrategy'
+            title: ListenTo
+            description: Defines the event(s) to listen to.
+        required:
+          - to
+  raiseTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: RaiseTask
+    description: Intentionally triggers and propagates errors.
+    required:
+      - raise
+    unevaluatedProperties: false
+    properties:
+      raise:
+        type: object
+        title: RaiseTaskConfiguration
+        description: The definition of the error to raise.
+        unevaluatedProperties: false
+        properties:
+          error:
+            oneOf:
+              - $ref: '#/$defs/error'
+                title: RaiseErrorDefinition
+                description: Defines the error to raise.
+              - type: string
+                title: RaiseErrorReference
+                description: The name of the error to raise
+        required:
+          - error
+  runTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: RunTask
+    description: >-
+      Provides the capability to execute external containers, shell commands,
+      scripts, or workflows.
+    required:
+      - run
+    unevaluatedProperties: false
+    properties:
+      run:
+        type: object
+        title: RunTaskConfiguration
+        description: The configuration of the process to execute.
+        unevaluatedProperties: false
+        properties:
+          await:
+            type: boolean
+            default: true
+            title: AwaitProcessCompletion
+            description: Whether to await the process completion before continuing.
+        oneOf:
+          - title: RunContainer
+            description: >-
+              Enables the execution of external processes encapsulated within a
+              containerized environment.
+            properties:
+              container:
+                type: object
+                title: Container
+                description: The configuration of the container to run.
+                unevaluatedProperties: false
+                properties:
+                  image:
+                    type: string
+                    title: ContainerImage
+                    description: The name of the container image to run.
+                  command:
+                    type: string
+                    title: ContainerCommand
+                    description: The command, if any, to execute on the container.
+                  ports:
+                    type: object
+                    title: ContainerPorts
+                    description: The container's port mappings, if any.
+                  volumes:
+                    type: object
+                    title: ContainerVolumes
+                    description: The container's volume mappings, if any.
+                  environment:
+                    type: object
+                    title: ContainerEnvironment
+                    description: >-
+                      A key/value mapping of the environment variables, if any,
+                      to use when running the configured process.
+                required:
+                  - image
+            required:
+              - container
+          - title: RunScript
+            description: >-
+              Enables the execution of custom scripts or code within a workflow,
+              empowering workflows to perform specialized logic, data
+              processing, or integration tasks by executing user-defined scripts
+              written in various programming languages.
+            properties:
+              script:
+                type: object
+                title: Script
+                description: The configuration of the script to run.
+                unevaluatedProperties: false
+                properties:
+                  language:
+                    type: string
+                    title: ScriptLanguage
+                    description: The language of the script to run.
+                  arguments:
+                    type: object
+                    title: ScriptArguments
+                    description: >-
+                      A key/value mapping of the arguments, if any, to use when
+                      running the configured script.
+                    additionalProperties: true
+                  environment:
+                    type: object
+                    title: ScriptEnvironment
+                    description: >-
+                      A key/value mapping of the environment variables, if any,
+                      to use when running the configured script process.
+                    additionalProperties: true
+                oneOf:
+                  - title: InlineScript
+                    type: object
+                    description: The script's code.
+                    properties:
+                      code:
+                        type: string
+                        title: InlineScriptCode
+                    required:
+                      - code
+                  - title: ExternalScript
+                    type: object
+                    description: The script's resource.
+                    properties:
+                      source:
+                        $ref: '#/$defs/externalResource'
+                        title: ExternalScriptResource
+                    required:
+                      - source
+                required:
+                  - language
+            required:
+              - script
+          - title: RunShell
+            description: >-
+              Enables the execution of shell commands within a workflow,
+              enabling workflows to interact with the underlying operating
+              system and perform system-level operations, such as file
+              manipulation, environment configuration, or system administration
+              tasks.
+            properties:
+              shell:
+                type: object
+                title: Shell
+                description: The configuration of the shell command to run.
+                unevaluatedProperties: false
+                properties:
+                  command:
+                    type: string
+                    title: ShellCommand
+                    description: The shell command to run.
+                  arguments:
+                    type: object
+                    title: ShellArguments
+                    description: A list of the arguments of the shell command to run.
+                    additionalProperties: true
+                  environment:
+                    type: object
+                    title: ShellEnvironment
+                    description: >-
+                      A key/value mapping of the environment variables, if any,
+                      to use when running the configured process.
+                    additionalProperties: true
+                required:
+                  - command
+            required:
+              - shell
+          - title: RunWorkflow
+            description: >-
+              Enables the invocation and execution of nested workflows within a
+              parent workflow, facilitating modularization, reusability, and
+              abstraction of complex logic or business processes by
+              encapsulating them into standalone workflow units.
+            properties:
+              workflow:
+                type: object
+                title: SubflowConfiguration
+                description: The configuration of the workflow to run.
+                unevaluatedProperties: false
+                properties:
+                  namespace:
+                    type: string
+                    title: SubflowNamespace
+                    description: The namespace the workflow to run belongs to.
+                  name:
+                    type: string
+                    title: SubflowName
+                    description: The name of the workflow to run.
+                  version:
+                    type: string
+                    default: latest
+                    title: SubflowVersion
+                    description: The version of the workflow to run. Defaults to latest.
+                  input:
+                    type: object
+                    title: SubflowInput
+                    description: >-
+                      The data, if any, to pass as input to the workflow to
+                      execute. The value should be validated against the target
+                      workflow's input schema, if specified.
+                    additionalProperties: true
+                required:
+                  - namespace
+                  - name
+                  - version
+            required:
+              - workflow
+  setTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: SetTask
+    description: A task used to set data.
+    required:
+      - set
+    unevaluatedProperties: false
+    properties:
+      set:
+        type: object
+        title: SetTaskConfiguration
+        description: The data to set.
+        minProperties: 1
+        additionalProperties: true
+  switchTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: SwitchTask
+    description: >-
+      Enables conditional branching within workflows, allowing them to
+      dynamically select different paths based on specified conditions or
+      criteria.
+    required:
+      - switch
+    unevaluatedProperties: false
+    properties:
+      switch:
+        type: array
+        title: SwitchTaskConfiguration
+        description: The definition of the switch to use.
+        minItems: 1
+        items:
+          type: object
+          title: SwitchItem
+          minProperties: 1
+          maxProperties: 1
+          additionalProperties:
+            type: object
+            title: SwitchCase
+            description: >-
+              The definition of a case within a switch task, defining a
+              condition and corresponding tasks to execute if the condition is
+              met.
+            unevaluatedProperties: false
+            required:
+              - then
+            properties:
+              when:
+                type: string
+                title: SwitchCaseCondition
+                description: >-
+                  A runtime expression used to determine whether or not the case
+                  matches.
+              then:
+                $ref: '#/$defs/flowDirective'
+                title: SwitchCaseOutcome
+                description: The flow directive to execute when the case matches.
+  tryTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: TryTask
+    description: >-
+      Serves as a mechanism within workflows to handle errors gracefully,
+      potentially retrying failed tasks before proceeding with alternate ones.
+    required:
+      - try
+      - catch
+    unevaluatedProperties: false
+    properties:
+      try:
+        $ref: '#/$defs/taskList'
+        title: TryTaskConfiguration
+        description: The task(s) to perform.
+      catch:
+        type: object
+        title: TryTaskCatch
+        description: The object used to define the errors to catch.
+        unevaluatedProperties: false
+        properties:
+          errors:
+            type: object
+            title: CatchErrors
+            description: The configuration of a concept used to catch errors.
+          as:
+            type: string
+            title: CatchAs
+            description: >-
+              The name of the runtime expression variable to save the error as.
+              Defaults to 'error'.
+          when:
+            type: string
+            title: CatchWhen
+            description: >-
+              A runtime expression used to determine whether or not to catch the
+              filtered error.
+          exceptWhen:
+            type: string
+            title: CatchExceptWhen
+            description: >-
+              A runtime expression used to determine whether or not to catch the
+              filtered error.
+          retry:
+            oneOf:
+              - $ref: '#/$defs/retryPolicy'
+                title: RetryPolicyDefinition
+                description: The retry policy to use, if any, when catching errors.
+              - type: string
+                title: RetryPolicyReference
+                description: >-
+                  The name of the retry policy to use, if any, when catching
+                  errors.
+          do:
+            $ref: '#/$defs/taskList'
+            title: TryTaskCatchDo
+            description: The definition of the task(s) to run when catching an error.
+  waitTask:
+    type: object
+    $ref: '#/$defs/taskBase'
+    title: WaitTask
+    description: >-
+      Allows workflows to pause or delay their execution for a specified period
+      of time.
+    required:
+      - wait
+    unevaluatedProperties: false
+    properties:
+      wait:
+        $ref: '#/$defs/duration'
+        title: WaitTaskConfiguration
+        description: The amount of time to wait.
+  flowDirective:
+    title: FlowDirective
+    description: Represents different transition options for a workflow.
+    anyOf:
+      - type: string
+        enum:
+          - continue
+          - exit
+          - end
+        default: continue
+      - type: string
+  referenceableAuthenticationPolicy:
+    type: object
+    title: ReferenceableAuthenticationPolicy
+    description: Represents a referenceable authentication policy.
+    unevaluatedProperties: false
+    oneOf:
+      - title: AuthenticationPolicyReference
+        description: The reference of the authentication policy to use.
+        properties:
+          use:
+            type: string
+            minLength: 1
+            title: ReferenceableAuthenticationPolicyName
+            description: The name of the authentication policy to use.
+        required:
+          - use
+      - $ref: '#/$defs/authenticationPolicy'
+  secretBasedAuthenticationPolicy:
+    type: object
+    title: SecretBasedAuthenticationPolicy
+    description: Represents an authentication policy based on secrets.
+    unevaluatedProperties: false
+    properties:
+      use:
+        type: string
+        minLength: 1
+        title: SecretBasedAuthenticationPolicyName
+        description: The name of the authentication policy to use.
+    required:
+      - use
+  authenticationPolicy:
+    type: object
+    title: AuthenticationPolicy
+    description: Defines an authentication policy.
+    oneOf:
+      - title: BasicAuthenticationPolicy
+        description: Use basic authentication.
+        properties:
+          basic:
+            type: object
+            title: BasicAuthenticationPolicyConfiguration
+            description: The configuration of the basic authentication policy.
+            unevaluatedProperties: false
+            oneOf:
+              - title: BasicAuthenticationProperties
+                description: Inline configuration of the basic authentication policy.
+                properties:
+                  username:
+                    type: string
+                    description: The username to use.
+                  password:
+                    type: string
+                    description: The password to use.
+                required:
+                  - username
+                  - password
+              - $ref: '#/$defs/secretBasedAuthenticationPolicy'
+                title: BasicAuthenticationPolicySecret
+                description: Secret based configuration of the basic authentication policy.
+        required:
+          - basic
+      - title: BearerAuthenticationPolicy
+        description: Use bearer authentication.
+        properties:
+          bearer:
+            type: object
+            title: BearerAuthenticationPolicyConfiguration
+            description: The configuration of the bearer authentication policy.
+            unevaluatedProperties: false
+            oneOf:
+              - title: BearerAuthenticationProperties
+                description: Inline configuration of the bearer authentication policy.
+                properties:
+                  token:
+                    type: string
+                    description: The bearer token to use.
+                required:
+                  - token
+              - $ref: '#/$defs/secretBasedAuthenticationPolicy'
+                title: BearerAuthenticationPolicySecret
+                description: >-
+                  Secret based configuration of the bearer authentication
+                  policy.
+        required:
+          - bearer
+      - title: DigestAuthenticationPolicy
+        description: Use digest authentication.
+        properties:
+          digest:
+            type: object
+            title: DigestAuthenticationPolicyConfiguration
+            description: The configuration of the digest authentication policy.
+            unevaluatedProperties: false
+            oneOf:
+              - title: DigestAuthenticationProperties
+                description: Inline configuration of the digest authentication policy.
+                properties:
+                  username:
+                    type: string
+                    description: The username to use.
+                  password:
+                    type: string
+                    description: The password to use.
+                required:
+                  - username
+                  - password
+              - $ref: '#/$defs/secretBasedAuthenticationPolicy'
+                title: DigestAuthenticationPolicySecret
+                description: >-
+                  Secret based configuration of the digest authentication
+                  policy.
+        required:
+          - digest
+      - title: OAuth2AuthenticationPolicy
+        description: Use OAuth2 authentication.
+        properties:
+          oauth2:
+            type: object
+            title: OAuth2AuthenticationPolicyConfiguration
+            description: The configuration of the OAuth2 authentication policy.
+            unevaluatedProperties: false
+            oneOf:
+              - type: object
+                title: OAuth2ConnectAuthenticationProperties
+                description: The inline configuration of the OAuth2 authentication policy.
+                unevaluatedProperties: false
+                allOf:
+                  - $ref: '#/$defs/oauth2AuthenticationProperties'
+                  - type: object
+                    properties:
+                      endpoints:
+                        type: object
+                        title: OAuth2AuthenticationPropertiesEndpoints
+                        description: The endpoint configurations for OAuth2.
+                        properties:
+                          token:
+                            type: string
+                            format: uri-template
+                            default: /oauth2/token
+                            title: OAuth2TokenEndpoint
+                            description: >-
+                              The relative path to the token endpoint. Defaults
+                              to `/oauth2/token`.
+                          revocation:
+                            type: string
+                            format: uri-template
+                            default: /oauth2/revoke
+                            title: OAuth2RevocationEndpoint
+                            description: >-
+                              The relative path to the revocation endpoint.
+                              Defaults to `/oauth2/revoke`.
+                          introspection:
+                            type: string
+                            format: uri-template
+                            default: /oauth2/introspect
+                            title: OAuth2IntrospectionEndpoint
+                            description: >-
+                              The relative path to the introspection endpoint.
+                              Defaults to `/oauth2/introspect`.
+              - $ref: '#/$defs/secretBasedAuthenticationPolicy'
+                title: OAuth2AuthenticationPolicySecret
+                description: >-
+                  Secret based configuration of the OAuth2 authentication
+                  policy.
+        required:
+          - oauth2
+      - title: OpenIdConnectAuthenticationPolicy
+        description: Use OpenIdConnect authentication.
+        properties:
+          oidc:
+            type: object
+            title: OpenIdConnectAuthenticationPolicyConfiguration
+            description: The configuration of the OpenIdConnect authentication policy.
+            unevaluatedProperties: false
+            oneOf:
+              - $ref: '#/$defs/oauth2AuthenticationProperties'
+                title: OpenIdConnectAuthenticationProperties
+                description: >-
+                  The inline configuration of the OpenIdConnect authentication
+                  policy.
+                unevaluatedProperties: false
+              - $ref: '#/$defs/secretBasedAuthenticationPolicy'
+                title: OpenIdConnectAuthenticationPolicySecret
+                description: >-
+                  Secret based configuration of the OpenIdConnect authentication
+                  policy.
+        required:
+          - oidc
+  oauth2AuthenticationProperties:
+    type: object
+    title: OAuth2AutenthicationData
+    description: Inline configuration of the OAuth2 authentication policy.
+    properties:
+      authority:
+        $ref: '#/$defs/uriTemplate'
+        title: OAuth2AutenthicationDataAuthority
+        description: The URI that references the OAuth2 authority to use.
+      grant:
+        type: string
+        enum:
+          - authorization_code
+          - client_credentials
+          - password
+          - refresh_token
+          - urn:ietf:params:oauth:grant-type:token-exchange
+        title: OAuth2AutenthicationDataGrant
+        description: The grant type to use.
+      client:
+        type: object
+        title: OAuth2AutenthicationDataClient
+        description: The definition of an OAuth2 client.
+        unevaluatedProperties: false
+        properties:
+          id:
+            type: string
+            title: ClientId
+            description: The client id to use.
+          secret:
+            type: string
+            title: ClientSecret
+            description: The client secret to use, if any.
+          assertion:
+            type: string
+            title: ClientAssertion
+            description: >-
+              A JWT containing a signed assertion with your application
+              credentials.
+          authentication:
+            type: string
+            enum:
+              - client_secret_basic
+              - client_secret_post
+              - client_secret_jwt
+              - private_key_jwt
+              - none
+            default: client_secret_post
+            title: ClientAuthentication
+            description: The authentication method to use to authenticate the client.
+      request:
+        type: object
+        title: OAuth2TokenRequest
+        description: The configuration of an OAuth2 token request
+        properties:
+          encoding:
+            type: string
+            enum:
+              - application/x-www-form-urlencoded
+              - application/json
+            default: application/x-www-form-urlencoded
+            title: Oauth2TokenRequestEncoding
+      issuers:
+        type: array
+        title: OAuth2Issuers
+        description: >-
+          A list that contains that contains valid issuers that will be used to
+          check against the issuer of generated tokens.
+        items:
+          type: string
+      scopes:
+        type: array
+        title: OAuth2AutenthicationDataScopes
+        description: The scopes, if any, to request the token for.
+        items:
+          type: string
+      audiences:
+        type: array
+        title: OAuth2AutenthicationDataAudiences
+        description: The audiences, if any, to request the token for.
+        items:
+          type: string
+      username:
+        type: string
+        title: OAuth2AutenthicationDataUsername
+        description: The username to use. Used only if the grant type is Password.
+      password:
+        type: string
+        title: OAuth2AutenthicationDataPassword
+        description: The password to use. Used only if the grant type is Password.
+      subject:
+        $ref: '#/$defs/oauth2Token'
+        title: OAuth2AutenthicationDataSubject
+        description: >-
+          The security token that represents the identity of the party on behalf
+          of whom the request is being made.
+      actor:
+        $ref: '#/$defs/oauth2Token'
+        title: OAuth2AutenthicationDataActor
+        description: The security token that represents the identity of the acting party.
+  oauth2Token:
+    type: object
+    title: OAuth2TokenDefinition
+    description: Represents an OAuth2 token.
+    unevaluatedProperties: false
+    properties:
+      token:
+        type: string
+        title: OAuth2Token
+        description: The security token to use.
+      type:
+        type: string
+        title: OAuth2TokenType
+        description: The type of the security token to use.
+    required:
+      - token
+      - type
+  duration:
+    oneOf:
+      - type: object
+        minProperties: 1
+        unevaluatedProperties: false
+        properties:
+          days:
+            type: integer
+            title: DurationDays
+            description: Number of days, if any.
+          hours:
+            type: integer
+            title: DurationHours
+            description: Number of days, if any.
+          minutes:
+            type: integer
+            title: DurationMinutes
+            description: Number of minutes, if any.
+          seconds:
+            type: integer
+            title: DurationSeconds
+            description: Number of seconds, if any.
+          milliseconds:
+            type: integer
+            title: DurationMilliseconds
+            description: Number of milliseconds, if any.
+        title: DurationInline
+        description: The inline definition of a duration.
+      - type: string
+        pattern: >-
+          ^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$
+        title: DurationExpression
+        description: The ISO 8601 expression of a duration.
+  error:
+    type: object
+    title: Error
+    description: Represents an error.
+    unevaluatedProperties: false
+    properties:
+      type:
+        title: ErrorType
+        description: A URI reference that identifies the error type.
+        oneOf:
+          - title: LiteralErrorType
+            $ref: '#/$defs/uriTemplate'
+            description: The literal error type.
+          - title: ExpressionErrorType
+            $ref: '#/$defs/runtimeExpression'
+            description: An expression based error type.
+      status:
+        type: integer
+        title: ErrorStatus
+        description: >-
+          The status code generated by the origin for this occurrence of the
+          error.
+      instance:
+        title: ErrorInstance
+        description: >-
+          A JSON Pointer used to reference the component the error originates
+          from.
+        oneOf:
+          - title: LiteralErrorInstance
+            description: The literal error instance.
+            type: string
+            format: json-pointer
+          - $ref: '#/$defs/runtimeExpression'
+            title: ExpressionErrorInstance
+            description: An expression based error instance.
+      title:
+        type: string
+        title: ErrorTitle
+        description: A short, human-readable summary of the error.
+      detail:
+        type: string
+        title: ErrorDetails
+        description: A human-readable explanation specific to this occurrence of the error.
+    required:
+      - type
+      - status
+  uriTemplate:
+    title: UriTemplate
+    anyOf:
+      - title: LiteralUriTemplate
+        type: string
+        format: uri-template
+        pattern: ^[A-Za-z][A-Za-z0-9+\-.]*://.*
+      - title: LiteralUri
+        type: string
+        format: uri
+        pattern: ^[A-Za-z][A-Za-z0-9+\-.]*://.*
+  endpoint:
+    title: Endpoint
+    description: Represents an endpoint.
+    oneOf:
+      - $ref: '#/$defs/runtimeExpression'
+      - $ref: '#/$defs/uriTemplate'
+      - title: EndpointConfiguration
+        type: object
+        unevaluatedProperties: false
+        properties:
+          uri:
+            title: EndpointUri
+            description: The endpoint's URI.
+            oneOf:
+              - title: LiteralEndpointURI
+                description: The literal endpoint's URI.
+                $ref: '#/$defs/uriTemplate'
+              - title: ExpressionEndpointURI
+                $ref: '#/$defs/runtimeExpression'
+                description: An expression based endpoint's URI.
+          authentication:
+            $ref: '#/$defs/referenceableAuthenticationPolicy'
+            title: EndpointAuthentication
+            description: The authentication policy to use.
+        required:
+          - uri
+  eventProperties:
+    type: object
+    title: EventProperties
+    description: Describes the properties of an event.
+    properties:
+      id:
+        type: string
+        title: EventId
+        description: The event's unique identifier.
+      source:
+        title: EventSource
+        description: Identifies the context in which an event happened.
+        oneOf:
+          - $ref: '#/$defs/uriTemplate'
+          - $ref: '#/$defs/runtimeExpression'
+      type:
+        type: string
+        title: EventType
+        description: >-
+          This attribute contains a value describing the type of event related
+          to the originating occurrence.
+      time:
+        title: EventTime
+        description: When the event occured.
+        oneOf:
+          - title: LiteralTime
+            type: string
+            format: date-time
+          - $ref: '#/$defs/runtimeExpression'
+      subject:
+        type: string
+        title: EventSubject
+        description: The subject of the event.
+      datacontenttype:
+        type: string
+        title: EventDataContentType
+        description: >-
+          Content type of data value. This attribute enables data to carry any
+          type of content, whereby format and encoding might differ from that of
+          the chosen event format.
+      dataschema:
+        title: EventDataschema
+        description: The schema describing the event format.
+        oneOf:
+          - title: LiteralDataSchema
+            $ref: '#/$defs/uriTemplate'
+            description: The literal event data schema.
+          - title: ExpressionDataSchema
+            $ref: '#/$defs/runtimeExpression'
+            description: An expression based event data schema.
+    additionalProperties: true
+  eventConsumptionStrategy:
+    type: object
+    title: EventConsumptionStrategy
+    description: Describe the event consumption strategy to adopt.
+    unevaluatedProperties: false
+    oneOf:
+      - title: AllEventConsumptionStrategy
+        properties:
+          all:
+            type: array
+            title: AllEventConsumptionStrategyConfiguration
+            description: A list containing all the events that must be consumed.
+            items:
+              $ref: '#/$defs/eventFilter'
+        required:
+          - all
+      - title: AnyEventConsumptionStrategy
+        properties:
+          any:
+            type: array
+            title: AnyEventConsumptionStrategyConfiguration
+            description: A list containing any of the events to consume.
+            items:
+              $ref: '#/$defs/eventFilter'
+        required:
+          - any
+      - title: OneEventConsumptionStrategy
+        properties:
+          one:
+            $ref: '#/$defs/eventFilter'
+            title: OneEventConsumptionStrategyConfiguration
+            description: The single event to consume.
+        required:
+          - one
+  eventFilter:
+    type: object
+    title: EventFilter
+    description: >-
+      An event filter is a mechanism used to selectively process or handle
+      events based on predefined criteria, such as event type, source, or
+      specific attributes.
+    unevaluatedProperties: false
+    properties:
+      with:
+        $ref: '#/$defs/eventProperties'
+        minProperties: 1
+        title: WithEvent
+        description: >-
+          An event filter is a mechanism used to selectively process or handle
+          events based on predefined criteria, such as event type, source, or
+          specific attributes.
+      correlate:
+        type: object
+        title: EventFilterCorrelate
+        description: >-
+          A correlation is a link between events and data, established by
+          mapping event attributes to specific data attributes, allowing for
+          coordinated processing or handling based on event characteristics.
+        additionalProperties:
+          type: object
+          properties:
+            from:
+              type: string
+              title: CorrelateFrom
+              description: >-
+                A runtime expression used to extract the correlation value from
+                the filtered event.
+            expect:
+              type: string
+              title: CorrelateExpect
+              description: >-
+                A constant or a runtime expression, if any, used to determine
+                whether or not the extracted correlation value matches
+                expectations. If not set, the first extracted value will be used
+                as the correlation's expectation.
+          required:
+            - from
+    required:
+      - with
+  extension:
+    type: object
+    title: Extension
+    description: The definition of an extension.
+    unevaluatedProperties: false
+    properties:
+      extend:
+        type: string
+        enum:
+          - call
+          - composite
+          - emit
+          - for
+          - listen
+          - raise
+          - run
+          - set
+          - switch
+          - try
+          - wait
+          - all
+        title: ExtensionTarget
+        description: The type of task to extend.
+      when:
+        type: string
+        title: ExtensionCondition
+        description: >-
+          A runtime expression, if any, used to determine whether or not the
+          extension should apply in the specified context.
+      before:
+        $ref: '#/$defs/taskList'
+        title: ExtensionDoBefore
+        description: The task(s) to execute before the extended task, if any.
+      after:
+        $ref: '#/$defs/taskList'
+        title: ExtensionDoAfter
+        description: The task(s) to execute after the extended task, if any.
+    required:
+      - extend
+  externalResource:
+    type: object
+    title: ExternalResource
+    description: Represents an external resource.
+    unevaluatedProperties: false
+    properties:
+      name:
+        type: string
+        title: ExternalResourceName
+        description: The name of the external resource, if any.
+      endpoint:
+        $ref: '#/$defs/endpoint'
+        title: ExternalResourceEndpoint
+        description: The endpoint of the external resource.
+    required:
+      - endpoint
+  input:
+    type: object
+    title: Input
+    description: Configures the input of a workflow or task.
+    unevaluatedProperties: false
+    properties:
+      schema:
+        $ref: '#/$defs/schema'
+        title: InputSchema
+        description: >-
+          The schema used to describe and validate the input of the workflow or
+          task.
+      from:
+        title: InputFrom
+        description: >-
+          A runtime expression, if any, used to mutate and/or filter the input
+          of the workflow or task.
+        oneOf:
+          - type: string
+          - type: object
+  output:
+    type: object
+    title: Output
+    description: Configures the output of a workflow or task.
+    unevaluatedProperties: false
+    properties:
+      schema:
+        $ref: '#/$defs/schema'
+        title: OutputSchema
+        description: >-
+          The schema used to describe and validate the output of the workflow or
+          task.
+      as:
+        title: OutputAs
+        description: >-
+          A runtime expression, if any, used to mutate and/or filter the output
+          of the workflow or task.
+        oneOf:
+          - type: string
+          - type: object
+  export:
+    type: object
+    title: Export
+    description: Set the content of the context. .
+    unevaluatedProperties: false
+    properties:
+      schema:
+        $ref: '#/$defs/schema'
+        title: ExportSchema
+        description: The schema used to describe and validate the workflow context.
+      as:
+        title: ExportAs
+        description: >-
+          A runtime expression, if any, used to export the output data to the
+          context.
+        oneOf:
+          - type: string
+          - type: object
+  retryPolicy:
+    type: object
+    title: RetryPolicy
+    description: Defines a retry policy.
+    unevaluatedProperties: false
+    properties:
+      when:
+        type: string
+        title: RetryWhen
+        description: >-
+          A runtime expression, if any, used to determine whether or not to
+          retry running the task, in a given context.
+      exceptWhen:
+        type: string
+        title: RetryExcepWhen
+        description: >-
+          A runtime expression used to determine whether or not to retry running
+          the task, in a given context.
+      delay:
+        $ref: '#/$defs/duration'
+        title: RetryDelay
+        description: The duration to wait between retry attempts.
+      backoff:
+        type: object
+        title: RetryBackoff
+        description: The retry duration backoff.
+        unevaluatedProperties: false
+        oneOf:
+          - title: ConstantBackoff
+            properties:
+              constant:
+                type: object
+                description: The definition of the constant backoff to use, if any.
+            required:
+              - constant
+          - title: ExponentialBackOff
+            properties:
+              exponential:
+                type: object
+                description: The definition of the exponential backoff to use, if any.
+            required:
+              - exponential
+          - title: LinearBackoff
+            properties:
+              linear:
+                type: object
+                description: The definition of the linear backoff to use, if any.
+            required:
+              - linear
+      limit:
+        type: object
+        title: RetryLimit
+        unevaluatedProperties: false
+        properties:
+          attempt:
+            type: object
+            title: RetryLimitAttempt
+            unevaluatedProperties: false
+            properties:
+              count:
+                type: integer
+                title: RetryLimitAttemptCount
+                description: The maximum amount of retry attempts, if any.
+              duration:
+                $ref: '#/$defs/duration'
+                title: RetryLimitAttemptDuration
+                description: The maximum duration for each retry attempt.
+          duration:
+            $ref: '#/$defs/duration'
+            title: RetryLimitDuration
+            description: The duration limit, if any, for all retry attempts.
+        description: The retry limit, if any.
+      jitter:
+        type: object
+        title: RetryPolicyJitter
+        description: >-
+          The parameters, if any, that control the randomness or variability of
+          the delay between retry attempts.
+        unevaluatedProperties: false
+        properties:
+          from:
+            $ref: '#/$defs/duration'
+            title: RetryPolicyJitterFrom
+            description: The minimum duration of the jitter range.
+          to:
+            $ref: '#/$defs/duration'
+            title: RetryPolicyJitterTo
+            description: The maximum duration of the jitter range.
+        required:
+          - from
+          - to
+  schema:
+    type: object
+    title: Schema
+    description: Represents the definition of a schema.
+    unevaluatedProperties: false
+    properties:
+      format:
+        type: string
+        default: json
+        title: SchemaFormat
+        description: >-
+          The schema's format. Defaults to 'json'. The (optional) version of the
+          format can be set using `{format}:{version}`.
+    oneOf:
+      - title: SchemaInline
+        properties:
+          document:
+            description: The schema's inline definition.
+        required:
+          - document
+      - title: SchemaExternal
+        properties:
+          resource:
+            $ref: '#/$defs/externalResource'
+            title: SchemaExternalResource
+            description: The schema's external resource.
+        required:
+          - resource
+  timeout:
+    type: object
+    title: Timeout
+    description: The definition of a timeout.
+    unevaluatedProperties: false
+    properties:
+      after:
+        $ref: '#/$defs/duration'
+        title: TimeoutAfter
+        description: The duration after which to timeout.
+    required:
+      - after
+  catalog:
+    type: object
+    title: Catalog
+    description: The definition of a resource catalog
+    unevaluatedProperties: false
+    properties:
+      endpoint:
+        $ref: '#/$defs/endpoint'
+        title: CatalogEndpoint
+        description: The root URL where the catalog is hosted
+    required:
+      - endpoint
+  runtimeExpression:
+    type: string
+    title: RuntimeExpression
+    description: A runtime expression.
+    pattern: ^\s*\$\{.+\}\s*$
diff --git a/src/lib/generated/validation/README.md b/src/lib/generated/validation/README.md
new file mode 100644
index 0000000..7d5a864
--- /dev/null
+++ b/src/lib/generated/validation/README.md
@@ -0,0 +1,2 @@
+# Auto generated notice
+This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.
\ No newline at end of file
diff --git a/src/lib/diagram/index.ts b/src/lib/generated/validation/index.ts
similarity index 91%
rename from src/lib/diagram/index.ts
rename to src/lib/generated/validation/index.ts
index 54a1ca6..75ff46e 100644
--- a/src/lib/diagram/index.ts
+++ b/src/lib/generated/validation/index.ts
@@ -14,4 +14,4 @@
  * limitations under the License.
  */
 
-export * from './mermaidDiagram';
+export { validationPointers } from './validation-pointers';
diff --git a/src/lib/generated/validation/validation-pointers.ts b/src/lib/generated/validation/validation-pointers.ts
new file mode 100644
index 0000000..003b67f
--- /dev/null
+++ b/src/lib/generated/validation/validation-pointers.ts
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * /!\ This file is computer generated. Any manual modification can and will be lost. /!\
+ *
+ *****************************************************************************************/
+
+/**
+ * A map of type names and their corresponding schema
+ */
+export const validationPointers = {
+  Workflow: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#',
+  AllEventConsumptionStrategy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy/oneOf/0',
+  AllEventConsumptionStrategyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy/oneOf/0/properties/all',
+  AnyEventConsumptionStrategy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy/oneOf/1',
+  AnyEventConsumptionStrategyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy/oneOf/1/properties/any',
+  AsyncApiArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/0/properties/with',
+  AuthenticationPolicy: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy',
+  AuthenticationPolicyReference:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/referenceableAuthenticationPolicy/oneOf/0',
+  BasicAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/0',
+  BasicAuthenticationPolicyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/0/properties/basic',
+  BasicAuthenticationProperties:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/0/properties/basic/oneOf/0',
+  BearerAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/1',
+  BearerAuthenticationPolicyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/1/properties/bearer',
+  BearerAuthenticationProperties:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/1/properties/bearer/oneOf/0',
+  CallAsyncAPI: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/0',
+  CallFunction: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/4',
+  CallGRPC: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/1',
+  CallHTTP: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/2',
+  CallOpenAPI: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/3',
+  CallTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask',
+  Catalog: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/catalog',
+  CatchErrors:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/tryTask/properties/catch/properties/errors',
+  ConstantBackoff:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/backoff/oneOf/0',
+  Container:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/0/properties/container',
+  ContainerEnvironment:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/0/properties/container/properties/environment',
+  ContainerPorts:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/0/properties/container/properties/ports',
+  ContainerVolumes:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/0/properties/container/properties/volumes',
+  DigestAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/2',
+  DigestAuthenticationPolicyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/2/properties/digest',
+  DigestAuthenticationProperties:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/2/properties/digest/oneOf/0',
+  Document: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/document',
+  DoTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/doTask',
+  Duration: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/duration',
+  DurationInline: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/duration/oneOf/0',
+  EmitEventDefinition:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/emitTask/properties/emit/properties/event',
+  EmitEventWith:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/emitTask/properties/emit/properties/event/properties/with',
+  EmitTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/emitTask',
+  EmitTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/emitTask/properties/emit',
+  Endpoint: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/endpoint',
+  EndpointConfiguration: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/endpoint/oneOf/2',
+  EndpointUri:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/endpoint/oneOf/2/properties/uri',
+  Error: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/error',
+  ErrorInstance: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/error/properties/instance',
+  ErrorType: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/error/properties/type',
+  EventConsumptionStrategy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy',
+  EventDataschema:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventProperties/properties/dataschema',
+  EventFilter: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventFilter',
+  EventFilterCorrelate:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventFilter/properties/correlate',
+  EventSource:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventProperties/properties/source',
+  EventTime: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventProperties/properties/time',
+  ExponentialBackOff:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/backoff/oneOf/1',
+  Export: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/export',
+  ExportAs: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/export/properties/as',
+  Extension: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/extension',
+  ExtensionItem:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/extensions/items',
+  ExternalResource: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/externalResource',
+  ExternalScript:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/1/properties/script/oneOf/1',
+  FlowDirective: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/flowDirective',
+  ForkTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/forkTask',
+  ForkTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/forkTask/properties/fork',
+  ForTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/forTask',
+  ForTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/forTask/properties/for',
+  FunctionArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/4/properties/with',
+  GRPCArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/1/properties/with',
+  HTTPArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/2/properties/with',
+  InlineScript:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/1/properties/script/oneOf/0',
+  Input: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/input',
+  InputFrom: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/input/properties/from',
+  LinearBackoff:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/backoff/oneOf/2',
+  ListenTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/listenTask',
+  ListenTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/listenTask/properties/listen',
+  OAuth2AutenthicationData:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties',
+  OAuth2AutenthicationDataAudiences:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties/properties/audiences',
+  OAuth2AutenthicationDataClient:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties/properties/client',
+  OAuth2AutenthicationDataScopes:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties/properties/scopes',
+  OAuth2AuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/3',
+  OAuth2AuthenticationPolicyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/3/properties/oauth2',
+  OAuth2AuthenticationPropertiesEndpoints:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/3/properties/oauth2/oneOf/0/allOf/1/properties/endpoints',
+  OAuth2ConnectAuthenticationProperties:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/3/properties/oauth2/oneOf/0',
+  OAuth2Issuers:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties/properties/issuers',
+  OAuth2TokenDefinition: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2Token',
+  OAuth2TokenRequest:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/oauth2AuthenticationProperties/properties/request',
+  OneEventConsumptionStrategy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventConsumptionStrategy/oneOf/2',
+  OpenAPIArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/3/properties/with',
+  OpenIdConnectAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/4',
+  OpenIdConnectAuthenticationPolicyConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/4/properties/oidc',
+  OpenIdConnectAuthenticationProperties:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/authenticationPolicy/oneOf/4/properties/oidc/oneOf/0',
+  Output: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/output',
+  OutputAs: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/output/properties/as',
+  RaiseTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/raiseTask',
+  RaiseTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/raiseTask/properties/raise',
+  RaiseTaskRaiseError:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/raiseTask/properties/raise/properties/error',
+  ReferenceableAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/referenceableAuthenticationPolicy',
+  RetryBackoff:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/backoff',
+  RetryLimit: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/limit',
+  RetryLimitAttempt:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/limit/properties/attempt',
+  RetryPolicy: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy',
+  RetryPolicyJitter:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/retryPolicy/properties/jitter',
+  RunContainer:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/0',
+  RunScript: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/1',
+  RunShell: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/2',
+  RunTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask',
+  RunTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run',
+  RuntimeExpression: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runtimeExpression',
+  RunWorkflow: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/3',
+  Schedule: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/schedule',
+  Schema: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/schema',
+  SchemaExternal: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/schema/oneOf/1',
+  SchemaInline: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/schema/oneOf/0',
+  Script:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/1/properties/script',
+  SecretBasedAuthenticationPolicy:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/secretBasedAuthenticationPolicy',
+  SetTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/setTask',
+  SetTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/setTask/properties/set',
+  Shell:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/2/properties/shell',
+  ShellArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/2/properties/shell/properties/arguments',
+  ShellEnvironment:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/2/properties/shell/properties/environment',
+  SubflowConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/3/properties/workflow',
+  SubflowInput:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/runTask/properties/run/oneOf/3/properties/workflow/properties/input',
+  SwitchCase:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/switchTask/properties/switch/items/additionalProperties',
+  SwitchItem:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/switchTask/properties/switch/items',
+  SwitchTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/switchTask',
+  SwitchTaskConfiguration:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/switchTask/properties/switch',
+  Task: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/task',
+  TaskBase: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskBase',
+  TaskBaseIf: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskBase/properties/if',
+  TaskBaseTimeout:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskBase/properties/timeout',
+  TaskItem: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskList/items',
+  TaskList: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskList',
+  TaskMetadata: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/taskBase/properties/metadata',
+  Timeout: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/timeout',
+  TryTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/tryTask',
+  TryTaskCatch: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/tryTask/properties/catch',
+  TryTaskCatchRetry:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/tryTask/properties/catch/properties/retry',
+  UriTemplate: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/uriTemplate',
+  Use: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use',
+  UseAuthentications:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/authentications',
+  UseCatalogs: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/catalogs',
+  UseErrors: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/errors',
+  UseExtensions:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/extensions',
+  UseFunctions: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/functions',
+  UseRetries: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/retries',
+  UseSecrets: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/secrets',
+  UseTimeouts: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/use/properties/timeouts',
+  WaitTask: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/waitTask',
+  WithAsyncAPIPayload:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/0/properties/with/properties/payload',
+  WithEvent: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/eventFilter/properties/with',
+  WithGRPCArguments:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/1/properties/with/properties/arguments',
+  WithGRPCService:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/1/properties/with/properties/service',
+  WithHTTPBody:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/2/properties/with/properties/body',
+  WithHTTPHeaders:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/2/properties/with/properties/headers',
+  WithHTTPQuery:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/2/properties/with/properties/query',
+  WithOpenAPIParameters:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/$defs/callTask/oneOf/3/properties/with/properties/parameters',
+  WorkflowMetadata:
+    'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/document/properties/metadata',
+  WorkflowTags: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/document/properties/tags',
+  WorkflowTimeout: 'https://serverlessworkflow.io/schemas/1.0.0-alpha5/workflow.json#/properties/timeout',
+};
diff --git a/src/lib/hooks/index.ts b/src/lib/hooks/index.ts
new file mode 100644
index 0000000..4d11de6
--- /dev/null
+++ b/src/lib/hooks/index.ts
@@ -0,0 +1 @@
+export * from './workflow-hooks';
diff --git a/tests/lib/definitions/action.spec.ts b/src/lib/hooks/workflow-hooks.ts
similarity index 54%
rename from tests/lib/definitions/action.spec.ts
rename to src/lib/hooks/workflow-hooks.ts
index 5c239e8..7cb819e 100644
--- a/tests/lib/definitions/action.spec.ts
+++ b/src/lib/hooks/workflow-hooks.ts
@@ -12,23 +12,20 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 
-import { Action } from '../../../src/lib/definitions/action';
-
-describe('Action ', () => {
-  it('should convert non-primitive properties to the desired class', () => {
-    const data = {
-      functionRef: {},
-      eventRef: {},
-      actionDataFilter: {},
-    };
+import { LifecycleHooks } from '../lifecycle-hooks';
+import { Specification } from '../generated/definitions';
 
-    const model = new Action(data);
+import { schemaVersion } from '../../../package.json';
 
-    expect(model.functionRef!.constructor.name).toBe('Functionref');
-    expect(model.eventRef!.constructor.name).toBe('Eventref');
-    expect(model.actionDataFilter!.constructor.name).toBe('Actiondatafilter');
-  });
-});
+export const WorkflowHooks = {
+  preValidation(instance) {
+    if (instance?.document?.dsl !== schemaVersion) {
+      throw new Error(
+        `'Workflow' is invalid - The DSL version of the workflow '${instance?.document?.dsl}' doesn't match the supported version of the SDK '${schemaVersion}'.`,
+      );
+    }
+    return;
+  },
+} as LifecycleHooks;
diff --git a/src/lib/hydrator.ts b/src/lib/hydrator.ts
new file mode 100644
index 0000000..ec306d5
--- /dev/null
+++ b/src/lib/hydrator.ts
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { deepCopy, isObject } from './utils';
+
+/**
+ * A base class used for object hydration
+ */
+export class ObjectHydrator {
+  constructor(model?: Partial) {
+    if (isObject(model)) {
+      Object.assign(this, deepCopy(model));
+    }
+  }
+}
+
+/**
+ * A base class used for array hydration
+ */
+export class ArrayHydrator extends Array {
+  constructor(model?: Array | number) {
+    if (!isNaN(model as number)) {
+      super(model as number);
+    } else {
+      super(...((model as Array) || []));
+      if (!model) {
+        model = [];
+      }
+      if (!Array.isArray(model)) {
+        throw new Error('The provided model should be an array');
+      }
+    }
+  }
+}
diff --git a/src/lib/lifecycle-hooks.ts b/src/lib/lifecycle-hooks.ts
new file mode 100644
index 0000000..a63d2b5
--- /dev/null
+++ b/src/lib/lifecycle-hooks.ts
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Specification } from './generated/definitions';
+import { WorkflowHooks } from './hooks';
+
+/**
+ * Represents the possible lifecycle hooks of an instance
+ */
+export type LifecycleHooks = {
+  /**
+   * The hook called at the end of the constructor
+   * @param instance The instance being initialized
+   */
+  constructor?: (instance: T) => void;
+  /**
+   * The hook called before the validation
+   * @param instance A copy instance being validated
+   * @param workflow A workflow instance, used for DSL level validation
+   */
+  preValidation?: (instance: T, workflow?: Partial) => void;
+  /**
+   * The hook called after the validation
+   * @param instance A copy instance being validated
+   * @param workflow A workflow instance, used for DSL level validation
+   */
+  postValidation?: (instance: T, workflow?: Partial) => void;
+  /**
+   * The hook called to normalized the instance
+   * @param instance A copy of the instance to normalize
+   * @returns The normalized instance
+   */
+  normalize?: (instance: T) => T;
+};
+
+/**
+ * A mapping of type names and their lifecycle hooks
+ */
+const registeredHooks: Map> = new Map>();
+
+/**
+ * The function used to register hooks
+ * @param typeName The name of the type to register the hooks for
+ * @param hooks The hooks to register
+ */
+export const registerHooks = (typeName: string, hooks: LifecycleHooks): void => {
+  registeredHooks.set(typeName, hooks);
+};
+
+/**
+ * Gets the lifecylce hook for the provided type, if any
+ * @param typeName The type to get the lifecycle hook for
+ * @returns The lifecycle hook, if any
+ */
+export const getLifecycleHooks = (typeName: string): LifecycleHooks | undefined => {
+  return registeredHooks.get(typeName);
+};
+
+registerHooks('Workflow', WorkflowHooks);
diff --git a/src/lib/schema/__merged.json b/src/lib/schema/__merged.json
deleted file mode 100644
index e26c6c5..0000000
--- a/src/lib/schema/__merged.json
+++ /dev/null
@@ -1,2610 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/workflow.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - workflow schema",
-  "type": "object",
-  "properties": {
-    "id": {
-      "type": "string",
-      "description": "Workflow unique identifier",
-      "minLength": 1
-    },
-    "key": {
-      "type": "string",
-      "description": "Domain-specific workflow identifier",
-      "minLength": 1
-    },
-    "name": {
-      "type": "string",
-      "description": "Workflow name",
-      "minLength": 1
-    },
-    "description": {
-      "type": "string",
-      "description": "Workflow description"
-    },
-    "version": {
-      "type": "string",
-      "description": "Workflow version",
-      "minLength": 1
-    },
-    "annotations": {
-      "type": "array",
-      "description": "List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities",
-      "minItems": 1,
-      "items": {
-        "type": "string"
-      },
-      "additionalItems": false
-    },
-    "dataInputSchema": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "URI of the JSON Schema used to validate the workflow data input",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Workflow data input schema definition",
-          "properties": {
-            "schema": {
-              "type": "string",
-              "description": "URI of the JSON Schema used to validate the workflow data input",
-              "minLength": 1
-            },
-            "failOnValidationErrors": {
-              "type": "boolean",
-              "default": true,
-              "description": "Determines if workflow execution should continue if there are validation errors"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "schema",
-            "failOnValidationErrors"
-          ]
-        }
-      ]
-    },
-    "secrets": {
-      "$ref": "#/definitions/secrets"
-    },
-    "constants": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing constants data (json or yaml)"
-        },
-        {
-          "type": "object",
-          "description": "Workflow constants data (object type)"
-        }
-      ]
-    },
-    "start": {
-      "$ref": "#/definitions/startdef"
-    },
-    "specVersion": {
-      "type": "string",
-      "description": "Serverless Workflow schema version",
-      "minLength": 1
-    },
-    "expressionLang": {
-      "type": "string",
-      "description": "Identifies the expression language used for workflow expressions. Default is 'jq'",
-      "default": "jq",
-      "minLength": 1
-    },
-    "timeouts": {
-      "$ref": "#/definitions/timeouts"
-    },
-    "errors": {
-      "$ref": "#/definitions/errors"
-    },
-    "keepActive": {
-      "type": "boolean",
-      "default": false,
-      "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'"
-    },
-    "metadata": {
-      "$ref": "#/definitions/metadata"
-    },
-    "events": {
-      "$ref": "#/definitions/events"
-    },
-    "functions": {
-      "$ref": "#/definitions/functions"
-    },
-    "autoRetries": {
-      "type": "boolean",
-      "default": false,
-      "description": "If set to true, actions should automatically be retried on unchecked errors. Default is false"
-    },
-    "retries": {
-      "$ref": "#/definitions/retries"
-    },
-    "auth": {
-      "$ref": "#/definitions/auth"
-    },
-    "states": {
-      "type": "array",
-      "description": "State definitions",
-      "items": {
-        "anyOf": [
-          {
-            "title": "Sleep State",
-            "$ref": "#/definitions/sleepstate"
-          },
-          {
-            "title": "Event State",
-            "$ref": "#/definitions/eventstate"
-          },
-          {
-            "title": "Operation State",
-            "$ref": "#/definitions/operationstate"
-          },
-          {
-            "title": "Parallel State",
-            "$ref": "#/definitions/parallelstate"
-          },
-          {
-            "title": "Switch State",
-            "$ref": "#/definitions/switchstate"
-          },
-          {
-            "title": "Inject State",
-            "$ref": "#/definitions/injectstate"
-          },
-          {
-            "title": "ForEach State",
-            "$ref": "#/definitions/foreachstate"
-          },
-          {
-            "title": "Callback State",
-            "$ref": "#/definitions/callbackstate"
-          }
-        ]
-      },
-      "additionalItems": false,
-      "minItems": 1
-    }
-  },
-  "oneOf": [
-    {
-      "required": [
-        "id",
-        "specVersion",
-        "states"
-      ]
-    },
-    {
-      "required": [
-        "key",
-        "specVersion",
-        "states"
-      ]
-    }
-  ],
-  "definitions": {
-    "sleep": {
-      "type": "object",
-      "properties": {
-        "before": {
-          "type": "string",
-          "description": "Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined."
-        },
-        "after": {
-          "type": "string",
-          "description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined."
-        }
-      },
-      "oneOf": [
-        {
-          "required": [
-            "before"
-          ]
-        },
-        {
-          "required": [
-            "after"
-          ]
-        },
-        {
-          "required": [
-            "before",
-            "after"
-          ]
-        }
-      ]
-    },
-    "crondef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Cron expression defining when workflow instances should be created (automatically)",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "expression": {
-              "type": "string",
-              "description": "Repeating interval (cron expression) describing when the workflow instance should be created",
-              "minLength": 1
-            },
-            "validUntil": {
-              "type": "string",
-              "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "expression"
-          ]
-        }
-      ]
-    },
-    "continueasdef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Unique id of the workflow to be continue execution as. Entire state data is passed as data input to next execution",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "workflowId": {
-              "type": "string",
-              "description": "Unique id of the workflow to continue execution as"
-            },
-            "version": {
-              "type": "string",
-              "description": "Version of the workflow to continue execution as",
-              "minLength": 1
-            },
-            "data": {
-              "type": [
-                "string",
-                "object"
-              ],
-              "description": "If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution"
-            },
-            "workflowExecTimeout": {
-              "$ref": "#/definitions/workflowExecTimeout",
-              "description": "Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow"
-            }
-          },
-          "required": [
-            "workflowId"
-          ]
-        }
-      ]
-    },
-    "transition": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of state to transition to",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Function Reference",
-          "properties": {
-            "nextState": {
-              "type": "string",
-              "description": "Name of state to transition to",
-              "minLength": 1
-            },
-            "produceEvents": {
-              "type": "array",
-              "description": "Array of events to be produced before the transition happens",
-              "items": {
-                "type": "object",
-                "$ref": "#/definitions/produceeventdef"
-              },
-              "additionalItems": false
-            },
-            "compensate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "nextState"
-          ]
-        }
-      ]
-    },
-    "error": {
-      "type": "object",
-      "properties": {
-        "errorRef": {
-          "type": "string",
-          "description": "Reference to a unique workflow error definition. Used of errorRefs is not used",
-          "minLength": 1
-        },
-        "errorRefs": {
-          "type": "array",
-          "description": "References one or more workflow error definitions. Used if errorRef is not used",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Transition to next state to handle the error.",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "description": "End workflow execution in case of this error.",
-          "$ref": "#/definitions/end"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "errorRef",
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "errorRef",
-            "end"
-          ]
-        },
-        {
-          "required": [
-            "errorRefs",
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "errorRefs",
-            "end"
-          ]
-        }
-      ]
-    },
-    "onevents": {
-      "type": "object",
-      "properties": {
-        "eventRefs": {
-          "type": "array",
-          "description": "References one or more unique event names in the defined workflow events",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "uniqueItems": true,
-          "additionalItems": false
-        },
-        "actionMode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies how actions are to be performed (in sequence or in parallel)",
-          "default": "sequential"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be performed if expression matches",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        },
-        "eventDataFilter": {
-          "description": "Event data filter",
-          "$ref": "#/definitions/eventdatafilter"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRefs"
-      ]
-    },
-    "action": {
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique action identifier"
-        },
-        "name": {
-          "type": "string",
-          "description": "Unique action definition name"
-        },
-        "functionRef": {
-          "description": "References a function to be invoked",
-          "$ref": "#/definitions/functionref"
-        },
-        "eventRef": {
-          "description": "References a 'trigger' and 'result' reusable event definitions",
-          "$ref": "#/definitions/eventref"
-        },
-        "subFlowRef": {
-          "description": "References a sub-workflow to invoke",
-          "$ref": "#/definitions/subflowref"
-        },
-        "sleep": {
-          "description": "Defines time periods workflow execution should sleep before / after function execution",
-          "$ref": "#/definitions/sleep"
-        },
-        "retryRef": {
-          "type": "string",
-          "description": "References a defined workflow retry definition. If not defined the default retry policy is assumed"
-        },
-        "nonRetryableErrors": {
-          "type": "array",
-          "description": "List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "retryableErrors": {
-          "type": "array",
-          "description": "List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "actionDataFilter": {
-          "description": "Action data filter",
-          "$ref": "#/definitions/actiondatafilter"
-        },
-        "condition": {
-          "description": "Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded",
-          "type": "string",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "functionRef"
-          ]
-        },
-        {
-          "required": [
-            "eventRef"
-          ]
-        },
-        {
-          "required": [
-            "subFlowRef"
-          ]
-        }
-      ]
-    },
-    "functionref": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of the referenced function",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Function Reference",
-          "properties": {
-            "refName": {
-              "type": "string",
-              "description": "Name of the referenced function"
-            },
-            "arguments": {
-              "type": "object",
-              "description": "Function arguments/inputs"
-            },
-            "selectionSet": {
-              "type": "string",
-              "description": "Only used if function type is 'graphql'. A string containing a valid GraphQL selection set"
-            },
-            "invoke": {
-              "type": "string",
-              "enum": [
-                "sync",
-                "async"
-              ],
-              "description": "Specifies if the function should be invoked sync or async",
-              "default": "sync"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "refName"
-          ]
-        }
-      ]
-    },
-    "eventref": {
-      "type": "object",
-      "description": "Event References",
-      "properties": {
-        "triggerEventRef": {
-          "type": "string",
-          "description": "Reference to the unique name of a 'produced' event definition"
-        },
-        "resultEventRef": {
-          "type": "string",
-          "description": "Reference to the unique name of a 'consumed' event definition"
-        },
-        "resultEventTimeout": {
-          "type": "string",
-          "description": "Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout"
-        },
-        "data": {
-          "type": [
-            "string",
-            "object"
-          ],
-          "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'."
-        },
-        "contextAttributes": {
-          "type": "object",
-          "description": "Add additional extension context attributes to the produced event",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "invoke": {
-          "type": "string",
-          "enum": [
-            "sync",
-            "async"
-          ],
-          "description": "Specifies if the function should be invoked sync or async. Default is sync.",
-          "default": "sync"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "triggerEventRef",
-        "resultEventRef"
-      ]
-    },
-    "subflowref": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Unique id of the sub-workflow to be invoked",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Specifies a sub-workflow to be invoked",
-          "properties": {
-            "workflowId": {
-              "type": "string",
-              "description": "Unique id of the sub-workflow to be invoked"
-            },
-            "version": {
-              "type": "string",
-              "description": "Version of the sub-workflow to be invoked",
-              "minLength": 1
-            },
-            "onParentComplete": {
-              "type": "string",
-              "enum": [
-                "continue",
-                "terminate"
-              ],
-              "description": "If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'",
-              "default": "terminate"
-            },
-            "invoke": {
-              "type": "string",
-              "enum": [
-                "sync",
-                "async"
-              ],
-              "description": "Specifies if the subflow should be invoked sync or async",
-              "default": "sync"
-            }
-          },
-          "required": [
-            "workflowId"
-          ]
-        }
-      ]
-    },
-    "branch": {
-      "type": "object",
-      "description": "Branch Definition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Branch name"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            },
-            "branchExecTimeout": {
-              "$ref": "#/definitions/branchExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be executed in this branch",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "actions"
-      ]
-    },
-    "sleepstate": {
-      "type": "object",
-      "description": "Causes the workflow execution to sleep for a specified duration",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "sleep",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "duration": {
-          "type": "string",
-          "description": "Duration (ISO 8601 duration format) to sleep"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after the workflow sleep",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "duration"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "duration",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "duration",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "eventstate": {
-      "type": "object",
-      "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "event",
-          "description": "State type"
-        },
-        "exclusive": {
-          "type": "boolean",
-          "default": true,
-          "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed"
-        },
-        "onEvents": {
-          "type": "array",
-          "description": "Define the events to be consumed and optional actions to be performed",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/onevents"
-          },
-          "additionalItems": false
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "name",
-            "type",
-            "onEvents",
-            "end"
-          ]
-        },
-        {
-          "required": [
-            "name",
-            "type",
-            "onEvents",
-            "transition"
-          ]
-        }
-      ]
-    },
-    "operationstate": {
-      "type": "object",
-      "description": "Defines actions be performed. Does not wait for incoming events",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "operation",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "actionMode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies whether actions are performed in sequence or in parallel",
-          "default": "sequential"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be performed",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          }
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "actions"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "actions",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "actions",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "parallelstate": {
-      "type": "object",
-      "description": "Consists of a number of states that are executed in parallel",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "parallel",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "branchExecTimeout": {
-              "$ref": "#/definitions/branchExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "branches": {
-          "type": "array",
-          "description": "Branch Definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/branch"
-          },
-          "additionalItems": false
-        },
-        "completionType": {
-          "type": "string",
-          "enum": [
-            "allOf",
-            "atLeast"
-          ],
-          "description": "Option types on how to complete branch execution.",
-          "default": "allOf"
-        },
-        "numCompleted": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 0,
-          "description": "Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition."
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all branches have completed execution",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "branches"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "branches",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "branches",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "switchstate": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/databasedswitchstate"
-        },
-        {
-          "$ref": "#/definitions/eventbasedswitchstate"
-        }
-      ]
-    },
-    "eventbasedswitchstate": {
-      "type": "object",
-      "description": "Permits transitions to other states based on events",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "switch",
-          "description": "State type"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "eventConditions": {
-          "type": "array",
-          "description": "Defines conditions evaluated against events",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/eventcondition"
-          },
-          "additionalItems": false
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "defaultCondition": {
-          "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition",
-          "$ref": "#/definitions/defaultconditiondef"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "type",
-        "eventConditions",
-        "defaultCondition"
-      ]
-    },
-    "databasedswitchstate": {
-      "type": "object",
-      "description": "Permits transitions to other states based on data conditions",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "switch",
-          "description": "State type"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "dataConditions": {
-          "type": "array",
-          "description": "Defines conditions evaluated against state data",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/datacondition"
-          },
-          "additionalItems": false
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "defaultCondition": {
-          "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition",
-          "$ref": "#/definitions/defaultconditiondef"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "type",
-        "dataConditions",
-        "defaultCondition"
-      ]
-    },
-    "defaultconditiondef": {
-      "type": "object",
-      "description": "DefaultCondition definition. Can be either a transition or end definition",
-      "properties": {
-        "transition": {
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "end"
-          ]
-        }
-      ]
-    },
-    "eventcondition": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/transitioneventcondition"
-        },
-        {
-          "$ref": "#/definitions/enddeventcondition"
-        }
-      ]
-    },
-    "transitioneventcondition": {
-      "type": "object",
-      "description": "Switch state data event condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Event condition name"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique event name in the defined workflow events"
-        },
-        "transition": {
-          "description": "Next transition of the workflow if there is valid matches",
-          "$ref": "#/definitions/transition"
-        },
-        "eventDataFilter": {
-          "description": "Event data filter definition",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef",
-        "transition"
-      ]
-    },
-    "enddeventcondition": {
-      "type": "object",
-      "description": "Switch state data event condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Event condition name"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique event name in the defined workflow events"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "Explicit transition to end"
-        },
-        "eventDataFilter": {
-          "description": "Event data filter definition",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef",
-        "end"
-      ]
-    },
-    "datacondition": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/transitiondatacondition"
-        },
-        {
-          "$ref": "#/definitions/enddatacondition"
-        }
-      ]
-    },
-    "transitiondatacondition": {
-      "type": "object",
-      "description": "Switch state data based condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Data condition name"
-        },
-        "condition": {
-          "type": "string",
-          "description": "Workflow expression evaluated against state data. Must evaluate to true or false"
-        },
-        "transition": {
-          "description": "Workflow transition if condition is evaluated to true",
-          "$ref": "#/definitions/transition"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "condition",
-        "transition"
-      ]
-    },
-    "enddatacondition": {
-      "type": "object",
-      "description": "Switch state data based condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Data condition name"
-        },
-        "condition": {
-          "type": "string",
-          "description": "Workflow expression evaluated against state data. Must evaluate to true or false"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "Workflow end definition"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "condition",
-        "end"
-      ]
-    },
-    "injectstate": {
-      "type": "object",
-      "description": "Inject static data into state data. Does not perform any actions",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique state id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "inject",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "data": {
-          "type": "object",
-          "description": "JSON object which can be set as states data input and can be manipulated via filters"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "transition": {
-          "description": "Next transition of the workflow after injection has completed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "data"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "data",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "data",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "foreachstate": {
-      "type": "object",
-      "description": "Execute a set of defined actions or workflows for each element of a data array",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique State id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "foreach",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "inputCollection": {
-          "type": "string",
-          "description": "Workflow expression selecting an array element of the states data"
-        },
-        "outputCollection": {
-          "type": "string",
-          "description": "Workflow expression specifying an array element of the states data to add the results of each iteration"
-        },
-        "iterationParam": {
-          "type": "string",
-          "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array"
-        },
-        "batchSize": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 0,
-          "description": "Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be executed for each of the elements of inputCollection",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after state has completed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "mode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies how iterations are to be performed (sequentially or in parallel)",
-          "default": "parallel"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "inputCollection",
-          "actions"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "inputCollection",
-              "actions",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "inputCollection",
-              "actions",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "callbackstate": {
-      "type": "object",
-      "description": "This state performs an action, then waits for the callback event that denotes completion of the action",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unique state id",
-          "minLength": 1
-        },
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "callback",
-          "description": "State type"
-        },
-        "action": {
-          "description": "Defines the action to be executed",
-          "$ref": "#/definitions/action"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique callback event name in the defined workflow events"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "eventDataFilter": {
-          "description": "Event data filter",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "action",
-          "eventRef"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "action",
-              "eventRef",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "action",
-              "eventRef",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "startdef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of the starting workflow state",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Workflow start definition",
-          "properties": {
-            "stateName": {
-              "type": "string",
-              "description": "Name of the starting workflow state",
-              "minLength": 1
-            },
-            "schedule": {
-              "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.",
-              "$ref": "#/definitions/schedule"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "stateName",
-            "schedule"
-          ]
-        }
-      ]
-    },
-    "schedule": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.  (UTC timezone is assumed)",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Start state schedule definition",
-          "properties": {
-            "interval": {
-              "type": "string",
-              "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.",
-              "minLength": 1
-            },
-            "cron": {
-              "$ref": "#/definitions/crondef"
-            },
-            "timezone": {
-              "type": "string",
-              "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)"
-            }
-          },
-          "additionalProperties": false,
-          "oneOf": [
-            {
-              "required": [
-                "interval"
-              ]
-            },
-            {
-              "required": [
-                "cron"
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "end": {
-      "oneOf": [
-        {
-          "type": "boolean",
-          "description": "State end definition",
-          "default": true
-        },
-        {
-          "type": "object",
-          "description": "State end definition",
-          "properties": {
-            "terminate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If true, completes all execution flows in the given workflow instance"
-            },
-            "produceEvents": {
-              "type": "array",
-              "description": "Defines events that should be produced",
-              "items": {
-                "type": "object",
-                "$ref": "#/definitions/produceeventdef"
-              },
-              "additionalItems": false
-            },
-            "compensate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If set to true, triggers workflow compensation. Default is false"
-            },
-            "continueAs": {
-              "$ref": "#/definitions/continueasdef"
-            }
-          },
-          "additionalProperties": false,
-          "required": []
-        }
-      ]
-    },
-    "produceeventdef": {
-      "type": "object",
-      "description": "Produce an event and set its data",
-      "properties": {
-        "eventRef": {
-          "type": "string",
-          "description": "References a name of a defined event"
-        },
-        "data": {
-          "type": [
-            "string",
-            "object"
-          ],
-          "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event."
-        },
-        "contextAttributes": {
-          "type": "object",
-          "description": "Add additional event extension context attributes",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef"
-      ]
-    },
-    "statedatafilter": {
-      "type": "object",
-      "properties": {
-        "input": {
-          "type": "string",
-          "description": "Workflow expression to filter the state data input"
-        },
-        "output": {
-          "type": "string",
-          "description": "Workflow expression that filters the state data output"
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    },
-    "eventdatafilter": {
-      "type": "object",
-      "properties": {
-        "useData": {
-          "type": "boolean",
-          "description": "If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.",
-          "default": true
-        },
-        "data": {
-          "type": "string",
-          "description": "Workflow expression that filters the received event payload (default: '${ . }')"
-        },
-        "toStateData": {
-          "type": "string",
-          "description": " Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element."
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    },
-    "actiondatafilter": {
-      "type": "object",
-      "properties": {
-        "fromStateData": {
-          "type": "string",
-          "description": "Workflow expression that selects state data that the state action can use"
-        },
-        "useResults": {
-          "type": "boolean",
-          "description": "If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.",
-          "default": true
-        },
-        "results": {
-          "type": "string",
-          "description": "Workflow expression that filters the actions data results"
-        },
-        "toStateData": {
-          "type": "string",
-          "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element"
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    },
-    "errordef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Domain-specific error name",
-          "minLength": 1
-        },
-        "code": {
-          "type": "string",
-          "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'",
-          "minLength": 1
-        },
-        "description": {
-          "type": "string",
-          "description": "Error description"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name"
-      ]
-    },
-    "retrydef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique retry strategy name",
-          "minLength": 1
-        },
-        "delay": {
-          "type": "string",
-          "description": "Time delay between retry attempts (ISO 8601 duration format)"
-        },
-        "maxDelay": {
-          "type": "string",
-          "description": "Maximum time delay between retry attempts (ISO 8601 duration format)"
-        },
-        "increment": {
-          "type": "string",
-          "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)"
-        },
-        "multiplier": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 1,
-          "multipleOf": 0.01,
-          "description": "Numeric value, if specified the delay between retries is multiplied by this value."
-        },
-        "maxAttempts": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 1,
-          "minLength": 0,
-          "description": "Maximum number of retry attempts."
-        },
-        "jitter": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "maximum": 1,
-          "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "maxAttempts"
-      ]
-    },
-    "metadata": {
-      "type": "object",
-      "description": "Metadata information",
-      "additionalProperties": {
-        "type": "string"
-      }
-    },
-    "authdef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique auth definition name",
-          "minLength": 1
-        },
-        "scheme": {
-          "type": "string",
-          "description": "Defines the auth type",
-          "enum": [
-            "basic",
-            "bearer",
-            "oauth2"
-          ],
-          "default": "basic"
-        },
-        "properties": {
-          "oneOf": [
-            {
-              "type": "string",
-              "description": "Expression referencing a workflow secret that contains all needed auth info"
-            },
-            {
-              "title": "Basic Auth Info",
-              "$ref": "#/definitions/basicpropsdef"
-            },
-            {
-              "title": "Bearer Auth Info State",
-              "$ref": "#/definitions/bearerpropsdef"
-            },
-            {
-              "title": "OAuth2  Info",
-              "$ref": "#/definitions/oauth2propsdef"
-            }
-          ]
-        }
-      },
-      "required": [
-        "name",
-        "properties"
-      ]
-    },
-    "basicpropsdef": {
-      "type": "object",
-      "description": "Basic auth information",
-      "properties": {
-        "username": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the user name",
-          "minLength": 1
-        },
-        "password": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the user password",
-          "minLength": 1
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "required": [
-        "username",
-        "password"
-      ],
-      "additionalProperties": false
-    },
-    "bearerpropsdef": {
-      "type": "object",
-      "description": "Bearer auth information",
-      "properties": {
-        "token": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the token",
-          "minLength": 1
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "required": [
-        "token"
-      ],
-      "additionalProperties": false
-    },
-    "oauth2propsdef": {
-      "type": "object",
-      "description": "OAuth2 information",
-      "properties": {
-        "authority": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the authority information",
-          "minLength": 1
-        },
-        "grantType": {
-          "type": "string",
-          "description": "Defines the grant type",
-          "enum": [
-            "password",
-            "clientCredentials",
-            "tokenExchange"
-          ],
-          "additionalItems": false
-        },
-        "clientId": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the client identifier",
-          "minLength": 1
-        },
-        "clientSecret": {
-          "type": "string",
-          "description": "Workflow secret or a workflow expression. Contains the client secret",
-          "minLength": 1
-        },
-        "scopes": {
-          "type": "array",
-          "description": "Array containing strings or workflow expressions. Contains the OAuth2 scopes",
-          "items": {
-            "type": "string"
-          },
-          "minItems": 1,
-          "additionalItems": false
-        },
-        "username": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'",
-          "minLength": 1
-        },
-        "password": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'",
-          "minLength": 1
-        },
-        "audiences": {
-          "type": "array",
-          "description": "Array containing strings or workflow expressions. Contains the OAuth2 audiences",
-          "items": {
-            "type": "string"
-          },
-          "minItems": 1,
-          "additionalItems": false
-        },
-        "subjectToken": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the subject token",
-          "minLength": 1
-        },
-        "requestedSubject": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the requested subject",
-          "minLength": 1
-        },
-        "requestedIssuer": {
-          "type": "string",
-          "description": "String or a workflow expression. Contains the requested issuer",
-          "minLength": 1
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "required": [
-        "grantType",
-        "clientId"
-      ]
-    },
-    "function": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique function name",
-          "minLength": 1
-        },
-        "operation": {
-          "type": "string",
-          "description": "If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.",
-          "minLength": 1
-        },
-        "type": {
-          "type": "string",
-          "description": "Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`",
-          "enum": [
-            "rest",
-            "asyncapi",
-            "rpc",
-            "graphql",
-            "odata",
-            "expression",
-            "custom"
-          ],
-          "default": "rest"
-        },
-        "authRef": {
-          "type": "string",
-          "description": "References an auth definition name to be used to access to resource defined in the operation parameter",
-          "minLength": 1
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "operation"
-      ]
-    },
-    "workflowExecTimeout": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "duration": {
-              "type": "string",
-              "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'",
-              "minLength": 1
-            },
-            "interrupt": {
-              "type": "boolean",
-              "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.",
-              "default": true
-            },
-            "runBefore": {
-              "type": "string",
-              "description": "Name of a workflow state to be executed before workflow instance is terminated",
-              "minLength": 1
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "duration"
-          ]
-        }
-      ]
-    },
-    "stateExecTimeout": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Total state execution timeout (including retries) (ISO 8601 duration format)",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Workflow default timeouts",
-          "properties": {
-            "single": {
-              "type": "string",
-              "description": "Single state execution timeout, not including retries (ISO 8601 duration format)",
-              "minLength": 1
-            },
-            "total": {
-              "type": "string",
-              "description": "Total state execution timeout, including retries (ISO 8601 duration format)",
-              "minLength": 1
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "total"
-          ]
-        }
-      ]
-    },
-    "actionExecTimeout": {
-      "type": "string",
-      "description": "Single actions definition execution timeout duration (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "branchExecTimeout": {
-      "type": "string",
-      "description": "Single branch execution timeout duration (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "eventTimeout": {
-      "type": "string",
-      "description": "Timeout duration to wait for consuming defined events (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "eventdef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique event name",
-          "minLength": 1
-        },
-        "source": {
-          "type": "string",
-          "description": "CloudEvent source"
-        },
-        "type": {
-          "type": "string",
-          "description": "CloudEvent type"
-        },
-        "kind": {
-          "type": "string",
-          "enum": [
-            "consumed",
-            "produced"
-          ],
-          "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'",
-          "default": "consumed"
-        },
-        "correlation": {
-          "type": "array",
-          "description": "CloudEvent correlation definitions",
-          "minItems": 1,
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/correlationDef"
-          },
-          "additionalItems": false
-        },
-        "dataOnly": {
-          "type": "boolean",
-          "default": true,
-          "description": "If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible "
-        },
-        "metadata": {
-          "$ref": "#/definitions/metadata",
-          "description": "Metadata information"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "kind": {
-            "const": "consumed"
-          }
-        }
-      },
-      "then": {
-        "required": [
-          "name",
-          "source",
-          "type"
-        ]
-      },
-      "else": {
-        "required": [
-          "name",
-          "type"
-        ]
-      }
-    },
-    "correlationDef": {
-      "type": "object",
-      "description": "CloudEvent correlation definition",
-      "properties": {
-        "contextAttributeName": {
-          "type": "string",
-          "description": "CloudEvent Extension Context Attribute name",
-          "minLength": 1
-        },
-        "contextAttributeValue": {
-          "type": "string",
-          "description": "CloudEvent Extension Context Attribute value",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "contextAttributeName"
-      ]
-    },
-    "secrets": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing secrets definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow Secrets definitions",
-          "items": {
-            "type": "string"
-          },
-          "minItems": 1
-        }
-      ]
-    },
-    "timeouts": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing timeouts definitions (json or yaml)"
-        },
-        {
-          "type": "object",
-          "description": "Workflow default timeouts",
-          "properties": {
-            "workflowExecTimeout": {
-              "$ref": "#/definitions/workflowExecTimeout"
-            },
-            "stateExecTimeout": {
-              "$ref": "#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "#/definitions/actionExecTimeout"
-            },
-            "branchExecTimeout": {
-              "$ref": "#/definitions/branchExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "#/definitions/eventTimeout"
-            }
-          },
-          "additionalProperties": false,
-          "required": []
-        }
-      ]
-    },
-    "errors": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing error definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow Error definitions. Defines checked errors that can be explicitly handled during workflow execution",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/errordef"
-          },
-          "additionalItems": false,
-          "minItems": 1
-        }
-      ]
-    },
-    "events": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing event definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/eventdef"
-          },
-          "additionalItems": false,
-          "minItems": 1
-        }
-      ]
-    },
-    "functions": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing function definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow function definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/function"
-          },
-          "additionalItems": false,
-          "minItems": 1
-        }
-      ]
-    },
-    "retries": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing retry definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/retrydef"
-          },
-          "additionalItems": false,
-          "minItems": 1
-        }
-      ]
-    },
-    "auth": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing auth definitions (json or yaml)"
-        },
-        {
-          "type": "array",
-          "description": "Workflow auth definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/authdef"
-          },
-          "additionalItems": false,
-          "minItems": 1
-        }
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/auth.json b/src/lib/schema/auth.json
deleted file mode 100644
index 253ab07..0000000
--- a/src/lib/schema/auth.json
+++ /dev/null
@@ -1,194 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/auth.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - auth schema",
-  "type": "object",
-  "auth": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing auth definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow auth definitions",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/authdef"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "auth"
-  ],
-  "definitions": {
-    "authdef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique auth definition name",
-          "minLength": 1
-        },
-        "scheme": {
-          "type": "string",
-          "description": "Defines the auth type",
-          "enum": [
-            "basic",
-            "bearer",
-            "oauth2"
-          ],
-          "default": "basic"
-        },
-        "properties": {
-          "oneOf": [
-            {
-              "type": "string",
-              "description": "Expression referencing a workflow secret that contains all needed auth info"
-            },
-            {
-              "title": "Basic Auth Info",
-              "$ref": "#/definitions/basicpropsdef"
-            },
-            {
-              "title": "Bearer Auth Info State",
-              "$ref": "#/definitions/bearerpropsdef"
-            },
-            {
-              "title": "OAuth2  Info",
-              "$ref": "#/definitions/oauth2propsdef"
-            }
-          ]
-        }
-      },
-      "required": [
-        "name",
-        "properties"
-      ]
-    },
-    "basicpropsdef": {
-        "type": "object",
-        "description": "Basic auth information",
-        "properties": {
-          "username": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the user name",
-            "minLength": 1
-          },
-          "password": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the user password",
-            "minLength": 1
-          },
-          "metadata": {
-            "$ref": "common.json#/definitions/metadata"
-          }
-        },
-        "required": [
-          "username",
-          "password"
-        ],
-        "additionalProperties": false
-    },
-    "bearerpropsdef": {
-        "type": "object",
-        "description": "Bearer auth information",
-        "properties": {
-          "token": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the token",
-            "minLength": 1
-          },
-          "metadata": {
-            "$ref": "common.json#/definitions/metadata"
-          }
-        },
-        "required": [
-          "token"
-        ],
-        "additionalProperties": false
-    },
-    "oauth2propsdef": {
-        "type": "object",
-        "description": "OAuth2 information",
-        "properties": {
-          "authority": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the authority information",
-            "minLength": 1
-          },
-          "grantType": {
-            "type": "string",
-            "description": "Defines the grant type",
-            "enum": [
-              "password",
-              "clientCredentials",
-              "tokenExchange"
-            ],
-            "additionalItems": false
-          },
-          "clientId": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the client identifier",
-            "minLength": 1
-          },
-          "clientSecret": {
-            "type": "string",
-            "description": "Workflow secret or a workflow expression. Contains the client secret",
-            "minLength": 1
-          },
-          "scopes": {
-            "type": "array",
-            "description": "Array containing strings or workflow expressions. Contains the OAuth2 scopes",
-            "items": {
-              "type": "string"
-            },
-            "minItems": 1,
-            "additionalItems": false
-          },
-          "username": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'",
-            "minLength": 1
-          },
-          "password": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'",
-            "minLength": 1
-          },
-          "audiences": {
-            "type": "array",
-            "description": "Array containing strings or workflow expressions. Contains the OAuth2 audiences",
-            "items": {
-              "type": "string"
-            },
-            "minItems": 1,
-            "additionalItems": false
-          },
-          "subjectToken": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the subject token",
-            "minLength": 1
-          },
-          "requestedSubject": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the requested subject",
-            "minLength": 1
-          },
-          "requestedIssuer": {
-            "type": "string",
-            "description": "String or a workflow expression. Contains the requested issuer",
-            "minLength": 1
-          },
-          "metadata": {
-            "$ref": "common.json#/definitions/metadata"
-          }
-        },
-        "required": ["grantType", "clientId"]
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/common.json b/src/lib/schema/common.json
deleted file mode 100644
index 5a3593e..0000000
--- a/src/lib/schema/common.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/common.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - common schema",
-  "type": "object",
-  "definitions": {
-    "metadata": {
-      "type": "object",
-      "description": "Metadata information",
-      "additionalProperties": {
-        "type": "string"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/errors.json b/src/lib/schema/errors.json
deleted file mode 100644
index 5208896..0000000
--- a/src/lib/schema/errors.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/errors.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - errors schema",
-  "type": "object",
-  "errors": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing error definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow Error definitions. Defines checked errors that can be explicitly handled during workflow execution",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/errordef"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "errors"
-  ],
-  "definitions": {
-    "errordef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Domain-specific error name",
-          "minLength": 1
-        },
-        "code": {
-          "type": "string",
-          "description": "Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'",
-          "minLength": 1
-        },
-        "description": {
-          "type": "string",
-          "description": "Error description"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name"
-      ]
-    }
-  }
-}
diff --git a/src/lib/schema/events.json b/src/lib/schema/events.json
deleted file mode 100644
index 59ef767..0000000
--- a/src/lib/schema/events.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/events.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - events schema",
-  "type": "object",
-  "events": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing event definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow CloudEvent definitions. Defines CloudEvents that can be consumed or produced",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/eventdef"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "events"
-  ],
-  "definitions": {
-    "eventdef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique event name",
-          "minLength": 1
-        },
-        "source": {
-          "type": "string",
-          "description": "CloudEvent source"
-        },
-        "type": {
-          "type": "string",
-          "description": "CloudEvent type"
-        },
-        "kind": {
-          "type": "string",
-          "enum": [
-            "consumed",
-            "produced"
-          ],
-          "description": "Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'",
-          "default": "consumed"
-        },
-        "correlation": {
-          "type": "array",
-          "description": "CloudEvent correlation definitions",
-          "minItems": 1,
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/correlationDef"
-          },
-          "additionalItems": false
-        },
-        "dataOnly": {
-          "type": "boolean",
-          "default": true,
-          "description": "If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible "
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata",
-          "description": "Metadata information"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "source": {
-            "type": "null"
-          }
-        }
-      },
-      "then": {
-        "required": [
-          "name",
-          "type"
-        ]
-      },
-      "else": {
-        "required": [
-          "name",
-          "source"
-        ]
-      }
-    },
-    "correlationDef": {
-      "type": "object",
-      "description": "CloudEvent correlation definition",
-      "properties": {
-        "contextAttributeName": {
-          "type": "string",
-          "description": "CloudEvent Extension Context Attribute name",
-          "minLength": 1
-        },
-        "contextAttributeValue": {
-          "type": "string",
-          "description": "CloudEvent Extension Context Attribute value",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "contextAttributeName"
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/extensions/kpi.json b/src/lib/schema/extensions/kpi.json
deleted file mode 100644
index 08a8138..0000000
--- a/src/lib/schema/extensions/kpi.json
+++ /dev/null
@@ -1,289 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/extensions/kpi.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - KPIs Extension Schema",
-  "type": "object",
-  "definitions": {
-    "kpi": {
-      "type": "object",
-      "description": "Serverless Workflow KPI Extension",
-      "properties": {
-        "extensionid": {
-          "type": "string",
-          "default": "workflow-kpi-extension",
-          "description": "Extension unique identifier"
-        },
-        "workflowid": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Workflow definition unique identifier (workflow id property)"
-        },
-        "workflowVersions": {
-          "type": "array",
-          "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)",
-          "items": {
-            "type": "string"
-          }
-        },
-        "currency": {
-          "type": "string",
-          "default": "USD",
-          "description": "Unit for all cost-based KPI parameters. Default 'USD'"
-        },
-        "events": {
-          "type": "array",
-          "description": "Events KPIs",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/eventskpi"
-          }
-        },
-        "functions": {
-          "type": "array",
-          "description": "Functions KPIs",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/functionskpi"
-          }
-        },
-        "states": {
-          "type": "array",
-          "description": "States KPIs",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/stateskpi"
-          }
-        },
-        "workflow": {
-          "description": "Workflow KPIs",
-          "$ref": "#/definitions/workflowkpi"
-        }
-      },
-      "required": [
-        "extensionid",
-        "workflowid"
-      ]
-    },
-    "eventskpi": {
-      "type": "object",
-      "properties": {
-        "for": {
-          "type": "string",
-          "description": "References an unique event name in the defined workflow events"
-        },
-        "per": {
-          "description": "Define the kpi thresholds in terms of time and/or num of workflow instances",
-          "$ref": "#/definitions/thresholds"
-        },
-        "maxConsumed": {
-          "type": "string",
-          "description": "If event kind is 'consumed', the max amount of times this event is consumed"
-        },
-        "minConsumed": {
-          "type": "string",
-          "description": "If event kind is 'consumed', the min amount of times this event is consumed"
-        },
-        "avgConsumed": {
-          "type": "string",
-          "description": "If event kind is 'consumed', the avg amount of times this event is consumed"
-        },
-        "maxProduced": {
-          "type": "string",
-          "description": "If event kind is 'produced', the max amount of times this event is produced"
-        },
-        "minProduced": {
-          "type": "string",
-          "description": "If event kind is 'produced', the min amount times this event is produced"
-        },
-        "avgProduced": {
-          "type": "string",
-          "description": "If event kind is 'produced', the avg amount of times this event is produced"
-        }
-      },
-      "required": [
-        "for",
-        "per"
-      ]
-    },
-    "functionskpi": {
-      "type": "object",
-      "allOf": [
-        {
-          "properties": {
-            "for": {
-              "type": "string",
-              "description": "References an unique function name in the defined workflow functions"
-            },
-            "per": {
-              "description": "Define the kpi thresholds in terms of time and/or num of workflow instances",
-              "$ref": "#/definitions/thresholds"
-            },
-            "maxErrors": {
-              "type": "string",
-              "description": "Max number of errors during function invocation"
-            },
-            "maxRetry": {
-              "type": "string",
-              "description": "Max number of retries done for this function invocation"
-            },
-            "maxTimeout": {
-              "type": "string",
-              "description": "Max number of times the function timeout time was reached"
-            }
-          }
-        },
-        {
-          "$ref": "#/definitions/invocationkpis"
-        },
-        {
-          "$ref": "#/definitions/costkpis"
-        }
-      ],
-      "required": [
-        "for",
-        "per"
-      ]
-    },
-    "stateskpi": {
-      "type": "object",
-      "allOf": [
-        {
-          "properties": {
-            "for": {
-              "type": "string",
-              "description": "References an unique state name in the defined workflow events"
-            },
-            "per": {
-              "description": "Define the kpi thresholds in terms of time and/or num of workflow instances",
-              "$ref": "#/definitions/thresholds"
-            }
-          }
-        },
-        {
-          "$ref": "#/definitions/execkpis"
-        },
-        {
-          "$ref": "#/definitions/durationkpis"
-        },
-        {
-          "$ref": "#/definitions/costkpis"
-        }
-      ],
-      "required": [
-        "for",
-        "per"
-      ]
-    },
-    "workflowkpi": {
-      "type": "object",
-      "allOf": [
-        {
-          "properties": {
-            "per": {
-              "description": "Define the kpi thresholds in terms of time and/or num of workflow instances",
-              "$ref": "#/definitions/thresholds"
-            }
-          }
-        },
-        {
-          "$ref": "#/definitions/invocationkpis"
-        },
-        {
-          "$ref": "#/definitions/durationkpis"
-        },
-        {
-          "$ref": "#/definitions/costkpis"
-        }
-      ],
-      "required": [
-        "per"
-      ]
-    },
-    "thresholds": {
-      "type": "object",
-      "properties": {
-        "time": {
-          "type": "string",
-          "default": "PT1D",
-          "description": "ISO_8601 time. 1 day default"
-        },
-        "instances": {
-          "type": "integer",
-          "minimum": 1,
-          "default": 1,
-          "description": "Number of workflow instances"
-        }
-      },
-      "required": [
-      ]
-    },
-    "costkpis": {
-      "type": "object",
-      "properties": {
-        "maxCost": {
-          "type": "string",
-          "description": "Max cost"
-        },
-        "minCost": {
-          "type": "string",
-          "description": "Min cost"
-        },
-        "avgCost": {
-          "type": "string",
-          "description": "Avg cost"
-        }
-      }
-    },
-    "invocationkpis": {
-      "type": "object",
-      "properties": {
-        "maxInvoked": {
-          "type": "string",
-          "description": "Max number of invocation times"
-        },
-        "minInvoked": {
-          "type": "string",
-          "description": "Min number of invocation times"
-        },
-        "avgInvoked": {
-          "type": "string",
-          "description": "Avg number of invocation times"
-        }
-      }
-    },
-    "durationkpis": {
-      "type": "object",
-      "properties": {
-        "maxDuration": {
-          "type": "string",
-          "description": "ISO 8601. Max duration"
-        },
-        "minDuration": {
-          "type": "string",
-          "description": "ISO 8601. Min duration"
-        },
-        "avgDuration": {
-          "type": "string",
-          "description": "ISO 8601. Avg duration"
-        }
-      }
-    },
-    "execkpis": {
-      "type": "object",
-      "properties": {
-        "maxExec": {
-          "type": "string",
-          "description": "Max exec number"
-        },
-        "minExec": {
-          "type": "string",
-          "description": "Min exec numbe"
-        },
-        "avgExec": {
-          "type": "string",
-          "description": "Avg exec number"
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/extensions/ratelimiting.json b/src/lib/schema/extensions/ratelimiting.json
deleted file mode 100644
index a7bc6f2..0000000
--- a/src/lib/schema/extensions/ratelimiting.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/extensions/ratelimiting.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - Various workflow rate limiting settings",
-  "type": "object",
-  "definitions": {
-    "ratelimiting": {
-      "type": "object",
-      "description": "Serverless Workflow Rate Limiting Extension",
-      "properties": {
-        "extensionid": {
-          "type": "string",
-          "default": "workflow-ratelimiting-extension",
-          "description": "Extension unique identifier"
-        },
-        "workflowid": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Workflow definition unique identifier (workflow id property)"
-        },
-        "workflowVersions": {
-          "type": "array",
-          "description": "Workflow versions. If not defined, applies to all workflow instances (regardless of their associated workflow version)",
-          "items": {
-            "type": "string"
-          }
-        },
-        "singleInstance": {
-          "description": "Rate Limit settings per single instance of a workflow with provided workflowid",
-          "$ref": "#/definitions/ratelimits"
-        },
-        "allInstances": {
-          "description": "Rate Limit settings across all instance of a workflow with provided workflowid",
-          "$ref": "#/definitions/ratelimits"
-        }
-      },
-      "required": [
-        "extensionid",
-        "workflowid"
-      ]
-    },
-    "ratelimits": {
-      "type": "object",
-      "properties": {
-        "maxActionsPerSecond": {
-          "type": "number",
-          "default": 0,
-          "description": "Sets the rate limiting on number of actions that can be executed per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow actions can be executed once every 10 seconds. Default zero value means 'unlimited'"
-        },
-        "maxConcurrentActions": {
-          "type": "number",
-          "default": 100,
-          "description": "Maximum number of actions that can be executed in parallel"
-        },
-        "maxProducedEventsPerSecond": {
-          "type": "number",
-          "default": 0,
-          "description": "Sets the rate limiting on number of events that can be produced per second. Notice that the number is represented as number type, so that you can set it to less than 1 if needed. For example, set the number to 0.1 means workflow can produce events once every 10 seconds. Default zero value means 'unlimited'"
-        },
-        "maxStates": {
-          "type": "integer",
-          "default": 0,
-          "description": "Maximum number of workflow states that should be executed. Default is zero, meaning unlimited."
-        },
-        "maxTransitions": {
-          "type": "integer",
-          "default": 0,
-          "description": "Maximum number of workflow transitions that should be executed. Default is zero, meaning unlimited."
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/functions.json b/src/lib/schema/functions.json
deleted file mode 100644
index a29bd2d..0000000
--- a/src/lib/schema/functions.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/functions.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - functions schema",
-  "type": "object",
-  "functions": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing function definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow function definitions",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/function"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "functions"
-  ],
-  "definitions": {
-    "function": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique function name",
-          "minLength": 1
-        },
-        "operation": {
-          "type": "string",
-          "description": "If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.",
-          "minLength": 1
-        },
-        "type": {
-          "type": "string",
-          "description": "Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`",
-          "enum": [
-            "rest",
-            "asyncapi",
-            "rpc",
-            "graphql",
-            "odata",
-            "expression",
-            "custom"
-          ],
-          "default": "rest"
-        },
-        "authRef": {
-          "oneOf": [
-            {
-              "type": "string",
-              "description": "References the auth definition to be used to invoke the operation",
-              "minLength": 1
-            },
-            {
-              "type": "object",
-              "description": "Configures both the auth definition used to retrieve the operation's resource and the auth definition used to invoke said operation",
-              "properties":{
-                "resource":{
-                  "type": "string",
-                  "description": "References an auth definition to be used to access the resource defined in the operation parameter",
-                  "minLength": 1
-                },
-                "invocation":{
-                  "type": "string",
-                  "description": "References an auth definition to be used to invoke the operation"
-                }
-              },
-              "additionalProperties": false,
-              "required": [
-                "resource"
-              ]
-            }
-          ]
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "operation"
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/odata.json b/src/lib/schema/odata.json
deleted file mode 100644
index 958cd99..0000000
--- a/src/lib/schema/odata.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/odata.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - OData command options schema",
-  "type": "object",
-  "key": {
-    "type": "string",
-    "description": "The unique identifier of the single entry to query",
-    "minLength": 1
-  },
-  "queryOptions":{
-    "$ref": "#/definitions/queryoptions"
-  },
-  "definitions": {
-    "queryoptions": {
-      "type": "object",
-      "properties": {
-        "filter": {
-          "type": "string",
-          "description": "The $filter system query option allows clients to filter the set of resources that are addressed by a request URL. $filter specifies conditions that MUST be met by a resource for it to be returned in the set of matching resources",
-          "minLength": 1
-        },
-        "expand": {
-          "type": "string",
-          "description": "The $expand system query option allows clients to request related resources when a resource that satisfies a particular request is retrieved",
-          "minLength": 1
-        },
-        "select": {
-          "type": "string",
-          "description": "The $select system query option allows clients to requests a limited set of information for each entity or complex type identified by the ResourcePath and other System Query Options like $filter, $top, $skip etc. The $select query option is often used in conjunction with the $expand query option, to first increase the scope of the resource graph returned ($expand) and then selectively prune that resource graph ($select)",
-          "minLength": 1
-        },
-        "orderBy": {
-          "type": "string",
-          "description": "The $orderby system query option allows clients to request resource in a particular order",
-          "minLength": 1
-        },
-        "top": {
-          "type": "integer",
-          "description": "The $top system query option allows clients a required number of resources. Usually used in conjunction with the $skip query options",
-          "minLength": 1
-        },
-        "skip": {
-          "type": "integer",
-          "description": "The $skip system query option allows clients to skip a given number of resources. Usually used in conjunction with the $top query options",
-          "minLength": 1
-        },
-        "count": {
-          "type": "boolean",
-          "description": "The $count system query option allows clients to request a count of the matching resources included with the resources in the response"
-        },
-        "search": {
-          "type": "string",
-          "description": "The $search system query option allows clients to request items within a collection matching a free-text search expression",
-          "minLength": 1
-        },
-        "format": {
-          "type": "string",
-          "description": "The $format system query option if supported allows clients to request a response in a particular format",
-          "minLength": 1
-        },
-        "compute": {
-          "type": "string",
-          "description": "The $compute system query option allows clients to define computed properties that can be used in a $select or within a $filter or $orderby expression.",
-          "minLength": 1
-        },
-        "index": {
-          "type": "string",
-          "description": "The $index system query option allows clients to do a positional insert into a collection annotated with using the Core.PositionalInsert term (see http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#VocCore)",
-          "minLength": 1
-        },
-        "schemaVersion": {
-          "type": "string",
-          "description": "The $schemaversion system query option allows clients to specify the version of the schema against which the request is made. The semantics of $schemaversion is covered in the OData-Protocol (http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#odata) document.",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/retries.json b/src/lib/schema/retries.json
deleted file mode 100644
index 1690abd..0000000
--- a/src/lib/schema/retries.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/retries.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - retries schema",
-  "type": "object",
-  "retries": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing retry definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow Retry definitions. Define retry strategies that can be referenced in states onError definitions",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/retrydef"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "retries"
-  ],
-  "definitions": {
-    "retrydef": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique retry strategy name",
-          "minLength": 1
-        },
-        "delay": {
-          "type": "string",
-          "description": "Time delay between retry attempts (ISO 8601 duration format)"
-        },
-        "maxDelay": {
-          "type": "string",
-          "description": "Maximum time delay between retry attempts (ISO 8601 duration format)"
-        },
-        "increment": {
-          "type": "string",
-          "description": "Static value by which the delay increases during each attempt (ISO 8601 time format)"
-        },
-        "multiplier": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 1,
-          "multipleOf": 0.01,
-          "description": "Numeric value, if specified the delay between retries is multiplied by this value."
-        },
-        "maxAttempts": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 1,
-          "minLength": 0,
-          "description": "Maximum number of retry attempts."
-        },
-        "jitter": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "maximum": 1,
-          "description": "If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "maxAttempts"
-      ]
-    }
-  }
-}
diff --git a/src/lib/schema/secrets.json b/src/lib/schema/secrets.json
deleted file mode 100644
index dc553cc..0000000
--- a/src/lib/schema/secrets.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/secrets.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - secrets schema",
-  "type": "object",
-  "secrets": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing secrets definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow Secrets definitions",
-        "items": {
-          "type": "string"
-        },
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "secrets"
-  ]
-}
\ No newline at end of file
diff --git a/src/lib/schema/timeouts.json b/src/lib/schema/timeouts.json
deleted file mode 100644
index 95f30ce..0000000
--- a/src/lib/schema/timeouts.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/timeouts.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - functions schema",
-  "type": "object",
-  "timeouts": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing timeouts definitions (json or yaml)"
-      },
-      {
-        "type": "object",
-        "description": "Workflow default timeouts",
-        "properties": {
-          "workflowExecTimeout": {
-            "$ref": "#/definitions/workflowExecTimeout"
-          },
-          "stateExecTimeout": {
-            "$ref": "#/definitions/stateExecTimeout"
-          },
-          "actionExecTimeout": {
-            "$ref": "#/definitions/actionExecTimeout"
-          },
-          "branchExecTimeout": {
-            "$ref": "#/definitions/branchExecTimeout"
-          },
-          "eventTimeout": {
-            "$ref": "#/definitions/eventTimeout"
-          }
-        },
-        "additionalProperties": false,
-        "required": []
-      }
-    ]
-  },
-  "required": [
-    "timeouts"
-  ],
-  "definitions": {
-    "workflowExecTimeout": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "duration": {
-              "type": "string",
-              "description": "Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'",
-              "minLength": 1
-            },
-            "interrupt": {
-              "type": "boolean",
-              "description": "If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.",
-              "default": true
-            },
-            "runBefore": {
-              "type": "string",
-              "description": "Name of a workflow state to be executed before workflow instance is terminated",
-              "minLength": 1
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "duration"
-          ]
-        }
-      ]
-    },
-    "stateExecTimeout": {
-      "type": "string",
-      "description": "Workflow state execution timeout duration (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "actionExecTimeout": {
-      "type": "string",
-      "description": "Action execution timeout duration (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "branchExecTimeout": {
-      "type": "string",
-      "description": "Branch execution timeout duration (ISO 8601 duration format)",
-      "minLength": 1
-    },
-    "eventTimeout": {
-      "type": "string",
-      "description": "Timeout duration to wait for consuming defined events (ISO 8601 duration format)",
-      "minLength": 1
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/schema/types/index.ts b/src/lib/schema/types/index.ts
deleted file mode 100644
index 1754cf0..0000000
--- a/src/lib/schema/types/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export * as Specification from './workflow';
diff --git a/src/lib/schema/types/workflow.ts b/src/lib/schema/types/workflow.ts
deleted file mode 100644
index dbde7db..0000000
--- a/src/lib/schema/types/workflow.ts
+++ /dev/null
@@ -1,1511 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Serverless Workflow specification - workflow schema
- */
-export type Workflow /* Serverless Workflow specification - workflow schema */ =
-  | {
-      /**
-       * Workflow unique identifier
-       */
-      id: string;
-      /**
-       * Domain-specific workflow identifier
-       */
-      key?: string;
-      /**
-       * Workflow name
-       */
-      name?: string;
-      /**
-       * Workflow description
-       */
-      description?: string;
-      /**
-       * Workflow version
-       */
-      version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-      /**
-       * List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities
-       */
-      annotations?: [string, ...string[]];
-      dataInputSchema?:
-        | string
-        | {
-            schema: any;
-            /**
-             * Determines if workflow execution should continue if there are validation errors
-             */
-            failOnValidationErrors?: boolean;
-          };
-      secrets?: Secrets;
-      constants?:
-        | string /* uri */
-        | {
-            [key: string]: any;
-          };
-      start?: Startdef;
-      /**
-       * Serverless Workflow schema version
-       */
-      specVersion: string;
-      /**
-       * Identifies the expression language used for workflow expressions. Default is 'jq'
-       */
-      expressionLang?: string;
-      timeouts?: Timeouts;
-      errors?: Errors;
-      /**
-       * If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'
-       */
-      keepActive?: boolean;
-      metadata?: /* Metadata information */ Metadata;
-      events?: Events;
-      functions?: Functions;
-      /**
-       * If set to true, actions should automatically be retried on unchecked errors. Default is false
-       */
-      autoRetries?: boolean;
-      retries?: Retries;
-      auth?: Auth;
-      extensions?: Extensions;
-      /**
-       * State definitions
-       */
-      states: [
-        (
-          | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-          | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-          | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-          | /* Consists of a number of states that are executed in parallel */ Parallelstate
-          | Switchstate
-          | /* Inject static data into state data. Does not perform any actions */ Injectstate
-          | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-          | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-        ),
-        ...(
-          | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-          | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-          | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-          | /* Consists of a number of states that are executed in parallel */ Parallelstate
-          | Switchstate
-          | /* Inject static data into state data. Does not perform any actions */ Injectstate
-          | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-          | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-        )[]
-      ];
-    }
-  | {
-      /**
-       * Workflow unique identifier
-       */
-      id?: string;
-      /**
-       * Domain-specific workflow identifier
-       */
-      key: string;
-      /**
-       * Workflow name
-       */
-      name?: string;
-      /**
-       * Workflow description
-       */
-      description?: string;
-      /**
-       * Workflow version
-       */
-      version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-      /**
-       * List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities
-       */
-      annotations?: [string, ...string[]];
-      dataInputSchema?:
-        | string
-        | {
-            schema: any;
-            /**
-             * Determines if workflow execution should continue if there are validation errors
-             */
-            failOnValidationErrors?: boolean;
-          };
-      secrets?: Secrets;
-      constants?:
-        | string /* uri */
-        | {
-            [key: string]: any;
-          };
-      start?: Startdef;
-      /**
-       * Serverless Workflow schema version
-       */
-      specVersion: string;
-      /**
-       * Identifies the expression language used for workflow expressions. Default is 'jq'
-       */
-      expressionLang?: string;
-      timeouts?: Timeouts;
-      errors?: Errors;
-      /**
-       * If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'
-       */
-      keepActive?: boolean;
-      metadata?: /* Metadata information */ Metadata;
-      events?: Events;
-      functions?: Functions;
-      /**
-       * If set to true, actions should automatically be retried on unchecked errors. Default is false
-       */
-      autoRetries?: boolean;
-      retries?: Retries;
-      auth?: Auth;
-      extensions?: Extensions;
-      /**
-       * State definitions
-       */
-      states: [
-        (
-          | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-          | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-          | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-          | /* Consists of a number of states that are executed in parallel */ Parallelstate
-          | Switchstate
-          | /* Inject static data into state data. Does not perform any actions */ Injectstate
-          | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-          | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-        ),
-        ...(
-          | /* Causes the workflow execution to sleep for a specified duration */ Sleepstate
-          | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate
-          | /* Defines actions be performed. Does not wait for incoming events */ Operationstate
-          | /* Consists of a number of states that are executed in parallel */ Parallelstate
-          | Switchstate
-          | /* Inject static data into state data. Does not perform any actions */ Injectstate
-          | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate
-          | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate
-        )[]
-      ];
-    };
-export type Action =
-  | {
-      /**
-       * Unique action definition name
-       */
-      name?: string;
-      functionRef: Functionref;
-      eventRef?: /* Event References */ Eventref;
-      subFlowRef?: Subflowref;
-      sleep?: Sleep;
-      /**
-       * References a defined workflow retry definition. If not defined the default retry policy is assumed
-       */
-      retryRef?: string;
-      /**
-       * List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`
-       */
-      nonRetryableErrors?: [string, ...string[]];
-      /**
-       * List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`
-       */
-      retryableErrors?: [string, ...string[]];
-      actionDataFilter?: Actiondatafilter;
-      /**
-       * Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded
-       */
-      condition?: string;
-    }
-  | {
-      /**
-       * Unique action definition name
-       */
-      name?: string;
-      functionRef?: Functionref;
-      eventRef: /* Event References */ Eventref;
-      subFlowRef?: Subflowref;
-      sleep?: Sleep;
-      /**
-       * References a defined workflow retry definition. If not defined the default retry policy is assumed
-       */
-      retryRef?: string;
-      /**
-       * List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`
-       */
-      nonRetryableErrors?: [string, ...string[]];
-      /**
-       * List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`
-       */
-      retryableErrors?: [string, ...string[]];
-      actionDataFilter?: Actiondatafilter;
-      /**
-       * Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded
-       */
-      condition?: string;
-    }
-  | {
-      /**
-       * Unique action definition name
-       */
-      name?: string;
-      functionRef?: Functionref;
-      eventRef?: /* Event References */ Eventref;
-      subFlowRef: Subflowref;
-      sleep?: Sleep;
-      /**
-       * References a defined workflow retry definition. If not defined the default retry policy is assumed
-       */
-      retryRef?: string;
-      /**
-       * List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`
-       */
-      nonRetryableErrors?: [string, ...string[]];
-      /**
-       * List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`
-       */
-      retryableErrors?: [string, ...string[]];
-      actionDataFilter?: Actiondatafilter;
-      /**
-       * Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded
-       */
-      condition?: string;
-    };
-/**
- * Action execution timeout duration (ISO 8601 duration format)
- */
-export type ActionExecTimeout = string;
-export interface Actiondatafilter {
-  /**
-   * Workflow expression that selects state data that the state action can use
-   */
-  fromStateData?: string;
-  /**
-   * If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.
-   */
-  useResults?: boolean;
-  /**
-   * Workflow expression that filters the actions data results
-   */
-  results?: string;
-  /**
-   * Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element
-   */
-  toStateData?: string;
-}
-export type Auth = string /* uri */ | [Authdef, ...Authdef[]];
-export interface Authdef {
-  /**
-   * Unique auth definition name
-   */
-  name: string;
-  /**
-   * Defines the auth type
-   */
-  scheme?: 'basic' | 'bearer' | 'oauth2';
-  properties:
-    | string
-    | /* Basic auth information */ Basicpropsdef
-    | /* Bearer auth information */ Bearerpropsdef
-    | /* OAuth2 information */ Oauth2propsdef;
-}
-/**
- * Basic auth information
- */
-export interface Basicpropsdef {
-  /**
-   * String or a workflow expression. Contains the user name
-   */
-  username: string;
-  /**
-   * String or a workflow expression. Contains the user password
-   */
-  password: string;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Bearer auth information
- */
-export interface Bearerpropsdef {
-  /**
-   * String or a workflow expression. Contains the token
-   */
-  token: string;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Branch Definition
- */
-export interface Branch {
-  /**
-   * Branch name
-   */
-  name: string;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-    branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-  };
-  /**
-   * Actions to be executed in this branch
-   */
-  actions: Action[];
-}
-/**
- * Branch execution timeout duration (ISO 8601 duration format)
- */
-export type BranchExecTimeout = string;
-/**
- * This state performs an action, then waits for the callback event that denotes completion of the action
- */
-export interface Callbackstate {
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'callback';
-  /**
-   * Defines the action to be executed
-   */
-  action?: Action;
-  /**
-   * References an unique callback event name in the defined workflow events
-   */
-  eventRef?: string;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-    eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-  };
-  /**
-   * Event data filter
-   */
-  eventDataFilter?: Eventdatafilter;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all the actions have been performed
-   */
-  transition?: Transition;
-  /**
-   * State end definition
-   */
-  end?: End;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-export type Continueasdef =
-  | string
-  | {
-      /**
-       * Unique id of the workflow to continue execution as
-       */
-      workflowId: string;
-      /**
-       * Version of the workflow to continue execution as
-       */
-      version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-      /**
-       * If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution
-       */
-      data?:
-        | string
-        | {
-            [key: string]: any;
-          };
-      /**
-       * Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow
-       */
-      workflowExecTimeout?: WorkflowExecTimeout;
-    };
-/**
- * CloudEvent correlation definition
- */
-export interface CorrelationDef {
-  /**
-   * CloudEvent Extension Context Attribute name
-   */
-  contextAttributeName: string;
-  /**
-   * CloudEvent Extension Context Attribute value
-   */
-  contextAttributeValue?: string;
-}
-export type Crondef =
-  | string
-  | {
-      /**
-       * Repeating interval (cron expression) describing when the workflow instance should be created
-       */
-      expression: string;
-      /**
-       * Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid
-       */
-      validUntil?: string;
-    };
-/**
- * Permits transitions to other states based on data conditions
- */
-export interface Databasedswitchstate {
-  /**
-   * State name
-   */
-  name: string;
-  /**
-   * State type
-   */
-  type: 'switch';
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-  };
-  /**
-   * Defines conditions evaluated against state data
-   */
-  dataConditions: Datacondition[];
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition
-   */
-  defaultCondition: /* DefaultCondition definition. Can be either a transition or end definition */ Defaultconditiondef;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-export type Datacondition /* Switch state data based condition */ =
-  | Transitiondatacondition
-  | /* Switch state data based condition */ Enddatacondition;
-/**
- * DefaultCondition definition. Can be either a transition or end definition
- */
-export type Defaultconditiondef /* DefaultCondition definition. Can be either a transition or end definition */ =
-  | {
-      /**
-       * The optional name of the default condition, used solely for display purposes
-       */
-      name?: string;
-      transition: Transition;
-      end?: End;
-    }
-  | {
-      /**
-       * The optional name of the default condition, used solely for display purposes
-       */
-      name?: string;
-      transition?: Transition;
-      end: End;
-    };
-export type End =
-  | boolean
-  | {
-      /**
-       * If true, completes all execution flows in the given workflow instance
-       */
-      terminate?: boolean;
-      /**
-       * Defines events that should be produced
-       */
-      produceEvents?: /* Produce an event and set its data */ Produceeventdef[];
-      /**
-       * If set to true, triggers workflow compensation. Default is false
-       */
-      compensate?: boolean;
-      continueAs?: Continueasdef;
-    };
-/**
- * Switch state data based condition
- */
-export interface Enddatacondition {
-  /**
-   * Data condition name
-   */
-  name?: string;
-  /**
-   * Workflow expression evaluated against state data. Must evaluate to true or false
-   */
-  condition: string;
-  /**
-   * Workflow end definition
-   */
-  end: End;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Switch state data event condition
- */
-export interface Endeventcondition {
-  /**
-   * Event condition name
-   */
-  name?: string;
-  /**
-   * References an unique event name in the defined workflow events
-   */
-  eventRef: string;
-  /**
-   * Explicit transition to end
-   */
-  end: End;
-  /**
-   * Event data filter definition
-   */
-  eventDataFilter?: Eventdatafilter;
-  metadata?: /* Metadata information */ Metadata;
-}
-export type Error =
-  | {
-      /**
-       * Reference to a unique workflow error definition. Used of errorRefs is not used
-       */
-      errorRef: string;
-      /**
-       * References one or more workflow error definitions. Used if errorRef is not used
-       */
-      errorRefs?: [string, ...string[]];
-      transition: Transition;
-      end?: End;
-    }
-  | {
-      /**
-       * Reference to a unique workflow error definition. Used of errorRefs is not used
-       */
-      errorRef: string;
-      /**
-       * References one or more workflow error definitions. Used if errorRef is not used
-       */
-      errorRefs?: [string, ...string[]];
-      transition?: Transition;
-      end: End;
-    }
-  | {
-      /**
-       * Reference to a unique workflow error definition. Used of errorRefs is not used
-       */
-      errorRef?: string;
-      /**
-       * References one or more workflow error definitions. Used if errorRef is not used
-       */
-      errorRefs: [string, ...string[]];
-      transition: Transition;
-      end?: End;
-    }
-  | {
-      /**
-       * Reference to a unique workflow error definition. Used of errorRefs is not used
-       */
-      errorRef?: string;
-      /**
-       * References one or more workflow error definitions. Used if errorRef is not used
-       */
-      errorRefs: [string, ...string[]];
-      transition?: Transition;
-      end: End;
-    };
-export interface Errordef {
-  /**
-   * Domain-specific error name
-   */
-  name: string;
-  /**
-   * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*'
-   */
-  code?: string;
-  /**
-   * Error description
-   */
-  description?: string;
-}
-export type Errors = string /* uri */ | [Errordef, ...Errordef[]];
-/**
- * Timeout duration to wait for consuming defined events (ISO 8601 duration format)
- */
-export type EventTimeout = string;
-/**
- * Permits transitions to other states based on events
- */
-export interface Eventbasedswitchstate {
-  /**
-   * State name
-   */
-  name: string;
-  /**
-   * State type
-   */
-  type: 'switch';
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-  };
-  /**
-   * Defines conditions evaluated against events
-   */
-  eventConditions: Eventcondition[];
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition
-   */
-  defaultCondition: /* DefaultCondition definition. Can be either a transition or end definition */ Defaultconditiondef;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-export type Eventcondition /* Switch state data event condition */ =
-  | Transitioneventcondition
-  | /* Switch state data event condition */ Endeventcondition;
-export interface Eventdatafilter {
-  /**
-   * If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.
-   */
-  useData?: boolean;
-  /**
-   * Workflow expression that filters the received event payload (default: '${ . }')
-   */
-  data?: string;
-  /**
-   *  Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element.
-   */
-  toStateData?: string;
-}
-export interface Eventdef {
-  /**
-   * Unique event name
-   */
-  name?: string;
-  /**
-   * CloudEvent source
-   */
-  source?: string;
-  /**
-   * CloudEvent type
-   */
-  type?: string;
-  /**
-   * Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed'
-   */
-  kind?: 'consumed' | 'produced';
-  /**
-   * CloudEvent correlation definitions
-   */
-  correlation?: [
-    /* CloudEvent correlation definition */ CorrelationDef,
-    .../* CloudEvent correlation definition */ CorrelationDef[]
-  ];
-  /**
-   * If `true`, only the Event payload is accessible to consuming Workflow states. If `false`, both event payload and context attributes should be accessible
-   */
-  dataOnly?: boolean;
-  /**
-   * Metadata information
-   */
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Event References
- */
-export interface Eventref {
-  /**
-   * Reference to the unique name of a 'produced' event definition
-   */
-  produceEventRef: string;
-  /**
-   * Reference to the unique name of a 'consumed' event definition
-   */
-  consumeEventRef?: string;
-  /**
-   * Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout
-   */
-  consumeEventTimeout?: string;
-  /**
-   * If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'produceEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'produceEventRef'.
-   */
-  data?:
-    | string
-    | {
-        [key: string]: any;
-      };
-  /**
-   * Add additional extension context attributes to the produced event
-   */
-  contextAttributes?: {
-    [name: string]: string;
-  };
-}
-export type Events = string /* uri */ | [Eventdef, ...Eventdef[]];
-/**
- * This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel
- */
-export type Eventstate =
-  /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */
-  | {
-      /**
-       * State name
-       */
-      name: string;
-      /**
-       * State type
-       */
-      type: 'event';
-      /**
-       * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed
-       */
-      exclusive?: boolean;
-      /**
-       * Define the events to be consumed and optional actions to be performed
-       */
-      onEvents: Onevents[];
-      /**
-       * State specific timeouts
-       */
-      timeouts?: {
-        stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-        actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-        eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-      };
-      stateDataFilter?: Statedatafilter;
-      /**
-       * States error handling definitions
-       */
-      onErrors?: Error[];
-      transition?: Transition;
-      end: End;
-      /**
-       * Unique Name of a workflow state which is responsible for compensation of this state
-       */
-      compensatedBy?: string;
-      metadata?: /* Metadata information */ Metadata;
-    }
-  | {
-      /**
-       * State name
-       */
-      name: string;
-      /**
-       * State type
-       */
-      type: 'event';
-      /**
-       * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed
-       */
-      exclusive?: boolean;
-      /**
-       * Define the events to be consumed and optional actions to be performed
-       */
-      onEvents: Onevents[];
-      /**
-       * State specific timeouts
-       */
-      timeouts?: {
-        stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-        actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-        eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-      };
-      stateDataFilter?: Statedatafilter;
-      /**
-       * States error handling definitions
-       */
-      onErrors?: Error[];
-      transition: Transition;
-      end?: End;
-      /**
-       * Unique Name of a workflow state which is responsible for compensation of this state
-       */
-      compensatedBy?: string;
-      metadata?: /* Metadata information */ Metadata;
-    };
-export interface Extension {
-  /**
-   * Unique extension id
-   */
-  extensionId: string;
-  /**
-   * URI to a resource containing this workflow extension definitions (json or yaml)
-   */
-  resource: string;
-}
-export type Extensions = string /* uri */ | [Extension, ...Extension[]];
-/**
- * Execute a set of defined actions or workflows for each element of a data array
- */
-export interface Foreachstate {
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'foreach';
-  /**
-   * State end definition
-   */
-  end?: End;
-  /**
-   * Workflow expression selecting an array element of the states data
-   */
-  inputCollection?: string;
-  /**
-   * Workflow expression specifying an array element of the states data to add the results of each iteration
-   */
-  outputCollection?: string;
-  /**
-   * Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array
-   */
-  iterationParam?: string;
-  /**
-   * Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)
-   */
-  batchSize?: number | string;
-  /**
-   * Actions to be executed for each of the elements of inputCollection
-   */
-  actions?: Action[];
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-  };
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after state has completed
-   */
-  transition?: Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  /**
-   * Specifies how iterations are to be performed (sequentially or in parallel)
-   */
-  mode?: 'sequential' | 'parallel';
-  metadata?: /* Metadata information */ Metadata;
-}
-export interface Function {
-  /**
-   * Unique function name
-   */
-  name: string;
-  /**
-   * If type is `rest`, #. If type is `asyncapi`, #. If type is `rpc`, ##. If type is `graphql`, ##. If type is `odata`, #. If type is `expression`, defines the workflow expression.
-   */
-  operation: string;
-  /**
-   * Defines the function type. Is either `rest`, `asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `rest`
-   */
-  type?: 'rest' | 'asyncapi' | 'rpc' | 'graphql' | 'odata' | 'expression' | 'custom';
-  authRef?:
-    | string
-    | {
-        /**
-         * References an auth definition to be used to access the resource defined in the operation parameter
-         */
-        resource: string;
-        /**
-         * References an auth definition to be used to invoke the operation
-         */
-        invocation?: string;
-      };
-  metadata?: /* Metadata information */ Metadata;
-}
-export type Functionref =
-  | string
-  | {
-      /**
-       * Name of the referenced function
-       */
-      refName: string;
-      /**
-       * Function arguments/inputs
-       */
-      arguments?: {
-        [key: string]: any;
-      };
-      /**
-       * Only used if function type is 'graphql'. A string containing a valid GraphQL selection set
-       */
-      selectionSet?: string;
-      /**
-       * Specifies if the function should be invoked sync or async
-       */
-      invoke?: 'sync' | 'async';
-    };
-export type Functions = string /* uri */ | [Function, ...Function[]];
-/**
- * Inject static data into state data. Does not perform any actions
- */
-export interface Injectstate {
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'inject';
-  /**
-   * State end definition
-   */
-  end?: End;
-  /**
-   * JSON object which can be set as states data input and can be manipulated via filters
-   */
-  data?: {
-    [key: string]: any;
-  };
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * Next transition of the workflow after injection has completed
-   */
-  transition?: Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Metadata information
- */
-export interface Metadata {
-  [name: string]: string;
-}
-/**
- * OAuth2 information
- */
-export interface Oauth2propsdef {
-  /**
-   * String or a workflow expression. Contains the authority information
-   */
-  authority?: string;
-  /**
-   * Defines the grant type
-   */
-  grantType: 'password' | 'clientCredentials' | 'tokenExchange';
-  /**
-   * String or a workflow expression. Contains the client identifier
-   */
-  clientId: string;
-  /**
-   * Workflow secret or a workflow expression. Contains the client secret
-   */
-  clientSecret?: string;
-  /**
-   * Array containing strings or workflow expressions. Contains the OAuth2 scopes
-   */
-  scopes?: [string, ...string[]];
-  /**
-   * String or a workflow expression. Contains the user name. Used only if grantType is 'resourceOwner'
-   */
-  username?: string;
-  /**
-   * String or a workflow expression. Contains the user password. Used only if grantType is 'resourceOwner'
-   */
-  password?: string;
-  /**
-   * Array containing strings or workflow expressions. Contains the OAuth2 audiences
-   */
-  audiences?: [string, ...string[]];
-  /**
-   * String or a workflow expression. Contains the subject token
-   */
-  subjectToken?: string;
-  /**
-   * String or a workflow expression. Contains the requested subject
-   */
-  requestedSubject?: string;
-  /**
-   * String or a workflow expression. Contains the requested issuer
-   */
-  requestedIssuer?: string;
-  metadata?: /* Metadata information */ Metadata;
-}
-export interface Onevents {
-  /**
-   * References one or more unique event names in the defined workflow events
-   */
-  eventRefs: [string, ...string[]];
-  /**
-   * Specifies how actions are to be performed (in sequence or in parallel)
-   */
-  actionMode?: 'sequential' | 'parallel';
-  /**
-   * Actions to be performed if expression matches
-   */
-  actions?: Action[];
-  /**
-   * Event data filter
-   */
-  eventDataFilter?: Eventdatafilter;
-}
-/**
- * Defines actions be performed. Does not wait for incoming events
- */
-export interface Operationstate {
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'operation';
-  /**
-   * State end definition
-   */
-  end?: End;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * Specifies whether actions are performed in sequence or in parallel
-   */
-  actionMode?: 'sequential' | 'parallel';
-  /**
-   * Actions to be performed
-   */
-  actions?: Action[];
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-  };
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all the actions have been performed
-   */
-  transition?: Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Consists of a number of states that are executed in parallel
- */
-export interface Parallelstate {
-  /**
-   * State name
-   */
-  name?: string;
-  /**
-   * State type
-   */
-  type?: 'parallel';
-  /**
-   * State end definition
-   */
-  end?: End;
-  /**
-   * State data filter
-   */
-  stateDataFilter?: Statedatafilter;
-  /**
-   * State specific timeouts
-   */
-  timeouts?: {
-    stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-    branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-  };
-  /**
-   * Branch Definitions
-   */
-  branches?: /* Branch Definition */ Branch[];
-  /**
-   * Option types on how to complete branch execution.
-   */
-  completionType?: 'allOf' | 'atLeast';
-  /**
-   * Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition.
-   */
-  numCompleted?: number | string;
-  /**
-   * States error handling definitions
-   */
-  onErrors?: Error[];
-  /**
-   * Next transition of the workflow after all branches have completed execution
-   */
-  transition?: Transition;
-  /**
-   * Unique Name of a workflow state which is responsible for compensation of this state
-   */
-  compensatedBy?: string;
-  /**
-   * If true, this state is used to compensate another state. Default is false
-   */
-  usedForCompensation?: boolean;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Produce an event and set its data
- */
-export interface Produceeventdef {
-  /**
-   * References a name of a defined event
-   */
-  eventRef: string;
-  /**
-   * If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event.
-   */
-  data?:
-    | string
-    | {
-        [key: string]: any;
-      };
-  /**
-   * Add additional event extension context attributes
-   */
-  contextAttributes?: {
-    [name: string]: string;
-  };
-}
-export type Retries = string /* uri */ | [Retrydef, ...Retrydef[]];
-export interface Retrydef {
-  /**
-   * Unique retry strategy name
-   */
-  name: string;
-  /**
-   * Time delay between retry attempts (ISO 8601 duration format)
-   */
-  delay?: string;
-  /**
-   * Maximum time delay between retry attempts (ISO 8601 duration format)
-   */
-  maxDelay?: string;
-  /**
-   * Static value by which the delay increases during each attempt (ISO 8601 time format)
-   */
-  increment?: string;
-  /**
-   * Numeric value, if specified the delay between retries is multiplied by this value.
-   */
-  multiplier?: number | string;
-  /**
-   * Maximum number of retry attempts.
-   */
-  maxAttempts: number | string;
-  /**
-   * If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format)
-   */
-  jitter?: number | string;
-}
-export type Schedule =
-  | string
-  | /* Start state schedule definition */ (
-      | {
-          /**
-           * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.
-           */
-          interval: string;
-          cron?: Crondef;
-          /**
-           * Timezone name used to evaluate the interval & cron-expression. (default: UTC)
-           */
-          timezone?: string;
-        }
-      | {
-          /**
-           * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.
-           */
-          interval?: string;
-          cron: Crondef;
-          /**
-           * Timezone name used to evaluate the interval & cron-expression. (default: UTC)
-           */
-          timezone?: string;
-        }
-    );
-export type Secrets = string /* uri */ | [string, ...string[]];
-export type Sleep =
-  | {
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      before: string;
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      after?: string;
-    }
-  | {
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      before?: string;
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      after: string;
-    }
-  | {
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      before: string;
-      /**
-       * Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined.
-       */
-      after: string;
-    };
-/**
- * Causes the workflow execution to sleep for a specified duration
- */
-export type Sleepstate /* Causes the workflow execution to sleep for a specified duration */ =
-  | {
-      /**
-       * State name
-       */
-      name: string;
-      /**
-       * State type
-       */
-      type: 'sleep';
-      end: End;
-      /**
-       * Duration (ISO 8601 duration format) to sleep
-       */
-      duration: string;
-      transition?: Transition;
-      metadata?: /* Metadata information */ Metadata;
-    }
-  | {
-      /**
-       * State name
-       */
-      name: string;
-      /**
-       * State type
-       */
-      type: 'sleep';
-      end?: End;
-      /**
-       * Duration (ISO 8601 duration format) to sleep
-       */
-      duration: string;
-      transition: Transition;
-      metadata?: /* Metadata information */ Metadata;
-    };
-export type Startdef =
-  | string
-  | {
-      /**
-       * Name of the starting workflow state
-       */
-      stateName?: string;
-      /**
-       * Define the time/repeating intervals or cron at which workflow instances should be automatically started.
-       */
-      schedule: Schedule;
-    };
-/**
- * Workflow state execution timeout duration (ISO 8601 duration format)
- */
-export type StateExecTimeout = string;
-export interface Statedatafilter {
-  /**
-   * Workflow expression to filter the state data input
-   */
-  input?: string;
-  /**
-   * Workflow expression that filters the state data output
-   */
-  output?: string;
-}
-export type Subflowref =
-  | string
-  | {
-      /**
-       * Unique id of the sub-workflow to be invoked
-       */
-      workflowId: string;
-      /**
-       * Version of the sub-workflow to be invoked
-       */
-      version?: string; // ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
-      /**
-       * If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'
-       */
-      onParentComplete?: 'continue' | 'terminate';
-      /**
-       * Specifies if the subflow should be invoked sync or async
-       */
-      invoke?: 'sync' | 'async';
-    };
-export type Switchstate /* Permits transitions to other states based on data conditions */ =
-  | Databasedswitchstate
-  | /* Permits transitions to other states based on events */ Eventbasedswitchstate;
-export type Timeouts =
-  | string /* uri */
-  | {
-      workflowExecTimeout?: WorkflowExecTimeout;
-      stateExecTimeout?: /* Workflow state execution timeout duration (ISO 8601 duration format) */ StateExecTimeout;
-      actionExecTimeout?: /* Action execution timeout duration (ISO 8601 duration format) */ ActionExecTimeout;
-      branchExecTimeout?: /* Branch execution timeout duration (ISO 8601 duration format) */ BranchExecTimeout;
-      eventTimeout?: /* Timeout duration to wait for consuming defined events (ISO 8601 duration format) */ EventTimeout;
-    };
-export type Transition =
-  | string
-  | {
-      /**
-       * Name of state to transition to
-       */
-      nextState: string;
-      /**
-       * Array of events to be produced before the transition happens
-       */
-      produceEvents?: /* Produce an event and set its data */ Produceeventdef[];
-      /**
-       * If set to true, triggers workflow compensation when before this transition is taken. Default is false
-       */
-      compensate?: boolean;
-    };
-/**
- * Switch state data based condition
- */
-export interface Transitiondatacondition {
-  /**
-   * Data condition name
-   */
-  name?: string;
-  /**
-   * Workflow expression evaluated against state data. Must evaluate to true or false
-   */
-  condition: string;
-  /**
-   * Workflow transition if condition is evaluated to true
-   */
-  transition: Transition;
-  metadata?: /* Metadata information */ Metadata;
-}
-/**
- * Switch state data event condition
- */
-export interface Transitioneventcondition {
-  /**
-   * Event condition name
-   */
-  name?: string;
-  /**
-   * References an unique event name in the defined workflow events
-   */
-  eventRef: string;
-  /**
-   * Next transition of the workflow if there is valid matches
-   */
-  transition: Transition;
-  /**
-   * Event data filter definition
-   */
-  eventDataFilter?: Eventdatafilter;
-  metadata?: /* Metadata information */ Metadata;
-}
-export type WorkflowExecTimeout =
-  | string
-  | {
-      /**
-       * Workflow execution timeout duration (ISO 8601 duration format). If not specified should be 'unlimited'
-       */
-      duration: string;
-      /**
-       * If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted.
-       */
-      interrupt?: boolean;
-      /**
-       * Name of a workflow state to be executed before workflow instance is terminated
-       */
-      runBefore?: string;
-    };
diff --git a/src/lib/schema/workflow.json b/src/lib/schema/workflow.json
deleted file mode 100644
index dae1bd5..0000000
--- a/src/lib/schema/workflow.json
+++ /dev/null
@@ -1,1904 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/workflow.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - workflow schema",
-  "type": "object",
-  "properties": {
-    "id": {
-      "type": "string",
-      "description": "Workflow unique identifier",
-      "minLength": 1
-    },
-    "key": {
-      "type": "string",
-      "description": "Domain-specific workflow identifier",
-      "minLength": 1
-    },
-    "name": {
-      "type": "string",
-      "description": "Workflow name",
-      "minLength": 1
-    },
-    "description": {
-      "type": "string",
-      "description": "Workflow description"
-    },
-    "version": {
-      "type": "string",
-      "description": "Workflow version",
-      "minLength": 1,
-      "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
-    },
-    "annotations": {
-      "type": "array",
-      "description": "List of helpful terms describing the workflows intended purpose, subject areas, or other important qualities",
-      "minItems": 1,
-      "items": {
-        "type": "string"
-      },
-      "additionalItems": false
-    },
-    "dataInputSchema": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "URI of the JSON Schema used to validate the workflow data input",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Workflow data input schema definition",
-          "properties": {
-            "schema": {
-              "oneof": [
-                {
-                  "type": "string",
-                  "description": "URI of the JSON Schema used to validate the workflow data input",
-                  "minLength": 1
-                },
-                {
-                  "type": "object",
-                  "description": "The JSON Schema object used to validate the workflow data input",
-                  "$schema": "http://json-schema.org/draft-07/schema#"
-                }
-              ]
-            },
-            "failOnValidationErrors": {
-              "type": "boolean",
-              "default": true,
-              "description": "Determines if workflow execution should continue if there are validation errors"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "schema"
-          ]
-        }
-      ]
-    },
-    "secrets": {
-      "$ref": "secrets.json#/secrets"
-    },
-    "constants": {
-      "oneOf": [
-        {
-          "type": "string",
-          "format": "uri",
-          "description": "URI to a resource containing constants data (json or yaml)"
-        },
-        {
-          "type": "object",
-          "description": "Workflow constants data (object type)"
-        }
-      ]
-    },
-    "start": {
-      "$ref": "#/definitions/startdef"
-    },
-    "specVersion": {
-      "type": "string",
-      "description": "Serverless Workflow schema version",
-      "minLength": 1
-    },
-    "expressionLang": {
-      "type": "string",
-      "description": "Identifies the expression language used for workflow expressions. Default is 'jq'",
-      "default": "jq",
-      "minLength": 1
-    },
-    "timeouts": {
-      "$ref": "timeouts.json#/timeouts"
-    },
-    "errors": {
-      "$ref": "errors.json#/errors"
-    },
-    "keepActive": {
-      "type": "boolean",
-      "default": false,
-      "description": "If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'workflowExecTimeout'"
-    },
-    "metadata": {
-      "$ref": "common.json#/definitions/metadata"
-    },
-    "events": {
-      "$ref": "events.json#/events"
-    },
-    "functions": {
-      "$ref": "functions.json#/functions"
-    },
-    "autoRetries": {
-      "type": "boolean",
-      "default": false,
-      "description": "If set to true, actions should automatically be retried on unchecked errors. Default is false"
-    },
-    "retries": {
-      "$ref": "retries.json#/retries"
-    },
-    "auth": {
-      "$ref": "auth.json#/auth"
-    },
-    "extensions": {
-      "$ref": "workflowextensions.json#/extensions"
-    },
-    "states": {
-      "type": "array",
-      "description": "State definitions",
-      "items": {
-        "anyOf": [
-          {
-            "title": "Sleep State",
-            "$ref": "#/definitions/sleepstate"
-          },
-          {
-            "title": "Event State",
-            "$ref": "#/definitions/eventstate"
-          },
-          {
-            "title": "Operation State",
-            "$ref": "#/definitions/operationstate"
-          },
-          {
-            "title": "Parallel State",
-            "$ref": "#/definitions/parallelstate"
-          },
-          {
-            "title": "Switch State",
-            "$ref": "#/definitions/switchstate"
-          },
-          {
-            "title": "Inject State",
-            "$ref": "#/definitions/injectstate"
-          },
-          {
-            "title": "ForEach State",
-            "$ref": "#/definitions/foreachstate"
-          },
-          {
-            "title": "Callback State",
-            "$ref": "#/definitions/callbackstate"
-          }
-        ]
-      },
-      "additionalItems": false,
-      "minItems": 1
-    }
-  },
-  "oneOf": [
-    {
-      "required": [
-        "id",
-        "specVersion",
-        "states"
-      ]
-    },
-    {
-      "required": [
-        "key",
-        "specVersion",
-        "states"
-      ]
-    }
-  ],
-  "definitions": {
-    "sleep": {
-      "type": "object",
-      "properties": {
-        "before": {
-          "type": "string",
-          "description": "Amount of time (ISO 8601 duration format) to sleep before function/subflow invocation. Does not apply if 'eventRef' is defined."
-        },
-        "after": {
-          "type": "string",
-          "description": "Amount of time (ISO 8601 duration format) to sleep after function/subflow invocation. Does not apply if 'eventRef' is defined."
-        }
-      },
-      "anyOf": [
-        {
-          "required": [
-            "before"
-          ]
-        },
-        {
-          "required": [
-            "after"
-          ]
-        },
-        {
-          "required": [
-            "before",
-            "after"
-          ]
-        }
-      ]
-    },
-    "crondef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Cron expression defining when workflow instances should be created (automatically)",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "expression": {
-              "type": "string",
-              "description": "Repeating interval (cron expression) describing when the workflow instance should be created",
-              "minLength": 1
-            },
-            "validUntil": {
-              "type": "string",
-              "description": "Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "expression"
-          ]
-        }
-      ]
-    },
-    "continueasdef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Unique id of the workflow to be continue execution as. Entire state data is passed as data input to next execution",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "properties": {
-            "workflowId": {
-              "type": "string",
-              "description": "Unique id of the workflow to continue execution as"
-            },
-            "version": {
-              "type": "string",
-              "description": "Version of the workflow to continue execution as",
-              "minLength": 1,
-              "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
-            },
-            "data": {
-              "type": [
-                "string",
-                "object"
-              ],
-              "description": "If string type, an expression which selects parts of the states data output to become the workflow data input of continued execution. If object type, a custom object to become the workflow data input of the continued execution"
-            },
-            "workflowExecTimeout": {
-              "$ref": "timeouts.json#/definitions/workflowExecTimeout",
-              "description": "Workflow execution timeout to be used by the workflow continuing execution. Overwrites any specific settings set by that workflow"
-            }
-          },
-          "required": [
-            "workflowId"
-          ]
-        }
-      ]
-    },
-    "transition": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of state to transition to",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Function Reference",
-          "properties": {
-            "nextState": {
-              "type": "string",
-              "description": "Name of state to transition to",
-              "minLength": 1
-            },
-            "produceEvents": {
-              "type": "array",
-              "description": "Array of events to be produced before the transition happens",
-              "items": {
-                "type": "object",
-                "$ref": "#/definitions/produceeventdef"
-              },
-              "additionalItems": false
-            },
-            "compensate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If set to true, triggers workflow compensation when before this transition is taken. Default is false"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "nextState"
-          ]
-        }
-      ]
-    },
-    "error": {
-      "type": "object",
-      "properties": {
-        "errorRef": {
-          "type": "string",
-          "description": "Reference to a unique workflow error definition. Used of errorRefs is not used",
-          "minLength": 1
-        },
-        "errorRefs": {
-          "type": "array",
-          "description": "References one or more workflow error definitions. Used if errorRef is not used",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Transition to next state to handle the error.",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "description": "End workflow execution in case of this error.",
-          "$ref": "#/definitions/end"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "errorRef",
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "errorRef",
-            "end"
-          ]
-        },
-        {
-          "required": [
-            "errorRefs",
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "errorRefs",
-            "end"
-          ]
-        }
-      ]
-    },
-    "onevents": {
-      "type": "object",
-      "properties": {
-        "eventRefs": {
-          "type": "array",
-          "description": "References one or more unique event names in the defined workflow events",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "uniqueItems": true,
-          "additionalItems": false
-        },
-        "actionMode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies how actions are to be performed (in sequence or in parallel)",
-          "default": "sequential"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be performed if expression matches",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        },
-        "eventDataFilter": {
-          "description": "Event data filter",
-          "$ref": "#/definitions/eventdatafilter"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRefs"
-      ]
-    },
-    "action": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Unique action definition name"
-        },
-        "functionRef": {
-          "description": "References a function to be invoked",
-          "$ref": "#/definitions/functionref"
-        },
-        "eventRef": {
-          "description": "References a `produce` and `consume` reusable event definitions",
-          "$ref": "#/definitions/eventref"
-        },
-        "subFlowRef": {
-          "description": "References a sub-workflow to invoke",
-          "$ref": "#/definitions/subflowref"
-        },
-        "sleep": {
-          "description": "Defines time periods workflow execution should sleep before / after function execution",
-          "$ref": "#/definitions/sleep"
-        },
-        "retryRef": {
-          "type": "string",
-          "description": "References a defined workflow retry definition. If not defined the default retry policy is assumed"
-        },
-        "nonRetryableErrors": {
-          "type": "array",
-          "description": "List of unique references to defined workflow errors for which the action should not be retried. Used only when `autoRetries` is set to `true`",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "retryableErrors": {
-          "type": "array",
-          "description": "List of unique references to defined workflow errors for which the action should be retried. Used only when `autoRetries` is set to `false`",
-          "minItems": 1,
-          "items": {
-            "type": "string"
-          },
-          "additionalItems": false
-        },
-        "actionDataFilter": {
-          "description": "Action data filter",
-          "$ref": "#/definitions/actiondatafilter"
-        },
-        "condition": {
-          "description": "Expression, if defined, must evaluate to true for this action to be performed. If false, action is disregarded",
-          "type": "string",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "functionRef"
-          ]
-        },
-        {
-          "required": [
-            "eventRef"
-          ]
-        },
-        {
-          "required": [
-            "subFlowRef"
-          ]
-        }
-      ]
-    },
-    "functionref": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of the referenced function",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Function Reference",
-          "properties": {
-            "refName": {
-              "type": "string",
-              "description": "Name of the referenced function"
-            },
-            "arguments": {
-              "type": "object",
-              "description": "Function arguments/inputs"
-            },
-            "selectionSet": {
-              "type": "string",
-              "description": "Only used if function type is 'graphql'. A string containing a valid GraphQL selection set"
-            },
-            "invoke": {
-              "type": "string",
-              "enum": [
-                "sync",
-                "async"
-              ],
-              "description": "Specifies if the function should be invoked sync or async",
-              "default": "sync"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "refName"
-          ]
-        }
-      ]
-    },
-    "eventref": {
-      "type": "object",
-      "description": "Event References",
-      "properties": {
-        "produceEventRef": {
-          "type": "string",
-          "description": "Reference to the unique name of a 'produced' event definition"
-        },
-        "consumeEventRef": {
-          "type": "string",
-          "description": "Reference to the unique name of a 'consumed' event definition"
-        },
-        "consumeEventTimeout": {
-          "type": "string",
-          "description": "Maximum amount of time (ISO 8601 format) to wait for the result event. If not defined it should default to the actionExecutionTimeout"
-        },
-        "data": {
-          "type": [
-            "string",
-            "object"
-          ],
-          "description": "If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'produceEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'produceEventRef'."
-        },
-        "contextAttributes": {
-          "type": "object",
-          "description": "Add additional extension context attributes to the produced event",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "produceEventRef"
-      ]
-    },
-    "subflowref": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Unique id of the sub-workflow to be invoked",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Specifies a sub-workflow to be invoked",
-          "properties": {
-            "workflowId": {
-              "type": "string",
-              "description": "Unique id of the sub-workflow to be invoked"
-            },
-            "version": {
-              "type": "string",
-              "description": "Version of the sub-workflow to be invoked",
-              "minLength": 1,
-              "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
-            },
-            "onParentComplete": {
-              "type": "string",
-              "enum": [
-                "continue",
-                "terminate"
-              ],
-              "description": "If invoke is 'async', specifies how subflow execution should behave when parent workflow completes. Default is 'terminate'",
-              "default": "terminate"
-            },
-            "invoke": {
-              "type": "string",
-              "enum": [
-                "sync",
-                "async"
-              ],
-              "description": "Specifies if the subflow should be invoked sync or async",
-              "default": "sync"
-            }
-          },
-          "required": [
-            "workflowId"
-          ]
-        }
-      ]
-    },
-    "branch": {
-      "type": "object",
-      "description": "Branch Definition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Branch name"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "actionExecTimeout": {
-              "$ref": "timeouts.json#/definitions/actionExecTimeout"
-            },
-            "branchExecTimeout": {
-              "$ref": "timeouts.json#/definitions/branchExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be executed in this branch",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "actions"
-      ]
-    },
-    "sleepstate": {
-      "type": "object",
-      "description": "Causes the workflow execution to sleep for a specified duration",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "sleep",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "duration": {
-          "type": "string",
-          "description": "Duration (ISO 8601 duration format) to sleep"
-        },
-        "transition": {
-          "description": "Next transition of the workflow after the workflow sleep",
-          "$ref": "#/definitions/transition"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "name",
-            "type",
-            "duration",
-            "end"
-          ]
-        },
-        {
-          "required": [
-            "name",
-            "type",
-            "duration",
-            "transition"
-          ]
-        }
-      ]
-    },
-    "eventstate": {
-      "type": "object",
-      "description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "event",
-          "description": "State type"
-        },
-        "exclusive": {
-          "type": "boolean",
-          "default": true,
-          "description": "If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed"
-        },
-        "onEvents": {
-          "type": "array",
-          "description": "Define the events to be consumed and optional actions to be performed",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/onevents"
-          },
-          "additionalItems": false
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "timeouts.json#/definitions/actionExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "timeouts.json#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "name",
-            "type",
-            "onEvents",
-            "end"
-          ]
-        },
-        {
-          "required": [
-            "name",
-            "type",
-            "onEvents",
-            "transition"
-          ]
-        }
-      ]
-    },
-    "operationstate": {
-      "type": "object",
-      "description": "Defines actions be performed. Does not wait for incoming events",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "operation",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "actionMode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies whether actions are performed in sequence or in parallel",
-          "default": "sequential"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be performed",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          }
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "timeouts.json#/definitions/actionExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "actions"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "actions",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "actions",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "parallelstate": {
-      "type": "object",
-      "description": "Consists of a number of states that are executed in parallel",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "parallel",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "branchExecTimeout": {
-              "$ref": "timeouts.json#/definitions/branchExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "branches": {
-          "type": "array",
-          "description": "Branch Definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/branch"
-          },
-          "additionalItems": false
-        },
-        "completionType": {
-          "type": "string",
-          "enum": [
-            "allOf",
-            "atLeast"
-          ],
-          "description": "Option types on how to complete branch execution.",
-          "default": "allOf"
-        },
-        "numCompleted": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 0,
-          "description": "Used when completionType is set to 'atLeast' to specify the minimum number of branches that must complete before the state will transition."
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all branches have completed execution",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "branches"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "branches",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "branches",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "switchstate": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/databasedswitchstate"
-        },
-        {
-          "$ref": "#/definitions/eventbasedswitchstate"
-        }
-      ]
-    },
-    "eventbasedswitchstate": {
-      "type": "object",
-      "description": "Permits transitions to other states based on events",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "switch",
-          "description": "State type"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "timeouts.json#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "eventConditions": {
-          "type": "array",
-          "description": "Defines conditions evaluated against events",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/eventcondition"
-          },
-          "additionalItems": false
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "defaultCondition": {
-          "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition",
-          "$ref": "#/definitions/defaultconditiondef"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "type",
-        "eventConditions",
-        "defaultCondition"
-      ]
-    },
-    "databasedswitchstate": {
-      "type": "object",
-      "description": "Permits transitions to other states based on data conditions",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "switch",
-          "description": "State type"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "dataConditions": {
-          "type": "array",
-          "description": "Defines conditions evaluated against state data",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/datacondition"
-          },
-          "additionalItems": false
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "defaultCondition": {
-          "description": "Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition",
-          "$ref": "#/definitions/defaultconditiondef"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "name",
-        "type",
-        "dataConditions",
-        "defaultCondition"
-      ]
-    },
-    "defaultconditiondef": {
-      "type": "object",
-      "description": "DefaultCondition definition. Can be either a transition or end definition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The optional name of the default condition, used solely for display purposes"
-        },
-        "transition": {
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end"
-        }
-      },
-      "additionalProperties": false,
-      "oneOf": [
-        {
-          "required": [
-            "transition"
-          ]
-        },
-        {
-          "required": [
-            "end"
-          ]
-        }
-      ]
-    },
-    "eventcondition": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/transitioneventcondition"
-        },
-        {
-          "$ref": "#/definitions/endeventcondition"
-        }
-      ]
-    },
-    "transitioneventcondition": {
-      "type": "object",
-      "description": "Switch state data event condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Event condition name"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique event name in the defined workflow events"
-        },
-        "transition": {
-          "description": "Next transition of the workflow if there is valid matches",
-          "$ref": "#/definitions/transition"
-        },
-        "eventDataFilter": {
-          "description": "Event data filter definition",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef",
-        "transition"
-      ]
-    },
-    "endeventcondition": {
-      "type": "object",
-      "description": "Switch state data event condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Event condition name"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique event name in the defined workflow events"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "Explicit transition to end"
-        },
-        "eventDataFilter": {
-          "description": "Event data filter definition",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef",
-        "end"
-      ]
-    },
-    "datacondition": {
-      "oneOf": [
-        {
-          "$ref": "#/definitions/transitiondatacondition"
-        },
-        {
-          "$ref": "#/definitions/enddatacondition"
-        }
-      ]
-    },
-    "transitiondatacondition": {
-      "type": "object",
-      "description": "Switch state data based condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Data condition name"
-        },
-        "condition": {
-          "type": "string",
-          "description": "Workflow expression evaluated against state data. Must evaluate to true or false"
-        },
-        "transition": {
-          "description": "Workflow transition if condition is evaluated to true",
-          "$ref": "#/definitions/transition"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "condition",
-        "transition"
-      ]
-    },
-    "enddatacondition": {
-      "type": "object",
-      "description": "Switch state data based condition",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Data condition name"
-        },
-        "condition": {
-          "type": "string",
-          "description": "Workflow expression evaluated against state data. Must evaluate to true or false"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "Workflow end definition"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "condition",
-        "end"
-      ]
-    },
-    "injectstate": {
-      "type": "object",
-      "description": "Inject static data into state data. Does not perform any actions",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "inject",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "data": {
-          "type": "object",
-          "description": "JSON object which can be set as states data input and can be manipulated via filters"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "transition": {
-          "description": "Next transition of the workflow after injection has completed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "data"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "data",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "data",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "foreachstate": {
-      "type": "object",
-      "description": "Execute a set of defined actions or workflows for each element of a data array",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "foreach",
-          "description": "State type"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "inputCollection": {
-          "type": "string",
-          "description": "Workflow expression selecting an array element of the states data"
-        },
-        "outputCollection": {
-          "type": "string",
-          "description": "Workflow expression specifying an array element of the states data to add the results of each iteration"
-        },
-        "iterationParam": {
-          "type": "string",
-          "description": "Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array"
-        },
-        "batchSize": {
-          "type": [
-            "number",
-            "string"
-          ],
-          "minimum": 0,
-          "minLength": 0,
-          "description": "Specifies how many iterations may run in parallel at the same time. Used if 'mode' property is set to 'parallel' (default)"
-        },
-        "actions": {
-          "type": "array",
-          "description": "Actions to be executed for each of the elements of inputCollection",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/action"
-          },
-          "additionalItems": false
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "timeouts.json#/definitions/actionExecTimeout"
-            }
-          },
-          "required": []
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after state has completed",
-          "$ref": "#/definitions/transition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "mode": {
-          "type": "string",
-          "enum": [
-            "sequential",
-            "parallel"
-          ],
-          "description": "Specifies how iterations are to be performed (sequentially or in parallel)",
-          "default": "parallel"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "inputCollection",
-          "actions"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "inputCollection",
-              "actions",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "inputCollection",
-              "actions",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "callbackstate": {
-      "type": "object",
-      "description": "This state performs an action, then waits for the callback event that denotes completion of the action",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "State name"
-        },
-        "type": {
-          "type": "string",
-          "const": "callback",
-          "description": "State type"
-        },
-        "action": {
-          "description": "Defines the action to be executed",
-          "$ref": "#/definitions/action"
-        },
-        "eventRef": {
-          "type": "string",
-          "description": "References an unique callback event name in the defined workflow events"
-        },
-        "timeouts": {
-          "type": "object",
-          "description": "State specific timeouts",
-          "properties": {
-            "stateExecTimeout": {
-              "$ref": "timeouts.json#/definitions/stateExecTimeout"
-            },
-            "actionExecTimeout": {
-              "$ref": "timeouts.json#/definitions/actionExecTimeout"
-            },
-            "eventTimeout": {
-              "$ref": "timeouts.json#/definitions/eventTimeout"
-            }
-          },
-          "required": []
-        },
-        "eventDataFilter": {
-          "description": "Event data filter",
-          "$ref": "#/definitions/eventdatafilter"
-        },
-        "stateDataFilter": {
-          "description": "State data filter",
-          "$ref": "#/definitions/statedatafilter"
-        },
-        "onErrors": {
-          "type": "array",
-          "description": "States error handling definitions",
-          "items": {
-            "type": "object",
-            "$ref": "#/definitions/error"
-          },
-          "additionalItems": false
-        },
-        "transition": {
-          "description": "Next transition of the workflow after all the actions have been performed",
-          "$ref": "#/definitions/transition"
-        },
-        "end": {
-          "$ref": "#/definitions/end",
-          "description": "State end definition"
-        },
-        "compensatedBy": {
-          "type": "string",
-          "minLength": 1,
-          "description": "Unique Name of a workflow state which is responsible for compensation of this state"
-        },
-        "usedForCompensation": {
-          "type": "boolean",
-          "default": false,
-          "description": "If true, this state is used to compensate another state. Default is false"
-        },
-        "metadata": {
-          "$ref": "common.json#/definitions/metadata"
-        }
-      },
-      "additionalProperties": false,
-      "if": {
-        "properties": {
-          "usedForCompensation": {
-            "const": true
-          }
-        },
-        "required": [
-          "usedForCompensation"
-        ]
-      },
-      "then": {
-        "required": [
-          "name",
-          "type",
-          "action",
-          "eventRef"
-        ]
-      },
-      "else": {
-        "oneOf": [
-          {
-            "required": [
-              "name",
-              "type",
-              "action",
-              "eventRef",
-              "end"
-            ]
-          },
-          {
-            "required": [
-              "name",
-              "type",
-              "action",
-              "eventRef",
-              "transition"
-            ]
-          }
-        ]
-      }
-    },
-    "startdef": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Name of the starting workflow state",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Workflow start definition",
-          "properties": {
-            "stateName": {
-              "type": "string",
-              "description": "Name of the starting workflow state",
-              "minLength": 1
-            },
-            "schedule": {
-              "description": "Define the time/repeating intervals or cron at which workflow instances should be automatically started.",
-              "$ref": "#/definitions/schedule"
-            }
-          },
-          "additionalProperties": false,
-          "required": [
-            "schedule"
-          ]
-        }
-      ]
-    },
-    "schedule": {
-      "oneOf": [
-        {
-          "type": "string",
-          "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.  (UTC timezone is assumed)",
-          "minLength": 1
-        },
-        {
-          "type": "object",
-          "description": "Start state schedule definition",
-          "properties": {
-            "interval": {
-              "type": "string",
-              "description": "Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created.",
-              "minLength": 1
-            },
-            "cron": {
-              "$ref": "#/definitions/crondef"
-            },
-            "timezone": {
-              "type": "string",
-              "description": "Timezone name used to evaluate the interval & cron-expression. (default: UTC)"
-            }
-          },
-          "additionalProperties": false,
-          "oneOf": [
-            {
-              "required": [
-                "interval"
-              ]
-            },
-            {
-              "required": [
-                "cron"
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "end": {
-      "oneOf": [
-        {
-          "type": "boolean",
-          "description": "State end definition",
-          "default": true
-        },
-        {
-          "type": "object",
-          "description": "State end definition",
-          "properties": {
-            "terminate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If true, completes all execution flows in the given workflow instance"
-            },
-            "produceEvents": {
-              "type": "array",
-              "description": "Defines events that should be produced",
-              "items": {
-                "type": "object",
-                "$ref": "#/definitions/produceeventdef"
-              },
-              "additionalItems": false
-            },
-            "compensate": {
-              "type": "boolean",
-              "default": false,
-              "description": "If set to true, triggers workflow compensation. Default is false"
-            },
-            "continueAs": {
-              "$ref": "#/definitions/continueasdef"
-            }
-          },
-          "additionalProperties": false,
-          "required": []
-        }
-      ]
-    },
-    "produceeventdef": {
-      "type": "object",
-      "description": "Produce an event and set its data",
-      "properties": {
-        "eventRef": {
-          "type": "string",
-          "description": "References a name of a defined event"
-        },
-        "data": {
-          "type": [
-            "string",
-            "object"
-          ],
-          "description": "If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event."
-        },
-        "contextAttributes": {
-          "type": "object",
-          "description": "Add additional event extension context attributes",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "eventRef"
-      ]
-    },
-    "statedatafilter": {
-      "type": "object",
-      "properties": {
-        "input": {
-          "type": "string",
-          "description": "Workflow expression to filter the state data input"
-        },
-        "output": {
-          "type": "string",
-          "description": "Workflow expression that filters the state data output"
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    },
-    "eventdatafilter": {
-      "type": "object",
-      "properties": {
-        "useData": {
-          "type": "boolean",
-          "description": "If set to false, event payload is not added/merged to state data. In this case 'data' and 'toStateData' should be ignored. Default is true.",
-          "default": true
-        },
-        "data": {
-          "type": "string",
-          "description": "Workflow expression that filters the received event payload (default: '${ . }')"
-        },
-        "toStateData": {
-          "type": "string",
-          "description": " Workflow expression that selects a state data element to which the filtered event should be added/merged into. If not specified, denotes, the top-level state data element."
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    },
-    "actiondatafilter": {
-      "type": "object",
-      "properties": {
-        "fromStateData": {
-          "type": "string",
-          "description": "Workflow expression that selects state data that the state action can use"
-        },
-        "useResults": {
-          "type": "boolean",
-          "description": "If set to false, action data results are not added/merged to state data. In this case 'results' and 'toStateData' should be ignored. Default is true.",
-          "default": true
-        },
-        "results": {
-          "type": "string",
-          "description": "Workflow expression that filters the actions data results"
-        },
-        "toStateData": {
-          "type": "string",
-          "description": "Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element"
-        }
-      },
-      "additionalProperties": false,
-      "required": []
-    }
-  }
-}
diff --git a/src/lib/schema/workflowextensions.json b/src/lib/schema/workflowextensions.json
deleted file mode 100644
index 324f23d..0000000
--- a/src/lib/schema/workflowextensions.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "$id": "https://serverlessworkflow.io/schemas/0.8/workflowextensions.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "description": "Serverless Workflow specification - extensions schema",
-  "type": "object",
-  "extensions": {
-    "oneOf": [
-      {
-        "type": "string",
-        "format": "uri",
-        "description": "URI to a resource containing workflow extensions definitions (json or yaml)"
-      },
-      {
-        "type": "array",
-        "description": "Workflow extensions definitions",
-        "items": {
-          "type": "object",
-          "$ref": "#/definitions/extension"
-        },
-        "additionalItems": false,
-        "minItems": 1
-      }
-    ]
-  },
-  "required": [
-    "extensions"
-  ],
-  "definitions": {
-    "extension": {
-      "type": "object",
-      "properties": {
-        "extensionId": {
-          "type": "string",
-          "description": "Unique extension id",
-          "minLength": 1
-        },
-        "resource": {
-          "type": "string",
-          "description": "URI to a resource containing this workflow extension definitions (json or yaml)",
-          "minLength": 1
-        }
-      },
-      "additionalProperties": false,
-      "required": [
-        "extensionId",
-        "resource"
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index dca73b2..62d6fea 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -9,134 +9,32 @@
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
-import { DefinedError, ValidateFunction } from 'ajv';
-import { validators } from './validators';
-
-/**
- * Validates the provided data or throws an error
- * @param typeName {string} The data type to validate
- * @param data {object} The data to validate
- * @returns {boolean} True if valid, throws if invalid
- */
-export const validate = (typeName: string, data: any): boolean => {
-  const validateFn: ValidateFunction | undefined = validators.get(typeName);
-
-  if (!validateFn) {
-    throw Error(`Validate function not defined for type '${typeName}'`);
-  }
-
-  if (!validateFn(JSON.parse(JSON.stringify(data)))) {
-    const firstError: DefinedError = (validateFn.errors as DefinedError[])[0];
-    throw new Error(
-      `${typeName} is invalid: ${firstError.instancePath} | ${firstError.schemaPath} | ${firstError.message}
-      data: ${JSON.stringify(data, null, 4)}`
-    );
-  }
-  return true;
-};
 
 /**
- * Determine if the provided value is an object or a primitive type
- * @param value The data
- * @returns {boolean} True if the provided value is an object
+ * Check if the provided value is an object but not an array
+ * @param value The value to check
+ * @returns True if the value is an object
  */
-export const isObject = (value: any): boolean => {
+export const isObject = (value: T): value is T & object => {
   if (!value) return false;
-  const type = typeof value;
-  return type === 'object';
+  return typeof value === 'object' && !Array.isArray(value);
 };
 
 /**
- * Represents the options used to convert string to pascal case or camel case
+ * Makes a deep copy of the provided object
+ * @param obj
+ * @returns
  */
-export interface CaseConvertionOptions {
-  /** Keep dashes (-) characters */
-  keepDashes: boolean;
-  /** Capitalize after dashes (-) characters, if kept */
-  capitalizeAfterDashes: boolean;
-  /** Keep underscores (_) characters */
-  keepUnderscores: boolean;
-  /** Capitalize after underscores (_) characters, if kept */
-  capitalizeAfterUnderscores: boolean;
-  /** Keep dots (.) characters */
-  keepDots: boolean;
-  /** Capitalize after dots (.) characters, if kept */
-  capitalizeAfterDots: boolean;
-}
+export const deepCopy = (obj: T): T => JSON.parse(JSON.stringify(obj));
 
 /**
- * Holds default convertion options
+ * Checks the provided array is an array
+ * @param arr
+ * @returns
  */
-export const defaultConvertionOptions = {
-  keepDashes: false,
-  capitalizeAfterDashes: false,
-  keepUnderscores: false,
-  capitalizeAfterUnderscores: false,
-  keepDots: true,
-  capitalizeAfterDots: true,
-} as CaseConvertionOptions;
-
-/**
- * Converts a string to pascal case (PascalCase)
- * @param source string The string to convert to pascal case
- * @param convertionOptions CaseConvertionOptions Defaults: keepDashes: false, capitalizeAfterDashes: false, keepUnderscores: false, capitalizeAfterUnderscores: false, keepDots: true, capitalizeAfterDots: true
- * @returns string The pascal case string
- */
-export const pascalCase = (
-  source: string,
-  convertionOptions: CaseConvertionOptions = defaultConvertionOptions
-): string => {
-  if (!source) return '';
-  let delimiter = '';
-  if (!convertionOptions.keepDashes) {
-    source = source.replace(/-+/g, ' ');
-  } else if (convertionOptions.capitalizeAfterDashes) {
-    delimiter += '-';
-  }
-  if (!convertionOptions.keepUnderscores) {
-    source = source.replace(/_+/g, ' ');
-  } else if (convertionOptions.capitalizeAfterUnderscores) {
-    delimiter += '_';
-  }
-  if (!convertionOptions.keepDots) {
-    source = source.replace(/\.+/g, ' ');
-  } else if (convertionOptions.capitalizeAfterDots) {
-    delimiter += '\\.';
-  }
-  if (delimiter) {
-    source = source.replace(
-      new RegExp('([' + delimiter + '])+(.)(\\w+)', 'g'),
-      ($1, $2, $3, $4) => `${$2}${$3.toUpperCase()}${$4.toLowerCase()}`
-    );
-  }
-  return source
-    .replace(/\s+(.)(\w+)/g, ($1, $2, $3) => `${$2.toUpperCase()}${$3.toLowerCase()}`)
-    .replace(/\s/g, '')
-    .replace(/\w/, (s) => s.toUpperCase());
-};
-
-/**
- * Converts a PasalCase/camelCase string into a human readable string
- * @param source string The string to convert
- * @param keepCapitalLetters boolean If capital letters should be kept
- * @returns string The converted string
- */
-export const humanCase = (source: string, keepCapitalLetters: boolean = false): string => {
-  if (!source) return '';
-  let transformable = source.trim();
-  transformable =
-    transformable[0].toUpperCase() +
-    transformable
-      .slice(1)
-      .replace(/([A-Z])/g, ' $1')
-      .replace(/\s+/g, ' ');
-  if (keepCapitalLetters) {
-    return transformable;
-  } else {
-    return transformable.toLowerCase();
-  }
-};
+export const isArray = (arr: Array | number | undefined): arr is Array => !!arr && isNaN(arr as number);
diff --git a/src/lib/validation-error.ts b/src/lib/validation-error.ts
deleted file mode 100644
index facc041..0000000
--- a/src/lib/validation-error.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export class ValidationError {
-  constructor(public readonly message: string) {}
-}
diff --git a/src/lib/validation.ts b/src/lib/validation.ts
new file mode 100644
index 0000000..920d5d2
--- /dev/null
+++ b/src/lib/validation.ts
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import Ajv, { ValidateFunction } from 'ajv/dist/2020';
+import addFormats from 'ajv-formats';
+import workflowSchema from './generated/schema/workflow.json';
+import { validationPointers } from './generated/validation';
+import { deepCopy } from './utils';
+import { getLifecycleHooks } from './lifecycle-hooks';
+import { Specification } from './generated/definitions';
+
+const ajv = new Ajv({
+  schemas: [workflowSchema],
+  strict: false,
+});
+addFormats(ajv);
+
+/**
+ * A Map of validation functions, where the key is the name of the schema to validate with
+ */
+const validators: Map = new Map(
+  Object.entries(validationPointers).map(([typeName, jsonPointer]) => {
+    if (!jsonPointer) throw `No JSON pointer provided for type '${typeName}'`;
+    const validate = ajv.getSchema(jsonPointer);
+    if (!validate) throw `Unable to find schema '${jsonPointer}' for type '${typeName}'`;
+    return [typeName, validate as ValidateFunction];
+  }),
+);
+
+/**
+ * Validates the provided data or throws an error
+ * @param typeName The data type to validate
+ * @param data The data to validate
+ * @param workflow A workflow instance, used for DSL level validation
+ * @returns Throws if invalid
+ */
+export const validate = (typeName: string, data: T, workflow?: Partial) => {
+  getLifecycleHooks(typeName)?.preValidation?.(data, workflow);
+  const validateFn: ValidateFunction | undefined = validators.get(typeName);
+  if (!validateFn) {
+    throw Error(`Unable to find a validation function for '${typeName}'`);
+  }
+  // prevents possible data mutation and invalid "additional properties" from the classes like constructor/validate/normalize
+  if (!validateFn(deepCopy(data))) {
+    throw new Error(
+      `'${typeName}' is invalid:
+${validateFn.errors?.reduce((acc, error) => acc + `- ${error.instancePath} | ${error.schemaPath} | ${error.message} | ${JSON.stringify(error.params)}\n`, '') ?? ''}
+
+data: ${JSON.stringify(data, null, 4)}`,
+    );
+  }
+  getLifecycleHooks(typeName)?.postValidation?.(data, workflow);
+};
diff --git a/src/lib/validation/validators-paths.ts b/src/lib/validation/validators-paths.ts
deleted file mode 100644
index 82a9944..0000000
--- a/src/lib/validation/validators-paths.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-* Copyright 2021-Present The Serverless Workflow Specification Authors
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-/**
-* A map of type names and their corresponding schema
-*/
-export const validatorsPaths: [string, string][] = [
-  ['Workflow', 'https://serverlessworkflow.io/schemas/0.8/workflow.json'],
-  ['Sleep', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/sleep'],
-  ['Crondef', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/crondef'],
-  ['Continueasdef', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/continueasdef'],
-  ['Transition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/transition'],
-  ['Error', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/error'],
-  ['Onevents', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/onevents'],
-  ['Action', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/action'],
-  ['Functionref', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/functionref'],
-  ['Eventref', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/eventref'],
-  ['Subflowref', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/subflowref'],
-  ['Branch', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/branch'],
-  ['Sleepstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/sleepstate'],
-  ['Eventstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/eventstate'],
-  ['Operationstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/operationstate'],
-  ['Parallelstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/parallelstate'],
-  ['Switchstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/switchstate'],
-  ['Eventbasedswitchstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/eventbasedswitchstate'],
-  ['Databasedswitchstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/databasedswitchstate'],
-  ['Defaultconditiondef', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/defaultconditiondef'],
-  ['Eventcondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/eventcondition'],
-  ['Transitioneventcondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/transitioneventcondition'],
-  ['Endeventcondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/endeventcondition'],
-  ['Datacondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/datacondition'],
-  ['Transitiondatacondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/transitiondatacondition'],
-  ['Enddatacondition', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/enddatacondition'],
-  ['Injectstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/injectstate'],
-  ['Foreachstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/foreachstate'],
-  ['Callbackstate', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/callbackstate'],
-  ['Startdef', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/startdef'],
-  ['Schedule', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/schedule'],
-  ['End', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/end'],
-  ['Produceeventdef', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/produceeventdef'],
-  ['Statedatafilter', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/statedatafilter'],
-  ['Eventdatafilter', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/eventdatafilter'],
-  ['Actiondatafilter', 'https://serverlessworkflow.io/schemas/0.8/workflow.json#/definitions/actiondatafilter'],
-  ['Metadata', 'https://serverlessworkflow.io/schemas/0.8/common.json#/definitions/metadata'],
-  ['WorkflowExecTimeout', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/definitions/workflowExecTimeout'],
-  ['StateExecTimeout', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/definitions/stateExecTimeout'],
-  ['ActionExecTimeout', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/definitions/actionExecTimeout'],
-  ['BranchExecTimeout', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/definitions/branchExecTimeout'],
-  ['EventTimeout', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/definitions/eventTimeout'],
-  ['Eventdef', 'https://serverlessworkflow.io/schemas/0.8/events.json#/definitions/eventdef'],
-  ['CorrelationDef', 'https://serverlessworkflow.io/schemas/0.8/events.json#/definitions/correlationDef'],
-  ['Function', 'https://serverlessworkflow.io/schemas/0.8/functions.json#/definitions/function'],
-  ['Authdef', 'https://serverlessworkflow.io/schemas/0.8/auth.json#/definitions/authdef'],
-  ['Basicpropsdef', 'https://serverlessworkflow.io/schemas/0.8/auth.json#/definitions/basicpropsdef'],
-  ['Bearerpropsdef', 'https://serverlessworkflow.io/schemas/0.8/auth.json#/definitions/bearerpropsdef'],
-  ['Oauth2propsdef', 'https://serverlessworkflow.io/schemas/0.8/auth.json#/definitions/oauth2propsdef'],
-  ['Retrydef', 'https://serverlessworkflow.io/schemas/0.8/retries.json#/definitions/retrydef'],
-  ['Errordef', 'https://serverlessworkflow.io/schemas/0.8/errors.json#/definitions/errordef'],
-  ['Extension', 'https://serverlessworkflow.io/schemas/0.8/workflowextensions.json#/definitions/extension'],
-  ['Secrets', 'https://serverlessworkflow.io/schemas/0.8/secrets.json#/secrets'],
-  ['Timeouts', 'https://serverlessworkflow.io/schemas/0.8/timeouts.json#/timeouts'],
-  ['Errors', 'https://serverlessworkflow.io/schemas/0.8/errors.json#/errors'],
-  ['Events', 'https://serverlessworkflow.io/schemas/0.8/events.json#/events'],
-  ['Functions', 'https://serverlessworkflow.io/schemas/0.8/functions.json#/functions'],
-  ['Retries', 'https://serverlessworkflow.io/schemas/0.8/retries.json#/retries'],
-  ['Auth', 'https://serverlessworkflow.io/schemas/0.8/auth.json#/auth'],
-  ['Extensions', 'https://serverlessworkflow.io/schemas/0.8/workflowextensions.json#/extensions'],
-]
\ No newline at end of file
diff --git a/src/lib/validators.ts b/src/lib/validators.ts
deleted file mode 100644
index 394bd1a..0000000
--- a/src/lib/validators.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import Ajv, { ValidateFunction } from 'ajv';
-import authSchema from './schema/auth.json';
-import commonSchema from './schema/common.json';
-import errorsSchema from './schema/errors.json';
-import eventsSchema from './schema/events.json';
-import functionsSchema from './schema/functions.json';
-import retriesSchema from './schema/retries.json';
-import secretsSchema from './schema/secrets.json';
-import timeoutsSchema from './schema/timeouts.json';
-import odataSchema from './schema/odata.json';
-import workflowSchema from './schema/workflow.json';
-import workflowExtensionsSchema from './schema/workflowextensions.json';
-import { validatorsPaths } from './validation/validators-paths';
-
-const schemas: any[] = [
-  authSchema,
-  commonSchema,
-  eventsSchema,
-  errorsSchema,
-  functionsSchema,
-  odataSchema,
-  retriesSchema,
-  secretsSchema,
-  timeoutsSchema,
-  workflowSchema,
-  workflowExtensionsSchema,
-];
-const strict: boolean = false;
-const ajv = new Ajv({ schemas, strict });
-ajv.addFormat('uri', (uri: string): boolean => true);
-/**
- * A Map of validation functions, where the key is the name of the schema to validate with
- */
-export const validators: Map = new Map(
-  validatorsPaths.map(([dataType, schemaPath]) => {
-    const validate = ajv.getSchema(schemaPath);
-    if (!validate) throw `Unable to find schema '${schemaPath}' for type '${dataType}'`;
-    return [dataType, validate as ValidateFunction];
-  })
-);
diff --git a/src/lib/workflow-validator.ts b/src/lib/workflow-validator.ts
deleted file mode 100644
index 1faca00..0000000
--- a/src/lib/workflow-validator.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { ValidateFunction } from 'ajv';
-import { Specification } from './definitions';
-import { validators } from './validators';
-import { ValidationError } from './validation-error';
-
-import { schemaVersion } from '../../package.json';
-
-export class WorkflowValidator {
-  /** The validation errors after running validate(), if any */
-  readonly errors: ValidationError[] = [];
-
-  /** Whether the workflow is valid or not */
-  readonly isValid: boolean;
-
-  /**
-   * Creates a new WorkflowValidator for the provided workflow
-   * @param {Workflow} workflow The workflow to validate
-   */
-  constructor(private workflow: Specification.Workflow) {
-    const validateFn = validators.get('Workflow') as ValidateFunction;
-    const normalizedWf = this.workflow.normalize();
-    validateFn(JSON.parse(JSON.stringify(normalizedWf)));
-    if (validateFn.errors) {
-      this.errors = validateFn.errors.map((error) => {
-        const message = `Workflow is invalid: ${error.instancePath} | ${error.schemaPath} | ${error.message}
-        data: ${JSON.stringify(normalizedWf, null, 4)}`;
-        return new ValidationError(message);
-      });
-    }
-
-    const specVersion = workflow.specVersion;
-    if (schemaVersion !== specVersion) {
-      const message = `provided workflow.specVersion value '${specVersion}' can not be different from the SDK supported version '${schemaVersion}'`;
-      this.errors.push(new ValidationError(message));
-    }
-
-    this.isValid = this.errors.length === 0;
-  }
-}
diff --git a/src/serverless-workflow-sdk.ts b/src/serverless-workflow-sdk.ts
index 0d865f7..3549753 100644
--- a/src/serverless-workflow-sdk.ts
+++ b/src/serverless-workflow-sdk.ts
@@ -1,21 +1,4 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export * from './lib/validation-error';
-export * from './lib/workflow-validator';
-export * from './lib/validators';
-export * from './lib/builders';
-export * from './lib/definitions';
+export * from './lib/generated/builders';
+export * from './lib/generated/classes';
+export * from './lib/generated/definitions';
+export * from './lib/validation';
diff --git a/tests/builders/builder.spec.ts b/tests/builders/builder.spec.ts
new file mode 100644
index 0000000..28c79cc
--- /dev/null
+++ b/tests/builders/builder.spec.ts
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { Builder, builder } from '../../src/lib/builder';
+import { type } from 'ts-inference-check';
+
+type Person = {
+  name: string;
+  age: number;
+  friends?: Array;
+  [k: string]: unknown;
+};
+
+const darknessMyOldFriend = { name: 'Darkness', age: 999 };
+const isPerson = (model: Partial): model is Person => !!model.name && !!model.age;
+function personBuildingFn(model: Partial): Person {
+  if (!isPerson(model)) {
+    throw new Error('The provided object is not a person');
+  }
+  return {
+    ...model,
+    friends: [...(model.friends || []), darknessMyOldFriend],
+  };
+}
+const personBuilder = (model?: Partial): Builder => builder(model, personBuildingFn);
+
+describe('builder proxy', () => {
+  it('should infer property types', () => {
+    const builder = personBuilder();
+    expect(type(builder.name).is<(arg: string) => Builder>(true)).toBe(true);
+    expect(type(builder.age).is<(arg: number) => Builder>(true)).toBe(true);
+    expect(type(builder.friends).is<(arg: Array | undefined) => Builder>(true)).toBe(true);
+    expect(type(builder.lover).is<(arg: unknown) => Builder>(true)).toBe(true);
+  });
+
+  it('should build', () => {
+    const name = 'John Doe';
+    const age = 42;
+    const friend = { name: 'Cookie Doe', age: 42 };
+    const lover = 'Jane Doe';
+    const person = personBuilder().name(name).age(age).friends([friend]).lover(lover).build();
+    expect(person).toBeDefined();
+    expect(person.name).toBe(name);
+    expect(person.age).toBe(age);
+    expect(person.friends?.length).toBe(2);
+    expect(person.friends?.includes(friend)).toBe(true);
+    expect(person.friends?.includes(darknessMyOldFriend)).toBe(true);
+    expect(person.lover).toBe(lover);
+  });
+});
diff --git a/tests/builders/call-async-api-builder.spec.ts b/tests/builders/call-async-api-builder.spec.ts
new file mode 100644
index 0000000..6792767
--- /dev/null
+++ b/tests/builders/call-async-api-builder.spec.ts
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { callAsyncAPIBuilder } from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+const document = { endpoint: 'https://example.com', name: 'example' };
+const operationRef = 'operationRef';
+
+describe('CallAsyncAPI builder', () => {
+  it('should build with fluent api', () => {
+    const callAsyncAPI = callAsyncAPIBuilder()
+      .with({
+        document,
+        operationRef,
+      })
+      .build();
+    expect(callAsyncAPI).toBeDefined();
+    expect(callAsyncAPI).toBeInstanceOf(Classes.CallAsyncAPI);
+    expect(callAsyncAPI.call).toBe('asyncapi');
+    expect(callAsyncAPI.with).toBeDefined();
+    expect(callAsyncAPI.with!.document).toEqual(document);
+    expect(callAsyncAPI.with!.operationRef).toBe(operationRef);
+  });
+
+  it('should build with input', () => {
+    const data = {
+      with: {
+        document,
+        operationRef,
+      },
+    };
+    const callAsyncAPI = callAsyncAPIBuilder(data).build();
+    expect(callAsyncAPI).toBeDefined();
+    expect(callAsyncAPI).toBeInstanceOf(Classes.CallAsyncAPI);
+    expect(callAsyncAPI.call).toBe('asyncapi');
+    expect(callAsyncAPI.with).toBeDefined();
+    expect(callAsyncAPI.with!.document).toEqual(document);
+    expect(callAsyncAPI.with!.operationRef).toBe(operationRef);
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      callAsyncAPIBuilder().build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'CallAsyncAPI' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      callAsyncAPIBuilder().build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/builders/call-function-builder.spec.ts b/tests/builders/call-function-builder.spec.ts
new file mode 100644
index 0000000..3ab60ed
--- /dev/null
+++ b/tests/builders/call-function-builder.spec.ts
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { callFunctionBuilder } from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+const functionName = 'exampleFunction';
+const functionArgs = { arg1: 'value1', arg2: 'value2' };
+
+describe('CallFunction builder', () => {
+  it('should build with fluent api', () => {
+    const callFunction = callFunctionBuilder().call(functionName).build();
+    expect(callFunction).toBeDefined();
+    expect(callFunction).toBeInstanceOf(Classes.CallFunction);
+    expect(callFunction.call).toBe(functionName);
+  });
+
+  it('should build with input', () => {
+    const data = {
+      call: functionName,
+    };
+    const callFunction = callFunctionBuilder(data).build();
+    expect(callFunction).toBeDefined();
+    expect(callFunction).toBeInstanceOf(Classes.CallFunction);
+    expect(callFunction.call).toBe(functionName);
+  });
+
+  it('should build with function arguments', () => {
+    const callFunction = callFunctionBuilder().call(functionName).with(functionArgs).build();
+    expect(callFunction).toBeDefined();
+    expect(callFunction).toBeInstanceOf(Classes.CallFunction);
+    expect(callFunction.call).toBe(functionName);
+    expect(callFunction.with).toEqual(functionArgs);
+  });
+
+  it('should build with input and function arguments', () => {
+    const data = {
+      call: functionName,
+      with: functionArgs,
+    };
+    const callFunction = callFunctionBuilder(data).build();
+    expect(callFunction).toBeDefined();
+    expect(callFunction).toBeInstanceOf(Classes.CallFunction);
+    expect(callFunction.call).toBe(functionName);
+    expect(callFunction.with).toEqual(functionArgs);
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      callFunctionBuilder().build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'CallFunction' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      callFunctionBuilder().build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/builders/call-grpc-builder.spec.ts b/tests/builders/call-grpc-builder.spec.ts
new file mode 100644
index 0000000..13deaa8
--- /dev/null
+++ b/tests/builders/call-grpc-builder.spec.ts
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+import { callGRPCBuilder } from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+const proto = { name: 'foo', endpoint: 'http://proto.com' };
+const service = { name: 'MyService', host: 'Host' };
+const method = 'MyMethod';
+
+describe('CallGRPC builder', () => {
+  it('should build with fluent api', () => {
+    const callGrpc = callGRPCBuilder()
+      .with({
+        proto,
+        service,
+        method,
+      })
+      .build();
+    expect(callGrpc).toBeDefined();
+    expect(callGrpc).toBeInstanceOf(Classes.CallGRPC);
+    expect(callGrpc.call).toBe('grpc');
+    expect(callGrpc.with).toBeDefined();
+    expect(callGrpc.with!.service).toEqual(service);
+    expect(callGrpc.with!.method).toBe(method);
+  });
+
+  it('should build with input', () => {
+    const data = {
+      with: {
+        proto,
+        service,
+        method,
+      },
+    };
+    const callGrpc = callGRPCBuilder(data).build();
+    expect(callGrpc).toBeDefined();
+    expect(callGrpc).toBeInstanceOf(Classes.CallGRPC);
+    expect(callGrpc.call).toBe('grpc');
+    expect(callGrpc.with).toBeDefined();
+    expect(callGrpc.with!.service).toEqual(service);
+    expect(callGrpc.with!.method).toBe(method);
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      callGRPCBuilder().build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'CallGRPC' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      callGRPCBuilder().build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/builders/call-http-builder.spec.ts b/tests/builders/call-http-builder.spec.ts
new file mode 100644
index 0000000..67fd2e5
--- /dev/null
+++ b/tests/builders/call-http-builder.spec.ts
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import { callHTTPBuilder } from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+describe('CallHTTP builder', () => {
+  it('should build with fluent api', () => {
+    const endpoint = 'https://serverlessworkflow.io';
+    const method = 'get';
+    const callHttp = callHTTPBuilder()
+      .with({
+        endpoint,
+        method,
+      })
+      .build();
+    expect(callHttp).toBeDefined();
+    expect(callHttp).toBeInstanceOf(Classes.CallHTTP);
+    expect(callHttp.call).toBe('http');
+    expect(callHttp.with).toBeDefined();
+    expect(callHttp.with!.endpoint).toBe(endpoint);
+    expect(callHttp.with!.method).toBe(method);
+  });
+
+  it('should build with input', () => {
+    const endpoint = 'https://serverlessworkflow.io';
+    const method = 'get';
+    const data = {
+      with: {
+        endpoint,
+        method,
+      },
+    };
+    const callHttp = callHTTPBuilder(data).build();
+    expect(callHttp).toBeDefined();
+    expect(callHttp).toBeInstanceOf(Classes.CallHTTP);
+    expect(callHttp.call).toBe('http');
+    expect(callHttp.with).toBeDefined();
+    expect(callHttp.with!.endpoint).toBe(endpoint);
+    expect(callHttp.with!.method).toBe(method);
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      callHTTPBuilder().build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'CallHTTP' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      callHTTPBuilder().build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/builders/use-extensions-builder.spec.ts b/tests/builders/use-extensions-builder.spec.ts
new file mode 100644
index 0000000..f10cb94
--- /dev/null
+++ b/tests/builders/use-extensions-builder.spec.ts
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import { useExtensionsBuilder } from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+describe('UseExtensions builder', () => {
+  it('should build with fluent api', () => {
+    const extension = {
+      myExtension: {
+        extend: 'call' as const,
+      },
+    };
+    const useExtensions = useExtensionsBuilder().push(extension).build();
+    expect(useExtensions).toBeDefined();
+    expect(useExtensions).toBeInstanceOf(Classes.UseExtensions);
+    expect(useExtensions.length).toBe(1);
+    expect(useExtensions[0].myExtension).toEqual(extension.myExtension);
+  });
+
+  it('should build with input', () => {
+    const extension = {
+      myExtension: {
+        extend: 'call' as const,
+      },
+    };
+    const useExtensions = useExtensionsBuilder([extension]).build();
+    expect(useExtensions).toBeDefined();
+    expect(useExtensions).toBeInstanceOf(Classes.UseExtensions);
+    expect(useExtensions.length).toBe(1);
+    expect(useExtensions[0].myExtension).toEqual(extension.myExtension);
+  });
+
+  it('should throw with non-array', () => {
+    const test = () => {
+      useExtensionsBuilder({ foo: 'bar' } as any).build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow('The provided model should be an array');
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      useExtensionsBuilder([1, 2, 3] as any).build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'UseExtensions' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      useExtensionsBuilder([1, 2, 3] as any).build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/builders/workflow-builder.spec.ts b/tests/builders/workflow-builder.spec.ts
new file mode 100644
index 0000000..8d7cac8
--- /dev/null
+++ b/tests/builders/workflow-builder.spec.ts
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import {
+  basicAuthenticationPolicyBuilder,
+  basicAuthenticationPropertiesBuilder,
+  bearerAuthenticationPolicyBuilder,
+  bearerAuthenticationPropertiesBuilder,
+  callHTTPBuilder,
+  documentBuilder,
+  hTTPArgumentsBuilder,
+  oAuth2AutenthicationDataClientBuilder,
+  oAuth2AuthenticationPolicyBuilder,
+  oAuth2ConnectAuthenticationPropertiesBuilder,
+  setTaskBuilder,
+  taskListBuilder,
+  useAuthenticationsBuilder,
+  useBuilder,
+  useFunctionsBuilder,
+  workflowBuilder,
+} from '../../src/lib/generated/builders';
+import { Classes } from '../../src/lib/generated/classes';
+
+import { schemaVersion } from '../../package.json';
+
+describe('Workflow builder', () => {
+  it('should build with fluent api', () => {
+    const workflow = workflowBuilder()
+      .document(documentBuilder().dsl(schemaVersion).name('test').version('1.0.0').namespace('default').build())
+      .do(
+        taskListBuilder()
+          .push({
+            step1: setTaskBuilder().set({ foo: 'bar' }).build(),
+          })
+          .build(),
+      )
+      .build();
+    expect(workflow).toBeDefined();
+    expect(workflow).toBeInstanceOf(Classes.Workflow);
+  });
+
+  it('should build a complex workflow with fluent api', () => {
+    const workflow = workflowBuilder()
+      .document(documentBuilder().dsl(schemaVersion).name('test').version('1.0.0').namespace('default').build())
+      .use(
+        useBuilder()
+          .authentications(
+            useAuthenticationsBuilder({
+              myBasicAuth: basicAuthenticationPolicyBuilder()
+                .basic(basicAuthenticationPropertiesBuilder().username('user').password('password').build())
+                .build(),
+              myBearerAuth: bearerAuthenticationPolicyBuilder()
+                .bearer(bearerAuthenticationPropertiesBuilder().token('token').build())
+                .build(),
+              myOAuthAuth: oAuth2AuthenticationPolicyBuilder()
+                .oauth2(
+                  oAuth2ConnectAuthenticationPropertiesBuilder()
+                    .grant('client_credentials')
+                    .authority('https://authority.com')
+                    .client(oAuth2AutenthicationDataClientBuilder().id('clientId').secret('clientSecret').build())
+                    .build(),
+                )
+                .build(),
+            }).build(),
+          )
+          .functions(
+            useFunctionsBuilder({
+              myCustomFunction: callHTTPBuilder()
+                .with(hTTPArgumentsBuilder().method('GET').endpoint('https://myapi.com').build())
+                .build(),
+            }).build(),
+          )
+          .build(),
+      )
+      .do(
+        taskListBuilder()
+          .push({
+            step1: setTaskBuilder().set({ foo: 'bar' }).build(),
+          })
+          .build(),
+      )
+      .build();
+    expect(workflow).toBeDefined();
+    expect(workflow).toBeInstanceOf(Classes.Workflow);
+  });
+
+  it('should build with input', () => {
+    const data = {
+      document: {
+        dsl: schemaVersion,
+        name: 'test',
+        version: '1.0.0',
+        namespace: 'default',
+      },
+      do: [
+        {
+          step1: {
+            set: {
+              foo: 'bar',
+            },
+          },
+        },
+      ],
+    };
+    const workflow = workflowBuilder(data).build();
+    expect(workflow).toBeDefined();
+    expect(workflow).toBeInstanceOf(Classes.Workflow);
+  });
+
+  it('should throw when invalid', () => {
+    const test = () => {
+      workflowBuilder().build();
+    };
+    expect(test).toThrow(Error);
+    expect(test).toThrow(/'Workflow' is invalid/);
+  });
+
+  it('should not throw when validation is disabled', () => {
+    const test = () => {
+      workflowBuilder().build({ validate: false });
+    };
+    expect(test).not.toThrow();
+  });
+});
diff --git a/tests/classes/use-extensions.spec.ts b/tests/classes/use-extensions.spec.ts
new file mode 100644
index 0000000..e4ed660
--- /dev/null
+++ b/tests/classes/use-extensions.spec.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import { type } from 'ts-inference-check';
+import { Classes } from '../../src/lib/generated/classes';
+import { Specification } from '../../src/lib/generated/definitions';
+
+describe('UseExtensions class', () => {
+  it('should be an instance of UseExtensions', () => {
+    const useExtensions = new Classes.UseExtensions();
+    expect(useExtensions).toBeInstanceOf(Classes.UseExtensions);
+    expect(useExtensions.length).toBe(0);
+    expect(type(useExtensions.push).is<(...items: { [k: string]: Specification.Extension }[]) => number>(true)).toBe(
+      true,
+    );
+  });
+});
diff --git a/tests/classes/workflow.spec.ts b/tests/classes/workflow.spec.ts
new file mode 100644
index 0000000..d02a61c
--- /dev/null
+++ b/tests/classes/workflow.spec.ts
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2021-Present The Serverless Workflow Specification Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+import { type } from 'ts-inference-check';
+import { Classes } from '../../src/lib/generated/classes';
+import { Specification } from '../../src/lib/generated/definitions';
+//import { schemaVersion } from '../../package.json';
+
+describe('Workflow class', () => {
+  it('should be an instance of Workflow', () => {
+    const workflow = new Classes.Workflow();
+    expect(workflow).toBeInstanceOf(Classes.Workflow);
+    expect(type(workflow.document).is(true)).toBe(true);
+    expect(type(workflow.input).is(true)).toBe(true);
+    expect(type(workflow.use).is(true)).toBe(true);
+    expect(type(workflow.do).is(true)).toBe(true);
+    expect(type(workflow.timeout).is(true)).toBe(true);
+    expect(type(workflow.output).is(true)).toBe(true);
+    expect(type(workflow.schedule).is(true)).toBe(true);
+    expect(type(workflow.foobar).is(true)).toBe(true);
+  });
+});
diff --git a/tests/examples/applicantrequest.json b/tests/examples/applicantrequest.json
deleted file mode 100644
index 6a295a9..0000000
--- a/tests/examples/applicantrequest.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "id": "applicantrequest",
-  "name": "Applicant Request Decision Workflow",
-  "version": "1.0.0",
-  "description": "Determine if applicant request is valid",
-  "specVersion": "0.8",
-  "start": "CheckApplication",
-  "states": [
-    {
-      "name": "CheckApplication",
-      "type": "switch",
-      "dataConditions": [
-        {
-          "condition": "${ .applicants | .age >= 18 }",
-          "transition": "StartApplication"
-        },
-        {
-          "condition": "${ .applicants | .age < 18 }",
-          "transition": "RejectApplication"
-        }
-      ],
-      "defaultCondition": {
-        "transition": "RejectApplication"
-      }
-    },
-    {
-      "name": "StartApplication",
-      "type": "operation",
-      "actions": [
-        {
-          "subFlowRef": "startApplicationWorkflowId"
-        }
-      ],
-      "end": true
-    },
-    {
-      "name": "RejectApplication",
-      "type": "operation",
-      "actionMode": "sequential",
-      "actions": [
-        {
-          "functionRef": {
-            "refName": "sendRejectionEmailFunction",
-            "arguments": {
-              "applicant": "${ .applicant }"
-            }
-          }
-        }
-      ],
-      "end": true
-    }
-  ],
-  "functions": [
-    {
-      "name": "sendRejectionEmailFunction",
-      "operation": "http://myapis.org/applicationapi.json#emailRejection"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/tests/examples/applicantrequest.spec.ts b/tests/examples/applicantrequest.spec.ts
deleted file mode 100644
index 2f00b4e..0000000
--- a/tests/examples/applicantrequest.spec.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2021-Present The Serverless Workflow Specification Authors
- * 

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import * as fs from 'fs'; -import { - actionBuilder, - databasedswitchstateBuilder, - defaultconditiondefBuilder, - functionBuilder, - functionrefBuilder, - operationstateBuilder, - transitiondataconditionBuilder, - workflowBuilder, -} from '../../src'; - -describe('applicationrequest workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('applicantrequest') - .version('1.0.0') - .specVersion('0.8') - .name('Applicant Request Decision Workflow') - .description('Determine if applicant request is valid') - .start('CheckApplication') - .functions([ - functionBuilder() - .name('sendRejectionEmailFunction') - .operation('http://myapis.org/applicationapi.json#emailRejection') - .build(), - ]) - .states([ - databasedswitchstateBuilder() - .name('CheckApplication') - .dataConditions([ - transitiondataconditionBuilder() - .condition('${ .applicants | .age >= 18 }') - .transition('StartApplication') - .build(), - transitiondataconditionBuilder() - .condition('${ .applicants | .age < 18 }') - .transition('RejectApplication') - .build(), - ]) - .defaultCondition(defaultconditiondefBuilder().transition('RejectApplication').build()) - .build(), - operationstateBuilder() - .name('StartApplication') - .actions([actionBuilder().subFlowRef('startApplicationWorkflowId').build()]) - .build(), - operationstateBuilder() - .name('RejectApplication') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('sendRejectionEmailFunction') - .arguments({ applicant: '${ .applicant }' }) - .build() - ) - .build(), - ]) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/applicantrequest.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/booklending.json b/tests/examples/booklending.json deleted file mode 100644 index fc3c8df..0000000 --- a/tests/examples/booklending.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "id": "booklending", - "name": "Book Lending Workflow", - "version": "1.0.0", - "specVersion": "0.8", - "start": "Book Lending Request", - "states": [ - { - "name": "Book Lending Request", - "type": "event", - "onEvents": [ - { - "eventRefs": [ - "Book Lending Request Event" - ] - } - ], - "transition": "Get Book Status" - }, - { - "name": "Get Book Status", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Get status for book", - "arguments": { - "bookid": "${ .book.id }" - } - } - } - ], - "transition": "Book Status Decision" - }, - { - "name": "Book Status Decision", - "type": "switch", - "dataConditions": [ - { - "name": "Book is on loan", - "condition": "${ .book.status == \"onloan\" }", - "transition": "Report Status To Lender" - }, - { - "name": "Check is available", - "condition": "${ .book.status == \"available\" }", - "transition": "Check Out Book" - } - ], - "defaultCondition": { - "end": true - } - }, - { - "name": "Report Status To Lender", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Send status to lender", - "arguments": { - "bookid": "${ .book.id }", - "message": "Book ${ .book.title } is already on loan" - } - } - } - ], - "transition": "Wait for Lender response" - }, - { - "name": "Wait for Lender response", - "type": "switch", - "eventConditions": [ - { - "name": "Hold Book", - "eventRef": "Hold Book Event", - "transition": "Request Hold" - }, - { - "name": "Decline Book Hold", - "eventRef": "Decline Hold Event", - "transition": "Cancel Request" - } - ], - "defaultCondition": { - "end": true - } - }, - { - "name": "Request Hold", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Request hold for lender", - "arguments": { - "bookid": "${ .book.id }", - "lender": "${ .lender }" - } - } - } - ], - "transition": "Sleep two weeks" - }, - { - "name": "Sleep two weeks", - "type": "sleep", - "duration": "PT2W", - "transition": "Get Book Status" - }, - { - "name": "Check Out Book", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Check out book with id", - "arguments": { - "bookid": "${ .book.id }" - } - } - }, - { - "functionRef": { - "refName": "Notify Lender for checkout", - "arguments": { - "bookid": "${ .book.id }", - "lender": "${ .lender }" - } - } - } - ], - "end": true - } - ], - "functions": "file://books/lending/functions.json", - "events": "file://books/lending/events.json" -} diff --git a/tests/examples/booklending.spec.ts b/tests/examples/booklending.spec.ts deleted file mode 100644 index bda3e65..0000000 --- a/tests/examples/booklending.spec.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import * as fs from 'fs'; -import { - actionBuilder, - databasedswitchstateBuilder, - defaultconditiondefBuilder, - eventbasedswitchstateBuilder, - eventstateBuilder, - functionrefBuilder, - oneventsBuilder, - operationstateBuilder, - sleepstateBuilder, - transitiondataconditionBuilder, - transitioneventconditionBuilder, - workflowBuilder, -} from '../../src'; - -describe('booklending workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('booklending') - .name('Book Lending Workflow') - .version('1.0.0') - .specVersion('0.8') - .start('Book Lending Request') - .states([ - eventstateBuilder() - .name('Book Lending Request') - .onEvents([oneventsBuilder().eventRefs(['Book Lending Request Event']).build()]) - .transition('Get Book Status') - .build(), - operationstateBuilder() - .name('Get Book Status') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('Get status for book') - .arguments({ - bookid: '${ .book.id }', - }) - .build() - ) - .build(), - ]) - .transition('Book Status Decision') - .build(), - databasedswitchstateBuilder() - .name('Book Status Decision') - .dataConditions([ - transitiondataconditionBuilder() - .name('Book is on loan') - .condition('${ .book.status == "onloan" }') - .transition('Report Status To Lender') - .build(), - transitiondataconditionBuilder() - .name('Check is available') - .condition('${ .book.status == "available" }') - .transition('Check Out Book') - .build(), - ]) - .defaultCondition(defaultconditiondefBuilder().end(true).build()) - .build(), - operationstateBuilder() - .name('Report Status To Lender') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('Send status to lender') - .arguments({ - bookid: '${ .book.id }', - message: 'Book ${ .book.title } is already on loan', - }) - .build() - ) - .build(), - ]) - .transition('Wait for Lender response') - .build(), - eventbasedswitchstateBuilder() - .name('Wait for Lender response') - .eventConditions([ - transitioneventconditionBuilder() - .name('Hold Book') - .eventRef('Hold Book Event') - .transition('Request Hold') - .build(), - transitioneventconditionBuilder() - .name('Decline Book Hold') - .eventRef('Decline Hold Event') - .transition('Cancel Request') - .build(), - ]) - .defaultCondition(defaultconditiondefBuilder().end(true).build()) - .build(), - operationstateBuilder() - .name('Request Hold') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('Request hold for lender') - .arguments({ - bookid: '${ .book.id }', - lender: '${ .lender }', - }) - .build() - ) - .build(), - ]) - .transition('Sleep two weeks') - .build(), - sleepstateBuilder().name('Sleep two weeks').duration('PT2W').transition('Get Book Status').build(), - operationstateBuilder() - .name('Check Out Book') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('Check out book with id') - .arguments({ - bookid: '${ .book.id }', - }) - .build() - ) - .build(), - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('Notify Lender for checkout') - .arguments({ - bookid: '${ .book.id }', - lender: '${ .lender }', - }) - .build() - ) - .build(), - ]) - .build(), - ]) - .functions('file://books/lending/functions.json') - .events('file://books/lending/events.json') - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/booklending.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/carauctionbids.json b/tests/examples/carauctionbids.json deleted file mode 100644 index 9c6ac0d..0000000 --- a/tests/examples/carauctionbids.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "id": "handleCarAuctionBid", - "name": "Car Auction Bidding Workflow", - "version": "1.0.0", - "description": "Store a single bid whole the car auction is active", - "specVersion": "0.8", - "start": { - "stateName": "StoreCarAuctionBid", - "schedule": "R/PT2H" - }, - "states": [ - { - "name": "StoreCarAuctionBid", - "type": "event", - "exclusive": true, - "onEvents": [ - { - "eventRefs": [ - "CarBidEvent" - ], - "actions": [ - { - "functionRef": { - "refName": "StoreBidFunction", - "arguments": { - "bid": "${ .bid }" - } - } - } - ] - } - ], - "end": true - } - ], - "functions": [ - { - "name": "StoreBidFunction", - "operation": "http://myapis.org/carauctionapi.json#storeBid" - } - ], - "events": [ - { - "name": "CarBidEvent", - "type": "carBidMadeType", - "source": "carBidEventSource" - } - ] -} \ No newline at end of file diff --git a/tests/examples/carauctionbids.spec.ts b/tests/examples/carauctionbids.spec.ts deleted file mode 100644 index 12f6b01..0000000 --- a/tests/examples/carauctionbids.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as fs from 'fs'; -import { - actionBuilder, - eventdefBuilder, - eventstateBuilder, - functionBuilder, - functionrefBuilder, - oneventsBuilder, - startdefBuilder, - workflowBuilder, -} from '../../src'; - -describe('carauctionbids workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('handleCarAuctionBid') - .version('1.0.0') - .specVersion('0.8') - .name('Car Auction Bidding Workflow') - .description('Store a single bid whole the car auction is active') - .start(startdefBuilder().stateName('StoreCarAuctionBid').schedule('R/PT2H').build()) - .functions([ - functionBuilder().name('StoreBidFunction').operation('http://myapis.org/carauctionapi.json#storeBid').build(), - ]) - .events([eventdefBuilder().name('CarBidEvent').type('carBidMadeType').source('carBidEventSource').build()]) - .states([ - eventstateBuilder() - .name('StoreCarAuctionBid') - .exclusive(true) - .onEvents([ - oneventsBuilder() - .eventRefs(['CarBidEvent']) - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('StoreBidFunction') - .arguments({ - bid: '${ .bid }', - }) - .build() - ) - .build(), - ]) - .build(), - ]) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/carauctionbids.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/checkcarvitals.json b/tests/examples/checkcarvitals.json deleted file mode 100644 index 79a61d6..0000000 --- a/tests/examples/checkcarvitals.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": "checkcarvitals", - "name": "Check Car Vitals Workflow", - "version": "1.0.0", - "specVersion": "0.8", - "start": "WhenCarIsOn", - "states": [ - { - "name": "WhenCarIsOn", - "type": "event", - "onEvents": [ - { - "eventRefs": [ - "CarTurnedOnEvent" - ] - } - ], - "transition": "DoCarVitalChecks" - }, - { - "name": "DoCarVitalChecks", - "type": "operation", - "actions": [ - { - "subFlowRef": "vitalscheck", - "sleep": { - "after": "PT1S" - } - } - ], - "transition": "CheckContinueVitalChecks" - }, - { - "name": "CheckContinueVitalChecks", - "type": "switch", - "eventConditions": [ - { - "name": "Car Turned Off Condition", - "eventRef": "CarTurnedOffEvent", - "end": true - } - ], - "defaultCondition": { - "transition": "DoCarVitalChecks" - } - } - ], - "events": [ - { - "name": "CarTurnedOnEvent", - "type": "car.events", - "source": "my/car" - }, - { - "name": "CarTurnedOffEvent", - "type": "car.events", - "source": "my/car" - } - ] -} diff --git a/tests/examples/checkcarvitals.spec.ts b/tests/examples/checkcarvitals.spec.ts deleted file mode 100644 index d4e954a..0000000 --- a/tests/examples/checkcarvitals.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as fs from 'fs'; -import { - actionBuilder, - defaultconditiondefBuilder, - endeventconditionBuilder, - eventbasedswitchstateBuilder, - eventdefBuilder, - eventstateBuilder, - oneventsBuilder, - operationstateBuilder, - sleepBuilder, - workflowBuilder, -} from '../../src'; - -describe('checkcarvitals workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('checkcarvitals') - .name('Check Car Vitals Workflow') - .version('1.0.0') - .specVersion('0.8') - .start('WhenCarIsOn') - .states([ - eventstateBuilder() - .name('WhenCarIsOn') - .onEvents([oneventsBuilder().eventRefs(['CarTurnedOnEvent']).build()]) - .transition('DoCarVitalChecks') - .build(), - operationstateBuilder() - .name('DoCarVitalChecks') - .actions([actionBuilder().subFlowRef('vitalscheck').sleep(sleepBuilder().after('PT1S').build()).build()]) - - .transition('CheckContinueVitalChecks') - .build(), - - eventbasedswitchstateBuilder() - .name('CheckContinueVitalChecks') - .eventConditions([ - endeventconditionBuilder().name('Car Turned Off Condition').eventRef('CarTurnedOffEvent').end(true).build(), - ]) - .defaultCondition(defaultconditiondefBuilder().transition('DoCarVitalChecks').build()) - .build(), - ]) - .events([ - eventdefBuilder().name('CarTurnedOnEvent').type('car.events').source('my/car').build(), - eventdefBuilder().name('CarTurnedOffEvent').type('car.events').source('my/car').build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/checkcarvitals.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/jobmonitoring.json b/tests/examples/jobmonitoring.json deleted file mode 100644 index 6ec7505..0000000 --- a/tests/examples/jobmonitoring.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "id": "jobmonitoring", - "name": "Job Monitoring", - "version": "1.0.0", - "description": "Monitor finished execution of a submitted job", - "specVersion": "0.8", - "start": "SubmitJob", - "states": [ - { - "name": "SubmitJob", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "submitJob", - "arguments": { - "name": "${ .job.name }" - } - }, - "actionDataFilter": { - "results": "${ .jobuid }" - } - } - ], - "stateDataFilter": { - "output": "${ .jobuid }" - }, - "transition": "WaitForCompletion" - }, - { - "name": "WaitForCompletion", - "type": "sleep", - "duration": "PT5S", - "transition": "GetJobStatus" - }, - { - "name": "GetJobStatus", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "checkJobStatus", - "arguments": { - "name": "${ .jobuid }" - } - }, - "actionDataFilter": { - "results": "${ .jobstatus }" - } - } - ], - "stateDataFilter": { - "output": "${ .jobstatus }" - }, - "transition": "DetermineCompletion" - }, - { - "name": "DetermineCompletion", - "type": "switch", - "dataConditions": [ - { - "condition": "${ .jobStatus == \"SUCCEEDED\" }", - "transition": "JobSucceeded" - }, - { - "condition": "${ .jobStatus == \"FAILED\" }", - "transition": "JobFailed" - } - ], - "defaultCondition": { - "transition": "WaitForCompletion" - } - }, - { - "name": "JobSucceeded", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "reportJobSuceeded", - "arguments": { - "name": "${ .jobuid }" - } - } - } - ], - "end": true - }, - { - "name": "JobFailed", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "reportJobFailed", - "arguments": { - "name": "${ .jobuid }" - } - } - } - ], - "end": true - } - ], - "functions": [ - { - "name": "submitJob", - "operation": "http://myapis.org/monitorapi.json#doSubmit" - }, - { - "name": "checkJobStatus", - "operation": "http://myapis.org/monitorapi.json#checkStatus" - }, - { - "name": "reportJobSuceeded", - "operation": "http://myapis.org/monitorapi.json#reportSucceeded" - }, - { - "name": "reportJobFailed", - "operation": "http://myapis.org/monitorapi.json#reportFailure" - } - ] -} \ No newline at end of file diff --git a/tests/examples/jobmonitoring.spec.ts b/tests/examples/jobmonitoring.spec.ts deleted file mode 100644 index 67e2051..0000000 --- a/tests/examples/jobmonitoring.spec.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as fs from 'fs'; -import { - actionBuilder, - actiondatafilterBuilder, - databasedswitchstateBuilder, - defaultconditiondefBuilder, - functionBuilder, - functionrefBuilder, - operationstateBuilder, - sleepstateBuilder, - statedatafilterBuilder, - transitiondataconditionBuilder, - workflowBuilder, -} from '../../src'; - -describe('jobmonitoring workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('jobmonitoring') - .version('1.0.0') - .specVersion('0.8') - .name('Job Monitoring') - .description('Monitor finished execution of a submitted job') - .start('SubmitJob') - .functions([ - functionBuilder().name('submitJob').operation('http://myapis.org/monitorapi.json#doSubmit').build(), - functionBuilder().name('checkJobStatus').operation('http://myapis.org/monitorapi.json#checkStatus').build(), - functionBuilder() - .name('reportJobSuceeded') - .operation('http://myapis.org/monitorapi.json#reportSucceeded') - .build(), - functionBuilder().name('reportJobFailed').operation('http://myapis.org/monitorapi.json#reportFailure').build(), - ]) - .states([ - operationstateBuilder() - .name('SubmitJob') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('submitJob') - .arguments({ - name: '${ .job.name }', - }) - .build() - ) - .actionDataFilter(actiondatafilterBuilder().results('${ .jobuid }').build()) - .build(), - ]) - .stateDataFilter(statedatafilterBuilder().output('${ .jobuid }').build()) - .transition('WaitForCompletion') - .build(), - sleepstateBuilder().name('WaitForCompletion').duration('PT5S').transition('GetJobStatus').build(), - operationstateBuilder() - .name('GetJobStatus') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('checkJobStatus') - .arguments({ - name: '${ .jobuid }', - }) - .build() - ) - .actionDataFilter(actiondatafilterBuilder().results('${ .jobstatus }').build()) - .build(), - ]) - .stateDataFilter(statedatafilterBuilder().output('${ .jobstatus }').build()) - .transition('DetermineCompletion') - .build(), - databasedswitchstateBuilder() - .name('DetermineCompletion') - .dataConditions([ - transitiondataconditionBuilder() - .condition('${ .jobStatus == "SUCCEEDED" }') - .transition('JobSucceeded') - .build(), - transitiondataconditionBuilder().condition('${ .jobStatus == "FAILED" }').transition('JobFailed').build(), - ]) - .defaultCondition(defaultconditiondefBuilder().transition('WaitForCompletion').build()) - .build(), - operationstateBuilder() - .name('JobSucceeded') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('reportJobSuceeded') - .arguments({ - name: '${ .jobuid }', - }) - .build() - ) - .build(), - ]) - .build(), - operationstateBuilder() - .name('JobFailed') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('reportJobFailed') - .arguments({ - name: '${ .jobuid }', - }) - .build() - ) - .build(), - ]) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/jobmonitoring.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/parallel.json b/tests/examples/parallel.json deleted file mode 100644 index 3cc3e50..0000000 --- a/tests/examples/parallel.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": "parallelexec", - "name": "Parallel Execution Workflow", - "version": "1.0.0", - "description": "Executes two branches in parallel", - "specVersion": "0.8", - "start": "ParallelExec", - "states": [ - { - "name": "ParallelExec", - "type": "parallel", - "completionType": "allOf", - "branches": [ - { - "name": "ShortDelayBranch", - "actions": [ - { - "subFlowRef": "shortdelayworkflowid" - } - ] - }, - { - "name": "LongDelayBranch", - "actions": [ - { - "subFlowRef": "longdelayworkflowid" - } - ] - } - ], - "end": true - } - ] -} \ No newline at end of file diff --git a/tests/examples/parallel.spec.ts b/tests/examples/parallel.spec.ts deleted file mode 100644 index 420c0dc..0000000 --- a/tests/examples/parallel.spec.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import * as fs from 'fs'; -import { actionBuilder, branchBuilder, parallelstateBuilder, workflowBuilder } from '../../src'; - -describe('parallel workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('parallelexec') - .version('1.0.0') - .specVersion('0.8') - .name('Parallel Execution Workflow') - .description('Executes two branches in parallel') - .start('ParallelExec') - .states([ - parallelstateBuilder() - .name('ParallelExec') - .completionType('allOf') - .branches([ - branchBuilder() - .name('ShortDelayBranch') - .actions([actionBuilder().subFlowRef('shortdelayworkflowid').build()]) - .build(), - branchBuilder() - .name('LongDelayBranch') - .actions([actionBuilder().subFlowRef('longdelayworkflowid').build()]) - .build(), - ]) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/parallel.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/provisionorder.json b/tests/examples/provisionorder.json deleted file mode 100644 index 8523975..0000000 --- a/tests/examples/provisionorder.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "id": "provisionorders", - "name": "Provision Orders", - "version": "1.0.0", - "description": "Provision Orders and handle errors thrown", - "specVersion": "0.8", - "start": "ProvisionOrder", - "states": [ - { - "name": "ProvisionOrder", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "provisionOrderFunction", - "arguments": { - "order": "${ .order }" - } - } - } - ], - "stateDataFilter": { - "output": "${ .exceptions }" - }, - "transition": "ApplyOrder", - "onErrors": [ - { - "errorRef": "Missing order id", - "transition": "MissingId" - }, - { - "errorRef": "Missing order item", - "transition": "MissingItem" - }, - { - "errorRef": "Missing order quantity", - "transition": "MissingQuantity" - } - ] - }, - { - "name": "MissingId", - "type": "operation", - "actions": [ - { - "subFlowRef": "handleMissingIdExceptionWorkflow" - } - ], - "end": true - }, - { - "name": "MissingItem", - "type": "operation", - "actions": [ - { - "subFlowRef": "handleMissingItemExceptionWorkflow" - } - ], - "end": true - }, - { - "name": "MissingQuantity", - "type": "operation", - "actions": [ - { - "subFlowRef": "handleMissingQuantityExceptionWorkflow" - } - ], - "end": true - }, - { - "name": "ApplyOrder", - "type": "operation", - "actions": [ - { - "subFlowRef": "applyOrderWorkflowId" - } - ], - "end": true - } - ], - "functions": [ - { - "name": "provisionOrderFunction", - "operation": "http://myapis.org/provisioningapi.json#doProvision" - } - ], - "errors": [ - { - "name": "Missing order id" - }, - { - "name": "Missing order item" - }, - { - "name": "Missing order quantity" - } - ] -} \ No newline at end of file diff --git a/tests/examples/provisionorder.spec.ts b/tests/examples/provisionorder.spec.ts deleted file mode 100644 index c49bf80..0000000 --- a/tests/examples/provisionorder.spec.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as fs from 'fs'; -import { - actionBuilder, - errorBuilder, - errordefBuilder, - functionBuilder, - functionrefBuilder, - operationstateBuilder, - statedatafilterBuilder, - workflowBuilder, -} from '../../src'; - -describe('provisionorder workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('provisionorders') - .version('1.0.0') - .specVersion('0.8') - .name('Provision Orders') - .description('Provision Orders and handle errors thrown') - .start('ProvisionOrder') - .functions([ - functionBuilder() - .name('provisionOrderFunction') - .operation('http://myapis.org/provisioningapi.json#doProvision') - .build(), - ]) - .errors([ - errordefBuilder().name('Missing order id').build(), - errordefBuilder().name('Missing order item').build(), - errordefBuilder().name('Missing order quantity').build(), - ]) - .states([ - operationstateBuilder() - .name('ProvisionOrder') - .actionMode('sequential') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('provisionOrderFunction') - .arguments({ - order: '${ .order }', - }) - .build() - ) - .build(), - ]) - .stateDataFilter(statedatafilterBuilder().output('${ .exceptions }').build()) - .transition('ApplyOrder') - .onErrors([ - errorBuilder().errorRef('Missing order id').transition('MissingId').build(), - errorBuilder().errorRef('Missing order item').transition('MissingItem').build(), - errorBuilder().errorRef('Missing order quantity').transition('MissingQuantity').build(), - ]) - .build(), - operationstateBuilder() - .name('MissingId') - .actions([actionBuilder().subFlowRef('handleMissingIdExceptionWorkflow').build()]) - .build(), - operationstateBuilder() - .name('MissingItem') - .actions([actionBuilder().subFlowRef('handleMissingItemExceptionWorkflow').build()]) - .build(), - operationstateBuilder() - .name('MissingQuantity') - .actions([actionBuilder().subFlowRef('handleMissingQuantityExceptionWorkflow').build()]) - .build(), - operationstateBuilder() - .name('ApplyOrder') - .actions([actionBuilder().subFlowRef('applyOrderWorkflowId').build()]) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/provisionorder.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/sendcloudevent.json b/tests/examples/sendcloudevent.json deleted file mode 100644 index 8ba8023..0000000 --- a/tests/examples/sendcloudevent.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": "sendcloudeventonprovision", - "name": "Send CloudEvent on provision completion", - "version": "1.0.0", - "specVersion": "0.8", - "start": "ProvisionOrdersState", - "states": [ - { - "name": "ProvisionOrdersState", - "type": "foreach", - "inputCollection": "${ .orders }", - "iterationParam": "singleorder", - "outputCollection": "${ .provisionedOrders }", - "actions": [ - { - "functionRef": { - "refName": "provisionOrderFunction", - "arguments": { - "order": "${ .singleorder }" - } - } - } - ], - "end": { - "produceEvents": [ - { - "eventRef": "provisioningCompleteEvent", - "data": "${ .provisionedOrders }" - } - ] - } - } - ], - "functions": [ - { - "name": "provisionOrderFunction", - "operation": "http://myapis.org/provisioning.json#doProvision" - } - ], - "events": [ - { - "kind": "produced", - "name": "provisioningCompleteEvent", - "type": "provisionCompleteType" - } - ] -} \ No newline at end of file diff --git a/tests/examples/sendcloudevent.spec.ts b/tests/examples/sendcloudevent.spec.ts deleted file mode 100644 index 38b323e..0000000 --- a/tests/examples/sendcloudevent.spec.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as fs from 'fs'; -import { - actionBuilder, - endBuilder, - eventdefBuilder, - foreachstateBuilder, - functionBuilder, - functionrefBuilder, - produceeventdefBuilder, - workflowBuilder, -} from '../../src'; - -describe('sendcloudevent workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('sendcloudeventonprovision') - .version('1.0.0') - .specVersion('0.8') - .name('Send CloudEvent on provision completion') - .start('ProvisionOrdersState') - .events([ - eventdefBuilder().name('provisioningCompleteEvent').type('provisionCompleteType').kind('produced').build(), - ]) - .functions([ - functionBuilder() - .name('provisionOrderFunction') - .operation('http://myapis.org/provisioning.json#doProvision') - .build(), - ]) - .states([ - foreachstateBuilder() - .name('ProvisionOrdersState') - .inputCollection('${ .orders }') - .iterationParam('singleorder') - .outputCollection('${ .provisionedOrders }') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('provisionOrderFunction') - .arguments({ - order: '${ .singleorder }', - }) - .build() - ) - .build(), - ]) - .end( - endBuilder() - .produceEvents([ - produceeventdefBuilder().eventRef('provisioningCompleteEvent').data('${ .provisionedOrders }').build(), - ]) - .build() - ) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/sendcloudevent.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/examples/solvemathproblems.json b/tests/examples/solvemathproblems.json deleted file mode 100644 index 9a887ac..0000000 --- a/tests/examples/solvemathproblems.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "solvemathproblems", - "name": "Solve Math Problems Workflow", - "version": "1.0.0", - "description": "Solve math problems", - "specVersion": "0.8", - "start": "Solve", - "states": [ - { - "name": "Solve", - "type": "foreach", - "inputCollection": "${ .expressions }", - "iterationParam": "singleexpression", - "outputCollection": "${ .results }", - "actions": [ - { - "functionRef": { - "refName": "solveMathExpressionFunction", - "arguments": { - "expression": "${ .singleexpression }" - } - } - } - ], - "stateDataFilter": { - "output": "${ .results }" - }, - "end": true - } - ], - "functions": [ - { - "name": "solveMathExpressionFunction", - "operation": "http://myapis.org/mapthapis.json#solveExpression" - } - ] -} \ No newline at end of file diff --git a/tests/examples/solvemathproblems.spec.ts b/tests/examples/solvemathproblems.spec.ts deleted file mode 100644 index f3e717a..0000000 --- a/tests/examples/solvemathproblems.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as fs from 'fs'; -import { - actionBuilder, - foreachstateBuilder, - functionBuilder, - functionrefBuilder, - statedatafilterBuilder, - workflowBuilder, -} from '../../src'; - -describe('solvemathproblems workflow example', () => { - it('should generate Workflow object', function () { - const workflow = workflowBuilder() - .id('solvemathproblems') - .version('1.0.0') - .specVersion('0.8') - .name('Solve Math Problems Workflow') - .description('Solve math problems') - .start('Solve') - .functions([ - functionBuilder() - .name('solveMathExpressionFunction') - .operation('http://myapis.org/mapthapis.json#solveExpression') - .build(), - ]) - .states([ - foreachstateBuilder() - .name('Solve') - .inputCollection('${ .expressions }') - .iterationParam('singleexpression') - .outputCollection('${ .results }') - .actions([ - actionBuilder() - .functionRef( - functionrefBuilder() - .refName('solveMathExpressionFunction') - .arguments({ - expression: '${ .singleexpression }', - }) - .build() - ) - .build(), - ]) - .stateDataFilter(statedatafilterBuilder().output('${ .results }').build()) - .build(), - ]) - .build(); - - const expected = JSON.parse(fs.readFileSync('./tests/examples/solvemathproblems.json', 'utf8')); - expect(JSON.stringify(workflow.normalize())).toEqual(JSON.stringify(expected)); - }); -}); diff --git a/tests/lib/builders/eventstate-builder.spec.ts b/tests/lib/builders/eventstate-builder.spec.ts deleted file mode 100644 index f6d6bee..0000000 --- a/tests/lib/builders/eventstate-builder.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import { eventstateBuilder } from '../../../src/lib/builders/eventstate-builder'; -import { oneventsBuilder } from '../../../src/lib/builders/onevents-builder'; - -describe('eventstateBuilder ', () => { - it('should build an object', () => { - const object = eventstateBuilder() - .name('Book Lending Request') - .onEvents([oneventsBuilder().eventRefs(['Book Lending Request Event']).build()]) - .transition('Get Book Status') - .build(); - - expect(object.exclusive).toBeTruthy(); - - const serializedObject = object.normalize(); - expect(JSON.stringify(serializedObject)).toBe( - JSON.stringify({ - name: 'Book Lending Request', - type: 'event', - onEvents: [ - { - eventRefs: ['Book Lending Request Event'], - }, - ], - transition: 'Get Book Status', - }) - ); - }); -}); diff --git a/tests/lib/builders/function-builder.spec.ts b/tests/lib/builders/function-builder.spec.ts deleted file mode 100644 index ed17e4c..0000000 --- a/tests/lib/builders/function-builder.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import { functionBuilder } from '../../../src/lib/builders/function-builder'; - -describe('functionBuilder ', () => { - it('should build an object without default type if not set', () => { - const fn = functionBuilder().name('function').operation('operation').build(); - - expect(fn.type).toBe('rest'); - }); - - it('should build an object with type= set value ', () => { - expect(functionBuilder().name('function').operation('operation').type('expression').build().type).toBe( - 'expression' - ); - expect(functionBuilder().name('function').operation('operation').type('rest').build().type).toBe('rest'); - }); -}); diff --git a/tests/lib/builders/operationstate-builder.spec.ts b/tests/lib/builders/operationstate-builder.spec.ts deleted file mode 100644 index a790002..0000000 --- a/tests/lib/builders/operationstate-builder.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import { actionBuilder, operationstateBuilder } from '../../../src'; - -describe('operationstateBuilder ', () => { - it('should build an object with default values', () => { - const object = operationstateBuilder() - .name('StartApplication') - .actions([actionBuilder().subFlowRef('startApplicationWorkflowId').build()]) - .build(); - - expect(object.actionMode).toBe('sequential'); - - const serializedObject = object.normalize(); - expect(JSON.stringify(serializedObject)).toBe( - JSON.stringify({ - name: 'StartApplication', - type: 'operation', - actions: [{ subFlowRef: 'startApplicationWorkflowId' }], - end: true, - }) - ); - }); -}); diff --git a/tests/lib/definitions/eventdef.spec.ts b/tests/lib/definitions/eventdef.spec.ts deleted file mode 100644 index 7f08731..0000000 --- a/tests/lib/definitions/eventdef.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import { Eventdef } from '../../../src/lib/definitions/eventdef'; - -describe('Eventdef ', () => { - it('should convert non-primitive properties to the desired class', () => { - const data = { - correlation: [{ contextAttributeName: 'contextAttributeName' }], - metadata: { key: 'value' }, - }; - - const model = new Eventdef(data); - - expect(model.correlation![0].constructor.name).toBe('CorrelationDef'); - expect(model.metadata!.constructor.name).toBe('Metadata'); - }); -}); diff --git a/tests/lib/definitions/schedule.spec.ts b/tests/lib/definitions/schedule.spec.ts deleted file mode 100644 index 0d3ca43..0000000 --- a/tests/lib/definitions/schedule.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import { Schedule } from '../../../src/lib/definitions/schedule'; - -describe('schedule ', () => { - it('should convert non-primitive properties to the desired class', () => { - const data = { - cron: { expression: '* * * ? * *' }, - }; - - const model = new Schedule(data); - expect(model.cron!.constructor.name).toBe('Crondef'); - }); - - it('should not convert primitive properties', () => { - const data = { - cron: '* * * ? * *', - }; - - const model = new Schedule(data); - expect(typeof model.cron).toBe(typeof ''); - }); -}); diff --git a/tests/lib/definitions/util.spec.ts b/tests/lib/definitions/util.spec.ts deleted file mode 100644 index 2ed49dd..0000000 --- a/tests/lib/definitions/util.spec.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import { overwriteProperties, overwritePropertyAsPlainType } from '../../../src/lib/definitions/utils'; -import { Properties } from '../../../src/lib/definitions/types'; - -describe('Util ', () => { - describe('overwritePropertyAsPlainType ', () => { - it('should create a copy of data property', () => { - class HasData { - data?: { - key: string; - }; - } - - const source = { - data: { - key: 'action', - }, - } as HasData; - - const target = {} as HasData; - Object.assign(target, source); - overwritePropertyAsPlainType('data', target); - - expect(target.data!.key).toBe('action'); - source.data!.key = 'action2'; - expect(target.data!.key).toBe('action'); - }); - - it('should create a copy of data property', () => { - class HasData { - data?: - | string - | { - [key: string]: any; - }; - } - - const source = { - data: { - key1: 'value1', - }, - } as HasData; - - const target = {} as HasData; - Object.assign(target, source); - overwritePropertyAsPlainType('data', target); - - // @ts-ignore - expect(target!.data['key1']).toBe('value1'); - // @ts-ignore - source!.data['key1'] = 'value2'; - // @ts-ignore - expect(target!.data['key1']).toBe('value1'); - }); - }); - - describe('overwriteProperties ', () => { - class HasProperties { - properties: string | Properties; - } - - it('should create an instance of Basicpropsdef', () => { - const source = { - properties: { - username: 'name', - password: 'pwd', - }, - } as HasProperties; - - const target = Object.assign({}, source); - overwriteProperties(target); - expect(target.properties.constructor.name).toBe('Basicpropsdef'); - }); - - it('should create an instance of Bearerpropsdef', () => { - const source = { - properties: { - token: 'token', - }, - } as HasProperties; - - const target = Object.assign({}, source); - overwriteProperties(target); - expect(target.properties.constructor.name).toBe('Bearerpropsdef'); - }); - - it('should create an instance of Oauth2propsdef', () => { - const source = { - properties: { - grantType: 'password', - clientId: 'cid', - }, - } as HasProperties; - - const target = Object.assign({}, source); - overwriteProperties(target); - expect(target.properties.constructor.name).toBe('Oauth2propsdef'); - }); - - it('should not create an instance of Properties type', () => { - const source = { - properties: 'any value', - } as HasProperties; - - const target = Object.assign({}, source); - overwriteProperties(target); - expect(target.properties.constructor.name).toBe('String'); - }); - }); -}); diff --git a/tests/lib/definitions/workflow-converter-hello-world.json b/tests/lib/definitions/workflow-converter-hello-world.json deleted file mode 100644 index d68b1ee..0000000 --- a/tests/lib/definitions/workflow-converter-hello-world.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": "helloworld", - "version": "1.0", - "specVersion": "0.8", - "name": "Hello World Workflow", - "description": "Inject Hello World", - "start": "Hello State", - "states": [ - { - "type": "inject", - "name": "Hello State", - "data": { - "result": "Hello World!" - }, - "end": true - } - ] -} diff --git a/tests/lib/definitions/workflow-converter-hello-world.xxx b/tests/lib/definitions/workflow-converter-hello-world.xxx deleted file mode 100644 index b9aadde..0000000 --- a/tests/lib/definitions/workflow-converter-hello-world.xxx +++ /dev/null @@ -1 +0,0 @@ -{ invalid? \ No newline at end of file diff --git a/tests/lib/definitions/workflow-converter-hello-world.yaml b/tests/lib/definitions/workflow-converter-hello-world.yaml deleted file mode 100644 index e606003..0000000 --- a/tests/lib/definitions/workflow-converter-hello-world.yaml +++ /dev/null @@ -1,12 +0,0 @@ -id: helloworld -version: '1.0' -specVersion": '0.8' -name: Hello World Workflow -description: Inject Hello World -start: Hello State -states: - - type: inject - name: Hello State - data: - result: Hello World! - end: true diff --git a/tests/lib/definitions/workflow-converter-hello-world.yml b/tests/lib/definitions/workflow-converter-hello-world.yml deleted file mode 100644 index e606003..0000000 --- a/tests/lib/definitions/workflow-converter-hello-world.yml +++ /dev/null @@ -1,12 +0,0 @@ -id: helloworld -version: '1.0' -specVersion": '0.8' -name: Hello World Workflow -description: Inject Hello World -start: Hello State -states: - - type: inject - name: Hello State - data: - result: Hello World! - end: true diff --git a/tests/lib/definitions/workflow.spec.ts b/tests/lib/definitions/workflow.spec.ts deleted file mode 100644 index 0ce6f75..0000000 --- a/tests/lib/definitions/workflow.spec.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import { injectstateBuilder, Specification, workflowBuilder } from '../../../src'; -import { readFileSync } from 'fs'; -import { Workflow } from '../../../src/lib/definitions/workflow'; - -describe('workflow fromSource', () => { - const testCases = [ - { - description: 'should generate workflow object from JSON file', - file: './tests/lib/definitions/workflow-converter-hello-world.json', - }, - { - description: 'should generate workflow object from YAML file', - file: './tests/lib/definitions/workflow-converter-hello-world.yaml', - }, - { - description: 'should generate workflow object from YML file', - file: './tests/lib/definitions/workflow-converter-hello-world.yml', - }, - ]; - testCases.forEach((test) => { - it(test.description, function () { - const workflow: Specification.Workflow = Workflow.fromSource(readFileSync(test.file, 'utf-8')); - expect(workflow.id).toBe('helloworld'); - expect(workflow.version).toBe('1.0'); - expect(workflow.name).toBe('Hello World Workflow'); - expect(workflow.description).toBe('Inject Hello World'); - expect(workflow.start).toBe('Hello State'); - }); - }); - - it('should throws error if format is not json or yaml', () => { - expect(() => { - Workflow.fromSource(readFileSync('./tests/lib/definitions/workflow-converter-hello-world.xxx', 'utf-8')); - }).toThrow(new Error('Format not supported')); - }); -}); - -describe('workflow ', () => { - it('should convert non-primitive properties to the desired class', () => { - const data = { - functions: [ - { - name: 'Function', - operation: 'operationFunction', - }, - ], - events: [ - { - name: 'CarBidEvent', - type: 'carBidMadeType', - source: 'carBidEventSource', - }, - ], - retries: [ - { - name: 'retrie', - maxAttempts: 4, - }, - ], - timeouts: { - duration: 'P30M5S', - }, - metadata: { - key: 'value', - }, - }; - - const model = new Workflow(data); - - expect(model.functions![0]!.constructor.name).toBe('Function'); - expect(model.timeouts!.constructor.name).toBe('Timeouts'); - expect(model.metadata!.constructor.name).toBe('Metadata'); - expect(model.events![0]!.constructor.name).toBe('Eventdef'); - expect(model.retries![0]!.constructor.name).toBe('Retrydef'); - }); - - it('should generate JSON from workflow object', () => { - const jsonWorkflow: string = Workflow.toJson( - workflowBuilder() - .id('helloworld') - .version('1.0.0') - .specVersion('0.8') - .name('Hello World Workflow') - .description('Inject Hello World') - .start('Hello State') - .states([ - injectstateBuilder() - .name('Hello State') - .data({ - result: 'Hello World!', - }) - .end(true) - .build(), - ]) - .build() - ); - expect(jsonWorkflow).toBe( - '{' + - '"id":"helloworld",' + - '"name":"Hello World Workflow",' + - '"version":"1.0.0",' + - '"description":"Inject Hello World",' + - '"specVersion":"0.8",' + - '"start":"Hello State",' + - '"states":[' + - '{' + - '"name":"Hello State",' + - '"type":"inject",' + - '"data":{' + - '"result":"Hello World!"' + - '},' + - '"end":true' + - '}' + - ']' + - '}' - ); - }); - - it('should generate YAML from workflow object', () => { - const yamlWorkflow: string = Workflow.toYaml( - workflowBuilder() - .id('helloworld') - .version('1.0.0') - .specVersion('0.8') - .name('Hello World Workflow') - .description('Inject Hello World') - .start('Hello State') - .states([ - injectstateBuilder() - .name('Hello State') - .data({ - result: 'Hello World!', - }) - .end(true) - .build(), - ]) - .build() - ); - expect(yamlWorkflow).toBe( - 'id: helloworld\n' + - 'name: Hello World Workflow\n' + - 'version: 1.0.0\n' + - 'description: Inject Hello World\n' + - "specVersion: '0.8'\n" + - 'start: Hello State\n' + - 'states:\n' + - ' - name: Hello State\n' + - ' type: inject\n' + - ' data:\n' + - ' result: Hello World!\n' + - ' end: true\n' - ); - }); -}); diff --git a/tests/lib/diagram/mermaidDiagram.spec.ts b/tests/lib/diagram/mermaidDiagram.spec.ts deleted file mode 100644 index 5d88f0b..0000000 --- a/tests/lib/diagram/mermaidDiagram.spec.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { MermaidDiagram } from '../../../src/lib/diagram/mermaidDiagram'; -import { Specification } from '../../../src/lib/definitions'; -import fs from 'fs'; - -describe('MermaidDiagram', () => { - it('should create mermaid diagram source code', () => { - const jsonSource = fs.readFileSync('./tests/examples/jobmonitoring.json', 'utf8'); - const actual = new MermaidDiagram(Specification.Workflow.fromSource(jsonSource)).sourceCode(); - expect(actual).toBe(`stateDiagram-v2 -SubmitJob : Submit Job -SubmitJob : type = Operation State -SubmitJob : Action mode = sequential -SubmitJob : Num. of actions = 1 -[*] --> SubmitJob -SubmitJob --> WaitForCompletion - -WaitForCompletion : Wait For Completion -WaitForCompletion : type = Sleep State -WaitForCompletion : Duration = PT5S -WaitForCompletion --> GetJobStatus - -GetJobStatus : Get Job Status -GetJobStatus : type = Operation State -GetJobStatus : Action mode = sequential -GetJobStatus : Num. of actions = 1 -GetJobStatus --> DetermineCompletion - -DetermineCompletion : Determine Completion -DetermineCompletion : type = Switch State -DetermineCompletion : Condition type = data-based -DetermineCompletion --> JobSucceeded : \${ .jobStatus == "SUCCEEDED" } -DetermineCompletion --> JobFailed : \${ .jobStatus == "FAILED" } -DetermineCompletion --> WaitForCompletion : default - -JobSucceeded : Job Succeeded -JobSucceeded : type = Operation State -JobSucceeded : Action mode = sequential -JobSucceeded : Num. of actions = 1 -JobSucceeded --> [*] - -JobFailed : Job Failed -JobFailed : type = Operation State -JobFailed : Action mode = sequential -JobFailed : Num. of actions = 1 -JobFailed --> [*]`); - }); - - it(`should handle compensated by`, () => { - const jsonSource = fs.readFileSync('./tests/lib/diagram/wf_with_compensation.json', 'utf8'); - const actual = new MermaidDiagram(Specification.Workflow.fromSource(jsonSource)).sourceCode(); - - expect(actual).toBe(`stateDiagram-v2 -ItemPurchase : Item Purchase -ItemPurchase : type = Event State -[*] --> ItemPurchase -ItemPurchase --> CancelPurchase : compensated by -ItemPurchase --> [*] - -CancelPurchase : Cancel Purchase -CancelPurchase : type = Operation State -CancelPurchase : usedForCompensation -CancelPurchase : Action mode = sequential -CancelPurchase : Num. of actions = 1 -CancelPurchase --> SendConfirmationPurchaseCancelled - -SendConfirmationPurchaseCancelled : Send Confirmation Purchase Cancelled -SendConfirmationPurchaseCancelled : type = Operation State -SendConfirmationPurchaseCancelled : Action mode = sequential -SendConfirmationPurchaseCancelled : Num. of actions = 1`); - }); -}); diff --git a/tests/lib/diagram/mermaidState.spec.ts b/tests/lib/diagram/mermaidState.spec.ts deleted file mode 100644 index b563b25..0000000 --- a/tests/lib/diagram/mermaidState.spec.ts +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { MermaidState } from '../../../src/lib/diagram/mermaidState'; -import { Specification } from '../../../src/lib/definitions'; - -describe('mermaidState', () => { - it('should create source code for parallel state', () => { - expect( - new MermaidState( - new Specification.Parallelstate( - JSON.parse(` - { - "type": "parallel", - "name": "ParallelExec", - "branches": [ - { - "name": "ShortDelayBranch", - "actions": [{ - "subFlowRef": "shortdelayworkflowid" - }] - }, - { - "name": "LongDelayBranch", - "actions": [{ - "subFlowRef": "longdelayworkflowid" - }] - } - ], - "end": true - }`) - ) - ).sourceCode() - ).toBe(`ParallelExec : Parallel Exec -ParallelExec : type = Parallel State -ParallelExec : Completion type = allOf -ParallelExec : Num. of branches = 2 -ParallelExec --> [*]`); - }); - - it('should create source code for event-based state', () => { - const eventbasedswitch = new Specification.Eventbasedswitchstate( - JSON.parse(`{ - "name": "CheckVisaStatus", - "type": "switch", - "eventConditions": [ - { - "eventRef": "visaApprovedEvent", - "transition": "HandleApprovedVisa" - }, - { - "eventRef": "visaRejectedEvent", - "transition": "HandleRejectedVisa" - } - ], - "eventTimeout": "PT1H", - "defaultCondition": { - "transition": "HandleNoVisaDecision" - } - }`) - ); - const mermaidState = new MermaidState(eventbasedswitch); - expect(mermaidState.sourceCode()).toBe(`CheckVisaStatus : Check Visa Status -CheckVisaStatus : type = Switch State -CheckVisaStatus : Condition type = event-based -CheckVisaStatus --> HandleApprovedVisa : visaApprovedEvent -CheckVisaStatus --> HandleRejectedVisa : visaRejectedEvent -CheckVisaStatus --> HandleNoVisaDecision : default`); - }); - - it('should create source code for data-based state', () => { - const databasedswitch = new Specification.Databasedswitchstate( - JSON.parse(`{ - "type":"switch", - "name":"CheckApplication", - "dataConditions": [ - { - "condition": "\${ .applicants | .age >= 18 }", - "transition": "StartApplication" - }, - { - "condition": "\${ .applicants | .age < 18 }", - "transition": "RejectApplication" - } - ], - "defaultCondition": { - "transition": "RejectApplication" - } - }`) - ); - const mermaidState = new MermaidState(databasedswitch); - expect(mermaidState.sourceCode()).toBe(`CheckApplication : Check Application -CheckApplication : type = Switch State -CheckApplication : Condition type = data-based -CheckApplication --> StartApplication : \${ .applicants | .age >= 18 } -CheckApplication --> RejectApplication : \${ .applicants | .age < 18 } -CheckApplication --> RejectApplication : default`); - }); - - it('should create source code for data-based state with end = true ', () => { - const databasedswitch = new Specification.Databasedswitchstate( - JSON.parse(`{ - "type":"switch", - "name":"CheckApplication", - "dataConditions": [ - { - "condition": "\${ .applicants | .age >= 18 }", - "transition": "StartApplication" - }, - { - "condition": "\${ .applicants | .age < 18 }", - "end": true - } - ], - "defaultCondition": { - "transition": "StartApplication" - } - }`) - ); - const mermaidState = new MermaidState(databasedswitch); - expect(mermaidState.sourceCode()).toBe(`CheckApplication : Check Application -CheckApplication : type = Switch State -CheckApplication : Condition type = data-based -CheckApplication --> StartApplication : \${ .applicants | .age >= 18 } -CheckApplication --> [*] : \${ .applicants | .age < 18 } -CheckApplication --> StartApplication : default`); - }); - - it('should create source code for operation state with end.terminate = true ', () => { - const databasedswitch = new Specification.Databasedswitchstate( - JSON.parse(`{ - "name": "GreetPerson", - "type": "operation", - "actions": [ - { - "name": "greetAction", - "functionRef": { - "refName": "greetFunction", - "arguments": { - "message": "$.greeting $.name" - } - } - } - ], - "end": { - "terminate": true - } - }`) - ); - const mermaidState = new MermaidState(databasedswitch); - expect(mermaidState.sourceCode()).toBe(`GreetPerson : Greet Person -GreetPerson : type = Operation State -GreetPerson : Num. of actions = 1 -GreetPerson --> [*]`); - }); - - it('should create source code for operation state', () => { - const states = new Specification.Operationstate( - JSON.parse(`{ - "type":"operation", - "name":"SubmitJob", - "actions":[ - { - "functionRef": { - "refName": "submitJob", - "arguments": { - "name": "\${ .job.name }" - } - }, - "actionDataFilter": { - "results": "\${ .jobuid }" - } - } - ], - "stateDataFilter": { - "output": "\${ .jobuid }" - }, - "transition": "WaitForCompletion" - }`) - ); - const mermaidState = new MermaidState(states); - expect(mermaidState.sourceCode()).toBe(`SubmitJob : Submit Job -SubmitJob : type = Operation State -SubmitJob : Action mode = sequential -SubmitJob : Num. of actions = 1 -SubmitJob --> WaitForCompletion`); - }); - - it('should create source code for sleep state', () => { - const states = new Specification.Sleepstate( - JSON.parse(`{ - "type": "sleep", - "name": "WaitForCompletion", - "duration": "PT5S", - "transition": "GetJobStatus" - }`) - ); - const mermaidState = new MermaidState(states); - expect(mermaidState.sourceCode()).toBe(`WaitForCompletion : Wait For Completion -WaitForCompletion : type = Sleep State -WaitForCompletion : Duration = PT5S -WaitForCompletion --> GetJobStatus`); - }); - - it('should create source code for foreach state', () => { - const states = new Specification.Foreachstate( - JSON.parse(`{ - "type": "foreach", - "name": "ProvisionOrdersState", - "inputCollection": "\${ .orders }", - "iterationParam": "singleorder", - "outputCollection": "\${ .provisionedOrders }", - "actions": [ - { - "functionRef": { - "refName": "provisionOrderFunction", - "arguments": { - "order": "\${ .singleorder }" - } - } - } - ], - "end": { - "produceEvents": [{ - "eventRef": "provisioningCompleteEvent", - "data": "\${ .provisionedOrders }" - }] - } - }`) - ); - const mermaidState = new MermaidState(states, true); - expect(mermaidState.sourceCode()).toBe(`ProvisionOrdersState : Provision Orders State -ProvisionOrdersState : type = Foreach State -ProvisionOrdersState : Input collection = \${ .orders } -ProvisionOrdersState : Num. of actions = 1 -[*] --> ProvisionOrdersState -ProvisionOrdersState --> [*] : Produced event = [provisioningCompleteEvent]`); - }); - - it('should create source code for callback state', () => { - const states = new Specification.Callbackstate( - JSON.parse(`{ - "name": "CheckCredit", - "type": "callback", - "action": { - "functionRef": { - "refName": "callCreditCheckMicroservice", - "arguments": { - "customer": "\${ .customer }" - } - } - }, - "eventRef": "CreditCheckCompletedEvent", - "timeouts": { - "stateExecTimeout": "PT15M" - }, - "transition": "EvaluateDecision" - }`) - ); - const mermaidState = new MermaidState(states, true); - expect(mermaidState.sourceCode()).toBe(`CheckCredit : Check Credit -CheckCredit : type = Callback State -CheckCredit : Callback function = callCreditCheckMicroservice -CheckCredit : Callback event = CreditCheckCompletedEvent -[*] --> CheckCredit -CheckCredit --> EvaluateDecision`); - }); - - it('should create source code for any state with transition as object', () => { - const states = new Specification.Callbackstate( - JSON.parse(`{ - "name": "CheckCredit", - "type": "callback", - "transition": {"nextState": "EvaluateDecision"} - }`) - ); - const mermaidState = new MermaidState(states); - expect(mermaidState.sourceCode()).toBe(`CheckCredit : Check Credit -CheckCredit : type = Callback State -CheckCredit --> EvaluateDecision`); - }); - - it(`should remove white spaces when creating the state key`, () => { - const databasedswitch = new Specification.Databasedswitchstate( - JSON.parse(`{ - "type":"switch", - "name":"Check Application", - "dataConditions": [ - { - "condition": "\${ .applicants | .age >= 18 }", - "transition": "Start Application" - }, - { - "condition": "\${ .applicants | .age < 18 }", - "end": true - } - ], - "defaultCondition": { - "transition": "Start Application" - } - }`) - ); - const mermaidState = new MermaidState(databasedswitch); - expect(mermaidState.sourceCode()).toBe(`CheckApplication : Check Application -CheckApplication : type = Switch State -CheckApplication : Condition type = data-based -CheckApplication --> StartApplication : \${ .applicants | .age >= 18 } -CheckApplication --> [*] : \${ .applicants | .age < 18 } -CheckApplication --> StartApplication : default`); - }); - - it(`should remove dashes when creating the state key`, () => { - const databasedswitch = new Specification.Databasedswitchstate( - JSON.parse(`{ - "type":"switch", - "name":"check-application", - "dataConditions": [ - { - "condition": "\${ .applicants | .age >= 18 }", - "transition": "start-application" - }, - { - "condition": "\${ .applicants | .age < 18 }", - "end": true - } - ], - "defaultCondition": { - "transition": "start-application" - } - }`) - ); - const mermaidState = new MermaidState(databasedswitch); - expect(mermaidState.sourceCode()).toBe(`CheckApplication : Check Application -CheckApplication : type = Switch State -CheckApplication : Condition type = data-based -CheckApplication --> StartApplication : \${ .applicants | .age >= 18 } -CheckApplication --> [*] : \${ .applicants | .age < 18 } -CheckApplication --> StartApplication : default`); - }); -}); diff --git a/tests/lib/diagram/wf_with_compensation.json b/tests/lib/diagram/wf_with_compensation.json deleted file mode 100644 index 627fcf4..0000000 --- a/tests/lib/diagram/wf_with_compensation.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "id": "newItemPurchaseWorkflow", - "version": "1.0", - "specVersion": "0.8", - "name": "New Item Purchase Workflow", - "states": [ - { - "name": "Item Purchase", - "type": "event", - "onEvents": [ - { - "eventRefs": [ - "New Purchase Event" - ], - "actions": [ - { - "functionRef": { - "refName": "Invoke Debit Customer Function", - "arguments": { - "customerid": "${ .purchase.customerid }", - "amount": "${ .purchase.amount }" - } - } - } - ] - } - ], - "compensatedBy": "Cancel Purchase", - "end": true, - "onErrors": [ - { - "errorRef": "Debit Error", - "end": { - "compensate": true - } - } - ] - }, - { - "name": "Cancel Purchase", - "type": "operation", - "usedForCompensation": true, - "actions": [ - { - "functionRef": { - "refName": "Invoke Credit Customer Function", - "arguments": { - "customerid": "${ .purchase.customerid }", - "amount": "${ .purchase.amount }" - } - } - } - ], - "transition": "Send confirmation purchase cancelled" - }, - { - "name": "Send confirmation purchase cancelled", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Send email", - "arguments": { - "customerid": "${ .purchase.customerid }", - } - } - } - ] - } - ], - "functions": "http://myservicedefs.io/graphqldef.json", - "events": "http://myeventdefs.io/eventdefs.json", - "errors": "file://mydefs/errordefs.json" -} \ No newline at end of file diff --git a/tests/lib/utils.spec.ts b/tests/lib/utils.spec.ts deleted file mode 100644 index a4ba821..0000000 --- a/tests/lib/utils.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { validate } from '../../src/lib/utils'; - -describe('validate', () => { - it('should throw an error containing the provided data', () => { - expect(() => validate('End', 'any text')).toThrowError(/any text/); - }); - - it('should return true for valid objects', () => { - expect(validate('End', false)); - }); - - it('should ignore "normalize" function as additionalProperty', () => { - const functionObj = { - name: 'function', - operation: 'operation', - type: 'rest', - normalize: () => { - //do something - }, - }; - - expect(validate('Function', functionObj)).toBeTruthy(); - }); - - it('should NOT ignore additionalProperties', () => { - const functionObj = { - name: 'function', - operation: 'operation', - type: 'rest', - keyAdditionalProperty: 'anyValue', - }; - - expect(() => validate('Function', functionObj)).toThrowError(/keyAdditionalProperty/); - }); - - it('should throws an error if validator not found', () => { - expect(() => validate('ValidatorNotDefined', {})).toThrowError(); - }); -}); diff --git a/tests/lib/workflow-validator.spec.ts b/tests/lib/workflow-validator.spec.ts deleted file mode 100644 index 9e9c868..0000000 --- a/tests/lib/workflow-validator.spec.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -import { ValidationError, WorkflowValidator } from '../../src'; -import { Workflow } from '../../src/lib/definitions/workflow'; -import * as fs from 'fs'; - -describe('workflow-validator, invalid state', () => { - const validWorkflow = { - id: 'helloworld', - version: '1.0.0', - specVersion: '0.8', - name: 'Hello World Workflow', - description: 'Inject Hello World', - start: 'Hello State', - states: [ - { - name: 'Hello State', - type: 'inject', - data: { - result: 'Hello World!', - }, - end: true, - }, - ], - }; - - it('should return errors instance of ValidationError if the workflow provided is not valid', () => { - const workflowWithEmptyStates = Workflow.fromSource(JSON.stringify(validWorkflow)); - - // @ts-ignore - workflowWithEmptyStates.states = []; - - const workflowValidator = new WorkflowValidator(workflowWithEmptyStates); - - const numErrors = 1; - expectInvalidWorkflow(workflowValidator, numErrors); - expect(workflowValidator.errors[0].message).toMatch('states'); - }); - - it('should check if specVersion match the supported sdk version', () => { - const workflowWithInvalidSpecVersion = Workflow.fromSource(JSON.stringify(validWorkflow)); - workflowWithInvalidSpecVersion.specVersion = '0.1'; - - const workflowValidator = new WorkflowValidator(workflowWithInvalidSpecVersion); - - const numErrors = 1; - expectInvalidWorkflow(workflowValidator, numErrors); - - expect(workflowValidator.errors[0].message).toMatch('specVersion'); - }); - - function expectInvalidWorkflow(workflowValidator: WorkflowValidator, numErrors: number) { - expect(workflowValidator.isValid); - expect(workflowValidator.errors.length).toBe(numErrors); - workflowValidator.errors.forEach((error) => { - expect(error.constructor === ValidationError); - }); - } -}); - -describe('workflow-validator, valid state', () => { - it('should have no errors', () => { - const testFolder = './tests/examples/'; - - const jsonFiles = fs.readdirSync(testFolder).filter((f) => f.endsWith('.json')); - - expect(jsonFiles.length).toBe(9); - - jsonFiles.forEach((f) => { - const file = testFolder + f; - const workflow = Workflow.fromSource(fs.readFileSync(file, 'utf8')); - const workflowValidator = new WorkflowValidator(workflow); - expect(workflowValidator.errors.length).toBe(0); - }); - }); -}); diff --git a/tests/serialization/workflow-serialization.spec.ts b/tests/serialization/workflow-serialization.spec.ts new file mode 100644 index 0000000..903968f --- /dev/null +++ b/tests/serialization/workflow-serialization.spec.ts @@ -0,0 +1,111 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Specification } from '../../src/lib/generated/definitions'; +import { Classes } from '../../src/lib/generated/classes'; + +import { schemaVersion } from '../../package.json'; +import { documentBuilder, setTaskBuilder, taskListBuilder, workflowBuilder } from '../../src'; + +describe('Workflow (de)serialization', () => { + it('should deserialize JSON', () => { + const data: Specification.Workflow = { + document: { + dsl: schemaVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [ + { + step1: { + set: { + foo: 'bar', + }, + }, + }, + ], + }; + const dataJson = JSON.stringify(data); + const workflow = Classes.Workflow.deserialize(dataJson); + expect(workflow).toBeInstanceOf(Classes.Workflow); + }); + + it('should serialize as JSON from static method', () => { + const data: Specification.Workflow = { + document: { + dsl: schemaVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [ + { + step1: { + set: { + foo: 'bar', + }, + }, + }, + ], + }; + const workflow = new Classes.Workflow(data); + const expected = JSON.stringify(data); + const serialized = Classes.Workflow.serialize(workflow, 'json'); + expect(serialized).toEqual(expected); + }); + + it('should serialize as JSON from instance method', () => { + const data: Specification.Workflow = { + document: { + dsl: schemaVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [ + { + step1: { + set: { + foo: 'bar', + }, + }, + }, + ], + }; + const workflow = new Classes.Workflow(data); + const expected = JSON.stringify(data); + const serialized = workflow.serialize('json'); + expect(serialized).toEqual(expected); + }); + + it('should serialize as JSON from from static method from fluently built workflow', () => { + const workflow = workflowBuilder() + .document(documentBuilder().dsl('1.0.0-alpha5').name('test').version('1.0.0').namespace('default').build()) + .do( + taskListBuilder() + .push({ + step1: setTaskBuilder().set({ foo: 'bar' }).build(), + }) + .build(), + ) + .build(); + const expected = JSON.stringify(workflow); + const serialized = Classes.Workflow.serialize(workflow, 'json'); + expect(serialized).toEqual(expected); + }); +}); diff --git a/tests/validation/workflow-validation.spec.ts b/tests/validation/workflow-validation.spec.ts new file mode 100644 index 0000000..b645ac3 --- /dev/null +++ b/tests/validation/workflow-validation.spec.ts @@ -0,0 +1,74 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { Classes } from '../../src/lib/generated/classes'; +import { validate } from '../../src/lib/validation'; + +import { schemaVersion } from '../../package.json'; + +describe('Workflow validation', () => { + it('should be valid', () => { + const workflow = new Classes.Workflow({ + document: { + dsl: schemaVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + do: [ + { + step1: { + set: { + foo: 'bar', + }, + }, + }, + ], + }); + const test = () => validate('Workflow', workflow); + expect(test).not.toThrow(Error); + }); + + it('should throw when invalid', () => { + const workflow = new Classes.Workflow({ + document: { + dsl: schemaVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + }); + const test = () => validate('Workflow', workflow); + expect(test).toThrow(Error); + expect(test).toThrow(/'Workflow' is invalid/); + }); + + it('should throw with incompatible DSL version', () => { + const oldVersion = '0.9'; + const workflow = new Classes.Workflow({ + document: { + dsl: oldVersion, + name: 'test', + version: '1.0.0', + namespace: 'default', + }, + }); + expect(() => workflow.validate()).toThrow( + `The DSL version of the workflow '${oldVersion}' doesn't match the supported version of the SDK '${schemaVersion}'.`, + ); + }); +}); diff --git a/tools/download-schemas.ts b/tools/1_download-schemas.ts similarity index 74% rename from tools/download-schemas.ts rename to tools/1_download-schemas.ts index 963f019..f81f602 100644 --- a/tools/download-schemas.ts +++ b/tools/1_download-schemas.ts @@ -17,7 +17,8 @@ import $RefParser from '@apidevtools/json-schema-ref-parser'; import { promises as fsPromises } from 'fs'; import * as path from 'path'; import { URL } from 'url'; -import { schemaDir, reset, schemaUrl } from './utils'; +import { schemaDir, reset, jsonSchemaUrl, yamlSchemaUrl } from './utils'; +import * as yaml from 'js-yaml'; const { writeFile, mkdir } = fsPromises; @@ -29,21 +30,27 @@ const { writeFile, mkdir } = fsPromises; */ const download = async (schemaUrl: URL, destDir: string): Promise => { try { - await reset(destDir); const fileName = path.basename(schemaUrl.pathname); + const isJson = fileName.endsWith('.json'); const urlBase = schemaUrl.href.replace(fileName, ''); const $refParser = new $RefParser(); await $refParser.resolve(schemaUrl.href); const externalSchemas = $refParser.$refs .paths() .filter((p, index, arr) => arr.indexOf(p) === index && p !== schemaUrl.href); - await writeFile(path.resolve(destDir, fileName), JSON.stringify($refParser.schema, null, 2)); + await writeFile( + path.resolve(destDir, fileName), + isJson ? JSON.stringify($refParser.schema, null, 2) : yaml.dump($refParser.schema), + ); externalSchemas.forEach(async (externalSchemaUrl: string) => { const externalSchema = $refParser.$refs.get(externalSchemaUrl); if (externalSchema) { const externalSchemaFileName = externalSchemaUrl.replace(urlBase, ''); await mkdir(path.resolve(destDir, path.dirname(externalSchemaFileName)), { recursive: true }); - await writeFile(path.resolve(destDir, externalSchemaFileName), JSON.stringify(externalSchema, null, 2)); + await writeFile( + path.resolve(destDir, externalSchemaFileName), + isJson ? JSON.stringify(externalSchema, null, 2) : yaml.dump(externalSchema), + ); } }); return Promise.resolve(); @@ -52,4 +59,8 @@ const download = async (schemaUrl: URL, destDir: string): Promise => { } }; -download(schemaUrl, schemaDir).then(console.log.bind(console)).catch(console.error.bind(console)); +reset(schemaDir) + .then(() => download(yamlSchemaUrl, schemaDir)) + .then(() => download(jsonSchemaUrl, schemaDir)) + .then(console.log.bind(console)) + .catch(console.error.bind(console)); diff --git a/tools/2_generate-definitions.ts b/tools/2_generate-definitions.ts new file mode 100644 index 0000000..d237cce --- /dev/null +++ b/tools/2_generate-definitions.ts @@ -0,0 +1,227 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { compile, JSONSchema, Options } from 'json-schema-to-typescript'; +import { promises as fsPromises } from 'fs'; +import * as path from 'path'; +import { fileHeader, inFileDisclaimer } from './consts'; +import { definitionsDir, isObject, reset, schemaDir, toPascalCase } from './utils'; +import * as yaml from 'js-yaml'; + +const { writeFile, readFile } = fsPromises; + +const structuralObjectProperties = [ + '$defs', + 'definitions', + 'properties', + 'patternProperties', + 'additionalProperties', + 'dependencies', + 'dependentSchemas', + 'if', + //'then', // creates a duplicate FlowDirective because of switch case then + 'else', + 'not', + 'items', + 'additionalItems', + 'unevaluatedItems', + 'contains', + 'propertyNames', + 'unevaluatedProperties', +]; + +const structuralArrayProperties = [ + 'allOf', + 'anyOf', + 'oneOf', + 'items', + 'enum', + 'type', + 'examples', + 'required', + 'dependentRequired', +]; + +const metadataProperties = ['title', 'description', 'default', 'type']; + +/** + * Embellishes the provided schema to increase its compatibility with json-schema-to-typescript, the resulting schema should keep the validation properties as the input one (phase 1) + * - adds missing type:object properties // not necessary ? + * - adds missing titles to objects + * - removes extra titles on value types + * @param schema The schema to embellish + * @param path The current path of the schema relative to the original schema + * @param parentTitle The title of the parent object, if any + * @returns An embellished schema with titles and types + */ +function prepareSchema(schema: any, path: string[] = ['#'], parentTitle: string = ''): any { + if (!isObject(schema) && !Array.isArray(schema)) { + return schema; + } + if (Array.isArray(schema)) { + return schema.map((item, i) => prepareSchema(item, [...path, i.toString()], parentTitle)); + } + const newSchema = JSON.parse(JSON.stringify(schema)); + const parent = path.slice(-1)[0]; + let schemaKeys = Object.keys(newSchema); + const isItemWithAdditionalProperties = + parent === 'additionalProperties' && path.slice(-2)[0] === 'items' && newSchema.properties; // only "useful" for SwitchTask.Switch.Cases + if (!structuralObjectProperties.includes(parent) || isItemWithAdditionalProperties) { + if (!newSchema.type && !newSchema.oneOf && !newSchema.anyOf && !newSchema.allOf) { + // not necessary ? + newSchema.type = 'object'; + schemaKeys.push('type'); + } + if (newSchema.title) { + parentTitle = newSchema.title; + } + if ( + newSchema.title && + newSchema.type && + newSchema.type !== 'object' && + newSchema.type !== 'array' && + newSchema.title != 'RuntimeExpression' // RuntimeExpression is a string but used as its own type, we want to keep its title to build a JSON pointer later + ) { + delete newSchema.title; + schemaKeys = schemaKeys.filter((key) => key === 'title'); + } + if ( + !newSchema.title && + (!newSchema.type || newSchema.type === 'object' || newSchema.type === 'array') && // only naming object or array types + isNaN(parseInt(parent, 10)) && // it comes from a oneOf/anyOf/allOf, it should be titled manually + newSchema.items?.type !== 'string' && // if it's an array of string, it doesn't need to be named + newSchema.items?.type !== 'number' && // if it's an array of number, it doesn't need to be named + schemaKeys.filter((key) => !metadataProperties.includes(key)).length // if it's just a plain object, with nothing but a type an some description + ) { + if (parentTitle.trim()) { + const title = !isItemWithAdditionalProperties ? parent : path.includes('switch') ? 'case' : 'item'; + newSchema.title = toPascalCase(`${parentTitle} ${title}`); + } + if (path.join('/') == '#/properties/timeout') { + newSchema.title = 'WorkflowTimeout'; + } else { + newSchema.title = toPascalCase( + path + .slice(1) + .filter((part) => !structuralObjectProperties.includes(part) && !structuralArrayProperties.includes(part)) + .join(' '), + ); + } + schemaKeys.push('title'); + parentTitle = newSchema.title; + } + } + if (schema.title === 'OpenIdConnectAuthenticationProperties') { + newSchema['$id'] = 'OpenIdConnectAuthenticationProperties'; // forces json-schema-to-typescript to declare it as such instead of "OAuth2AutenthicationData1" + } + return Object.entries(newSchema).reduce((outputSchema, [key, value]: [string, any]) => { + outputSchema[key] = prepareSchema(value, [...path, key], parentTitle); + return outputSchema; + }, {} as any); +} + +/** + * Transforms the provided schema to increase its compatibility with json-schema-to-typescript, the resulting schema **will** behave differently that the input one (phase 2) + * - replaces `unevaluatedProperties` with `additionalProperties` + * - transforms inheritance via `$ref` or `additionalProperties.$ref` to `allOf.$ref` + * - removes metadata where only $ref is used + * @param schema The schema to transform + * @param path The current path of the schema relative to the original schema + * @returns A mutated schema + */ +function mutateSchema(schema: any, path: string[] = ['#']): any { + if (!isObject(schema) && !Array.isArray(schema)) { + return schema; + } + if (Array.isArray(schema)) { + return schema.map((item, i) => mutateSchema(item, [...path, i.toString()])); + } + const newSchema = JSON.parse(JSON.stringify(schema)); + const parent = path.slice(-1)[0]; + const schemaKeys = Object.keys(newSchema); + if (!structuralObjectProperties.includes(parent)) { + if (newSchema.unevaluatedProperties != null) { + newSchema.additionalProperties = newSchema.unevaluatedProperties; + delete newSchema.unevaluatedProperties; + schemaKeys[schemaKeys.indexOf('unevaluatedProperties')] = 'additionalProperties'; + } + if (newSchema['$ref']) { + if (schemaKeys.filter((key) => !metadataProperties.includes(key)).length == 1) { + // only $ref + metadataProperties.forEach((prop) => delete newSchema[prop]); + } else if (newSchema.properties) { + const $ref = { $ref: newSchema['$ref'] }; + const properties = { + properties: newSchema.properties, + } as any; + delete newSchema['$ref']; + delete newSchema.properties; + newSchema.allOf = [$ref, properties]; + } + } + } + return Object.entries(newSchema).reduce((outputSchema, [key, value]: [string, any]) => { + outputSchema[key] = mutateSchema(value, [...path, key]); + return outputSchema; + }, {} as any); +} + +/** + * Generates a TypeScript file containing type declarations that represent the structure defined in the JSON Schema + * @param srcFile The path to the JSON Schema file + * @param destFile The destination path where the generated TypeScript file will be saved + * @returns A promise that resolves when the TypeScript file has been successfully written + */ +async function generate(srcFile: string, destFile: string): Promise { + const options: Partial = { + // prefere `prepareSchema` to set a title rather than `customName` otherwise the next step (validation pointers generation) will fail + customName: (schema: JSONSchema) /*, keyNameFromDefinition: string | undefined)*/ => { + if (schema.$id?.includes('serverlessworkflow.io')) { + return 'Workflow'; + } + if (schema.$id == 'OpenIdConnectAuthenticationProperties') { + return schema.$id; + } + // don't return anything to keep the default behavior + }, + bannerComment: `${fileHeader} +${inFileDisclaimer} + + `, + style: { + singleQuote: true, + }, + //unreachableDefinitions: true, + }; + const schemaText = await readFile(srcFile, { encoding: 'utf-8' }); + let schema = prepareSchema(yaml.load(schemaText)); + await writeFile( + srcFile.replace('workflow', '__internal_workflow').replace('.yaml', '.json'), + JSON.stringify(schema, null, 2).replace('workflow.yaml', 'workflow.json'), + ); + schema = mutateSchema(schema); + //await writeFile(srcFile.replace('workflow', '__mutated_workflow'), JSON.stringify(schema, null, 2)); + const declarations = await compile(schema, 'Workflow', options); + const destDir = path.dirname(destFile); + await reset(destDir); + await writeFile(destFile, declarations); + await writeFile(path.resolve(destDir, 'index.ts'), `${fileHeader}export * as Specification from './specification';`); +} + +const srcFile = path.resolve(schemaDir, 'workflow.yaml'); +const destFile = path.resolve(definitionsDir, 'specification.ts'); + +generate(srcFile, destFile).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/3_generate-validation-pointers.ts b/tools/3_generate-validation-pointers.ts new file mode 100644 index 0000000..c9f7f4c --- /dev/null +++ b/tools/3_generate-validation-pointers.ts @@ -0,0 +1,100 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { promises as fsPromises } from 'fs'; +import * as path from 'path'; +import { fileHeader, inFileDisclaimer } from './consts'; +import { definitionsDir, isObject, reset, schemaDir, vallidationDir } from './utils'; +import { JSONSchema } from 'json-schema-to-typescript'; +import { getExportedDeclarations } from './reflection'; +import * as yaml from 'js-yaml'; + +const { writeFile, readFile } = fsPromises; + +/** + * Gets the JSON pointer of the subschema with the provided title + * @param schema The schema to get the pointer from + * @param title The title to lookup + * @param parentPath The JSON pointer of the parent schema + * @returns The JSON pointer of the subschema with the provided title, or undefined if none is found + */ +function getJsonPointer(schema: JSONSchema, title: string, parentPointer: string = '#'): string | undefined { + if (typeof schema.title === 'string' && schema.title.toLowerCase() === title.toLowerCase()) { + return parentPointer; + } + for (const [key, value] of Object.entries(schema) as [string, any]) { + if (!isObject(value) && !Array.isArray(value)) { + continue; + } + if (!Array.isArray(value)) { + const match = getJsonPointer(value, title, `${parentPointer}/${key}`); + if (match) { + return match; + } + } else { + for (let i = 0, c = value.length; i < c; i++) { + const match = getJsonPointer(value[i], title, `${parentPointer}/${key}/${i}`); + if (match) { + return match; + } + } + } + } +} + +/** + * Generates a file containing a mapping of type and their JSON pointers + * @param schemaFile The schema to get the pointers from + * @param definitionFile The definition file to get the declarations from + * @param destFile The output file + */ +async function generate(schemaFile: string, definitionFile: string, destFile: string): Promise { + const definitions = await readFile(definitionFile, { encoding: 'utf-8' }); + const schemaTxt = await readFile(schemaFile, { encoding: 'utf-8' }); + const declarations = Array.from(getExportedDeclarations(definitions).keys()) + .filter((name) => name !== 'Workflow') + .sort((a, b) => a.localeCompare(b)); + const schema = yaml.load(schemaTxt) as JSONSchema; + const baseUri = schema.$id.replace('.yaml', '.json') + '#'; + const jsonPointers = [ + ['Workflow', baseUri], + ...declarations.map((name) => [name, getJsonPointer(schema, name, baseUri)]), + ]; + const validationPointersSrc = `${fileHeader} +${inFileDisclaimer} + +/** +* A map of type names and their corresponding schema +*/ +export const validationPointers = { +${jsonPointers.reduce((src, [key, value]) => `${src} ${key}: ${value ? `'${value}'` : 'undefined'},\n`, '')} +}; + `; + const destDir = path.dirname(destFile); + await reset(destDir); + await writeFile(destFile, validationPointersSrc); + await writeFile( + path.resolve(destDir, 'index.ts'), + fileHeader + "export { validationPointers } from './validation-pointers';", + ); +} + +const schemaFile = path.resolve(schemaDir, '__internal_workflow.json'); +//const schemaFile = path.resolve(schemaDir, 'workflow.json'); +const definitionFile = path.resolve(definitionsDir, 'specification.ts'); +const destFile = path.resolve(vallidationDir, 'validation-pointers.ts'); + +generate(schemaFile, definitionFile, destFile).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/4_generate-classes.ts b/tools/4_generate-classes.ts new file mode 100644 index 0000000..c770ddc --- /dev/null +++ b/tools/4_generate-classes.ts @@ -0,0 +1,278 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { promises as fsPromises } from 'fs'; +import * as path from 'path'; +import { fileHeader, inFileDisclaimer } from './consts'; +import { classesDir, definitionsDir, normalizeKnownAllCaps, reset, toKebabCase } from './utils'; +import { + getArrayHydration, + getExportedDeclarations, + getObjectHydration, + getTypeName, + getUnderlyingTypes, +} from './reflection'; +import { Node, Type } from 'ts-morph'; + +const { writeFile, readFile } = fsPromises; + +/** + * Returns the declaration for a class + * @param name The name of the class + * @param baseClass The inherited class, if any + * @returns The declaration of the class + */ +function getObjectClassDeclaration(name: string, node: Node, type: Type, baseClass?: string): string { + const hydrationResult = getObjectHydration(node, type); + return `${fileHeader} +${inFileDisclaimer} + +${hydrationResult.imports.map((type) => `import { _${type} } from './${toKebabCase(normalizeKnownAllCaps(type))}';`).join('\n')} +${baseClass ? `import { _${baseClass} } from './${toKebabCase(normalizeKnownAllCaps(baseClass))}';` : "import { ObjectHydrator } from '../../hydrator';"} +import { Specification } from '../definitions'; +import { getLifecycleHooks } from '../../lifecycle-hooks'; +import { validate } from '../../validation'; +${hydrationResult.code ? `import { isObject } from '../../utils';` : ''} +${name === 'Workflow' ? `import * as yaml from 'js-yaml';` : ''} + +/** + * Represents the intersection between the ${name} class and type + */ +export type ${name}Intersection = ${name} & Specification.${name}; + +/** + * Represents a constructor for the intersection of the ${name} class and type + */ +export interface ${name}Constructor { + new (model?: Partial): ${name}Intersection; +} + +/** + * Represents a ${name} with methods for validation ${name === 'Workflow' ? 'normalization, and serialization.' : 'and normalization.'} + * Inherits from ObjectHydrator which provides functionality for hydrating the state based on a model. + */ +export class ${name} extends ${baseClass ? '_' + baseClass : `ObjectHydrator`} { + /** + * Instanciates a new instance of the ${name} class. + * Initializes properties based on the provided model if it is an object. + * + * @param model - Optional partial model object to initialize the ${name}. + */ + constructor(model?: Partial) { + super(model); + ${ + hydrationResult.code + ? `const self = (this as unknown) as Specification.${name} & object; + if (isObject(model)) { + ${hydrationResult.code} + }` + : '' + } + getLifecycleHooks('${name}')?.constructor?.(this); + } + + /** + * Validates the current instance of the ${name}. + * Throws if invalid. + */ + validate(workflow?: Partial) { + const copy = new ${name}(this as any) as ${name}Intersection; + validate('${name}', copy, workflow); + } + + /** + * Normalizes the current instance of the ${name}. + * Creates a copy of the ${name}, invokes normalization hooks if available, and returns the normalized copy. + * + * @returns A normalized version of the ${name} instance. + */ + normalize(): ${name} & Specification.${name} { + const copy = new ${name}(this as any) as ${name}Intersection; + return getLifecycleHooks('${name}')?.normalize?.(copy) || copy; + } + ${ + name === 'Workflow' + ? ` + static deserialize(text: string): WorkflowIntersection { + const model = yaml.load(text) as Partial; + validate('Workflow', model); + return new Workflow(model) as WorkflowIntersection; + } + + static serialize( + model: Partial, + format: 'yaml' | 'json' = 'yaml', + normalize: boolean = true, + ): string { + const workflow = new Workflow(model); + workflow.validate(); + const normalized = normalize ? workflow.normalize() : workflow; + if (format === 'json') { + return JSON.stringify(normalized); + } + return yaml.dump(normalized); + } + + /** + * Serializes the workflow to YAML or JSON + * @param format The format, 'yaml' or 'json', default is 'yaml' + * @param normalize If the workflow should be normalized before serialization, default true + * @returns A string representation of the workflow + */ + serialize(format: 'yaml' | 'json' = 'yaml', normalize: boolean = true): string { + return Workflow.serialize(this as unknown as WorkflowIntersection, format, normalize); + }` + : '' + } +} + +export const _${name} = ${name} as ${name}Constructor${ + name === 'Workflow' + ? `& { + /** + * Deserializes the provided string as a Workflow + * @param text The YAML or JSON representation of a workflow + * @returns A new Workflow instance + */ + deserialize(text: string): WorkflowIntersection; + + /** + * Serializes the provided Workflow to YAML or JSON + * @param workflow The workflow to serialize + * @param format The format, 'yaml' or 'json', default is 'yaml' + * @param normalize If the workflow should be normalized before serialization, default true + * @returns A string representation of the workflow + */ + serialize(workflow: Partial, format?: 'yaml' | 'json', normalize?: boolean): string +}` + : '' + };`; +} + +/** + * Returns the declaration for a class that behaves like an array + * @param name The name of the class + * @param arrayTypeName The type parameter of the underlying array + * @returns The declaration of the array-like class + */ +function getArrayLikeClassDeclaration(name: string, arrayTypeName: string, type: Type): string { + const hydrationResult = getArrayHydration(type); + return `${fileHeader} +${inFileDisclaimer} + +${hydrationResult.imports.map((type) => `import { _${type} } from './${toKebabCase(normalizeKnownAllCaps(type))}';`)} +import { Specification } from '../definitions'; +import { ArrayHydrator } from '../../hydrator'; +import { getLifecycleHooks } from '../../lifecycle-hooks'; +import { validate } from '../../validation'; + + +/** + * Represents the intersection between the ${name} class and type + */ +export type ${name}Intersection = ${name} & Specification.${name}; + +/** + * Represents a constructor for the intersection of the ${name} class and type + */ +export interface ${name}Constructor { + new (model?: Array<${arrayTypeName}> | number): ${name}Intersection; +} + +/** + * Represents a collection of ${arrayTypeName}. + * Inherits from ArrayHydrator to handle array-specific hydration. + */ +export class ${name} extends ArrayHydrator<${arrayTypeName}> { + /** + * Constructs a new instance of the ${name} class. + * + * @param model - Optional parameter which can be an array of objects or a number representing the array length. + */ + constructor(model?: Array<${arrayTypeName}> | number) { + super(model); + if (Array.isArray(model)) { + ${hydrationResult.code} + } + Object.setPrototypeOf(this, Object.create(${name}.prototype)); + getLifecycleHooks('${name}')?.constructor?.(this); + } + + /** + * Validates the current instance of the ${name}. + * Throws if invalid. + */ + validate(workflow?: Partial) { + const copy = new ${name}(this); + validate('${name}', copy, workflow); + } + + /** + * Normalizes the current instance of the ${name}. + * Creates a copy of the ${name}, invokes normalization hooks if available, and returns the normalized copy. + * + * @returns A normalized version of the ${name} instance. + */ + normalize(): ${name} { + const copy = new ${name}(this); + return getLifecycleHooks('${name}')?.normalize?.(copy) || copy; + } +} + +export const _${name} = ${name} as unknown as ${name}Constructor; +//export const _${name} = ${name}; // could be exported directly, but it makes the job of building the index more straightforward as it's consistant with "object" classes +`; +} + +/** + * Generates classes + * @param definitionFile The declaration file to generate the classes from + * @param destDir The directory to save the declaration at + */ +async function generate(definitionFile: string, destDir: string): Promise { + const definitions = await readFile(definitionFile, { encoding: 'utf-8' }); + const exportedDeclarations = getExportedDeclarations(definitions); + const aliases = Array.from(exportedDeclarations.keys()).sort((a, b) => a.localeCompare(b)); + await reset(destDir); + for (const [alias, node] of exportedDeclarations) { + const exportedType = node![0].getType(); + let classDeclaration: string = ''; + if (!exportedType.isArray() && !exportedType.isTuple()) { + const baseClass = exportedType.getIntersectionTypes()?.[0]; + const baseClassName = baseClass ? getTypeName(baseClass) : undefined; + classDeclaration = getObjectClassDeclaration(alias, node![0], exportedType, baseClassName); + } else { + const arrayType = getTypeName( + exportedType.getArrayElementType() || getUnderlyingTypes(exportedType)[0], + 'Specification.', + ); + classDeclaration = getArrayLikeClassDeclaration(alias, arrayType, exportedType); + } + const destFile = path.resolve(destDir, toKebabCase(normalizeKnownAllCaps(alias)) + '.ts'); + await writeFile(destFile, classDeclaration); + } + const indexSrc = `${fileHeader} +${aliases.reduce((imports, alias) => `${imports}import { _${alias} } from './${toKebabCase(normalizeKnownAllCaps(alias))}';\n`, '')} +export const Classes = { +${aliases.reduce((exports, alias) => `${exports} ${alias}: _${alias},\n`, '')} +};`; + const destFile = path.resolve(destDir, 'index.ts'); + await writeFile(destFile, indexSrc); +} + +const definitionFile = path.resolve(definitionsDir, 'specification.ts'); + +generate(definitionFile, classesDir).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/5_generate-builders.ts b/tools/5_generate-builders.ts new file mode 100644 index 0000000..15e8bfc --- /dev/null +++ b/tools/5_generate-builders.ts @@ -0,0 +1,157 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { promises as fsPromises } from 'fs'; +import * as path from 'path'; +import { fileHeader, inFileDisclaimer } from './consts'; +import { buildersDir, definitionsDir, normalizeKnownAllCaps, reset, toKebabCase } from './utils'; +import { getExportedDeclarations } from './reflection'; +import { Type } from 'ts-morph'; + +const { readFile, writeFile } = fsPromises; + +/** + * Transforms PascalCase into camelCase + * @para value A PascalCase string + * @returns A camelCase string + */ +function toCamelCase(value: string): string { + if (!value) return ''; + const transformable = value.trim(); + return transformable[0].toLowerCase() + transformable.slice(1); +} + +/** + * Creates an object builder for the provided type + * @param name The name type to create the builder for + */ +const getObjectBuilderDeclaration = (name: string, type: Type): string => + `${fileHeader} +${inFileDisclaimer} + +import { builder, Builder, BuildOptions } from "../../builder"; +import { Classes } from "../classes"; +import { ${name}Intersection } from '../classes/${toKebabCase(normalizeKnownAllCaps(name))}'; +import { Specification } from "../definitions"; + +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.${name}} model The proxied object + * @param {BuildOptions} options The build options to use + * @returns {${name}Intersection} The built object + */ +function buildingFn(model: Specification.${name}, options: BuildOptions): ${name}Intersection { + const instance = new Classes.${name}(model); + if (options.validate) instance.validate(); + return (options.normalize ? instance.normalize() : instance) ${type.isTuple() ? 'as unknown ' : ''}as ${name}Intersection; +} + +/** + * A factory to create a builder proxy for the type \`${name}Intersection\` + * @returns {Builder<${name}Intersection, ${name}Intersection>} A builder for \`${name}Intersection\` + */ +export const ${toCamelCase(name)}Builder = (model?: Partial): Builder, ${name}Intersection> => builder(model, buildingFn);`; + +/** + * Creates an array builder for the provided type + * @param name The name type to create the builder for + * @param arrayTypeName The type parameter of the underlying array + */ +const getArrayBuilderDeclaration = (name: string, arrayTypeName: string): string => + `${fileHeader} +${inFileDisclaimer} + +import { arrayBuilder, ArrayBuilder, BuildOptions } from "../../builder"; +import { Classes } from "../classes"; +import { ${name}Intersection } from '../classes/${toKebabCase(normalizeKnownAllCaps(name))}'; +import { Specification } from "../definitions"; + +/** + * The internal function used by the builder proxy to validate and return its underlying array + * @param {Specification.${name}} model The proxied array + * @param {BuildOptions} options The build options to use + * @returns {${name}Intersection} The built array + */ +function buildingFn(model: Specification.${name}, options: BuildOptions): ${name}Intersection { + const instance = new Classes.${name}(model); + if (options.validate) instance.validate(); + return (options.normalize ? instance.normalize() : instance) as unknown as ${name}Intersection; +} + +/** + * A factory to create a builder proxy for the type \`${name}Intersection\` + * @returns {ArrayBuilder<${arrayTypeName}, ${name}Intersection>} A builder for \`${name}Intersection\` + */ +export const ${toCamelCase(name)}Builder = (model?: Specification.${name}): ArrayBuilder<${arrayTypeName}, ${name}Intersection> => arrayBuilder<${arrayTypeName}, ${name}Intersection>(model, buildingFn);`; + +/** + * Creates the builders index file + * @param destDir The builders directory + * @param aliases The list of types to create the index for + * @returns + */ +async function createIndex(destDir: string, aliases: string[]): Promise { + try { + const indexCode: string = + fileHeader + + aliases.reduce( + (acc, alias) => acc + `export * from './${toKebabCase(normalizeKnownAllCaps(alias)) + '-builder'}';\n`, + '', + ); + const indexFile = path.resolve(destDir, 'index.ts'); + await writeFile(indexFile, indexCode); + return Promise.resolve(); + } catch (ex) { + return Promise.reject(ex); + } +} + +/** + * Generates builders + * @param definitionFile The definition file path + * @param destDir The output directory for builders + * @returns + */ +async function generate(definitionFile: string, destDir: string): Promise { + try { + await reset(destDir); + const definitions = await readFile(definitionFile, { encoding: 'utf-8' }); + const exportedDeclarations = getExportedDeclarations(definitions); + const aliases = Array.from(exportedDeclarations.keys()).sort((a, b) => a.localeCompare(b)); + for (const [alias, node] of exportedDeclarations) { + const exportedType = node![0].getType(); + let builderDeclaration: string = ''; + if (!exportedType.isArray()) { + builderDeclaration = getObjectBuilderDeclaration(alias, exportedType); + } else { + const arrayType = exportedType + .getArrayElementTypeOrThrow() + .getText() + .replace('import("/declarations")', 'Specification'); + builderDeclaration = getArrayBuilderDeclaration(alias, arrayType); + } + const destFile = path.resolve(destDir, toKebabCase(normalizeKnownAllCaps(alias)) + '-builder.ts'); + await writeFile(destFile, builderDeclaration); + } + createIndex(destDir, aliases); + return Promise.resolve(); + } catch (ex) { + return Promise.reject(ex); + } +} + +const definitionFile = path.resolve(definitionsDir, 'specification.ts'); +generate(definitionFile, buildersDir).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 0000000..184b2de --- /dev/null +++ b/tools/README.md @@ -0,0 +1,146 @@ +# Tooling Architecture + +## 1. Downloader +A simple script that downloads the JSON Schema(s) from `https://serverlessworkflow.io/`. Currently, there is only one schema, but the script supports downloading referenced schemas as well for legacy reasons. As it might be useful in the future and doesn't add much complexity, it has been retained. + +> [!TIP] +> The schema(s) are saved in `src/lib/generated/schema/`, the main one being `workflow.json`.* + +## 2. Generating Types +The goal is to automatically generate TypeScript types/interfaces or classes corresponding to the specification's JSON Schema. This step is the trickiest. Its outcome will vary depending on the schema and the library used. + +Some libraries considered: +- [dtsgenerator](https://www.npmjs.com/package/dtsgenerator) - Used with the previous version of the spec but is no longer updated and doesn't support `draft/2020-12` schemas. Replacing `$defs` with `definitions` didn't yield convincing results. With the previous version, manual merging of schemas was needed because external `$refs` were not resolved. +- [quicktype](https://www.npmjs.com/package/quicktype) - Despite its popularity, its output was unsatisfactory. Instead of using union types, it merged all properties into one object and made them nullable. While there might be configuration options to address this, it was not explored in depth. Its support for many languages might make it less specialized. +- [json-schema-to-typescript](https://www.npmjs.com/package/json-schema-to-typescript) - Generates a mix of types and interfaces, using unions and intersections. A red flag is the number of open issues, some dating back to 2018. However, it is still maintained. + +In the end, `json-schema-to-typescript` was selected. Nevertheless, it has some issues to work around: +- [Issue #613](https://github.com/bcherny/json-schema-to-typescript/issues/613) +- [Issue #193](https://github.com/bcherny/json-schema-to-typescript/issues/193) (from 2018) + +To maximize compatibility with `json-schema-to-typescript`, the generator performs a few operations in two phases: + +### Phase 1: Embellishing the JSON Schema +To have better control over the generated type names, every object and array of objects in the schema is given a `title` if none is defined. This allows: +1. Avoiding names like `Schema` and `Schema1` +2. Mapping a generated type to its JSON pointer in the schema (see [3. Generating Validators](#3-generating-validators)) + +The `type: object` is also added when not specified. This doesn't impact type generation but might be useful for strict schema validation. + +Theoretically, *Phase 1* doesn't affect the validity of the schema. + +> [!TIP] +> The resulting schema is saved as `src/lib/generated/schema/__internal_workflow.json` for later use.* + +### Phase 2: Mutating the JSON Schema +`json-schema-to-typescript` has limitations, as highlighted in the issues linked above: +- When a property's type is referenced (`$ref`) and also decorated with metadata (e.g., `description`), `json-schema-to-typescript` outputs an additional type instead of using the referenced one. See [Issue #193](https://github.com/bcherny/json-schema-to-typescript/issues/193). +- When an object inherits from another using a reference (`$ref`), the parent is ignored in the generated types. See [Issue #613](https://github.com/bcherny/json-schema-to-typescript/issues/613). +- `unevaluatedProperties` seems to be ignored. + +*Phase 2* addresses these limitations by: +- Removing metadata from properties whose type is a reference. +- Replacing `$ref` inheritance with `allOf` +- Replacing `unevaluatedProperties` with `additionalProperties` + +The resulting schema is used in-memory to generate the types. The schema produced by *Phase 2* is intrinsically different from the original schema and will produce different validation results if used. **This is why this process is done in two phases instead of one, which would have been more performant.** + +After phases 1 & 2, the mutated schema is passed to `json-schema-to-typescript` and the resulting TypeScript declarations are saved to `specification.ts`. + +> [!TIP] +> The declarations are saved in `src/lib/generated/definitions/specification.ts`.* + +## 3. Generating Validators +To validate an object of type `T`, where `T` is not the root object described by the JSON Schema, we need to know the subschema's JSON pointer corresponding to `T`. The exported declarations of the TypeScript file produced in [step 2](#2-generating-types) are extracted using `ts-morph`. *(At this point, it is probably overkill; a regex could probably do the trick, but this library will be useful later on.)* For each declaration, the internal JSON Schema produced in [step 2 - Phase 1](#phase-1-embellishing-the-json-schema) is crawled to find the object with the matching title. Then, an object where the keys are the names of the types and the values are their JSON pointers is saved as `validation-pointers.ts`. + +> [!TIP] +> The validation pointers are saved in `src/lib/generated/validation/validation-pointers.ts`.* + +The produced validation pointers are used by the SDK to expose a `validate` function that takes the name of the type to validate and the object to validate: +```typescript +validate('TypeName', value); +``` + +> [!TIP] +> The validation function is located at `src/lib/validation.ts`.* + +## 4. Generating Classes +[Generating types](#2-generating-types) is already a great step, but classes have a few advantages we'd like to leverage in an SDK: +- Unlike types, they can be tested at runtime with `instanceof` +- They can carry business logic such as object hydration (for the aforementioned `instanceof` checking), validation, normalization, etc. + +### Phase 1: Declaration +The aim is to generate a class for each type/interface generated in [step 2](#2-generating-types) that shares the same property signatures. This is achieved by exploiting a TypeScript trick: declaring an internal class and then exposing it as an intersection of its constructor and its associated type (see this [StackOverflow reply](https://stackoverflow.com/questions/54207173/classes-keyof-in-typescript/54207465#54207465)). For instance, if our type is `Foo`, we can mimic a class `FooClass` using the following code: +```typescript +class FooClass { + constructor(model?: Partial) { + if (model) Object.assign(this, model); + } +} + +const _FooClass = FooClass as { + new(model?: Foo): FooClass & Specification.Foo // aka "the constructor creates an object which is both FooClass and Foo" +}; + +export const Classes = { + FooClass: _FooClass +}; + +const fooInstance = new Classes.FooClass(); +console.log(fooInstance instanceof Classes.FooClass); // true +``` + +For array types, it's a bit different. Here the challenge is to extend `Array` but enforce our prototype: +```typescript +export class Foo extends Array { + constructor(model?: Array) { + super(...(model||[])); + Object.setPrototypeOf(this, Object.create(Foo.prototype)); + } +} +``` +> [!NOTE] +> After implementing this approach, the "hydration" has been researched and implemented. During this phase, properties of a type/interface and their subtypes (union/intersection/tuple) are reflected to be recursively hydrated. We could maybe use those to declare classes properties instead of using the "cast trick". + +### Phase 2: Hydration +To hydrate the object, we rely on `ts-morph` to reflect the properties and build the hydration code. The process consists of the following steps: +- Get the target object associate type/interface and its subtypes (union/intersection/tuple) +- For each of those types, get their properties and indexed signature +- Get literal properties that can be constant and hydrate the constant if necessary +- Get properties that are not value types and hydrate the properties if necessary +- Get the indexed signature type and hydrate it if necessary + +If a property is defined in multiple subtypes with different types, it's ignore altogether and a warning is emitted. For instance, a `CallTask` is a union of specialized call task such as `CallAsyncAPI`, `CallHTTP`, ... Those types both declare a `with` property but with different signature. Therefore, its hydration is ignored at the `CallTask` level. + +In addition to the hydration, a call to the `constructor` lifecycle hook is also generated. + +### Phase 3: Validation and normalization +When generating the class, two methods will be added: +- `validate(): void` which calls, in that order, the `preValidation` lifecycle hook, the `validate` function using the pointers build in [step 3](#3-generating-validators) and the `postValidation` lifecycle hook +- `normalize(): T` which calls the the `normalize` lifecycle hook + +> [!TIP] +> The classes are saved in `src/lib/generated/classes/`.* + +> [!TIP] +> The lifecycle hooks can be found in `src/lib/hooks/`.* + +## 5. Generating Fluent Builders +One feature of the SDK is to expose fluent builders. This feature heavily relies on the builder proxy in `src/lib/builder.ts`. The generic type `Builder` reflects properties of `T` as methods and adds a `build()` method to return the built object. The proxy sets the property value when the corresponding method is called or calls a "building function" when `build()` is called. + +The generator iterates over the generated types to: +- Define a "building function" that creates an "instance of the type" (of the class that mimics the type) and validates it. +- Wrap the generic proxy into a specific one. e.g., `export const workflowBuilder = (): Builder => builder(buildingFn);`. + +The "building function" will call the `validate()` and `normalize()` methods of the class. + +> [!TIP] +> The builders are saved in `src/lib/generated/builders/`.* + +## Conclusion +With the tooling in place, we can automatically provide the required features of the SDK: +- Type checking +- Validation +- Normalization +- Typed instances +- Fluent builder \ No newline at end of file diff --git a/tools/consts.ts b/tools/consts.ts index 0b94bee..051996f 100644 --- a/tools/consts.ts +++ b/tools/consts.ts @@ -31,5 +31,13 @@ export const fileHeader = `/* `; +export const inFileDisclaimer = ` +/***************************************************************************************** + * + * /!\\ This file is computer generated. Any manual modification can and will be lost. /!\\ + * + *****************************************************************************************/ +`; + export const readMeDisclaimer = `# Auto generated notice This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`; diff --git a/tools/download-schemas-github.ts b/tools/download-schemas-github.ts deleted file mode 100644 index 86cc597..0000000 --- a/tools/download-schemas-github.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * - * ARCHIVE: this file is not used atm - * - */ - -import fetch from 'node-fetch'; -import * as path from 'path'; -import { promises as fsPromises } from 'fs'; -import rimraf from 'rimraf'; -import yargs from 'yargs'; -import { version } from '../package.json'; -import { readMeDisclaimer } from './consts'; - -const { writeFile, mkdir } = fsPromises; -const rimrafP = async (f: string): Promise => - new Promise((resolve, reject) => - rimraf(f, (err) => { - if (err) return reject(err); - resolve(); - }) - ); - -/** - * Represents the links of a GitHub content item - */ -interface GithubContentItemLinks { - self: string; - git: string; - html: string; -} - -/** - * Represents the type of a GitHub content item - */ -enum GithubContentItemType { - File = 'file', - Dir = 'dir', -} - -/** - * Represents a GitHub content item - */ -interface GithubContentItem { - name: string; - path: string; - sha: string; - size: number; - url: string; - html_url: string; - git_url: string; - download_url: string; - type: GithubContentItemType; - _links: GithubContentItemLinks; -} - -/** Resets the destination directory */ -const reset = async (destDir: string) => - rimrafP(destDir) - .then(() => mkdir(destDir, { recursive: true })) - .then(() => writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer)); - -/** - * A promise that list the schemas in the registry - * @param {string} url The registry entry point - * @returns {GithubContentItem[]} The list of items - */ -const listFiles = async (url: string): Promise => - fetch(url) - .then((res: any) => { - if (res.status !== 200) throw `Cannot fetch ${url}`; - return res.json(); - }) - .then((items: GithubContentItem[]) => { - const queue = items.map((i) => { - if (i.type === GithubContentItemType.Dir) return listFiles(i.url); - return Promise.resolve([i]); - }); - return Promise.all(queue); - }) - .then((items: GithubContentItem[][]) => items.reduce((acc, i) => [...acc, ...i])); -/** - * A promise that maps the item paths and their urls - * @param {GithubContentItem[]} items The list of items - * @returns {Map} The path/url map - */ -const mapFilePaths = async (items: GithubContentItem[]): Promise> => { - const filesMap = new Map(); - items.forEach((i) => { - filesMap.set(i.path, i.download_url); - }); - return Promise.resolve(filesMap); -}; -/** - * A promise to download the file at the provided url to the provided dest - * @param {string} url The URL to get the file from - * @param {string} dest The destination path - * @returns {void} - */ -const downloadFile = async (url: string, dest: string): Promise => - mkdir(path.resolve(process.cwd(), 'src/lib', dest.split('/').slice(0, -1).join('/')), { recursive: true }) - .then(() => fetch(url)) - .then((res: any) => res.arrayBuffer()) - .then((data) => writeFile(path.resolve(process.cwd(), 'src/lib', dest), Buffer.from(data))); -/** - * A promise to download the provided files - * @param {Map} filesMap The path/url map to download to/from - * @returns {void} - */ -const downloadFiles = async (filesMap: Map): Promise => - Promise.all(Array.from(filesMap).map(([dest, url]) => downloadFile(url, dest))); - -const argv = yargs(process.argv.slice(2)).argv; -const ref = `${version.split('.').slice(0, -1).join('.')}.x`; -/** The schema registry base url, either provided in args or based on the package version */ -const registryUrl: string = - (argv.registry as string) || - `https://api.github.com/repos/serverlessworkflow/specification/contents/schema?ref=${ref}`; -console.log(`Using registry '${registryUrl}'`); -/** List, map, download */ -reset(path.resolve(process.cwd(), 'src/lib/schema')) - .then(() => listFiles(registryUrl)) - .then(mapFilePaths) - .then(downloadFiles) - .then(console.log.bind(console)) - .catch(console.error.bind(console)); diff --git a/tools/generate-builders.ts b/tools/generate-builders.ts deleted file mode 100644 index f9ae0fa..0000000 --- a/tools/generate-builders.ts +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { promises as fsPromises } from 'fs'; -import * as path from 'path'; -import { fileHeader } from './consts'; -import { reset } from './utils'; - -const { readFile, writeFile } = fsPromises; - -declare global { - interface String { - matchAll(re: RegExp): RegExpExecArray[]; - } -} - -const types = ['Datacondition', 'Eventcondition', 'Events', 'Functions', 'Retries', 'Switchstate']; - -interface BuilderExtension { - import?: string; - preValidate: string; -} - -/** Stores additional code that needs to be added to builders depending on their type */ -const buildersExtensions: { [key: string]: BuilderExtension } = { - Callbackstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Delaystate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Eventstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Foreachstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Injectstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Operationstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Parallelstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Subflowstate: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Defaultdef: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, - Error: { - import: `import { setEndValueIfNoTransition } from '../definitions/utils';`, - preValidate: `\r\n setEndValueIfNoTransition(model);`, - }, -}; - -/** - * Transforms PascalCase/camelCase/snake_case into kebab-case - * @param {string} value A string - * @param {boolean} trim If the string needs to be trimmed before transformation - * @returns A kebab-case string - */ -const toKebabCase = (value: string, trim: boolean = true): string => { - if (!value) return ''; - const transformable = trim ? value.trim() : value; - return transformable - .replace(/([A-Z])/g, '-$1') - .replace(/\s+/g, '-') - .replace(/-+/g, '-') - .replace(/_+/g, '-') - .toLowerCase(); -}; - -/** - * Transforms PascalCase into camelCase - * @param {string} value A PascalCase string - * @returns A camelCase string - */ -const toCamelCase = (value: string): string => { - if (!value) return ''; - const transformable = value.trim(); - return transformable[0].toLowerCase() + transformable.slice(1); -}; - -/** - * Creates a builder for the provided type - * @param {string} destDir The builders directory - * @param {string} dataType The type to create the builder for - * @returns {void} - */ -const createBuilder = async (destDir: string, dataType: string): Promise => { - try { - const camelType = toCamelCase(dataType); - const extension = buildersExtensions[dataType]; - const builderCode = - fileHeader + - `import { Builder, builder } from '../builder'; -import { Specification } from '../definitions'; -import { validate } from '../utils'; -${extension?.import ? extension.import : ''} - -/** - * The internal function used by the builder proxy to validate and return its underlying object - * @param {Specification.${dataType}} data The underlying object - * @returns {Specification.${dataType}} The validated underlying object - */ -function ${camelType}BuildingFn(data: Specification.${dataType}): (() => Specification.${dataType}) { - return () => { - const model = new Specification.${dataType}(data); - - ${extension?.preValidate ? extension.preValidate : ''} - - validate('${dataType}', model.normalize()); - return model; - }; -} - -/** - * A factory to create a builder proxy for the type \`Specification.${dataType}\` - * @returns {Specification.${dataType}} A builder for \`Specification.${dataType}\` - */ -export function ${camelType}Builder(): Builder { - return builder(${camelType}BuildingFn); -}`; - const destFile = path.resolve(destDir, toKebabCase(camelType) + '-builder.ts'); - await writeFile(destFile, builderCode); - return Promise.resolve(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -/** - * Creates the builders index file - * @param {string} destDir The builders directory - * @param {string} dataType The type to create the builders index for - * @returns {void} - */ -const createIndex = async (destDir: string, classes: string[]): Promise => { - try { - const indexCode: string = - fileHeader + - classes.reduce((acc, t) => acc + `export * from './${toKebabCase(toCamelCase(t)) + '-builder'}';\n`, ''); - const indexFile = path.resolve(destDir, 'index.ts'); - await writeFile(indexFile, indexCode); - return Promise.resolve(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -/** - * Generates builders - * @param {string} source The definition file path - * @param {string} destDir The output directory for builders - * @returns {void} - */ -const generate = async (source: string, destDir: string): Promise => { - try { - await reset(destDir); - const extractor: RegExp = /export \w* (\w*)/g; - const definition: string = await readFile(source, 'utf-8'); - const classes: string[] = [...definition.matchAll(extractor)] - .map(([, type]) => type) - .filter((cl) => !types.includes(cl)); - await Promise.all(classes.map(createBuilder.bind(null, destDir))); - createIndex(destDir, classes); - return Promise.resolve(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -const buildersDir = path.resolve(process.cwd(), 'src/lib/builders'); -const definitionSrc = path.resolve(process.cwd(), 'src/lib/schema/types/workflow.ts'); -generate(definitionSrc, buildersDir).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/generate-definitions.ts b/tools/generate-definitions.ts deleted file mode 100644 index e58bdfb..0000000 --- a/tools/generate-definitions.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import $RefParser from '@apidevtools/json-schema-ref-parser'; -import dtsGenerator, { JsonSchema as dtsGeneratorJsonSchema, parseSchema } from 'dtsgenerator'; -import { promises as fsPromises } from 'fs'; -import * as path from 'path'; -import { fileHeader } from './consts'; -import { capitalizeFirstLetter, mergeDefinitions, mergeSchemas, reset } from './utils'; - -const { writeFile } = fsPromises; - -/** - * Creates the type->path map for the ajv validators - * @param {string} dest The output path - * @param {Map} known$Refs The know references map - * @returns {void} - */ -const createValidatorsPaths = async (dest: string, known$Refs: Map, baseUrl: string): Promise => { - try { - const validatorsPathsCode = - fileHeader + - `/** -* A map of type names and their corresponding schema -*/ -export const validatorsPaths: [string, string][] = [ - ['Workflow', '${baseUrl}/workflow.json'], -${Array.from(known$Refs) - .map( - ([dataType, path]) => - ` ['${capitalizeFirstLetter(dataType)}', '${baseUrl}/${ - path.includes('.json') ? path : 'workflow.json' + path - }'],` - ) - .join('\r\n')} -]`; - const destDir = path.dirname(dest); - await reset(destDir); - await writeFile(dest, validatorsPathsCode); - } catch (ex) { - return Promise.reject(ex); - } -}; - -/** - * Generates TypeScript equivalent of the provided JSON Schema - * @param {string} source The input JSON Schema path - * @param {string} dest The output TypeScript path - * @param {string[]} additionnalSchemas Optional schemas to gather and merge definitions from - */ -const generate = async (source: string, dest: string, additionnalSchemas: string[] = []): Promise => { - try { - const $refParser = new $RefParser(); - const known$Refs = new Map(); - await $refParser.resolve(source); - const paths = [...$refParser.$refs.paths(), ...additionnalSchemas].filter( - (p, index, arr) => arr.indexOf(p) === index && p !== source - ); - await mergeDefinitions($refParser, paths, known$Refs); - mergeSchemas($refParser, known$Refs, $refParser.schema, '#/'); - let generatedTS = ( - await dtsGenerator({ - contents: [parseSchema($refParser.schema as dtsGeneratorJsonSchema)], - config: { - plugins: { - '@dtsgenerator/replace-namespace': { - map: [ - { - from: [true, true, true, true, true], - to: ['ServerlessWorkflow'], - }, - ], - }, - }, - }, - }) - ) - .replace(/WorkflowJson\.Definitions\./g, '') - .replace(/WorkflowJson/g, 'Workflow'); - const lines = generatedTS.split('\n'); - generatedTS = lines.slice(1, lines.length - 2).join('\n'); // removes 'declare namespace' and keeps 'exports'. - const destDir = path.dirname(dest); - await reset(destDir); - await writeFile(dest, fileHeader + generatedTS); - await writeFile(path.resolve(destDir, 'index.ts'), fileHeader + "export * as Specification from './workflow';"); - const validatorsDest = path.resolve(path.dirname(dest), '../../validation/validators-paths.ts'); - const $id = $refParser.schema.$id; - const baseUrl = path.dirname($id); - await createValidatorsPaths(validatorsDest, known$Refs, baseUrl); - return Promise.resolve(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -const srcFile = path.resolve(process.cwd(), 'src/lib/schema/workflow.json'); -const destFile = 'src/lib/schema/types/workflow.ts'; -/* -const additionnalSchemas = [ - path.resolve(process.cwd(), 'src/lib/schema/common.json'), // should be resolved already, no need to add it manually - path.resolve(process.cwd(), 'src/lib/schema/extensions/kpi.json'), // not linked by workflow, manually added -]; -generate(srcFile, destFile, additionnalSchemas) -*/ -generate(srcFile, destFile).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/generate-merged_json.ts b/tools/generate-merged_json.ts deleted file mode 100644 index 84881d8..0000000 --- a/tools/generate-merged_json.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2021-Present The Serverless Workflow Specification Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import $RefParser from '@apidevtools/json-schema-ref-parser'; -import { promises as fsPromises } from 'fs'; -import * as path from 'path'; -import { URL } from 'url'; -import { schemaDir, mergeDefinitions, mergeSchemas, schemaUrl } from './utils'; - -const { writeFile } = fsPromises; - -/** - * Generate a merged schema `__merged.json` from schemas in schemas directory - * @param schemaUrl {string} The URL to download the schema from //TODO this does not like right, revisit mergeDefinitions - * @param destDir {string} The destination path to save the schema to - * @returns {void} - */ -const execute = async (schemaUrl: URL, destDir: string): Promise => { - try { - const $refParser = new $RefParser(); - await $refParser.resolve(schemaUrl.href); - const externalSchemas = $refParser.$refs - .paths() - .filter((p, index, arr) => arr.indexOf(p) === index && p !== schemaUrl.href); - - const known$Refs = new Map(); - await mergeDefinitions($refParser, externalSchemas, known$Refs); - mergeSchemas($refParser, known$Refs, $refParser.schema, '#/'); - await writeFile(path.resolve(destDir, '__merged.json'), JSON.stringify($refParser.schema, null, 2)); - return Promise.resolve(); - } catch (ex) { - return Promise.reject(ex); - } -}; - -execute(schemaUrl, schemaDir).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/reflection.ts b/tools/reflection.ts new file mode 100644 index 0000000..a37835d --- /dev/null +++ b/tools/reflection.ts @@ -0,0 +1,304 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ExportedDeclarations, Project, QuoteKind, Type, Symbol as TsMorphSymbol, Node } from 'ts-morph'; + +/** + * Maps a property and its the type it's declared into + */ +type PropertyMap = { + /** The declaring type */ + parent: Type; + /** The property symbol */ + property: TsMorphSymbol; +}; + +/** + * Describes an object property + */ +type PropertyInfo = { + /** The property name */ + name: string; + /** The property type name */ + type: string; + /** The original ts-morph type */ + originalType: Type; + /** The original declaration */ + originalDeclaration: string; + /** The type the property belongs to */ + parentType: Type; + /** True if the property type is anonymous */ + isAnonymous: boolean; + /** True if the property type has an indexed signature */ + hasIndexedSignature: boolean; +}; + +/** The result of an hydration call */ +type HydrationResult = { + /** The list of types to import */ + imports: string[]; + /** The hydration code */ + code: string; +}; + +/** + * Get the exported declarations of the provided TypeScript code + * @param tsSource The TypeScript code to parse + * @returns An array containing the name of the exported declarations + */ +export const getExportedDeclarations = (tsSource: string): ReadonlyMap => { + const project = new Project({ + useInMemoryFileSystem: true, + manipulationSettings: { + quoteKind: QuoteKind.Single, + }, + }); + const sourceFile = project.createSourceFile('declarations.ts', tsSource); + return sourceFile.getExportedDeclarations(); +}; + +/** + * Gets a type, its union, intersection and tuple subtypes + * @param type The source type + * @returns An array containing the type and its subtypes + */ +export const getUnderlyingTypes = (type: Type): Type[] => + [ + type, + ...type.getUnionTypes().flatMap((t) => getUnderlyingTypes(t)), + ...type.getIntersectionTypes().flatMap((t) => getUnderlyingTypes(t)), + ...type.getTupleElements().flatMap((t) => getUnderlyingTypes(t)), + ].filter( + (t, idx, arr) => arr.findIndex((tt) => tt.getText() === t.getText()) === idx && !t.isArray() && !t.isTuple(), + ); + +/** + * Checks if the provided type has an indexed signature + * @param type The type to check + * @returns True if the type has an indexed signature + */ +const hasStringIndexedSignature = (type: Type): boolean => !!type.getStringIndexType(); + +/** + * Checks if the provided type is a value type or a union/intersection/tuple of value types + * @param type The type to check + * @returns True if the type, or its subtypes, is a value type + */ +const isValueType = (type: Type): boolean => + type.isString() || + type.isNumber() || + type.isBoolean() || + type.isBigInt() || + type.isEnum() || + type.isAny() || + type.isUnknown() || + type.isLiteral() || + (type.isUnion() && type.getUnionTypes().every((t) => isValueType(t))) || + (type.isIntersection() && type.getIntersectionTypes().every((t) => isValueType(t))) || + (type.isTuple() && type.getTupleElements().every((t) => isValueType(t))) || + (type.isArray() && isValueType(type.getArrayElementTypeOrThrow())) || + (type.isAnonymous() && hasStringIndexedSignature(type) && isValueType(type.getStringIndexType()!)); +/** + * Cleans the type name + * @param type The type to get the name from + * @param replacement The replacement text + * @returns The type name + */ +export const getTypeName = (type: Type, replacement: string = '') => + type.getText().replace(/import\("\/declarations"\)\./g, replacement); + +/** + * Returns the properties of the give type + * @param node The node containing the type + * @param type The type to get the properties from + * @returns An array of Symbol for the type's properties + */ +const getProperties = (node: Node, type: Type): PropertyMap[] => + getUnderlyingTypes(type) + .filter((t) => t.isObject()) + .flatMap((t) => t.getProperties().map((p) => ({ parent: t, property: p }))); + +/** + * Transforms the provided property Symbol to a PropertyInfo + * @param property The property to transform + * @param parent The type the property is declared into + * @param node The root node + * @returns The PropertyInfo for the provided property + */ +function asPropertyInfo(property: TsMorphSymbol, parent: Type, node: Node): PropertyInfo { + const name = property.getName(); + const originalType = property.getTypeAtLocation(node).getNonNullableType(); + const originalDeclaration = originalType.getText(); + const isAnonymous = originalType.isAnonymous(); + const hasIndexedSignature = hasStringIndexedSignature(originalType); + let typeTxt = ''; + if (!isAnonymous || !hasIndexedSignature) { + typeTxt = getTypeName(originalType); + } else if (hasIndexedSignature) { + typeTxt = getTypeName(originalType.getStringIndexType()!); + } + return { + name, + originalType, + originalDeclaration, + isAnonymous, + hasIndexedSignature, + type: typeTxt, + parentType: parent, + }; +} + +/** + * Gets a list of properties that could be hydrated + * @param node The node containing the type + * @param type The type to get the properties from + * @param propertiesMap The type properties + * @returns An array of hydratable PropertyInfo + */ +const getHydratableProperties = (node: Node, type: Type, propertiesMap: PropertyMap[]): PropertyInfo[] => + propertiesMap + .filter((pMap) => { + const originalType = pMap.property.getTypeAtLocation(node).getNonNullableType(); + //debugType(originalType); + return !isValueType(originalType); + }) + .map((pMap) => asPropertyInfo(pMap.property, pMap.parent, node)) + .concat( + ...getUnderlyingTypes(type) + .map((t) => t.getStringIndexType()) + .filter((t) => !!t && !isValueType(t)) + .reduce((props, t: Type) => { + props.push({ + name: '', + originalType: t, + originalDeclaration: t.getText(), + isAnonymous: t.isAnonymous(), + hasIndexedSignature: true, + type: getTypeName(t), + parentType: t, + }); + return props; + }, [] as PropertyInfo[]), + ); + +/** + * Gets a list of literal properties + * @param node The node containing the type + * @param properties The type properties + * @returns An array of literal PropertyInfo + */ +const getConstantProperties = (node: Node, properties: PropertyMap[]): PropertyInfo[] => + properties + .filter((pMap) => { + const originalType = pMap.property.getTypeAtLocation(node).getNonNullableType(); + //debugType(originalType); + return originalType.isLiteral() && (!originalType.isUnion() || !originalType.isIntersection()); + }) + .map((pMap) => asPropertyInfo(pMap.property, pMap.parent, node)); + +/** + * Gets duplicate values from an array + * @param input An array of values + * @returns An array of values that are duplicate in the input array + */ +const getDuplicateValues = (input: Array): Array => + input.filter((item, idx) => input.indexOf(item) === idx && input.lastIndexOf(item) !== idx); + +/** + * Produces the code to hydrate an object of the provided type + * @param node The node containing the type + * @param type The type to get the properties from + * @returns The code to hydrate the provided type + */ +export function getObjectHydration(node: Node, type: Type): HydrationResult { + const properties = getProperties(node, type); + const hydratableProperties = getHydratableProperties(node, type, properties); + let constantProperties = getConstantProperties(node, properties); + const duplicateConstantProperties = getDuplicateValues(constantProperties.map((p) => p.name)); + duplicateConstantProperties.forEach((name) => { + console.warn(`Found duplicate property '${name}' in '${type.getAliasSymbol()?.getName()}', ignored.`); + }); + constantProperties = constantProperties.filter((prop) => !duplicateConstantProperties.includes(prop.name)); + let namedProperties = hydratableProperties.filter((prop) => !!prop.name); + const duplicateNamedProperties = getDuplicateValues(namedProperties.map((p) => p.name)); + duplicateNamedProperties.forEach((name) => { + console.warn(`Found duplicate property '${name}' in '${type.getAliasSymbol()?.getName()}', ignored.`); + }); + namedProperties = namedProperties.filter((prop) => !duplicateNamedProperties.includes(prop.name)); + const imports: string[] = [...namedProperties.map((p) => p.type)].filter((type, i, arr) => arr.indexOf(type) === i); + const lines: string[] = [ + ...constantProperties.map((prop) => `self.${prop.name} = ${prop.type} as const;`), + ...namedProperties.map((prop) => { + const propName = !type.isUnion() ? prop.name : `${prop.name} as Specification.${prop.type}`; + const modelCast = !type.isUnion() ? 'model' : `(model as ${getTypeName(prop.parentType, 'Specification.')})`; + const selfCase = !type.isUnion() ? 'self' : `(self as ${getTypeName(prop.parentType, 'Specification.')})`; + if (!prop.isAnonymous) { + return `if (typeof ${modelCast}.${prop.name} === 'object') ${selfCase}.${prop.name} = new _${prop.type}(${modelCast}.${propName}) ${prop.originalType.isTuple() ? `as unknown as Specification.${prop.type}` : ''};`; + } + if (prop.isAnonymous) { + return `if (typeof ${modelCast}.${prop.name} === 'object') ${selfCase}.${prop.name} = Object.fromEntries( + Object.entries(${modelCast}.${propName}).map(([key, value]) => [key, new _${prop.type}(value)] ) + );`; + } + }), + ].filter((line): line is string => !!line?.trim()); + const indexedProperty = hydratableProperties.find((p) => !p.name); + if (indexedProperty && !indexedProperty.isAnonymous) { + const selfCase = !type.isUnion() ? 'self' : `(self as ${getTypeName(indexedProperty.parentType)})`; + imports.push(indexedProperty.type); + lines.push( + `const knownProperties: string[] = [${[...constantProperties, ...namedProperties].map((p) => `'${p.name}'`).join(',')}];`, + ); + lines.push(`Object.entries(model).filter(([key]) => !knownProperties.includes(key)).forEach(([key, value]) => { + ${selfCase}[key] = new _${indexedProperty.type}(value); + });`); + } + const code = lines.join('\n'); + return { + imports, + code, + }; +} + +/** + * Produces the code to hydrate an array of the provided type + * @param type The array type to hydrate + * @returns The code to hydrate the provided array + */ +export function getArrayHydration(type: Type): HydrationResult { + const arrayType = type.getArrayElementType() || getUnderlyingTypes(type)[0]; + const lines: string[] = ['if (model?.length) {', 'this.splice(0, this.length);']; + const imports: string[] = []; + if (isValueType(arrayType)) { + lines.push(`model.forEach(item => this.push(item));`); + } else if (!arrayType.isAnonymous()) { + const typeName = getTypeName(arrayType); + imports.push(typeName); + lines.push(`model.forEach(item => this.push(new _${typeName}(item)));`); + } else { + const typeName = getTypeName(arrayType.getStringIndexType()!); + imports.push(typeName); + lines.push( + `model.forEach(item => this.push(Object.fromEntries(Object.entries(item).map(([key, value]) => [key, new _${typeName}(value)]))));`, + ); + } + lines.push('}'); + const code = lines.join('\n'); + return { + imports, + code, + }; +} diff --git a/tools/utils.ts b/tools/utils.ts index 36ee7cc..8978a9c 100644 --- a/tools/utils.ts +++ b/tools/utils.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import $RefParser from '@apidevtools/json-schema-ref-parser'; import { promises as fsPromises } from 'fs'; import * as path from 'path'; -import rimraf from 'rimraf'; +import { rimraf } from 'rimraf'; import { readMeDisclaimer } from './consts'; import { URL } from 'url'; import yargs from 'yargs'; @@ -25,165 +24,80 @@ import { schemaVersion } from '../package.json'; const { writeFile, mkdir } = fsPromises; -/** - * Wraps rimraf into a Promise - * @param f {string} The target to be deleted - * @returns {void} - */ -export const rimrafP = async (f: string): Promise => - new Promise((resolve, reject) => - rimraf(f, (err) => { - if (err) return reject(err); - resolve(); - }) - ); +/** Resets the destination directory, recursively deletes everything and adds the README */ +export const reset = async (destDir: string) => + rimraf(destDir) + .then(() => mkdir(destDir, { recursive: true })) + .then(() => writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer)); /** - * Capitalized the first letter of the provided string - * @param {} value The string to capitalize - * @returns {string} The capitalized string + * Check if the provided value is an object but not an array + * @param value The value to check + * @returns True if the value is an object */ -export const capitalizeFirstLetter = (value: string): string => { - if (!value) return ''; - const transformable = value.trim(); - return transformable[0].toUpperCase() + transformable.slice(1); +export const isObject = (value: unknown): boolean => { + if (!value) return false; + return typeof value === 'object' && !Array.isArray(value); }; /** - * Tells if the provided objects hold a reference to another definition - * @param {any} obj The object to test - * @returns {boolean} Returns true if the object holds a reference to another schema - */ -export const isRef = (obj: any): boolean => obj && obj.$ref && typeof obj.$ref === typeof ''; - -/** - * Tells if the provided object holds an external reference - * @param {any} obj The object to test - * @returns {boolean} Returns true if the reference hold by the object is external - */ -export const isRefExernal = (obj: any): boolean => obj && obj.$ref && !obj.$ref.startsWith('#'); - -/** - * Gets the property name (key) in the root schema definitions for the provided ref. Used to avoid key collision - * @param {string} $ref The reference path - * @param {Map} known$Refs The know references map - * @returns {string} The corrected property name + * Transforms a PascalCased string or with space into a kebab-cased one + * @param source + * @returns */ -export const getPropName = ($ref: string, known$Refs: Map): string => { - const baseName = $ref.split('/').slice(-1)[0]; - let propName = baseName; - let variantIndex = 0; - while (known$Refs.has(propName) && known$Refs.get(propName) !== $ref) { - variantIndex++; - propName = baseName + variantIndex; - } - return propName; -}; +export const toKebabCase = (source: string): string => + source + .replace(/([A-Z])/g, ' $1') + .trim() + .replace(/\s+/g, '-') + .replace(/-+/g, '-') + .replace(/_+/g, '-') + .toLowerCase(); /** - * Merges the definitions founds in the schemas in path into the root schema's definitions - * @param {$RefParser} $refParser The $RefParser instance of the root schema - * @param {string[]} paths The path to the schemas containing definitions to merge - * @param {Map} known$Refs The know references map - * @param {string[]} parentPaths (internal) The previously known paths + * Converts a string to pascal case (PascalCase) + * @param source string The string to convert to pascal case + * @returns string The pascal case string */ -export const mergeDefinitions = async ( - $refParser: $RefParser, - paths: string[], - known$Refs: Map, - parentPaths: string[] = [] -): Promise => { - try { - if (!parentPaths?.length) { - Object.keys($refParser.schema.definitions || {}).forEach((key: string) => { - if (!known$Refs.has(key)) { - known$Refs.set(key, `#/definitions/${key}`); - } - }); - parentPaths = paths; - } - await Promise.all( - paths.map(async (schemaPath: string) => { - const fileName = path.basename(schemaPath); - const schema = await $RefParser.parse(schemaPath); - Object.entries(schema.definitions || {}).forEach(([key, value]) => { - const propName = getPropName(key, known$Refs); - known$Refs.set(propName, `${fileName}#/definitions/${key}`); - $refParser.$refs.set(`#/definitions/${propName}`, value); - }); - const $schemaRefs = await $RefParser.resolve(schemaPath); - const otherPaths = $schemaRefs.paths().filter((p) => !parentPaths.includes(p)); - otherPaths.forEach((p) => parentPaths.push(p)); - await mergeDefinitions($refParser, otherPaths, known$Refs, parentPaths); - }) - ); - } catch (ex) { - return Promise.reject(ex); - } +export const toPascalCase = (source: string): string => { + if (!source) return ''; + return source + .replace(/-+/g, ' ') + .replace(/_+/g, ' ') + .replace(/\.+/g, ' ') + .replace(/\s+(.)(\w+)/g, ($1, $2, $3) => `${$2.toUpperCase()}${$3.toLowerCase()}`) + .replace(/\s/g, '') + .replace(/\w/, (s) => s.toUpperCase()); }; /** - * Merges external schemas references into the root schema definitions - * @param {$RefParser} $refParser The $RefParser instance of the root schema - * @param {Map} known$Refs The know references map - * @param {any} target The object to crawl for references - * @param {string} target$Ref The provided target reference path + * Normalize to capitalize first letter only convention for know accronyms, eg HTTP -> Http + * @param source + * @returns */ -export const mergeSchemas = ( - $refParser: $RefParser, - known$Refs: Map, - target: any, - target$Ref: string -): void => { - const isRootDocument = target$Ref.startsWith('#'); - // todo ? handle circular refs ? - Object.entries(target) - .filter(([, value]: [string, any]) => value && typeof value === typeof {} && !ArrayBuffer.isView(value)) - .forEach(([key, value]: [string, any]) => { - if (!isRef(value) || (isRootDocument && !isRefExernal(value))) { - const newTargetRef = `${target$Ref.endsWith('/') ? target$Ref : target$Ref + '/'}${key}/`; - mergeSchemas($refParser, known$Refs, value, newTargetRef); - return; - } - if (isRefExernal(value)) { - const propName = getPropName(value.$ref, known$Refs); - if (known$Refs.has(propName)) { - value.$ref = `#/definitions/${propName}`; - return; - } - const referencedSchema = $refParser.$refs.get(value.$ref); - mergeSchemas($refParser, known$Refs, referencedSchema, value.$ref); - known$Refs.set(propName, value.$ref); - value.$ref = `#/definitions/${propName}`; - $refParser.$refs.set(`#/definitions/${propName}`, referencedSchema); - } else if (!isRootDocument) { - const document = target$Ref.split('#')[0]; - const relative$Ref = document + value.$ref; - const propName = getPropName(relative$Ref, known$Refs); - if (known$Refs.has(propName)) { - value.$ref = `#/definitions/${propName}`; - return; - } - const referencedSchema = $refParser.$refs.get(relative$Ref); - mergeSchemas($refParser, known$Refs, referencedSchema, relative$Ref); - known$Refs.set(propName, relative$Ref); - value.$ref = `#/definitions/${propName}`; - $refParser.$refs.set(`#/definitions/${propName}`, referencedSchema); - } - }); -}; - -/** Resets the destination directory, recursively deletes everything and adds the README */ -export const reset = async (destDir: string) => - rimrafP(destDir) - .then(() => mkdir(destDir, { recursive: true })) - .then(() => writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer)); +export const normalizeKnownAllCaps = (source: string): string => + source.replace('API', 'Api').replace('GRPC', 'Grpc').replace('HTTP', 'Http').replace('OAuth2', 'Oauth2'); /** Schemas directory */ -export const schemaDir = path.resolve(process.cwd(), 'src/lib/schema'); +export const schemaDir = path.resolve(process.cwd(), 'src/lib/generated/schema'); +/** Definitions directory */ +export const definitionsDir = path.resolve(process.cwd(), 'src/lib/generated/definitions'); +/** Vallidation directory */ +export const vallidationDir = path.resolve(process.cwd(), 'src/lib/generated/validation'); +/** Classes directory */ +export const classesDir = path.resolve(process.cwd(), 'src/lib/generated/classes'); +/** Builders directory */ +export const buildersDir = path.resolve(process.cwd(), 'src/lib/generated/builders'); +const argv = yargs(process.argv.slice(2)) + .options({ + url: { type: 'string' }, + }) + .parseSync(); /** The URL to download the schema from */ -export const schemaUrl: URL = new URL( - (yargs(process.argv.slice(2)).argv.url as string) || - `https://raw.githubusercontent.com/serverlessworkflow/specification/${schemaVersion}.x/schema/workflow.json` +export const yamlSchemaUrl: URL = new URL( + argv.url || `https://serverlessworkflow.io/schemas/${schemaVersion}/workflow.yaml`, +); +export const jsonSchemaUrl: URL = new URL( + argv.url || `https://serverlessworkflow.io/schemas/${schemaVersion}/workflow.json`, ); diff --git a/tsconfig.base.json b/tsconfig.base.json index 7e84fbd..c46f6ce 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ "lib": [ "ES2019", "DOM" ], /* Specify library files to be included in the compilation. */ "declaration": true, /* Generates corresponding '.d.ts' file. */