Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Validation #508

Open
misterjoshua opened this issue Jan 24, 2022 · 21 comments
Open

RFC: Validation #508

misterjoshua opened this issue Jan 24, 2022 · 21 comments
Labels
discussing The issue needs to be discussed, elaborated, or refined need-customer-feedback Requires more customers feedback before making or revisiting a decision RFC Technical design documents related to a feature request validation This item relates to the Validation Utility

Comments

@misterjoshua
Copy link
Contributor

misterjoshua commented Jan 24, 2022

Ref #445 for the structure of this RFC

Description of the proposal

There should be a consistent way to validate the structures of inputs and outputs for AWS lambdas.

Name of the core utility (and consequently the folders that contain the libraries):

  • packages/validation

Justification

The "Garbage in, garbage out" principle suggests that we should validate our inputs to prevent "garbage in," and for Lambda, those inputs include events passed to the lambda handler. A short, informal survey of GitHub projects using the CDK's NodejsFunction found that 90% of the studied projects hand-code their validation, indicating little consensus on any singular tool to validate inputs.

Additionally, the Java and Python toolkits saw fit to add validation of not only lambda input but lambda responses.

Validation support should be added to work toward feature parity between the AWS Lambda Powertools libraries and to offer developers a good alternative to hand-coding their validation.

Goals

  • Validate incoming events and responses
  • Unwrap events before validation applies
  • Built-in envelopes to unwrap popular event source payloads

Proposed API

Installation

Yarn

yarn add @aws-lambda-powertools/validation

Npm

npm install @aws-lambda-powertools/validation

Usage

Lambda Handler

import { Validation, Envelope } from "@aws-lambda-powertools/validation";

interface GreetingRequest {
  readonly name: string;
}

interface GreetingResponse {
  readonly message: string;
}

async function handlerBase(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
  return {
    message: `Hello ${request.name}`,
  };
}

export const handler = Validation.handler(handlerBase, {
  envelope: Envelope.jmesPath("detail"),
  // Schemas are JSON Schema
  inboundSchema: {
    type: "object",
    required: ["name"],
    properties: {
      name: { type: "string" },
    },
  },
  outboundSchema: {
    type: "object",
    required: ["message"],
    properties: {
      message: { type: "string" },
    },
    additionalProperties: false,
  },
});

Ad-hoc validation

import { Logger } from "@aws-lambda-powertools/logger";
import { Validator } from "@aws-lambda-powertools/validation";

const logger = new Logger();

interface Person {
  readonly name: string;
}

const validator = new Validator<Person>({
  schema: {
    type: "object",
    required: ["name"],
    properties: {
      name: { type: "string" },
    },
  },
});

try {
  const person: Person = validator.map(JSON.parse(someInput));
  logger.info(`Person's name is ${person.name}`);
} catch (e) {
  logger.error(`Failure: ${e}`);
}

Survey Results

Obtained by searching GitHub code for NodejsFunction in TypeScript projects. The repositories are from the first twenty results, sorted by "best match." These cases are good enough evidence for me, but perhaps the community can suggest a better way to get this information.

Validation URL
JOI https://github.com/Mrdev1ce/rs-shop-be
Hand-coded https://github.com/jontiefer/space-finder-backend
@softchef/lambda-events https://github.com/taylorr-liu/EX7
Hand-coded https://github.com/ryands17/passwordless-auth
Hand-coded https://github.com/josh-hill-gene/cdk-serverless-react
Hand-coded https://github.com/zakiafada32/swj
Hand-coded https://github.com/martzcodes/blog-cdk-openapi
Hand-coded https://github.com/Shridharbhandar/CDK-Samples
Hand-coded https://github.com/roman-boiko/apigw-workshop
Hand-coded https://github.com/aws-samples/amazon-qldb-product-management
Hand-coded https://github.com/cjbatin/GetStatDashboard
Hand-coded https://github.com/jforge/iac-samples
Hand-coded https://github.com/okaharuna/e-payment
Hand-coded https://github.com/balancer-labs/pools-api
Hand-coded https://github.com/BertoDBQ/space-finder-backend
Hand-coded https://github.com/XiaozhouCui/space-finder-backend
Hand-coded https://github.com/akira393/2021-typescript-ddd
Hand-coded https://github.com/JonathanTurnock/aws-cabiinet
Hand-coded https://github.com/aws-samples/az-fail-away
Hand-coded https://github.com/enricoschaaf/analytics
@misterjoshua misterjoshua changed the title RFC: Event Validation RFC: Validation Jan 24, 2022
@willfarrell
Copy link

Engines:

Existing lambda middleware:

@flochaz
Copy link
Contributor

flochaz commented Jan 27, 2022

Thanks a lot for those inputs ! We will look into it

@ijemmy
Copy link
Contributor

ijemmy commented Jan 27, 2022

@misterjoshua Thanks a lot. This is very nice RFC and rich in details.

We plan to catch up with Python feature so this is in our roadmap. The team is focusing in fixing all outstanding issues on 3 core utilities to have Production Ready version. So it may take a while to implement this. However, I would like to use this chance to discuss the feature API so we have a clear spec, ready for implementation.

This feature is comparable to the Validation utility in Python version. The main difference is that Python has top-level function decorator, but TypeScript doesn't have that. This is the same challenge we had in core utility design(tracer, logger, metrics).

Let's explore the alternatives so we can weight pros & cons:

Validation class

@misterjoshua What do you think of this alternative?

Usage 1: Middy middleware

import { Validation, Envelope, validateSchema } from "@aws-lambda-powertools/validation";


const validation = new Validation({
  envelope: Envelope.jmesPath("detail"), // Optional: only if we want to validate a part of it
  inboundSchema: {...},
  outboundSchema: {...}, //optional
});

// Copied from proposal
//....
async function handlerBase(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
  return {
    message: `Hello ${request.name}`,
  };
}
//...

export const handler = middy(handlerBase)
  .use(validateSchema()
  .use(..); // can chain with Logger's injectContext() or any other utilities

The advantage is that it's easier to chain multiple utility features. In your proposal, if we also want to use injectLambdaContext(logger), we will need to wrap Validation object with another function (or class) like this:

export const handler = Tracer.captureLambdaHandler(Logger.injectContext(
  Validation.handler(handlerBase, {...});
)));

Usage 2: Class decorator

We can follow the same pattern of core utilities.

import { Validation } from `....`;
 
const validation = new Validation({
  envelop: ...;
  inboundSchema: ...;
  outboundSchema: ...;
});

class Lambda implements LambdaInterface {
    // Decorate your handler class method
    @validation.validateHandler()
    public async handler(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
        /* ... */
    }
}

Usage 3: manual

This is where I see no clear winner. Python version have only a validate() function.

The Validator class like in your ad-hoc example looks good to me. Another alternative is function based like in Python

const validationOption = {
  envelop: ...;
  inboundSchema: ...;
  outboundSchema: ...;
};

try {
  const person: Person = validate<Person>(JSON.parse(someInput), validationOption);
  logger.info(`Person's name is ${person.name}`);
} catch (e) {
  logger.error(`Failure: ${e}`);
}

That being said using Validator class also makes a lot of sense to me too. I'm wondering if I miss any pros & cons here.

Other points to consider:

  1. Should we make outboundSchema required parameter?
  2. If inbound validation fails, it fails fast by throwing an Error describing that there is an incorrect format.
    • Should we have an option to control the level of info we disclose here?
  3. If outbound validation fails, returns a 500 error.
    • How do we log the error in this case? (we can use Logger but that means another dependency) Should we provide an optional log function with console.error() as a default?
    • Or we let users handle this themselves with manual option
  4. middy has already had a few Validator middlewares . The only difference I see is JMES support. If we provide an extractor for JMESPath (like in Python) We could reuse existing ones. This makes me concerned if we are reinventing a wheel here. (But the same could be said for all other utilities)

@misterjoshua
Copy link
Contributor Author

misterjoshua commented Jan 27, 2022

Usage 1: Middy middleware

@ijemmy I like the middleware idea - it's familiar to many node devs. I have a few thoughts on the example above:

  • I presume that validateSchema would have a parameter that accepts your Validation instance?
  • Also, handlerBase wants GreetingRequest - would the validateSchema middleware strip the envelope?
  • I wonder if there's an opportunity here to validate that the envelope is right. e.g., to check that a lambda meant to be an Event Bridge Rule Target received Event Bridge events and not SQS, SNS, or API Gateway events.
  • And I wonder if it's possible to provide an Envelope type that allows users to create a multi-purpose lambda handler - one handler that works for any AWS event type that includes payload data. (SNS, SQS, Event Bridge, or Kinesis Streams for example.) Users could then create lambdas that don't need to pay much attention to identifying and unpacking the structure of the envelopes for each payload.
  • Finally, I wonder whether Middy middleware can flat map records from batch event types. If it can, this plays well with the story of creating a multi-purpose lambda function.

What about something like this? (EDIT: I have added some discussion near the bottom of this comment about separating Validation from Envelope as another decorator and middleware to be applied before validation.)

import { Validation, Envelope, validateSchema } from "@aws-lambda-powertools/validation";

// Composable, multi-purpose envelope-stripping example.
const envelope = Envelope.multiPurpose({
  envelopes: [
    // Accepts the given detail type and unwraps `details`
    Envelope.awsEventBridgeEvent({ detailType: 'Detail Type Name' }),
    // Flat maps SQS event `Records[*].body` to parsed json and feeds each
    // through `handlerBase` when the entire event is valid.
    Envelope.awsSqsEvent({ jsonPayload: true, flatMapRecords: true }),
    // Same idea as SQS, but for SNS and `Records[*].Sns.Message`
    Envelope.awsSnsEvent({ jsonPayload: true, flatMapRecords: true }),
  ],
});

const validation = new Validation({
  envelope: envelope, // Replaced multi-purpose envelope example
  inboundSchema: {...},
  // Commented out for the sake of this example:
  // outboundSchema: {...},
});

// Multi-purpose handler - it doesn't need to know how it's getting GreetingRequest, whether it's from
// SNS, SQS, or Event Bridge.
async function handlerBase(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
  return {
    message: `Hello ${request.name}`,
  };
}

export const handler = middy(handlerBase)
  .use(validateSchema(validation)) // This example assumes Middy can flat map SQS/SNS batch records.
  .use(...);

Usage 2: Class decorator

This looks good. I like the decorator syntax. Here's an example of the same multi-purpose handler as above:

import { Validation, Envelope } from "@aws-lambda-powertools/validation";

// Multi-purpose envelope unwrapping example (same as previous example)
const envelope = Envelope.multiPurpose({
  envelopes: [
    Envelope.awsEventBridgeEvent({ detailType: 'Detail Type Name' }),
    Envelope.awsSqsEvent({ jsonPayload: true, flatMapRecords: true }),
    Envelope.awsSnsEvent({ jsonPayload: true, flatMapRecords: true }),
  ],
});

const validation = new Validation({
  envelope: envelope, // Replaced multi-purpose envelope example
  inboundSchema: {...},
  // Commented out for the sake of this example:
  // outboundSchema: {...},
});

class Lambda implements LambdaInterface {
    // Decorate your handler class method
    @validation.validateHandler()
    public async handler(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
        /* ... */
    }
}

Usage 3: manual

This is where I see no clear winner. Python version have only a validate() function.

I agree. Validator.map departs from the "validate function" approach in both the Python and Java libs. To maintain consistency, your syntax looks better. I especially like the idea that the validate function returns typed data from the JSON.parse(). We encounter a need for this type of function when working with data returned from the AWS SDK. (SecretsManager secrets in JSON format and DynamoDB Document Client items come to mind.)

Other points to consider:

1. Should we make `outboundSchema` required parameter?

I think not. For backend lambdas, the output isn't always important. (i.e., Lambdas handling SQS, SNS, or Event Bridge Rule Targets.)

2. If inbound validation fails, it fails fast by throwing an `Error` describing that there is an incorrect format.
   * Should we have an option to control the level of info we disclose here?

Yes, I think so. For API Gateway, I can envision a scenario where I want to create an entirely custom error response with a particular HTTP status code. Perhaps Validator can accept a validationErrorHandler option to run when validation fails. Example:

async function validationErrorHandler(error) {
  return {
    statusCode: 418, // HTTP 418 I'm a teapot
    message: 'My custom message here',
  };
}

const validation = new Validation({
  inboundSchema: {...},
  outboundSchema: {...},
  validationErrorHandler: validationErrorHandler,
});

// Provide `validation` to middleware or use the decorator approach.
3. If outbound validation fails, returns a 500 error.
   
   * How do we log the error in this case? (we can use `Logger` but that means another dependency) Should we provide an optional log function with `console.error()` as a default?

Given that Tracer, Logger, and Metrics already depend on Commons, could we add something like ClassThatLogs) to Commons? If we do, we can optionally accept ClassThatLogs in Validator with a fallback to some default implementation.

const logger = new Logger(...);

const validation = new Validation({
  inboundSchema: {...},
  outboundSchema: {...},
  logger: logger,
});
   * Or we let users handle this themselves with manual option

If we put ClassThatLogs in Commons, the user can provide a custom implementation.

4. `middy` has already had a few Validator middlewares . The only difference I see is JMES support. If we provide an extractor for JMESPath ([like in Python](https://awslabs.github.io/aws-lambda-powertools-python/latest/utilities/jmespath_functions/)) We could reuse existing ones. This makes me concerned if we are reinventing a wheel here. (But the same could be said for all other utilities)

I see value in having the decorator version of the validation even if we don't add a middy middleware due to overlap in their ecosystem... But I don't see how adding a middleware for Middy would add much complexity if we're already adding a decorator version, since the majority of the logic would live in Validator, no?

EDIT: I was just thinking that at a certain point, I'm not sure if the idea of multi-purpose lambdas is just a validation story - it could be two stories: Validation and Extraction. I figure it should be possible to separate Validation and Extraction into two distinct features. Extraction could just as well be its own middleware & decorator, perhaps centred around the concept of Envelope. I imagine that could look like this:

// Composable, multi-purpose envelope-stripping example.
const envelope = Envelope.multiPurpose({
  envelopes: [
    // Accepts the given detail type and unwraps `details`
    Envelope.awsEventBridgeEvent(),
    // Flat maps SQS event `Records[*].body` to parsed json and feeds each
    // through `handlerBase` when the entire event is valid.
    Envelope.awsSqsEvent({ jsonPayload: true, flatMapRecords: true }),
    // Same idea as SQS, but for SNS and `Records[*].Message`
    Envelope.awsSnsEvent({ jsonPayload: true, flatMapRecords: true }),
  ],
});

const validation = new Validation({
  inboundSchema: {...},
  // Commented out for the sake of this example:
  // outboundSchema: {...},
});

// Multi-purpose handler - it doesn't need to know how it's getting GreetingRequest, whether it's from
// SNS, SQS, or Event Bridge.
async function handlerBase(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
  return {
    message: `Hello ${request.name}`,
  };
}

export const handler = middy(handlerBase)
  .use(extractFromEnvelope(envelope)) // This example assumes Middy can flat map SQS/SNS batch records.
  .use(validateSchema(validation))
  .use(...);

Here's use case 2:

// Composable, multi-purpose envelope-stripping example.
const envelope = Envelope.multiPurpose({
  envelopes: [
    // Unwraps `details`
    Envelope.awsEventBridgeEvent(),
    // Flat maps SQS event `Records[*].body` to parsed json and feeds each
    // through `handlerBase` when the entire event is valid.
    Envelope.awsSqsEvent({ jsonPayload: true, flatMapRecords: true }),
    // Same idea as SQS, but for SNS and `Records[*].Message`
    Envelope.awsSnsEvent({ jsonPayload: true, flatMapRecords: true }),
  ],
});

const validation = new Validation({
  inboundSchema: {...},
  // Commented out for the sake of this example:
  // outboundSchema: {...},
});

class Lambda implements LambdaInterface {
    // Decorate your handler class method
    @envelope.extractForHandler()
    @validation.validateHandler()
    public async handler(request: GreetingRequest, context: lambda.Context): Promise<GreetingResponse> {
        /* ... */
    }
}

I'm happy to open another RFC focused on Extraction, if this is something that could work.

@willfarrell
Copy link

Middy takes this approach of separating normalization (envelope/Extraction) and validation. See AWS Event support list, we're just missing API Gateway WebSocket events which will be its own middleware at some point. I haven't heard of anyone requesting the ability to flatMapRecords, but it could be added pretty easily if someone needed it.

If AWS provided the JSON schemas for each event in the documentation, that would be super helpful. I've thought about writing these myself, but i'd just be reverse engineering from the samples and may not be accurate.

@ijemmy
Copy link
Contributor

ijemmy commented Feb 1, 2022

@misterjoshua

I presume that validateSchema would have a parameter that accepts your Validation instance?

That's right.

Also, handlerBase wants GreetingRequest - would the validateSchema middleware strip the envelope?

I'm inclined to have two different middlewares for different tasks.

I wonder if there's an opportunity here to validate that the envelope is right. e.g., to check that a lambda meant to be an Event Bridge Rule Target received Event Bridge events and not SQS, SNS, or API Gateway events.

Is it something similar to this Built-in envelops in Python version?

If yes, this should be included in the spec.

And I wonder if it's possible to provide an Envelope type that allows users to create a multi-purpose lambda handler - one handler that works for any AWS event type that includes payload data. (SNS, SQS, Event Bridge, or Kinesis Streams for example.) Users could then create lambdas that don't need to pay much attention to identifying and unpacking the structure of the envelopes for each payload.

Can you tell me more about your business use cases?

I haven't seen many use cases of consuming the same data from different AWS source.

Finally, I wonder whether Middy middleware can flat map records from batch event types. If it can, this plays well with the story of creating a multi-purpose lambda function.

I think this is out of scope for Validation. I would go with an extra line of _.flatMap(). If you want it in middleware, you can create a custom middle ware with that.

Given that Tracer, Logger, and Metrics already depend on Commons, could we add something like ClassThatLogs) to Commons? If we do, we can optionally accept ClassThatLogs in Validator with a fallback to some default implementation.

That could be a good option. The price we pay is leaking abstraction between modules.

I see value in having the decorator version of the validation even if we don't add a middy middleware due to overlap in their ecosystem... But I don't see how adding a middleware for Middy would add much complexity if we're already adding a decorator version, since the majority of the logic would live in Validator, no?

No, it won't add much complexity.

@ijemmy
Copy link
Contributor

ijemmy commented Feb 1, 2022

Middy takes this approach of separating normalization (envelope/Extraction) and validation. See AWS Event support list, we're just missing API Gateway WebSocket events which will be its own middleware at some point. I haven't heard of anyone requesting the ability to flatMapRecords, but it could be added pretty easily if someone needed it.

If AWS provided the JSON schemas for each event in the documentation, that would be super helpful. I've thought about writing these myself, but i'd just be reverse engineering from the samples and may not be accurate.

Wow, this is pretty good. I'm going to use that in my next project :)

Regarding JSON schemas, let me pass this feedback to the Lambda team.

@dreamorosi dreamorosi added the RFC Technical design documents related to a feature request label Feb 28, 2022
@dreamorosi dreamorosi added enhancement on-hold This item is on-hold and will be revisited in the future labels Feb 28, 2022
@bestickley
Copy link

bestickley commented May 23, 2022

I'd like to add another validation engine to be considered: zod. IMO it has the best TypeScript DX between ajv and joi.

EDIT: When I made the above comment, I was not aware of the parser utility tracked in #1334. Personally, I probably won't use the validation package as the parsing validation does validation and parsing and I'd rather have them all as one.

@dreamorosi dreamorosi added the need-customer-feedback Requires more customers feedback before making or revisiting a decision label Nov 13, 2022
@dreamorosi dreamorosi added discussing The issue needs to be discussed, elaborated, or refined and removed on-hold This item is on-hold and will be revisited in the future labels Jul 27, 2023
@dreamorosi dreamorosi self-assigned this Jul 27, 2023
@dreamorosi
Copy link
Contributor

Hi everyone, as indicated in our roadmap we plan to implement this utility in the coming months.

Over the next few days I'll take some time to go through the existing content of the RFC and consolidate everything.

@dreamorosi dreamorosi added the validation This item relates to the Validation Utility label Jul 27, 2023
@codyfrisch
Copy link

Within this effort I'd like to see a pattern built for creating decorators and not just middleware - if possible.

@dreamorosi
Copy link
Contributor

Hi @codyfrisch, thanks a lot for taking the time to share this detail/request.

We are planning on including decorator usage as part of this utility.

When we released the Idempotency Utility we held back the decorators because we had some open questions around TypeScript 5.x support. However last week we finally transitioned successfully and stabilized the topic, so we are ready to develop new decorators for all the utility that make sense, this one being one of them.

@shdq
Copy link
Contributor

shdq commented Nov 2, 2023

Hi there!

We discussed this RFC with @dreamorosi and how to move it forward, so as the first step I did a little research about JSON validation packages, that could be used as a wrapper dependency for the powertools/validation and I want to share the results.

The first thing that comes to mind is ajv, but let's look at other options.

TLDR

  • My personal favorite is schemasafe, because it's small in size, performant, has zero dependencies, is relatively popular, maintained by a company, and the main contributor is a member json-schema.org organization on GitHub. MIT license.
  • Worth looking at: tdegrunt/jsonschema is small in size, has zero dependencies, 6th place at the top of performance benchmarks, and has a relatively large amount of downloads. MIT license.

I am on the fence about zod, I think it serves a different purpose, It can be used to validate JSON data, but it is not designed specifically for validating JSON schemas. Maybe I'm missing something, but I would like to hear more from somebody who worked with it.

The full comparison table is below.

Package Maintenance Performance benchmarks Weekly Downloads Unpacked Size Dependencies Used by projects Drafts support License Documentation Featured on json-schema.org
ajv Maintained by community, most contributions by one person (member of json-schema org), project sponsored by Mozilla / Microsoft draft7 – top 2, draft6 - top 1, very performant 97m 1.02 MB 4 22.3m 2020-12 2019-09 07 06 04 MIT ajv.js.org
schemasafe Maintained by Exodus, most contributions by one person (member of json-schema org) draft7 top 1, draft6 top 2, very performant, performance page in the docs 1m 139 kB 0 27.7k 2020-12 2019-09 07 06 04 MIT GitHub
json-schema-library Maintained by one person draft7 – top 5, somewhat performant 39k 511 kB 7 885 07 06 04 MIT GitHub
jsonschema Two active maintainers both draft6 and draft7 – top 6, somewhat performant 2.3m 81.8 kB 0 253k versions through draft-07 are fully supported MIT GitHub
@hyperjump/json-schema Developed by one person No benchmarks (project started in 2022) 13k 356 kB 8 284 2020-12 2019-09 07 06 04 MIT GitHub
zod Maintained by community, most contributions by one person, the project has sponsors No benchmarks 4.9m 628 kB 0 643k ??? MIT zod.dev

I also looked at djv, json-schema, is-my-json-valid, and a few others, and decided not to add them in the table, because some of them aren't maintained, outdated, not performant, or serve different purpose.

@bestickley
Copy link

@shdq, I edited my comment above regarding zod. I now (after learning about parsing package) don't think it should be considered for validation.

With that said, I do think the distinction between validation and parsing is a nuanced once that many will not be aware of. It would be valuable to have a callout in the docs for validation that if you're looking for validation+parsing with zod, please see the parsing package.

@dreamorosi
Copy link
Contributor

dreamorosi commented Nov 2, 2023

I'd like to dive a bit deeper into the two top options: ajv & schemasafe.

Package Size

Setup

From the linked benchmarks I wasn't sure about where the "unpacked size" came from, so I decided to test them a more production-like environment and see what's the final size. To do so, I have created a simple Lambda function that: 1/ imports the schema validation dependency, 2/ initializes it, 3/ provides a simple schema, and 4/ performs a validation.

The function is intentionally left as small as possible & without any Powertools utility so that we can assess the final size of the dependency almost in isolation. Below you can find the code of the functions.

Ajv function
import Ajv from "ajv";

const ajv = new Ajv({ allErrors: false });

const schema = {
  type: "object",
  properties: {
    foo: { type: "integer" },
    bar: { type: "string" },
  },
  required: ["foo"],
  additionalProperties: false,
};

export const handler = async (event: any = {}): Promise<any> => {
  const valid = ajv.validate(schema, event);
  if (!valid) {
    return {
      statusCode: 400,
      body: JSON.stringify(ajv.errors),
    };
  }
  return {
    statusCode: 200,
    body: JSON.stringify(event),
  };
};
schemasafe function
import { validator } from "@exodus/schemasafe";

const validate = validator(
  {
    type: "object",
    properties: {
      foo: { type: "integer" },
      bar: { type: "string" },
    },
    required: ["foo"],
    additionalProperties: false,
  },
  {
    includeErrors: false,
  }
);

export const handler = async (event: any = {}): Promise<any> => {
  const valid = validate(event);
  if (!valid) {
    return {
      statusCode: 400,
      body: JSON.stringify(validate.errors),
    };
  }
  return {
    statusCode: 200,
    body: JSON.stringify(event),
  };
};

Additionally, I'm bundling the function using esbuild via the NodejsFunction CDK construct. I'm doing this in a matrix of 4 modes:

  • CJS with no minification, no source map, no tree shaking, just bundling
  • CJS with minification, source map in a separate file, tree shaking, main fields set
  • ESM with no minification, no source map, no tree shaking, just bundling
  • ESM with minification, source map in a separate file, tree shaking, main fields set

In all cases I am generating a metafile so that we can run it through the esbuild analyzer and see what it contains and its final size, plus ESM vs CJS distribution.

Below you can see the code used to deploy/bundle.

CJS as-is
import { Stack, type StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import {
  NodejsFunction,
  OutputFormat,
} from "aws-cdk-lib/aws-lambda-nodejs";
import { Runtime } from "aws-cdk-lib/aws-lambda";

export class JsonScheamBenchStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new NodejsFunction(this, "JsonSchemaBench", {
      runtime: Runtime.NODEJS_18_X,
      entry: "lib/fn/index.ts",
      handler: "handler",
      bundling: {
        format: OutputFormat.CJS,
        metafile: true,
      },
    });
  }
}
CJS optimized
import { Stack, type StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import {
  NodejsFunction,
  OutputFormat,
  SourceMapMode,
} from "aws-cdk-lib/aws-lambda-nodejs";
import { Runtime } from "aws-cdk-lib/aws-lambda";

export class JsonScheamBenchStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new NodejsFunction(this, "JsonSchemaBench", {
      runtime: Runtime.NODEJS_18_X,
      entry: "lib/fn/index.ts",
      handler: "handler",
      bundling: {
        format: OutputFormat.CJS,
        metafile: true,
        minify: true,
        mainFields: ["module", "main"],
        sourceMap: true,
        sourceMapMode: SourceMapMode.EXTERNAL,
        esbuildArgs: {
          "--tree-shaking": "true",
        },
      },
    });
  }
}
ESM as-is
import { Stack, type StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import {
  NodejsFunction,
  OutputFormat,
} from "aws-cdk-lib/aws-lambda-nodejs";
import { Runtime } from "aws-cdk-lib/aws-lambda";

export class JsonScheamBenchStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new NodejsFunction(this, "JsonSchemaBench", {
      runtime: Runtime.NODEJS_18_X,
      entry: "lib/fn/index.ts",
      handler: "handler",
      bundling: {
        format: OutputFormat.ESM,
        metafile: true,
      },
    });
  }
}
ESM optimized
import { Stack, type StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import {
  NodejsFunction,
  OutputFormat,
  SourceMapMode,
} from "aws-cdk-lib/aws-lambda-nodejs";
import { Runtime } from "aws-cdk-lib/aws-lambda";

export class JsonScheamBenchStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new NodejsFunction(this, "JsonSchemaBench", {
      runtime: Runtime.NODEJS_18_X,
      entry: "lib/fn/index.ts",
      handler: "handler",
      bundling: {
        format: OutputFormat.ESM,
        metafile: true,
        minify: true,
        mainFields: ["module", "main"],
        sourceMap: true,
        sourceMapMode: SourceMapMode.EXTERNAL,
        esbuildArgs: {
          "--tree-shaking": "true",
        },
      },
    });
  }
}

Results

From the results below we can observe a few things:

  • Neither ajv nor schemasafe ship ESM distributions, this means they can't be tree-shaken effectively - this is good for the comparison as it levels the playing field but not amazing for Powertools overall
  • schemasafe footprint is consistently ~55% smaller than ajv
Package CJS CJS optimized ESM ESM optimized
Ajv 263.8kb 123.1kb 263.3kb 122.9kb
schemasafe 120.4kb 55.9kb 120.0kb 55.7kb

Below a breakdown of each result, you can get the metafile generated by each test in the details section, paste it into a file, and run it through the analyzer if you want to see an interactive version of the chart.

Ajv

CJS as-is (not optimized)

image

{
  "inputs": {
    "node_modules/ajv/dist/compile/codegen/code.js": {
      "bytes": 4609,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/scope.js": {
      "bytes": 5206,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/index.js": {
      "bytes": 23127,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/util.js": {
      "bytes": 7111,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./codegen/code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/names.js": {
      "bytes": 1113,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/errors.js": {
      "bytes": 5744,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/boolSchema.js": {
      "bytes": 1531,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/rules.js": {
      "bytes": 918,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/applicability.js": {
      "bytes": 853,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/dataType.js": {
      "bytes": 8339,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "../rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/defaults.js": {
      "bytes": 1448,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/code.js": {
      "bytes": 6216,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/keyword.js": {
      "bytes": 5695,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../../vocabularies/code"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/subschema.js": {
      "bytes": 3858,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/fast-deep-equal/index.js": {
      "bytes": 1177,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/json-schema-traverse/index.js": {
      "bytes": 2428,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/resolve.js": {
      "bytes": 4981,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        },
        {
          "path": "node_modules/json-schema-traverse/index.js",
          "kind": "require-call",
          "original": "json-schema-traverse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/index.js": {
      "bytes": 20552,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/boolSchema.js",
          "kind": "require-call",
          "original": "./boolSchema"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/defaults.js",
          "kind": "require-call",
          "original": "./defaults"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/keyword.js",
          "kind": "require-call",
          "original": "./keyword"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/subschema.js",
          "kind": "require-call",
          "original": "./subschema"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "../resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/validation_error.js": {
      "bytes": 337,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/ref_error.js": {
      "bytes": 543,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/index.js": {
      "bytes": 9983,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "../runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./validate"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/data.json": {
      "bytes": 409,
      "imports": []
    },
    "node_modules/uri-js/dist/es5/uri.all.js": {
      "bytes": 57304,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/uri.js": {
      "bytes": 216,
      "imports": [
        {
          "path": "node_modules/uri-js/dist/es5/uri.all.js",
          "kind": "require-call",
          "original": "uri-js"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/core.js": {
      "bytes": 25103,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "./compile/rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./compile/resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./compile/util"
        },
        {
          "path": "node_modules/ajv/dist/refs/data.json",
          "kind": "require-call",
          "original": "./refs/data.json"
        },
        {
          "path": "node_modules/ajv/dist/runtime/uri.js",
          "kind": "require-call",
          "original": "./runtime/uri"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/id.js": {
      "bytes": 267,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/ref.js": {
      "bytes": 5234,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "../../compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/index.js": {
      "bytes": 357,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/id.js",
          "kind": "require-call",
          "original": "./id"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/core/ref.js",
          "kind": "require-call",
          "original": "./ref"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
      "bytes": 1023,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/ucs2length.js": {
      "bytes": 808,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
      "bytes": 1130,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/ucs2length.js",
          "kind": "require-call",
          "original": "../../runtime/ucs2length"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
      "bytes": 905,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
      "bytes": 896,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/required.js": {
      "bytes": 3188,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/equal.js": {
      "bytes": 286,
      "imports": [
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
      "bytes": 3037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "../../compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/const.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/enum.js": {
      "bytes": 1901,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/index.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitNumber.js",
          "kind": "require-call",
          "original": "./limitNumber"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/multipleOf.js",
          "kind": "require-call",
          "original": "./multipleOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitLength.js",
          "kind": "require-call",
          "original": "./limitLength"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/pattern.js",
          "kind": "require-call",
          "original": "./pattern"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitProperties.js",
          "kind": "require-call",
          "original": "./limitProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/required.js",
          "kind": "require-call",
          "original": "./required"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitItems.js",
          "kind": "require-call",
          "original": "./limitItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js",
          "kind": "require-call",
          "original": "./uniqueItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/const.js",
          "kind": "require-call",
          "original": "./const"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/enum.js",
          "kind": "require-call",
          "original": "./enum"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
      "bytes": 1931,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items.js": {
      "bytes": 1993,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
      "bytes": 354,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
      "bytes": 1037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
      "bytes": 3680,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
      "bytes": 3198,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
      "bytes": 1221,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
      "bytes": 4309,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
      "bytes": 2153,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "../../compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
      "bytes": 3236,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/not.js": {
      "bytes": 773,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
      "bytes": 343,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
      "bytes": 2257,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
      "bytes": 756,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/if.js": {
      "bytes": 2438,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
      "bytes": 446,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/index.js": {
      "bytes": 1529,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js",
          "kind": "require-call",
          "original": "./prefixItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items2020.js",
          "kind": "require-call",
          "original": "./items2020"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/contains.js",
          "kind": "require-call",
          "original": "./contains"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/dependencies.js",
          "kind": "require-call",
          "original": "./dependencies"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js",
          "kind": "require-call",
          "original": "./propertyNames"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/properties.js",
          "kind": "require-call",
          "original": "./properties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js",
          "kind": "require-call",
          "original": "./patternProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/not.js",
          "kind": "require-call",
          "original": "./not"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/anyOf.js",
          "kind": "require-call",
          "original": "./anyOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/oneOf.js",
          "kind": "require-call",
          "original": "./oneOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/allOf.js",
          "kind": "require-call",
          "original": "./allOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/if.js",
          "kind": "require-call",
          "original": "./if"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/thenElse.js",
          "kind": "require-call",
          "original": "./thenElse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/format.js": {
      "bytes": 4317,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/index.js": {
      "bytes": 209,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/format/format.js",
          "kind": "require-call",
          "original": "./format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/metadata.js": {
      "bytes": 427,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/draft7.js": {
      "bytes": 557,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/index.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/index.js",
          "kind": "require-call",
          "original": "./validation"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/index.js",
          "kind": "require-call",
          "original": "./applicator"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/format/index.js",
          "kind": "require-call",
          "original": "./format"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/metadata.js",
          "kind": "require-call",
          "original": "./metadata"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
      "bytes": 316,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
      "bytes": 4659,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/types.js",
          "kind": "require-call",
          "original": "../discriminator/types"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
      "bytes": 3811,
      "imports": []
    },
    "node_modules/ajv/dist/ajv.js": {
      "bytes": 2782,
      "imports": [
        {
          "path": "node_modules/ajv/dist/core.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/draft7.js",
          "kind": "require-call",
          "original": "./vocabularies/draft7"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/index.js",
          "kind": "require-call",
          "original": "./vocabularies/discriminator"
        },
        {
          "path": "node_modules/ajv/dist/refs/json-schema-draft-07.json",
          "kind": "require-call",
          "original": "./refs/json-schema-draft-07.json"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        }
      ],
      "format": "cjs"
    },
    "lib/index.ts": {
      "bytes": 526,
      "imports": [
        {
          "path": "node_modules/ajv/dist/ajv.js",
          "kind": "import-statement",
          "original": "ajv"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-0990d7ea4018ad0a411912ef858acd9549ca8be4aee1c21fe73ae824ac9beadd/index.js": {
      "imports": [],
      "exports": [],
      "entryPoint": "lib/index.ts",
      "inputs": {
        "node_modules/ajv/dist/compile/codegen/code.js": {
          "bytesInOutput": 4828
        },
        "node_modules/ajv/dist/compile/codegen/scope.js": {
          "bytesInOutput": 5320
        },
        "node_modules/ajv/dist/compile/codegen/index.js": {
          "bytesInOutput": 23933
        },
        "node_modules/ajv/dist/compile/util.js": {
          "bytesInOutput": 7179
        },
        "node_modules/ajv/dist/compile/names.js": {
          "bytesInOutput": 1233
        },
        "node_modules/ajv/dist/compile/errors.js": {
          "bytesInOutput": 5946
        },
        "node_modules/ajv/dist/compile/validate/boolSchema.js": {
          "bytesInOutput": 1568
        },
        "node_modules/ajv/dist/compile/rules.js": {
          "bytesInOutput": 1028
        },
        "node_modules/ajv/dist/compile/validate/applicability.js": {
          "bytesInOutput": 989
        },
        "node_modules/ajv/dist/compile/validate/dataType.js": {
          "bytesInOutput": 8180
        },
        "node_modules/ajv/dist/compile/validate/defaults.js": {
          "bytesInOutput": 1429
        },
        "node_modules/ajv/dist/vocabularies/code.js": {
          "bytesInOutput": 6236
        },
        "node_modules/ajv/dist/compile/validate/keyword.js": {
          "bytesInOutput": 5744
        },
        "node_modules/ajv/dist/compile/validate/subschema.js": {
          "bytesInOutput": 3742
        },
        "node_modules/fast-deep-equal/index.js": {
          "bytesInOutput": 1413
        },
        "node_modules/json-schema-traverse/index.js": {
          "bytesInOutput": 2843
        },
        "node_modules/ajv/dist/compile/resolve.js": {
          "bytesInOutput": 5082
        },
        "node_modules/ajv/dist/compile/validate/index.js": {
          "bytesInOutput": 20425
        },
        "node_modules/ajv/dist/runtime/validation_error.js": {
          "bytesInOutput": 441
        },
        "node_modules/ajv/dist/compile/ref_error.js": {
          "bytesInOutput": 639
        },
        "node_modules/ajv/dist/compile/index.js": {
          "bytesInOutput": 9098
        },
        "node_modules/ajv/dist/refs/data.json": {
          "bytesInOutput": 563
        },
        "node_modules/uri-js/dist/es5/uri.all.js": {
          "bytesInOutput": 49091
        },
        "node_modules/ajv/dist/runtime/uri.js": {
          "bytesInOutput": 294
        },
        "node_modules/ajv/dist/core.js": {
          "bytesInOutput": 24068
        },
        "node_modules/ajv/dist/vocabularies/core/id.js": {
          "bytesInOutput": 359
        },
        "node_modules/ajv/dist/vocabularies/core/ref.js": {
          "bytesInOutput": 5026
        },
        "node_modules/ajv/dist/vocabularies/core/index.js": {
          "bytesInOutput": 460
        },
        "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
          "bytesInOutput": 1159
        },
        "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
          "bytesInOutput": 1025
        },
        "node_modules/ajv/dist/runtime/ucs2length.js": {
          "bytesInOutput": 703
        },
        "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
          "bytesInOutput": 1212
        },
        "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
          "bytesInOutput": 962
        },
        "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
          "bytesInOutput": 1010
        },
        "node_modules/ajv/dist/vocabularies/validation/required.js": {
          "bytesInOutput": 3129
        },
        "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
          "bytesInOutput": 961
        },
        "node_modules/ajv/dist/runtime/equal.js": {
          "bytesInOutput": 314
        },
        "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
          "bytesInOutput": 2967
        },
        "node_modules/ajv/dist/vocabularies/validation/const.js": {
          "bytesInOutput": 922
        },
        "node_modules/ajv/dist/vocabularies/validation/enum.js": {
          "bytesInOutput": 1882
        },
        "node_modules/ajv/dist/vocabularies/validation/index.js": {
          "bytesInOutput": 1160
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
          "bytesInOutput": 2044
        },
        "node_modules/ajv/dist/vocabularies/applicator/items.js": {
          "bytesInOutput": 2102
        },
        "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
          "bytesInOutput": 464
        },
        "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
          "bytesInOutput": 1133
        },
        "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
          "bytesInOutput": 3571
        },
        "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
          "bytesInOutput": 3375
        },
        "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
          "bytesInOutput": 1281
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
          "bytesInOutput": 4045
        },
        "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
          "bytesInOutput": 2166
        },
        "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
          "bytesInOutput": 2860
        },
        "node_modules/ajv/dist/vocabularies/applicator/not.js": {
          "bytesInOutput": 862
        },
        "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
          "bytesInOutput": 447
        },
        "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
          "bytesInOutput": 1975
        },
        "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
          "bytesInOutput": 810
        },
        "node_modules/ajv/dist/vocabularies/applicator/if.js": {
          "bytesInOutput": 2439
        },
        "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
          "bytesInOutput": 534
        },
        "node_modules/ajv/dist/vocabularies/applicator/index.js": {
          "bytesInOutput": 1614
        },
        "node_modules/ajv/dist/vocabularies/format/format.js": {
          "bytesInOutput": 4056
        },
        "node_modules/ajv/dist/vocabularies/format/index.js": {
          "bytesInOutput": 298
        },
        "node_modules/ajv/dist/vocabularies/metadata.js": {
          "bytesInOutput": 543
        },
        "node_modules/ajv/dist/vocabularies/draft7.js": {
          "bytesInOutput": 651
        },
        "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
          "bytesInOutput": 427
        },
        "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
          "bytesInOutput": 4500
        },
        "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
          "bytesInOutput": 4337
        },
        "node_modules/ajv/dist/ajv.js": {
          "bytesInOutput": 2906
        },
        "lib/index.ts": {
          "bytesInOutput": 639
        }
      },
      "bytes": 270106
    }
  }
}
CJS optimized

image

{
  "inputs": {
    "node_modules/ajv/dist/compile/codegen/code.js": {
      "bytes": 4609,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/scope.js": {
      "bytes": 5206,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/index.js": {
      "bytes": 23127,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/util.js": {
      "bytes": 7111,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./codegen/code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/names.js": {
      "bytes": 1113,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/errors.js": {
      "bytes": 5744,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/boolSchema.js": {
      "bytes": 1531,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/rules.js": {
      "bytes": 918,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/applicability.js": {
      "bytes": 853,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/dataType.js": {
      "bytes": 8339,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "../rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/defaults.js": {
      "bytes": 1448,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/code.js": {
      "bytes": 6216,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/keyword.js": {
      "bytes": 5695,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../../vocabularies/code"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/subschema.js": {
      "bytes": 3858,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/fast-deep-equal/index.js": {
      "bytes": 1177,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/json-schema-traverse/index.js": {
      "bytes": 2428,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/resolve.js": {
      "bytes": 4981,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        },
        {
          "path": "node_modules/json-schema-traverse/index.js",
          "kind": "require-call",
          "original": "json-schema-traverse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/index.js": {
      "bytes": 20552,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/boolSchema.js",
          "kind": "require-call",
          "original": "./boolSchema"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/defaults.js",
          "kind": "require-call",
          "original": "./defaults"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/keyword.js",
          "kind": "require-call",
          "original": "./keyword"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/subschema.js",
          "kind": "require-call",
          "original": "./subschema"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "../resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/validation_error.js": {
      "bytes": 337,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/ref_error.js": {
      "bytes": 543,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/index.js": {
      "bytes": 9983,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "../runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./validate"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/data.json": {
      "bytes": 409,
      "imports": []
    },
    "node_modules/uri-js/dist/es5/uri.all.js": {
      "bytes": 57304,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/uri.js": {
      "bytes": 216,
      "imports": [
        {
          "path": "node_modules/uri-js/dist/es5/uri.all.js",
          "kind": "require-call",
          "original": "uri-js"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/core.js": {
      "bytes": 25103,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "./compile/rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./compile/resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./compile/util"
        },
        {
          "path": "node_modules/ajv/dist/refs/data.json",
          "kind": "require-call",
          "original": "./refs/data.json"
        },
        {
          "path": "node_modules/ajv/dist/runtime/uri.js",
          "kind": "require-call",
          "original": "./runtime/uri"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/id.js": {
      "bytes": 267,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/ref.js": {
      "bytes": 5234,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "../../compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/index.js": {
      "bytes": 357,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/id.js",
          "kind": "require-call",
          "original": "./id"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/core/ref.js",
          "kind": "require-call",
          "original": "./ref"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
      "bytes": 1023,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/ucs2length.js": {
      "bytes": 808,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
      "bytes": 1130,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/ucs2length.js",
          "kind": "require-call",
          "original": "../../runtime/ucs2length"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
      "bytes": 905,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
      "bytes": 896,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/required.js": {
      "bytes": 3188,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/equal.js": {
      "bytes": 286,
      "imports": [
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
      "bytes": 3037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "../../compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/const.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/enum.js": {
      "bytes": 1901,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/index.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitNumber.js",
          "kind": "require-call",
          "original": "./limitNumber"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/multipleOf.js",
          "kind": "require-call",
          "original": "./multipleOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitLength.js",
          "kind": "require-call",
          "original": "./limitLength"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/pattern.js",
          "kind": "require-call",
          "original": "./pattern"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitProperties.js",
          "kind": "require-call",
          "original": "./limitProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/required.js",
          "kind": "require-call",
          "original": "./required"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitItems.js",
          "kind": "require-call",
          "original": "./limitItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js",
          "kind": "require-call",
          "original": "./uniqueItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/const.js",
          "kind": "require-call",
          "original": "./const"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/enum.js",
          "kind": "require-call",
          "original": "./enum"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
      "bytes": 1931,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items.js": {
      "bytes": 1993,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
      "bytes": 354,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
      "bytes": 1037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
      "bytes": 3680,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
      "bytes": 3198,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
      "bytes": 1221,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
      "bytes": 4309,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
      "bytes": 2153,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "../../compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
      "bytes": 3236,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/not.js": {
      "bytes": 773,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
      "bytes": 343,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
      "bytes": 2257,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
      "bytes": 756,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/if.js": {
      "bytes": 2438,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
      "bytes": 446,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/index.js": {
      "bytes": 1529,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js",
          "kind": "require-call",
          "original": "./prefixItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items2020.js",
          "kind": "require-call",
          "original": "./items2020"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/contains.js",
          "kind": "require-call",
          "original": "./contains"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/dependencies.js",
          "kind": "require-call",
          "original": "./dependencies"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js",
          "kind": "require-call",
          "original": "./propertyNames"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/properties.js",
          "kind": "require-call",
          "original": "./properties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js",
          "kind": "require-call",
          "original": "./patternProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/not.js",
          "kind": "require-call",
          "original": "./not"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/anyOf.js",
          "kind": "require-call",
          "original": "./anyOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/oneOf.js",
          "kind": "require-call",
          "original": "./oneOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/allOf.js",
          "kind": "require-call",
          "original": "./allOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/if.js",
          "kind": "require-call",
          "original": "./if"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/thenElse.js",
          "kind": "require-call",
          "original": "./thenElse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/format.js": {
      "bytes": 4317,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/index.js": {
      "bytes": 209,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/format/format.js",
          "kind": "require-call",
          "original": "./format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/metadata.js": {
      "bytes": 427,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/draft7.js": {
      "bytes": 557,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/index.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/index.js",
          "kind": "require-call",
          "original": "./validation"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/index.js",
          "kind": "require-call",
          "original": "./applicator"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/format/index.js",
          "kind": "require-call",
          "original": "./format"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/metadata.js",
          "kind": "require-call",
          "original": "./metadata"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
      "bytes": 316,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
      "bytes": 4659,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/types.js",
          "kind": "require-call",
          "original": "../discriminator/types"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
      "bytes": 3811,
      "imports": []
    },
    "node_modules/ajv/dist/ajv.js": {
      "bytes": 2782,
      "imports": [
        {
          "path": "node_modules/ajv/dist/core.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/draft7.js",
          "kind": "require-call",
          "original": "./vocabularies/draft7"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/index.js",
          "kind": "require-call",
          "original": "./vocabularies/discriminator"
        },
        {
          "path": "node_modules/ajv/dist/refs/json-schema-draft-07.json",
          "kind": "require-call",
          "original": "./refs/json-schema-draft-07.json"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        }
      ],
      "format": "cjs"
    },
    "lib/index.ts": {
      "bytes": 526,
      "imports": [
        {
          "path": "node_modules/ajv/dist/ajv.js",
          "kind": "import-statement",
          "original": "ajv"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-a4cef03ca0990f006ed0f408fa8502aa66ceaf062b5fa86c78880fb7fb32f3e7/index.js.map": {
      "imports": [],
      "exports": [],
      "inputs": {},
      "bytes": 460012
    },
    "cdk.out/bundling-temp-a4cef03ca0990f006ed0f408fa8502aa66ceaf062b5fa86c78880fb7fb32f3e7/index.js": {
      "imports": [],
      "exports": [],
      "entryPoint": "lib/index.ts",
      "inputs": {
        "node_modules/ajv/dist/compile/codegen/code.js": {
          "bytesInOutput": 2551
        },
        "node_modules/ajv/dist/compile/codegen/scope.js": {
          "bytesInOutput": 2600
        },
        "node_modules/ajv/dist/compile/codegen/index.js": {
          "bytesInOutput": 11758
        },
        "node_modules/ajv/dist/compile/util.js": {
          "bytesInOutput": 3574
        },
        "node_modules/ajv/dist/compile/names.js": {
          "bytesInOutput": 629
        },
        "node_modules/ajv/dist/compile/errors.js": {
          "bytesInOutput": 3104
        },
        "node_modules/ajv/dist/compile/validate/boolSchema.js": {
          "bytesInOutput": 672
        },
        "node_modules/ajv/dist/compile/rules.js": {
          "bytesInOutput": 570
        },
        "node_modules/ajv/dist/compile/validate/applicability.js": {
          "bytesInOutput": 480
        },
        "node_modules/ajv/dist/compile/validate/dataType.js": {
          "bytesInOutput": 4120
        },
        "node_modules/ajv/dist/compile/validate/defaults.js": {
          "bytesInOutput": 680
        },
        "node_modules/ajv/dist/vocabularies/code.js": {
          "bytesInOutput": 3106
        },
        "node_modules/ajv/dist/compile/validate/keyword.js": {
          "bytesInOutput": 2961
        },
        "node_modules/ajv/dist/compile/validate/subschema.js": {
          "bytesInOutput": 1978
        },
        "node_modules/fast-deep-equal/index.js": {
          "bytesInOutput": 736
        },
        "node_modules/json-schema-traverse/index.js": {
          "bytesInOutput": 1246
        },
        "node_modules/ajv/dist/compile/resolve.js": {
          "bytesInOutput": 2087
        },
        "node_modules/ajv/dist/compile/validate/index.js": {
          "bytesInOutput": 10181
        },
        "node_modules/ajv/dist/runtime/validation_error.js": {
          "bytesInOutput": 206
        },
        "node_modules/ajv/dist/compile/ref_error.js": {
          "bytesInOutput": 323
        },
        "node_modules/ajv/dist/compile/index.js": {
          "bytesInOutput": 4688
        },
        "node_modules/ajv/dist/refs/data.json": {
          "bytesInOutput": 358
        },
        "node_modules/uri-js/dist/es5/uri.all.js": {
          "bytesInOutput": 18833
        },
        "node_modules/ajv/dist/runtime/uri.js": {
          "bytesInOutput": 155
        },
        "node_modules/ajv/dist/core.js": {
          "bytesInOutput": 12293
        },
        "node_modules/ajv/dist/vocabularies/core/id.js": {
          "bytesInOutput": 195
        },
        "node_modules/ajv/dist/vocabularies/core/ref.js": {
          "bytesInOutput": 2379
        },
        "node_modules/ajv/dist/vocabularies/core/index.js": {
          "bytesInOutput": 213
        },
        "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
          "bytesInOutput": 666
        },
        "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
          "bytesInOutput": 551
        },
        "node_modules/ajv/dist/runtime/ucs2length.js": {
          "bytesInOutput": 301
        },
        "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
          "bytesInOutput": 629
        },
        "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
          "bytesInOutput": 497
        },
        "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
          "bytesInOutput": 549
        },
        "node_modules/ajv/dist/vocabularies/validation/required.js": {
          "bytesInOutput": 1400
        },
        "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
          "bytesInOutput": 510
        },
        "node_modules/ajv/dist/runtime/equal.js": {
          "bytesInOutput": 157
        },
        "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
          "bytesInOutput": 1499
        },
        "node_modules/ajv/dist/vocabularies/validation/const.js": {
          "bytesInOutput": 439
        },
        "node_modules/ajv/dist/vocabularies/validation/enum.js": {
          "bytesInOutput": 921
        },
        "node_modules/ajv/dist/vocabularies/validation/index.js": {
          "bytesInOutput": 381
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
          "bytesInOutput": 1090
        },
        "node_modules/ajv/dist/vocabularies/applicator/items.js": {
          "bytesInOutput": 1075
        },
        "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
          "bytesInOutput": 227
        },
        "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
          "bytesInOutput": 530
        },
        "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
          "bytesInOutput": 1734
        },
        "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
          "bytesInOutput": 1565
        },
        "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
          "bytesInOutput": 630
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
          "bytesInOutput": 1741
        },
        "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
          "bytesInOutput": 992
        },
        "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
          "bytesInOutput": 1168
        },
        "node_modules/ajv/dist/vocabularies/applicator/not.js": {
          "bytesInOutput": 435
        },
        "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
          "bytesInOutput": 229
        },
        "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
          "bytesInOutput": 912
        },
        "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
          "bytesInOutput": 407
        },
        "node_modules/ajv/dist/vocabularies/applicator/if.js": {
          "bytesInOutput": 1105
        },
        "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
          "bytesInOutput": 278
        },
        "node_modules/ajv/dist/vocabularies/applicator/index.js": {
          "bytesInOutput": 462
        },
        "node_modules/ajv/dist/vocabularies/format/format.js": {
          "bytesInOutput": 1932
        },
        "node_modules/ajv/dist/vocabularies/format/index.js": {
          "bytesInOutput": 121
        },
        "node_modules/ajv/dist/vocabularies/metadata.js": {
          "bytesInOutput": 308
        },
        "node_modules/ajv/dist/vocabularies/draft7.js": {
          "bytesInOutput": 235
        },
        "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
          "bytesInOutput": 192
        },
        "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
          "bytesInOutput": 2211
        },
        "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
          "bytesInOutput": 2481
        },
        "node_modules/ajv/dist/ajv.js": {
          "bytesInOutput": 1638
        },
        "lib/index.ts": {
          "bytesInOutput": 342
        }
      },
      "bytes": 126058
    }
  }
}
ESM as-is (not optimized)

image

{
  "inputs": {
    "node_modules/ajv/dist/compile/codegen/code.js": {
      "bytes": 4609,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/scope.js": {
      "bytes": 5206,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/index.js": {
      "bytes": 23127,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/util.js": {
      "bytes": 7111,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./codegen/code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/names.js": {
      "bytes": 1113,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/errors.js": {
      "bytes": 5744,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/boolSchema.js": {
      "bytes": 1531,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/rules.js": {
      "bytes": 918,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/applicability.js": {
      "bytes": 853,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/dataType.js": {
      "bytes": 8339,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "../rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/defaults.js": {
      "bytes": 1448,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/code.js": {
      "bytes": 6216,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/keyword.js": {
      "bytes": 5695,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../../vocabularies/code"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/subschema.js": {
      "bytes": 3858,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/fast-deep-equal/index.js": {
      "bytes": 1177,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/json-schema-traverse/index.js": {
      "bytes": 2428,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/resolve.js": {
      "bytes": 4981,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        },
        {
          "path": "node_modules/json-schema-traverse/index.js",
          "kind": "require-call",
          "original": "json-schema-traverse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/index.js": {
      "bytes": 20552,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/boolSchema.js",
          "kind": "require-call",
          "original": "./boolSchema"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/defaults.js",
          "kind": "require-call",
          "original": "./defaults"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/keyword.js",
          "kind": "require-call",
          "original": "./keyword"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/subschema.js",
          "kind": "require-call",
          "original": "./subschema"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "../resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/validation_error.js": {
      "bytes": 337,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/ref_error.js": {
      "bytes": 543,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/index.js": {
      "bytes": 9983,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "../runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./validate"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/data.json": {
      "bytes": 409,
      "imports": []
    },
    "node_modules/uri-js/dist/es5/uri.all.js": {
      "bytes": 57304,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/uri.js": {
      "bytes": 216,
      "imports": [
        {
          "path": "node_modules/uri-js/dist/es5/uri.all.js",
          "kind": "require-call",
          "original": "uri-js"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/core.js": {
      "bytes": 25103,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "./compile/rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./compile/resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./compile/util"
        },
        {
          "path": "node_modules/ajv/dist/refs/data.json",
          "kind": "require-call",
          "original": "./refs/data.json"
        },
        {
          "path": "node_modules/ajv/dist/runtime/uri.js",
          "kind": "require-call",
          "original": "./runtime/uri"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/id.js": {
      "bytes": 267,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/ref.js": {
      "bytes": 5234,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "../../compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/index.js": {
      "bytes": 357,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/id.js",
          "kind": "require-call",
          "original": "./id"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/core/ref.js",
          "kind": "require-call",
          "original": "./ref"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
      "bytes": 1023,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/ucs2length.js": {
      "bytes": 808,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
      "bytes": 1130,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/ucs2length.js",
          "kind": "require-call",
          "original": "../../runtime/ucs2length"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
      "bytes": 905,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
      "bytes": 896,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/required.js": {
      "bytes": 3188,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/equal.js": {
      "bytes": 286,
      "imports": [
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
      "bytes": 3037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "../../compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/const.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/enum.js": {
      "bytes": 1901,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/index.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitNumber.js",
          "kind": "require-call",
          "original": "./limitNumber"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/multipleOf.js",
          "kind": "require-call",
          "original": "./multipleOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitLength.js",
          "kind": "require-call",
          "original": "./limitLength"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/pattern.js",
          "kind": "require-call",
          "original": "./pattern"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitProperties.js",
          "kind": "require-call",
          "original": "./limitProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/required.js",
          "kind": "require-call",
          "original": "./required"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitItems.js",
          "kind": "require-call",
          "original": "./limitItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js",
          "kind": "require-call",
          "original": "./uniqueItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/const.js",
          "kind": "require-call",
          "original": "./const"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/enum.js",
          "kind": "require-call",
          "original": "./enum"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
      "bytes": 1931,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items.js": {
      "bytes": 1993,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
      "bytes": 354,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
      "bytes": 1037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
      "bytes": 3680,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
      "bytes": 3198,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
      "bytes": 1221,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
      "bytes": 4309,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
      "bytes": 2153,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "../../compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
      "bytes": 3236,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/not.js": {
      "bytes": 773,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
      "bytes": 343,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
      "bytes": 2257,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
      "bytes": 756,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/if.js": {
      "bytes": 2438,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
      "bytes": 446,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/index.js": {
      "bytes": 1529,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js",
          "kind": "require-call",
          "original": "./prefixItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items2020.js",
          "kind": "require-call",
          "original": "./items2020"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/contains.js",
          "kind": "require-call",
          "original": "./contains"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/dependencies.js",
          "kind": "require-call",
          "original": "./dependencies"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js",
          "kind": "require-call",
          "original": "./propertyNames"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/properties.js",
          "kind": "require-call",
          "original": "./properties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js",
          "kind": "require-call",
          "original": "./patternProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/not.js",
          "kind": "require-call",
          "original": "./not"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/anyOf.js",
          "kind": "require-call",
          "original": "./anyOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/oneOf.js",
          "kind": "require-call",
          "original": "./oneOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/allOf.js",
          "kind": "require-call",
          "original": "./allOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/if.js",
          "kind": "require-call",
          "original": "./if"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/thenElse.js",
          "kind": "require-call",
          "original": "./thenElse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/format.js": {
      "bytes": 4317,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/index.js": {
      "bytes": 209,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/format/format.js",
          "kind": "require-call",
          "original": "./format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/metadata.js": {
      "bytes": 427,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/draft7.js": {
      "bytes": 557,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/index.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/index.js",
          "kind": "require-call",
          "original": "./validation"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/index.js",
          "kind": "require-call",
          "original": "./applicator"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/format/index.js",
          "kind": "require-call",
          "original": "./format"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/metadata.js",
          "kind": "require-call",
          "original": "./metadata"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
      "bytes": 316,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
      "bytes": 4659,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/types.js",
          "kind": "require-call",
          "original": "../discriminator/types"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
      "bytes": 3811,
      "imports": []
    },
    "node_modules/ajv/dist/ajv.js": {
      "bytes": 2782,
      "imports": [
        {
          "path": "node_modules/ajv/dist/core.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/draft7.js",
          "kind": "require-call",
          "original": "./vocabularies/draft7"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/index.js",
          "kind": "require-call",
          "original": "./vocabularies/discriminator"
        },
        {
          "path": "node_modules/ajv/dist/refs/json-schema-draft-07.json",
          "kind": "require-call",
          "original": "./refs/json-schema-draft-07.json"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        }
      ],
      "format": "cjs"
    },
    "lib/index.ts": {
      "bytes": 526,
      "imports": [
        {
          "path": "node_modules/ajv/dist/ajv.js",
          "kind": "import-statement",
          "original": "ajv"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-b2d2ab9ee495e0f83bf18dd31ab7a011018f75869b059d5c59af67db0b35c2db/index.mjs": {
      "imports": [],
      "exports": [
        "handler"
      ],
      "entryPoint": "lib/index.ts",
      "inputs": {
        "node_modules/ajv/dist/compile/codegen/code.js": {
          "bytesInOutput": 4828
        },
        "node_modules/ajv/dist/compile/codegen/scope.js": {
          "bytesInOutput": 5320
        },
        "node_modules/ajv/dist/compile/codegen/index.js": {
          "bytesInOutput": 23933
        },
        "node_modules/ajv/dist/compile/util.js": {
          "bytesInOutput": 7179
        },
        "node_modules/ajv/dist/compile/names.js": {
          "bytesInOutput": 1233
        },
        "node_modules/ajv/dist/compile/errors.js": {
          "bytesInOutput": 5946
        },
        "node_modules/ajv/dist/compile/validate/boolSchema.js": {
          "bytesInOutput": 1568
        },
        "node_modules/ajv/dist/compile/rules.js": {
          "bytesInOutput": 1028
        },
        "node_modules/ajv/dist/compile/validate/applicability.js": {
          "bytesInOutput": 989
        },
        "node_modules/ajv/dist/compile/validate/dataType.js": {
          "bytesInOutput": 8180
        },
        "node_modules/ajv/dist/compile/validate/defaults.js": {
          "bytesInOutput": 1429
        },
        "node_modules/ajv/dist/vocabularies/code.js": {
          "bytesInOutput": 6236
        },
        "node_modules/ajv/dist/compile/validate/keyword.js": {
          "bytesInOutput": 5744
        },
        "node_modules/ajv/dist/compile/validate/subschema.js": {
          "bytesInOutput": 3742
        },
        "node_modules/fast-deep-equal/index.js": {
          "bytesInOutput": 1411
        },
        "node_modules/json-schema-traverse/index.js": {
          "bytesInOutput": 2841
        },
        "node_modules/ajv/dist/compile/resolve.js": {
          "bytesInOutput": 5082
        },
        "node_modules/ajv/dist/compile/validate/index.js": {
          "bytesInOutput": 20425
        },
        "node_modules/ajv/dist/runtime/validation_error.js": {
          "bytesInOutput": 441
        },
        "node_modules/ajv/dist/compile/ref_error.js": {
          "bytesInOutput": 639
        },
        "node_modules/ajv/dist/compile/index.js": {
          "bytesInOutput": 9098
        },
        "node_modules/ajv/dist/refs/data.json": {
          "bytesInOutput": 561
        },
        "node_modules/uri-js/dist/es5/uri.all.js": {
          "bytesInOutput": 49089
        },
        "node_modules/ajv/dist/runtime/uri.js": {
          "bytesInOutput": 294
        },
        "node_modules/ajv/dist/core.js": {
          "bytesInOutput": 24068
        },
        "node_modules/ajv/dist/vocabularies/core/id.js": {
          "bytesInOutput": 359
        },
        "node_modules/ajv/dist/vocabularies/core/ref.js": {
          "bytesInOutput": 5026
        },
        "node_modules/ajv/dist/vocabularies/core/index.js": {
          "bytesInOutput": 460
        },
        "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
          "bytesInOutput": 1159
        },
        "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
          "bytesInOutput": 1025
        },
        "node_modules/ajv/dist/runtime/ucs2length.js": {
          "bytesInOutput": 703
        },
        "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
          "bytesInOutput": 1212
        },
        "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
          "bytesInOutput": 962
        },
        "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
          "bytesInOutput": 1010
        },
        "node_modules/ajv/dist/vocabularies/validation/required.js": {
          "bytesInOutput": 3129
        },
        "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
          "bytesInOutput": 961
        },
        "node_modules/ajv/dist/runtime/equal.js": {
          "bytesInOutput": 314
        },
        "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
          "bytesInOutput": 2967
        },
        "node_modules/ajv/dist/vocabularies/validation/const.js": {
          "bytesInOutput": 922
        },
        "node_modules/ajv/dist/vocabularies/validation/enum.js": {
          "bytesInOutput": 1882
        },
        "node_modules/ajv/dist/vocabularies/validation/index.js": {
          "bytesInOutput": 1160
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
          "bytesInOutput": 2044
        },
        "node_modules/ajv/dist/vocabularies/applicator/items.js": {
          "bytesInOutput": 2102
        },
        "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
          "bytesInOutput": 464
        },
        "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
          "bytesInOutput": 1133
        },
        "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
          "bytesInOutput": 3571
        },
        "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
          "bytesInOutput": 3375
        },
        "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
          "bytesInOutput": 1281
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
          "bytesInOutput": 4045
        },
        "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
          "bytesInOutput": 2166
        },
        "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
          "bytesInOutput": 2860
        },
        "node_modules/ajv/dist/vocabularies/applicator/not.js": {
          "bytesInOutput": 862
        },
        "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
          "bytesInOutput": 447
        },
        "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
          "bytesInOutput": 1975
        },
        "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
          "bytesInOutput": 810
        },
        "node_modules/ajv/dist/vocabularies/applicator/if.js": {
          "bytesInOutput": 2439
        },
        "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
          "bytesInOutput": 534
        },
        "node_modules/ajv/dist/vocabularies/applicator/index.js": {
          "bytesInOutput": 1614
        },
        "node_modules/ajv/dist/vocabularies/format/format.js": {
          "bytesInOutput": 4056
        },
        "node_modules/ajv/dist/vocabularies/format/index.js": {
          "bytesInOutput": 298
        },
        "node_modules/ajv/dist/vocabularies/metadata.js": {
          "bytesInOutput": 543
        },
        "node_modules/ajv/dist/vocabularies/draft7.js": {
          "bytesInOutput": 651
        },
        "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
          "bytesInOutput": 427
        },
        "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
          "bytesInOutput": 4500
        },
        "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
          "bytesInOutput": 4335
        },
        "node_modules/ajv/dist/ajv.js": {
          "bytesInOutput": 2904
        },
        "lib/index.ts": {
          "bytesInOutput": 520
        }
      },
      "bytes": 269662
    }
  }
}
ESM optimized

image

{
  "inputs": {
    "node_modules/ajv/dist/compile/codegen/code.js": {
      "bytes": 4609,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/scope.js": {
      "bytes": 5206,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/codegen/index.js": {
      "bytes": 23127,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/scope.js",
          "kind": "require-call",
          "original": "./scope"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/util.js": {
      "bytes": 7111,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/code.js",
          "kind": "require-call",
          "original": "./codegen/code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/names.js": {
      "bytes": 1113,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/errors.js": {
      "bytes": 5744,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/boolSchema.js": {
      "bytes": 1531,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/rules.js": {
      "bytes": 918,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/applicability.js": {
      "bytes": 853,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/dataType.js": {
      "bytes": 8339,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "../rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/defaults.js": {
      "bytes": 1448,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/code.js": {
      "bytes": 6216,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/keyword.js": {
      "bytes": 5695,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../../vocabularies/code"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/subschema.js": {
      "bytes": 3858,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/fast-deep-equal/index.js": {
      "bytes": 1177,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/json-schema-traverse/index.js": {
      "bytes": 2428,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/resolve.js": {
      "bytes": 4981,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        },
        {
          "path": "node_modules/json-schema-traverse/index.js",
          "kind": "require-call",
          "original": "json-schema-traverse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/validate/index.js": {
      "bytes": 20552,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/boolSchema.js",
          "kind": "require-call",
          "original": "./boolSchema"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/applicability.js",
          "kind": "require-call",
          "original": "./applicability"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/defaults.js",
          "kind": "require-call",
          "original": "./defaults"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/keyword.js",
          "kind": "require-call",
          "original": "./keyword"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/subschema.js",
          "kind": "require-call",
          "original": "./subschema"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "../resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../util"
        },
        {
          "path": "node_modules/ajv/dist/compile/errors.js",
          "kind": "require-call",
          "original": "../errors"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/validation_error.js": {
      "bytes": 337,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/ref_error.js": {
      "bytes": 543,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/compile/index.js": {
      "bytes": 9983,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "../runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "./names"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./util"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./validate"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/data.json": {
      "bytes": 409,
      "imports": []
    },
    "node_modules/uri-js/dist/es5/uri.all.js": {
      "bytes": 57304,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/uri.js": {
      "bytes": 216,
      "imports": [
        {
          "path": "node_modules/uri-js/dist/es5/uri.all.js",
          "kind": "require-call",
          "original": "uri-js"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/core.js": {
      "bytes": 25103,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/rules.js",
          "kind": "require-call",
          "original": "./compile/rules"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/resolve.js",
          "kind": "require-call",
          "original": "./compile/resolve"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "./compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "./compile/util"
        },
        {
          "path": "node_modules/ajv/dist/refs/data.json",
          "kind": "require-call",
          "original": "./refs/data.json"
        },
        {
          "path": "node_modules/ajv/dist/runtime/uri.js",
          "kind": "require-call",
          "original": "./runtime/uri"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/id.js": {
      "bytes": 267,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/ref.js": {
      "bytes": 5234,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "../../compile/ref_error"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/core/index.js": {
      "bytes": 357,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/id.js",
          "kind": "require-call",
          "original": "./id"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/core/ref.js",
          "kind": "require-call",
          "original": "./ref"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
      "bytes": 1023,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/ucs2length.js": {
      "bytes": 808,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
      "bytes": 1130,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/ucs2length.js",
          "kind": "require-call",
          "original": "../../runtime/ucs2length"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
      "bytes": 905,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
      "bytes": 896,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/required.js": {
      "bytes": 3188,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/runtime/equal.js": {
      "bytes": 286,
      "imports": [
        {
          "path": "node_modules/fast-deep-equal/index.js",
          "kind": "require-call",
          "original": "fast-deep-equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
      "bytes": 3037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/dataType.js",
          "kind": "require-call",
          "original": "../../compile/validate/dataType"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/const.js": {
      "bytes": 852,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/enum.js": {
      "bytes": 1901,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/runtime/equal.js",
          "kind": "require-call",
          "original": "../../runtime/equal"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/validation/index.js": {
      "bytes": 1036,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitNumber.js",
          "kind": "require-call",
          "original": "./limitNumber"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/multipleOf.js",
          "kind": "require-call",
          "original": "./multipleOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitLength.js",
          "kind": "require-call",
          "original": "./limitLength"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/pattern.js",
          "kind": "require-call",
          "original": "./pattern"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitProperties.js",
          "kind": "require-call",
          "original": "./limitProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/required.js",
          "kind": "require-call",
          "original": "./required"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/limitItems.js",
          "kind": "require-call",
          "original": "./limitItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js",
          "kind": "require-call",
          "original": "./uniqueItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/const.js",
          "kind": "require-call",
          "original": "./const"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/enum.js",
          "kind": "require-call",
          "original": "./enum"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
      "bytes": 1931,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items.js": {
      "bytes": 1993,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
      "bytes": 354,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
      "bytes": 1037,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
      "bytes": 3680,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
      "bytes": 3198,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
      "bytes": 1221,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
      "bytes": 4309,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/names.js",
          "kind": "require-call",
          "original": "../../compile/names"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
      "bytes": 2153,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "../../compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
      "bytes": 3236,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/not.js": {
      "bytes": 773,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
      "bytes": 343,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/code.js",
          "kind": "require-call",
          "original": "../code"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
      "bytes": 2257,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
      "bytes": 756,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/if.js": {
      "bytes": 2438,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
      "bytes": 446,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/applicator/index.js": {
      "bytes": 1529,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js",
          "kind": "require-call",
          "original": "./additionalItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js",
          "kind": "require-call",
          "original": "./prefixItems"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items.js",
          "kind": "require-call",
          "original": "./items"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/items2020.js",
          "kind": "require-call",
          "original": "./items2020"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/contains.js",
          "kind": "require-call",
          "original": "./contains"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/dependencies.js",
          "kind": "require-call",
          "original": "./dependencies"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js",
          "kind": "require-call",
          "original": "./propertyNames"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js",
          "kind": "require-call",
          "original": "./additionalProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/properties.js",
          "kind": "require-call",
          "original": "./properties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js",
          "kind": "require-call",
          "original": "./patternProperties"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/not.js",
          "kind": "require-call",
          "original": "./not"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/anyOf.js",
          "kind": "require-call",
          "original": "./anyOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/oneOf.js",
          "kind": "require-call",
          "original": "./oneOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/allOf.js",
          "kind": "require-call",
          "original": "./allOf"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/if.js",
          "kind": "require-call",
          "original": "./if"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/thenElse.js",
          "kind": "require-call",
          "original": "./thenElse"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/format.js": {
      "bytes": 4317,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/format/index.js": {
      "bytes": 209,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/format/format.js",
          "kind": "require-call",
          "original": "./format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/metadata.js": {
      "bytes": 427,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/draft7.js": {
      "bytes": 557,
      "imports": [
        {
          "path": "node_modules/ajv/dist/vocabularies/core/index.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/validation/index.js",
          "kind": "require-call",
          "original": "./validation"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/applicator/index.js",
          "kind": "require-call",
          "original": "./applicator"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/format/index.js",
          "kind": "require-call",
          "original": "./format"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/metadata.js",
          "kind": "require-call",
          "original": "./metadata"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
      "bytes": 316,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
      "bytes": 4659,
      "imports": [
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "../../compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/types.js",
          "kind": "require-call",
          "original": "../discriminator/types"
        },
        {
          "path": "node_modules/ajv/dist/compile/index.js",
          "kind": "require-call",
          "original": "../../compile"
        },
        {
          "path": "node_modules/ajv/dist/compile/util.js",
          "kind": "require-call",
          "original": "../../compile/util"
        }
      ],
      "format": "cjs"
    },
    "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
      "bytes": 3811,
      "imports": []
    },
    "node_modules/ajv/dist/ajv.js": {
      "bytes": 2782,
      "imports": [
        {
          "path": "node_modules/ajv/dist/core.js",
          "kind": "require-call",
          "original": "./core"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/draft7.js",
          "kind": "require-call",
          "original": "./vocabularies/draft7"
        },
        {
          "path": "node_modules/ajv/dist/vocabularies/discriminator/index.js",
          "kind": "require-call",
          "original": "./vocabularies/discriminator"
        },
        {
          "path": "node_modules/ajv/dist/refs/json-schema-draft-07.json",
          "kind": "require-call",
          "original": "./refs/json-schema-draft-07.json"
        },
        {
          "path": "node_modules/ajv/dist/compile/validate/index.js",
          "kind": "require-call",
          "original": "./compile/validate"
        },
        {
          "path": "node_modules/ajv/dist/compile/codegen/index.js",
          "kind": "require-call",
          "original": "./compile/codegen"
        },
        {
          "path": "node_modules/ajv/dist/runtime/validation_error.js",
          "kind": "require-call",
          "original": "./runtime/validation_error"
        },
        {
          "path": "node_modules/ajv/dist/compile/ref_error.js",
          "kind": "require-call",
          "original": "./compile/ref_error"
        }
      ],
      "format": "cjs"
    },
    "lib/index.ts": {
      "bytes": 526,
      "imports": [
        {
          "path": "node_modules/ajv/dist/ajv.js",
          "kind": "import-statement",
          "original": "ajv"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-dbfbd9bf24692f110039c812220a486263a3194ae91aae9abe6014d0f705ed0f/index.mjs.map": {
      "imports": [],
      "exports": [],
      "inputs": {},
      "bytes": 459913
    },
    "cdk.out/bundling-temp-dbfbd9bf24692f110039c812220a486263a3194ae91aae9abe6014d0f705ed0f/index.mjs": {
      "imports": [],
      "exports": [
        "handler"
      ],
      "entryPoint": "lib/index.ts",
      "inputs": {
        "node_modules/ajv/dist/compile/codegen/code.js": {
          "bytesInOutput": 2551
        },
        "node_modules/ajv/dist/compile/codegen/scope.js": {
          "bytesInOutput": 2600
        },
        "node_modules/ajv/dist/compile/codegen/index.js": {
          "bytesInOutput": 11758
        },
        "node_modules/ajv/dist/compile/util.js": {
          "bytesInOutput": 3574
        },
        "node_modules/ajv/dist/compile/names.js": {
          "bytesInOutput": 629
        },
        "node_modules/ajv/dist/compile/errors.js": {
          "bytesInOutput": 3104
        },
        "node_modules/ajv/dist/compile/validate/boolSchema.js": {
          "bytesInOutput": 672
        },
        "node_modules/ajv/dist/compile/rules.js": {
          "bytesInOutput": 570
        },
        "node_modules/ajv/dist/compile/validate/applicability.js": {
          "bytesInOutput": 480
        },
        "node_modules/ajv/dist/compile/validate/dataType.js": {
          "bytesInOutput": 4120
        },
        "node_modules/ajv/dist/compile/validate/defaults.js": {
          "bytesInOutput": 680
        },
        "node_modules/ajv/dist/vocabularies/code.js": {
          "bytesInOutput": 3106
        },
        "node_modules/ajv/dist/compile/validate/keyword.js": {
          "bytesInOutput": 2961
        },
        "node_modules/ajv/dist/compile/validate/subschema.js": {
          "bytesInOutput": 1978
        },
        "node_modules/fast-deep-equal/index.js": {
          "bytesInOutput": 736
        },
        "node_modules/json-schema-traverse/index.js": {
          "bytesInOutput": 1246
        },
        "node_modules/ajv/dist/compile/resolve.js": {
          "bytesInOutput": 2087
        },
        "node_modules/ajv/dist/compile/validate/index.js": {
          "bytesInOutput": 10181
        },
        "node_modules/ajv/dist/runtime/validation_error.js": {
          "bytesInOutput": 206
        },
        "node_modules/ajv/dist/compile/ref_error.js": {
          "bytesInOutput": 323
        },
        "node_modules/ajv/dist/compile/index.js": {
          "bytesInOutput": 4688
        },
        "node_modules/ajv/dist/refs/data.json": {
          "bytesInOutput": 358
        },
        "node_modules/uri-js/dist/es5/uri.all.js": {
          "bytesInOutput": 18833
        },
        "node_modules/ajv/dist/runtime/uri.js": {
          "bytesInOutput": 155
        },
        "node_modules/ajv/dist/core.js": {
          "bytesInOutput": 12293
        },
        "node_modules/ajv/dist/vocabularies/core/id.js": {
          "bytesInOutput": 195
        },
        "node_modules/ajv/dist/vocabularies/core/ref.js": {
          "bytesInOutput": 2379
        },
        "node_modules/ajv/dist/vocabularies/core/index.js": {
          "bytesInOutput": 213
        },
        "node_modules/ajv/dist/vocabularies/validation/limitNumber.js": {
          "bytesInOutput": 666
        },
        "node_modules/ajv/dist/vocabularies/validation/multipleOf.js": {
          "bytesInOutput": 551
        },
        "node_modules/ajv/dist/runtime/ucs2length.js": {
          "bytesInOutput": 301
        },
        "node_modules/ajv/dist/vocabularies/validation/limitLength.js": {
          "bytesInOutput": 629
        },
        "node_modules/ajv/dist/vocabularies/validation/pattern.js": {
          "bytesInOutput": 497
        },
        "node_modules/ajv/dist/vocabularies/validation/limitProperties.js": {
          "bytesInOutput": 549
        },
        "node_modules/ajv/dist/vocabularies/validation/required.js": {
          "bytesInOutput": 1400
        },
        "node_modules/ajv/dist/vocabularies/validation/limitItems.js": {
          "bytesInOutput": 510
        },
        "node_modules/ajv/dist/runtime/equal.js": {
          "bytesInOutput": 157
        },
        "node_modules/ajv/dist/vocabularies/validation/uniqueItems.js": {
          "bytesInOutput": 1499
        },
        "node_modules/ajv/dist/vocabularies/validation/const.js": {
          "bytesInOutput": 439
        },
        "node_modules/ajv/dist/vocabularies/validation/enum.js": {
          "bytesInOutput": 921
        },
        "node_modules/ajv/dist/vocabularies/validation/index.js": {
          "bytesInOutput": 381
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalItems.js": {
          "bytesInOutput": 1090
        },
        "node_modules/ajv/dist/vocabularies/applicator/items.js": {
          "bytesInOutput": 1075
        },
        "node_modules/ajv/dist/vocabularies/applicator/prefixItems.js": {
          "bytesInOutput": 227
        },
        "node_modules/ajv/dist/vocabularies/applicator/items2020.js": {
          "bytesInOutput": 530
        },
        "node_modules/ajv/dist/vocabularies/applicator/contains.js": {
          "bytesInOutput": 1734
        },
        "node_modules/ajv/dist/vocabularies/applicator/dependencies.js": {
          "bytesInOutput": 1565
        },
        "node_modules/ajv/dist/vocabularies/applicator/propertyNames.js": {
          "bytesInOutput": 630
        },
        "node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js": {
          "bytesInOutput": 1741
        },
        "node_modules/ajv/dist/vocabularies/applicator/properties.js": {
          "bytesInOutput": 992
        },
        "node_modules/ajv/dist/vocabularies/applicator/patternProperties.js": {
          "bytesInOutput": 1168
        },
        "node_modules/ajv/dist/vocabularies/applicator/not.js": {
          "bytesInOutput": 435
        },
        "node_modules/ajv/dist/vocabularies/applicator/anyOf.js": {
          "bytesInOutput": 229
        },
        "node_modules/ajv/dist/vocabularies/applicator/oneOf.js": {
          "bytesInOutput": 912
        },
        "node_modules/ajv/dist/vocabularies/applicator/allOf.js": {
          "bytesInOutput": 407
        },
        "node_modules/ajv/dist/vocabularies/applicator/if.js": {
          "bytesInOutput": 1105
        },
        "node_modules/ajv/dist/vocabularies/applicator/thenElse.js": {
          "bytesInOutput": 278
        },
        "node_modules/ajv/dist/vocabularies/applicator/index.js": {
          "bytesInOutput": 462
        },
        "node_modules/ajv/dist/vocabularies/format/format.js": {
          "bytesInOutput": 1932
        },
        "node_modules/ajv/dist/vocabularies/format/index.js": {
          "bytesInOutput": 121
        },
        "node_modules/ajv/dist/vocabularies/metadata.js": {
          "bytesInOutput": 308
        },
        "node_modules/ajv/dist/vocabularies/draft7.js": {
          "bytesInOutput": 235
        },
        "node_modules/ajv/dist/vocabularies/discriminator/types.js": {
          "bytesInOutput": 192
        },
        "node_modules/ajv/dist/vocabularies/discriminator/index.js": {
          "bytesInOutput": 2211
        },
        "node_modules/ajv/dist/refs/json-schema-draft-07.json": {
          "bytesInOutput": 2481
        },
        "node_modules/ajv/dist/ajv.js": {
          "bytesInOutput": 1638
        },
        "lib/index.ts": {
          "bytesInOutput": 286
        }
      },
      "bytes": 125882
    }
  }
}

schemasafe

CJS as-is (not optimized)

image

{
  "inputs": {
    "node_modules/@exodus/schemasafe/src/safe-format.js": {
      "bytes": 4292,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-utils.js": {
      "bytes": 1692,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-functions.js": {
      "bytes": 4136,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/javascript.js": {
      "bytes": 7792,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/generate-function.js": {
      "bytes": 3576,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/known-keywords.js": {
      "bytes": 2633,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/pointer.js": {
      "bytes": 7176,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/formats.js": {
      "bytes": 12210,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/tracing.js": {
      "bytes": 6105,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/compile.js": {
      "bytes": 69997,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/formats.js",
          "kind": "require-call",
          "original": "./formats"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/tracing.js",
          "kind": "require-call",
          "original": "./tracing"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/index.js": {
      "bytes": 3686,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/compile.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "lib/fn/index-schemasafe.ts": {
      "bytes": 568,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/index.js",
          "kind": "import-statement",
          "original": "@exodus/schemasafe"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-24b1b5f9ff76742b1ec0b77577d3f4fa438eab4a76ac54affb4ff7030465a1a7/index.js": {
      "imports": [],
      "exports": [],
      "entryPoint": "lib/fn/index-schemasafe.ts",
      "inputs": {
        "node_modules/@exodus/schemasafe/src/safe-format.js": {
          "bytesInOutput": 3640
        },
        "node_modules/@exodus/schemasafe/src/scope-utils.js": {
          "bytesInOutput": 1713
        },
        "node_modules/@exodus/schemasafe/src/scope-functions.js": {
          "bytesInOutput": 3900
        },
        "node_modules/@exodus/schemasafe/src/javascript.js": {
          "bytesInOutput": 7518
        },
        "node_modules/@exodus/schemasafe/src/generate-function.js": {
          "bytesInOutput": 3690
        },
        "node_modules/@exodus/schemasafe/src/known-keywords.js": {
          "bytesInOutput": 3004
        },
        "node_modules/@exodus/schemasafe/src/pointer.js": {
          "bytesInOutput": 7799
        },
        "node_modules/@exodus/schemasafe/src/formats.js": {
          "bytesInOutput": 13511
        },
        "node_modules/@exodus/schemasafe/src/tracing.js": {
          "bytesInOutput": 4050
        },
        "node_modules/@exodus/schemasafe/src/compile.js": {
          "bytesInOutput": 67300
        },
        "node_modules/@exodus/schemasafe/src/index.js": {
          "bytesInOutput": 4214
        },
        "lib/fn/index-schemasafe.ts": {
          "bytesInOutput": 715
        }
      },
      "bytes": 123335
    }
  }
}
CJS optimized

image

{
  "inputs": {
    "node_modules/@exodus/schemasafe/src/safe-format.js": {
      "bytes": 4292,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-utils.js": {
      "bytes": 1692,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-functions.js": {
      "bytes": 4136,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/javascript.js": {
      "bytes": 7792,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/generate-function.js": {
      "bytes": 3576,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/known-keywords.js": {
      "bytes": 2633,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/pointer.js": {
      "bytes": 7176,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/formats.js": {
      "bytes": 12210,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/tracing.js": {
      "bytes": 6105,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/compile.js": {
      "bytes": 69997,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/formats.js",
          "kind": "require-call",
          "original": "./formats"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/tracing.js",
          "kind": "require-call",
          "original": "./tracing"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/index.js": {
      "bytes": 3686,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/compile.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "lib/fn/index-schemasafe.ts": {
      "bytes": 568,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/index.js",
          "kind": "import-statement",
          "original": "@exodus/schemasafe"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-fdd671246f2b6003ef198ba32d7a36b6c6be1b22cad87af446f9d9743c9b0c96/index.js.map": {
      "imports": [],
      "exports": [],
      "inputs": {},
      "bytes": 208798
    },
    "cdk.out/bundling-temp-fdd671246f2b6003ef198ba32d7a36b6c6be1b22cad87af446f9d9743c9b0c96/index.js": {
      "imports": [],
      "exports": [],
      "entryPoint": "lib/fn/index-schemasafe.ts",
      "inputs": {
        "node_modules/@exodus/schemasafe/src/safe-format.js": {
          "bytesInOutput": 2038
        },
        "node_modules/@exodus/schemasafe/src/scope-utils.js": {
          "bytesInOutput": 731
        },
        "node_modules/@exodus/schemasafe/src/scope-functions.js": {
          "bytesInOutput": 1910
        },
        "node_modules/@exodus/schemasafe/src/javascript.js": {
          "bytesInOutput": 4038
        },
        "node_modules/@exodus/schemasafe/src/generate-function.js": {
          "bytesInOutput": 1539
        },
        "node_modules/@exodus/schemasafe/src/known-keywords.js": {
          "bytesInOutput": 1453
        },
        "node_modules/@exodus/schemasafe/src/pointer.js": {
          "bytesInOutput": 3709
        },
        "node_modules/@exodus/schemasafe/src/formats.js": {
          "bytesInOutput": 6618
        },
        "node_modules/@exodus/schemasafe/src/tracing.js": {
          "bytesInOutput": 2500
        },
        "node_modules/@exodus/schemasafe/src/compile.js": {
          "bytesInOutput": 29638
        },
        "node_modules/@exodus/schemasafe/src/index.js": {
          "bytesInOutput": 2005
        },
        "lib/fn/index-schemasafe.ts": {
          "bytesInOutput": 335
        }
      },
      "bytes": 57195
    }
  }
}
ESM as-is (not optimized)

image

{
  "inputs": {
    "node_modules/@exodus/schemasafe/src/safe-format.js": {
      "bytes": 4292,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-utils.js": {
      "bytes": 1692,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-functions.js": {
      "bytes": 4136,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/javascript.js": {
      "bytes": 7792,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/generate-function.js": {
      "bytes": 3576,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/known-keywords.js": {
      "bytes": 2633,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/pointer.js": {
      "bytes": 7176,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/formats.js": {
      "bytes": 12210,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/tracing.js": {
      "bytes": 6105,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/compile.js": {
      "bytes": 69997,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/formats.js",
          "kind": "require-call",
          "original": "./formats"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/tracing.js",
          "kind": "require-call",
          "original": "./tracing"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/index.js": {
      "bytes": 3686,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/compile.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "lib/fn/index-schemasafe.ts": {
      "bytes": 568,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/index.js",
          "kind": "import-statement",
          "original": "@exodus/schemasafe"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-49c3a91ea7b0bb56d839a78eeddd941a11002566ac6b1e1f6f47e7b510b03eb5/index.mjs": {
      "imports": [],
      "exports": [
        "handler"
      ],
      "entryPoint": "lib/fn/index-schemasafe.ts",
      "inputs": {
        "node_modules/@exodus/schemasafe/src/safe-format.js": {
          "bytesInOutput": 3638
        },
        "node_modules/@exodus/schemasafe/src/scope-utils.js": {
          "bytesInOutput": 1711
        },
        "node_modules/@exodus/schemasafe/src/scope-functions.js": {
          "bytesInOutput": 3898
        },
        "node_modules/@exodus/schemasafe/src/javascript.js": {
          "bytesInOutput": 7516
        },
        "node_modules/@exodus/schemasafe/src/generate-function.js": {
          "bytesInOutput": 3688
        },
        "node_modules/@exodus/schemasafe/src/known-keywords.js": {
          "bytesInOutput": 3002
        },
        "node_modules/@exodus/schemasafe/src/pointer.js": {
          "bytesInOutput": 7797
        },
        "node_modules/@exodus/schemasafe/src/formats.js": {
          "bytesInOutput": 13509
        },
        "node_modules/@exodus/schemasafe/src/tracing.js": {
          "bytesInOutput": 4048
        },
        "node_modules/@exodus/schemasafe/src/compile.js": {
          "bytesInOutput": 67298
        },
        "node_modules/@exodus/schemasafe/src/index.js": {
          "bytesInOutput": 4212
        },
        "lib/fn/index-schemasafe.ts": {
          "bytesInOutput": 557
        }
      },
      "bytes": 122842
    }
  }
}
ESM optimized

image

{
  "inputs": {
    "node_modules/@exodus/schemasafe/src/safe-format.js": {
      "bytes": 4292,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-utils.js": {
      "bytes": 1692,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/scope-functions.js": {
      "bytes": 4136,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/javascript.js": {
      "bytes": 7792,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/generate-function.js": {
      "bytes": 3576,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/known-keywords.js": {
      "bytes": 2633,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/pointer.js": {
      "bytes": 7176,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/formats.js": {
      "bytes": 12210,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/tracing.js": {
      "bytes": 6105,
      "imports": [],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/compile.js": {
      "bytes": 69997,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/safe-format.js",
          "kind": "require-call",
          "original": "./safe-format"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/formats.js",
          "kind": "require-call",
          "original": "./formats"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-utils.js",
          "kind": "require-call",
          "original": "./scope-utils"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/javascript.js",
          "kind": "require-call",
          "original": "./javascript"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/known-keywords.js",
          "kind": "require-call",
          "original": "./known-keywords"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/tracing.js",
          "kind": "require-call",
          "original": "./tracing"
        }
      ],
      "format": "cjs"
    },
    "node_modules/@exodus/schemasafe/src/index.js": {
      "bytes": 3686,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/generate-function.js",
          "kind": "require-call",
          "original": "./generate-function"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/pointer.js",
          "kind": "require-call",
          "original": "./pointer"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/compile.js",
          "kind": "require-call",
          "original": "./compile"
        },
        {
          "path": "node_modules/@exodus/schemasafe/src/scope-functions.js",
          "kind": "require-call",
          "original": "./scope-functions"
        }
      ],
      "format": "cjs"
    },
    "lib/fn/index-schemasafe.ts": {
      "bytes": 568,
      "imports": [
        {
          "path": "node_modules/@exodus/schemasafe/src/index.js",
          "kind": "import-statement",
          "original": "@exodus/schemasafe"
        }
      ],
      "format": "esm"
    }
  },
  "outputs": {
    "cdk.out/bundling-temp-85b55ab21d14c842623f87d2cc94ffc22e2d2730b506e94fc2e72c68790c604f/index.mjs.map": {
      "imports": [],
      "exports": [],
      "inputs": {},
      "bytes": 208686
    },
    "cdk.out/bundling-temp-85b55ab21d14c842623f87d2cc94ffc22e2d2730b506e94fc2e72c68790c604f/index.mjs": {
      "imports": [],
      "exports": [
        "handler"
      ],
      "entryPoint": "lib/fn/index-schemasafe.ts",
      "inputs": {
        "node_modules/@exodus/schemasafe/src/safe-format.js": {
          "bytesInOutput": 2038
        },
        "node_modules/@exodus/schemasafe/src/scope-utils.js": {
          "bytesInOutput": 731
        },
        "node_modules/@exodus/schemasafe/src/scope-functions.js": {
          "bytesInOutput": 1910
        },
        "node_modules/@exodus/schemasafe/src/javascript.js": {
          "bytesInOutput": 4038
        },
        "node_modules/@exodus/schemasafe/src/generate-function.js": {
          "bytesInOutput": 1539
        },
        "node_modules/@exodus/schemasafe/src/known-keywords.js": {
          "bytesInOutput": 1453
        },
        "node_modules/@exodus/schemasafe/src/pointer.js": {
          "bytesInOutput": 3709
        },
        "node_modules/@exodus/schemasafe/src/formats.js": {
          "bytesInOutput": 6618
        },
        "node_modules/@exodus/schemasafe/src/tracing.js": {
          "bytesInOutput": 2500
        },
        "node_modules/@exodus/schemasafe/src/compile.js": {
          "bytesInOutput": 29638
        },
        "node_modules/@exodus/schemasafe/src/index.js": {
          "bytesInOutput": 2005
        },
        "lib/fn/index-schemasafe.ts": {
          "bytesInOutput": 279
        }
      },
      "bytes": 57019
    }
  }
}

@dreamorosi
Copy link
Contributor

In terms of performance, looking at the benchmarks linked above, the main thing that I noticed is that they're running on potentially outdated versions of these libraries. For example, ajv had two major releases since the benchmark was run and schemasafe had two minor versions but the version tested in the benchmark was a release candidate for its v1 major.

I have cloned the repo, then ran npm ci, followed by npm run update which updated all the test suites and packages to the respective latest versions. Finally, I ran npm t.

After the first run I realized that ajv was consistently being excluded by the benchmark, and a bit of digging I saw that it also had a large amount of errors (which caused it to be excluded from the result). Looking at the PRs in the benchmarks repo I found this one that showed an updated version of ajv and that loaded the schemas differently, which I did.

At this point I was able to run the benchmarks successfully and the results are consistent with the original ones in terms of ordering albeit with a much smaller difference between the two.

Overall it appears that even though ajv remains the fastest, @exodus/schemasafe is about ~10% slower on schema draft 6 and draft 7.

Another interesting detail to notice is that when it comes to errors thrown during the validation, ajv shows a higher number of errors. This however could also be attributed to the package being generally stricter in its validation. As a matter of fact, to even run the benchmark at all the strict and validateFormats options had to be disabled.

Below the full breakdown of the results.

Note

Note that the tests above have been run on my laptop and not in Lambda, so the results might be different once ran there.

json-schema-benchmark (draft7)

Performance benchmark for Node.js JSON-schema validators.

Also tests against official JSON-schema test suite, version draft7. and checks
for validators that cause side-effects on schema or data. The top 6 validators that fail the least tests are included in the benchmark.

Contribute to these benchmarks

Performance

performance

Validator Relative speed Number of test runs per second
ajv 100% 36439 (± 0.49%)
@exodus/schemasafe 90.5% 32989 (± 0.25%)
is-my-json-valid 61.1% 22267 (± 0.64%)
djv 20% 7286 (± 0.29%)
@cfworker/json-schema 2.9% 1065 (± 1%)
jsonschema 1.1% 389 (± 1.02%)

1049 tests are run in each test run.

Validators tested: @cfworker/json-schema (1.12.7), jsonschema (1.4.1), @exodus/schemasafe (1.3.0), ajv (8.12.0), djv (2.1.4), is-my-json-valid (2.20.6), jsen (0.6.6), tv4 (1.3.0), jassi (0.1.2), jjv (1.0.2), z-schema (6.0.1), request-validator (0.3.3), json-schema-validator-generator (1.1.11), themis (1.1.6), JSV (4.0.2), json-model (0.2.24), jsck (0.3.2), skeemas (1.2.5), schemasaurus (0.7.8), json-gate (0.8.23), revalidator (0.3.1),

(validators not in the results above where excluded because of failing tests - see below for details)

ajv is currently the fastest JSON-schema validator out there.

Test failure summary

This test suite uses the official JSON-schema test suite, version draft7.

If a validator does not pass a test in the official test suite, it will show up in these results.

failing tests

Validator Number of failing tests (click for details)
@cfworker/json-schema 48
jsonschema 50
@exodus/schemasafe 105
ajv 118
djv 161
is-my-json-valid 164
jsen 202
tv4 212
jassi 229
jjv 231
z-schema 249
request-validator 264
json-schema-validator-generator 273
themis 275
JSV 291
json-model 291
jsck 341
skeemas 365
schemasaurus 378
json-gate 420
revalidator 449

Some validators have deliberately chosen not to support parts of the spec. Go to the homepage of the validator to learn if that is the case for these tests.

json-schema-benchmark (draft6)

Performance benchmark for Node.js JSON-schema validators.

Also tests against official JSON-schema test suite, version draft6. and checks
for validators that cause side-effects on schema or data. The top 6 validators that fail the least tests are included in the benchmark.

Contribute to these benchmarks

Performance

performance

Validator Relative speed Number of test runs per second
ajv 100% 37486 (± 0.61%)
@exodus/schemasafe 95.9% 35938 (± 0.34%)
is-my-json-valid 62.1% 23265 (± 0.21%)
djv 19.7% 7392 (± 0.97%)
@cfworker/json-schema 3.1% 1155 (± 1.28%)
jsonschema 1% 390 (± 0.95%)

884 tests are run in each test run.

Validators tested: @cfworker/json-schema (1.12.7), @exodus/schemasafe (1.3.0), jsonschema (1.4.1), ajv (8.12.0), djv (2.1.4), is-my-json-valid (2.20.6), jsen (0.6.6), tv4 (1.3.0), z-schema (6.0.1), jassi (0.1.2), jjv (1.0.2), themis (1.1.6), request-validator (0.3.3), json-schema-validator-generator (1.1.11), json-model (0.2.24), jsck (0.3.2), JSV (4.0.2), schemasaurus (0.7.8), skeemas (1.2.5), json-gate (0.8.23), revalidator (0.3.1),

(validators not in the results above where excluded because of failing tests - see below for details)

ajv is currently the fastest JSON-schema validator out there.

Test failure summary

This test suite uses the official JSON-schema test suite, version draft6.

If a validator does not pass a test in the official test suite, it will show up in these results.

failing tests

Validator Number of failing tests (click for details)
@cfworker/json-schema 8
@exodus/schemasafe 12
jsonschema 15
ajv 69
djv 103
is-my-json-valid 111
jsen 145
tv4 155
z-schema 168
jassi 172
jjv 173
themis 189
request-validator 207
json-schema-validator-generator 216
json-model 225
jsck 227
JSV 234
schemasaurus 237
skeemas 239
json-gate 342
revalidator 384

Some validators have deliberately chosen not to support parts of the spec. Go to the homepage of the validator to learn if that is the case for these tests.

@dreamorosi
Copy link
Contributor

Another thing to notice, that I must admit gives me pause, is the fact that @exodus/schemasafe appears to have over 75 collaborators on npm (see collaborators section on the package page). If I understand correctly the field it means that all these people can publish a new version of the package, which can be problematic. I have opened an issue on their repo to clarify if this is the case.

@willfarrell
Copy link

willfarrell commented Nov 3, 2023

Worth noting that ajv supports compiling the JSON Schema into ESM (with treeshaking), not represented in the above tests. The resulting bundle is smaller than all the others (from testing a few years ago) with this approach, but requires an extra build step. This is what Middy recommends, though can't comment on how many people choose this option.

https://middy.js.org/docs/middlewares/validator

Additional bonuses of ajv is that is has translations of errors into multiple languages, making it more inclusive.

@misterjoshua
Copy link
Contributor Author

One aside from me. We're using ajv in one particular internal project. The schema compilation step caused some very non-trivial cold start delays for us because we were compiling all schemas at startup, even if we weren't going to use the validation function in the lifetime of the given Lambda invocation. We had better luck compiling and caching validators just in time.

@dreamorosi
Copy link
Contributor

dreamorosi commented Nov 3, 2023

@willfarrell thanks for the info, any chance you could link to an example or docs that show how to do this? I've tried to search their repo but the only relevant pieces I could find are this setting and this discussion which seem to point to the fact that this setting influences only the code generation/compilation.

I'm not yet 100% familiar with this project and space, so I might completely be off base, but this means that using this setting you can influence only the code generated by ajv. This kinda makes sense in the frame of my mental model as I've never seen dynamic runtime switching of imports. Whether a module is interpreted as CJS or ESM is decided (roughly) based on the way it's exported both in its source and in its package.json. With this in mind I don't understand what's missing.

But regardless of the above, I have tried to run the build test again setting the const ajv = new Ajv({ allErrors: false, code: { esm: true } }); and I got the same exact bundle out:
image

I also ran the unminified outputs of the bundles with esm set to true & false through a diff checker, and the only difference was the constructor, the rest of the code was exactly the same. Again, not sure what this setting really does - a link or example would be super helpful.

@misterjoshua That's good info. I'd like to run some tests on Lambda next, I'm just not sure what would be a representative sample to show performance short of reworking the entire benchmark suite to call Lambda functions rather than run the tests locally.

@willfarrell
Copy link

You're in the right area. I create a package to allow other extension to work with ESM called ajv-cmd (referenced in the middy docs). The resulting js can be a little as <1kb depending on the JSON schema itself.

@shdq
Copy link
Contributor

shdq commented Nov 3, 2023

@dreamorosi In my understanding ajv does two steps compilation and validation. The performance comes from using/reusing compiled schemas (cached as hashmaps).

So you have two options, compile schema everytime in runtime or precompile it as a standalone code. This is what this code: { esm: true } option is about. I don't think the library itself supports ESM.

For standalone to have ESM/CJS you can generate a function from the precompiled schema + validation function – https://ajv.js.org/standalone.html. You create it as a bundle with a CLI (or a wrapper ajv-cmd mentioned above) or with the library itself and then import it into your code.

Pros: You have this tiny bundle and ESM support (if needed).
Cons: extra build step + you need your schema beforehand. As a library, we don't know the schema, like an end user. So we need to teach them how to do that.

As a solution, it can be described in docs about how to create a schema bundle or add a guide on how to do an extra step in esbuild. And adjust the API to take this function as an argument. But it's more like performance fine-tuning. Which is good for lambda.

But some users may not want to do the extra build step, so we need to have ajv as a dependency anyway. Like @misterjoshua use case, I assume they do both compile and validate inside their lambdas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussing The issue needs to be discussed, elaborated, or refined need-customer-feedback Requires more customers feedback before making or revisiting a decision RFC Technical design documents related to a feature request validation This item relates to the Validation Utility
Projects
Development

No branches or pull requests

8 participants